buuctf pwn解题

本文讲述了在一系列CTF挑战中,如何通过checksec检测、IDA分析、栈溢出技巧(如gets溢出和ROP)以及编写exploit,成功在64位程序中获取flag的过程。
摘要由CSDN通过智能技术生成

1.

test_your_nc

1

打开虚拟机,直接在终端nc node5.buuoj.cn 29450,ls列出目录即可看到flag ,cat flag查看

2.

rip

1

虚拟机中checksec(64位,无保护)

打开ida64进行分析,打开是main函数,shift+f12跳到string窗口 

在string窗口发现了bin/sh双击打开 

发现其在fun函数中,双击fun即可得到fun所在地址 

即利用gets溢出返回到fun函数地址,

偏移量的计算:从main函数中可得s,双击s ,由下图可得为23或0x17

在虚拟机中编写exp,即可得到flag 

3.

warmup_csaw_2016

1

下载好文件后,checksec该文件(64位程序,无任何保护,为栈溢出)

放入ida查看,在字符串中找到cat flag.text,即可找到其所在的函数(并找到该函数所在的位置)

查看偏移量,双击s,即0x40+8,编写exp,flag直接就出来了 

4.

ciscn_2019_n_1

1

checksec后发现其为64位,只开启了nx保护 

ida中分析 

从string窗口得知cat flag在func函数中,f5进入伪代码查看func函数 

发现需要利用gets函数溢出到v2的地址,并修改v2的值为11.28125,从而返回system函数拿到flag。

找v1,v2的地址

偏移地址=0x30-0x04=0x2c                   11.28125=0x41348000

进入虚拟机编写exp即可得到flag

14.

[HarekazeCTF2019]baby_rop

1

先进行checksec(64位,开了nx保护) 

 

ida分析,查看字符串,发现了system函数和bin/sh

main函数f5查看伪代码

——isoc99_scanf即为溢出点 

 

查找bin_sh地址

由于是64位,需要进行寄存器传参(ROPgadget  --binary 文件名 --only “pop|ret") 

即可找到pop rdi这个寄存器所在的地址为0x400683 

 

system_add 

(1)ida查找system函数的地址(即plt:system) 

(2)使用gdb查找(输入plt即可得到)

 

payload 

payload = b'a'*0x10+b'a'*0x8 + p64(rdi) + p64(bin_sh) + p64(system)

编写exp如下:
 from pwn import*
sh=remote("node5.buuoj.cn",27049)
payload = b'a'*(0x10+8)+p64(0x400683)+p64(0x601048)+p64(0x400490)
sh.sendline(payload)
sh.interactive()

find -name flag获取flag所在位置 

找到地址后即可得到flag。 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值