十一月百度杯pwnme 详细wp
[TOC] #程序基本信息 可以看到开启了栈不可执行和got表不可写保护。 #程序溢出点 在函数sub_400AF7中,v8可以读入0x12C个字节,同时if判断中对v8进行字节截断,所以我们可以输入如0x101个字符,在保证能够溢出到返回地址的同时,v8字节截断后的0x01又能够通过if判断,然后通过函数sub_400A90进行溢出。 函数sub_400AD1中存在格式化字符串漏洞,我们可以通过这个漏洞泄露任意地址的内容,并通过DynELF类获得system函数的地址。 #整体思路 这个程序首先让你输入username跟password,然后提供三个选项 溢出漏洞位于选项2中,格式化漏洞在选项1中。 我们在输入完username和password后,首先进入选项2中,然后构造合适的payload,然后让程序调用选项1能够泄露任意地址的内容,从而可以通过DynELF类获取sytem地址。 然后让程序进入选项2中,构造能够溢出并绕过if的payload,通过ROP技术调用read函数输入/bin/sh并调用sytem函数完成system('/bin/sh')pwn掉程序。 #exp脚本 from pwn import * io = remote('106.75.2.53',10006) io.recvuntil('Input your username(max lenth:40):