pwn中的格式化字符串漏洞

格式化字符串漏洞

读漏洞

%[num]%s num表示泄露偏移地址的位参

%s是表示字符串 %x 表示地址 %p是表示内存数据,学过C语言的应该知道这些(废话)。

 

写漏洞

​1.小题

假设 c 值需 16 覆盖成立条件flag:

6表示位参填充,addr字节为4,12d表示12+addr=16对此填充

[addr]%012d%6$n

2.小题

bss地址a为全局变量设覆盖2成立条件flag:

 因上述地址为4字节从而不成立覆盖2小数的意义,为此计算地址为6+偏移位4,。

aa%8$naa[addr]

 3.小题

大地址覆盖,因上述问题,我们无法将十六进制的0x123456根据上面方法进行覆盖了,不可能写好几万个a,那么我们需要巧妙的进行覆盖,根据第一种方法,以及我们要了解的hhn单字节和hn双字节。

我们需要写入双字节数据,不知道什么是双字节和单字节的同学可以去了解一下关于CPU中的大小端问题。

那么ok,前四个地址字节为16,104+16那么结果就是78,那么继续计算再加上222那么就是156,由于是大小端模式,所以第一个写入78第二个是156第三个是234,以此类推最终覆盖成12345678条件成立。

 

 

 

p32(addr)+p32(addr+1)+p32(addr+2)+p32(addr+3)+"%104d%6$hhn%222d%7$hhn%222d%8$hhn%222d%9$hhn"

 

posted @ 2020-05-13 10:59  WINDECODE  阅读(633)  评论(0)    收藏  举报