好久沒寫題目了,因此最近準備從新開始練起來。shell
該題很考本身對libc的malloc瞭解,雖然逆過一遍,但仍是有些不熟悉好比合並的函數。ubuntu
不過看了hav1k師傅的博客後,恍然大悟函數
記錄下思路
- 因爲是ubuntu16,並且沒有開PIE,因此能夠進行unlink
- 其次因爲釋放後未變0,因此咱們先申請一個小chunk,再把該位置釋放後,在用malloc_consolidate來將fast bin裏的函數放入unsorted bin中,後續的操做會放入small bin中
- 因爲delete函數裏面沒有檢查機制,因此咱們能夠再一次delete,形成double free,因爲該chunk再fast bin何unsorted bin中,因此咱們能夠把chunk申請回來,再僞造一個chunk,進行unlink
- 此時指針已經指向自身的-0x18處,咱們就操控了中等的chunk與小型的chunk,後面就是常規操做,劫持free爲puts,獲得libc,接着再劫持別的函數來getshell 便可