当前位置 : 主页 > 网页制作 > HTTP/TCP >

day-4

来源:互联网 收集:自由互联 发布时间:2021-06-16
xctf-pwn CGfsb 传送门:https://adworld.xctf.org.cn/task/answer?type=pwnnumber=2grade=0id=5050 (菜鸡面对着pringf发愁)(-_-||)菜鸡了解的printf知识传送门: https://blog.csdn.net/u010517901/article/details/46486341

xctf-pwn CGfsb

传送门:https://adworld.xctf.org.cn/task/answer?type=pwn&number=2&grade=0&id=5050

(菜鸡面对着pringf发愁)(-_-||)菜鸡了解的printf知识传送门:

https://blog.csdn.net/u010517901/article/details/46486341

 

%c:输出字符,配上%n可用于向指定地址写数据。

%d:输出十进制整数,配上%n可用于向指定地址写数据。

%x:输出16进制数据,如%i$x表示要泄漏偏移i处4字节长的16进制数据,%i$lx表示要泄漏偏移i处8字节长的16进制数据,32bit和64bit环境下一样。

%p:输出16进制数据,与%x基本一样,只是附加了前缀0x,在32bit下输出4字节,在64bit下输出8字节,可通过输出字节的长度来判断目标环境是32bit还是64bit。

%s:输出的内容是字符串,即将偏移处指针指向的字符串输出,如%i$s表示输出偏移i处地址所指向的字符串,在32bit和64bit环境下一样,可用于读取GOT表等信息。

%n:将%n之前printf已经打印的字符个数赋值给偏移处指针所指向的地址位置,如%100×10$n表示将0x64写入偏移10处保存的指针所指向的地址(4字节),而%$hn表示写入的地址空间为2字节,%$hhn表示写入的地址空间为1字节,%$lln表示写入的地址空间为8字节,在32bit和64bit环境下一样。有时,直接写4字节会导致程序崩溃或等候时间过长,可以通过%$hn或%$hhn来适时调整。

%n是通过格式化字符串漏洞改变程序流程的关键方式,而其他格式化字符串参数可用于读取信息或配合%n写数据。

printf("%2$c,%1$c\n", B, A);       //$表示使用第几个参数,输出A,B
 
printf("%88c%n\n", A, buff);         //打印88个字符,前面用空格填充,
                                       //最后一个是‘A‘,同时*(int *)buff=88。
printf("%1024c%23$hn\n");              //带有攻击性的做法,第01个参数对用%c,
                                       //具体是什么不关心,目标是是把第23个参数
                                       //指向的内存的前2个字节赋值为1024。
printf("%*c%hn\n", 0x1234, A, buff); //打印0x1234个字符,前面用空格填充,
                                       //最后一个是‘A‘,同时*(short *)buff = 0x1234。
输出格式
网友评论