CGfsb笔记

先讲一下的我对格式化字符串漏洞的理解

printf("aaaa.%08x.%08x.%08x.%08x")

在栈去的分布:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
0061FE30   0061FE4C  |format = "AAAA%x,%x,%x,%x,%x,%x,%x,%x,%x,%x,%x"
0061FE34 0061FE4C |<%x> = 0x61FE4C
0061FE38 0061FFCC |<%x> = 0x61FFCC
0061FE3C 76E4D250 |<%x> = 0x76E4D250
0061FE40 FF12BE58 |<%x> = 0xFF12BE58
0061FE44 FFFFFFFE |<%x> = 0xFFFFFFFE
0061FE48 76E473DA |<%x> = 0x76E473DA
0061FE4C 41414141 |<%x> = 0x41414141
0061FE50 252C7825 |<%x> = 0x252C7825
0061FE54 78252C78 |<%x> = 0x78252C78
0061FE58 2C78252C |<%x> = 0x2C78252C
0061FE5C 252C7825 |<%x> = 0x252C7825

0x0061FE4C的位置内容aaaa,可以算出偏移的参数位置,所以那个便宜位置的参数我们的可以控制的

那么我们把aaaa换成一个地址 然后把%x换成%s

那么在0x0061FE4C位置就变成<%s> = 一个任意地址 就完成了任意地址读

在说说任意地址写,就有pwn.fmtstr_payload

fmtstr_payload(offset, writes, numbwritten=0, write_size='byte')

理解:fmtstr_payload(偏移,{key内存地址,value值})

第一个参数表示格式化字符串的偏移;

第二个参数表示需要利用%n写入的数据,采用字典形;

第三个参数表示已经输出的字符个数,这里没有,为0,采用默认值即可;

第四个参数表示写入方式,是按字节(byte)、按双字节(short)还是按四字节(int),对应着hhn、hn和n,默认值是byte,即按hhn写。

 

这个题偏移为10就直接写poc

 

posted @ 2019-05-24 17:39  ha0z  阅读(822)  评论(0编辑  收藏  举报