Pwn 學(xué)習(xí)第五課打卡!
原提問者:hackbs 2020-7-12
0x00 概述:
[
printf
格式化字符串并且在控制臺中輸出,
最常用的方式
{
#include <stdio.h>
int main(int argc,char *argv[])
{
//格式化整型、字符串、地址輸出
printf("%d-%s-%p",123,"123",0x123456);
}
}
]
0x01:現(xiàn)成漏洞的原因
{
printf也是一個函數(shù),我們知道在匯編里面,其實就是CALL 一個地址
,然后CALL地址前,都會壓入(push)
參數(shù)進(jìn)去,push的順序是先進(jìn)后出
,先把函數(shù)參數(shù)的最后push進(jìn)去,然后最后把第一個參數(shù)給push進(jìn)去。
//所以在調(diào)用Printf函數(shù)時候,如果格式化輸出,后面沒有跟參數(shù)比如
printf("%s");
#首先printf會進(jìn)行格式化字符串的解析,從參數(shù)里面獲取和符號進(jìn)行匹配,然后輸出到屏幕上
#如果說沒有參數(shù),那么CALL的上一層棧地址數(shù)據(jù)就會被輸出來(導(dǎo)致泄漏)!
}