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ù),,我們知道在匯編里面,,其實(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)致泄漏),!
}