buuctf-pwn刷題-axb_2019_heap

  • 2020 年 5 月 15 日
  • 筆記

版權聲明:本文為CSDN博主「L.o.W」的原創文章,遵循CC 4.0 BY-SA版權協議,轉載請附上原文出處鏈接及本聲明。
原文鏈接://blog.csdn.net/weixin_44145820/article/details/105482269
這道題的基本思路參照了KMFL師傅的博客~~~
這裡只記錄一下整個漏洞利用的第一步也就是利用格式化字符串漏洞泄露Libc地址和代碼段地址。
首先gdb,一直調試到

然後調試的時候隨便輸入一個內容就好,
然後繼續走, 到產生漏洞的地方,ida中的這行代碼:

在gdb中:

此時寄存器為:

而棧中的數據是:

圖中第一個箭頭指向了代碼段 main+28 的位置,而第二個箭頭指向了libc中 __libc_start_main+240 中的位置,
所以通過這兩個值就能泄漏出代碼段的地址和libc_base。
查一下偏移,64位中還有6個寄存器進行傳參,所以相對於輸入的第一個箭頭指向的位置相對於輸入的內容在偏移為11的地方,
同理第二個箭頭指向的位置在偏移為15的地方。
所以利用格式化字符串,當我們輸入的
時,就會泄漏這兩個值,接收後再分別減去在ida中
main+28位置的地址即0x1186和 -240-libc.symbols[‘__libc_start_main’] 得到兩個基址,通過這兩個基址可分別計算
存放申請堆塊地址的note的位置,以進行接下來的unlink,然後泄漏libc基址的重要性就不多說啦~

初學pwn,有什麼錯誤歡迎各位師傅指正。