实战解析PWN签到题

  • A+
所属分类:逆向工程


题目只给出nc端口没有附件 连接发现

Pwntools is such an awesome python module, right?

Tell you a secret (only smart baby can see it) :

Maybe I will tell you again when you clever than ELSEpush ......

最后面有省略号我猜测应该是没有输出完所以我们使用pwntools攻击 recvline() 接受没有显示出来的内容

然后发现有一个base64加密的字符串 结合题目说聪明得人才能发现解密出来就是flag{n0tf4stert6an_y0u} 


实战解析PWN签到题







ret2text



拿到题目我一般的做题思路是首先checksec一下看到附件之打开了NX保护所以程序中不能直接使用shellcode执行任意代码 以及32位的elf linux程序 


实战解析PWN签到题


然后通过看到的文件基本信息选择64位或者32位的IDA Pro 这个ret2text我们选择用32位的来静态分析它的源代码

 实战解析PWN签到题


用IDA打开之后它自动停在main函数处首先展现出来的是汇编代码 我们要将汇编代码转成我们能通俗易懂的c语言代码按F5进行反汇编发现这个函数的主函数并没有什么漏洞但是main的子函数vulnerable里面定义了缓冲区有8字节然后gets函数这里是一个栈溢出的基本漏洞 gets函数可以有栈溢出的漏洞对读入的数据不受限制 所以可以借助溢出的漏洞来到它的返回地址 我们从静态调试中得到栈里与ebp距离为16字节而缓冲区只定义了8字节 然后我们就用gets函数执行可读多个字节来覆盖栈里的程序


 实战解析PWN签到题


在ida中我们还发现有一个system函数这就是一般pwn题的后门函数当我们用垃圾数据写出的payload成功劫持了程序的执行流时 需要写一个指针的返回地址来执行我们需要的恶意代码 这个system地址就是8048522 


实战解析PWN签到题


根据综上分析exp如下 python 1.from pwn import * 2.c=remote('...', ) 3.#c=process(./ret2text) 4.py=b'A'*16+b'BBBB'+p32(0x8048522) 5.c.sendline(py) 6.c.interactive()







总结此题型的思路以及做法



首先了解pwntools,pwntools是一个二进制利用框架。下面我给大家介绍下pwntools的使用方法 pwntools脚本 python 1.from pwn import * 2.c = remote("127.0.0.1", 8080) 3.sendline("AAAA" * 18 + p32(0x8048522) 4.c.interactive() remote("一个域名或者ip地址", 端口) 会连接到我们指定的地址及端口。然后该函数会返回remote对象 (这里,我们将该对象保存到了变量 c). remote对象主要用来进行对远程主机的输入输出. 它有如下几个方法:

send(payload) 发送payload

sendline(payload) 发送payload,并进行换行(末尾n)

sendafter(some_string, payload) 接收到 some_string 后, 发送你的 payload

recvn(N) 接受 N(数字) 字符

recvline() 接收一行输出

recvlines(N) 接收 N(数字) 行输出

recvuntil(some_string) 接收到 some_string 为止




end




实战解析PWN签到题


本文始发于微信公众号(雷石安全实验室):实战解析PWN签到题

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: