首頁(yè)
社區(qū)
課程
招聘
Pwn 學(xué)習(xí)第五課打卡!

原提問者:hackbs 2020-7-12

 

0x00 概述:
[
printf格式化字符串并且在控制臺(tái)中輸出,
最常用的方式
{

 

#include <stdio.h>
int main(int argc,char *argv[])
{
//格式化整型、字符串、地址輸出
printf("%d-%s-%p",123,"123",0x123456);
}
}
]

 

0x01:現(xiàn)成漏洞的原因
{
printf也是一個(gè)函數(shù),我們知道在匯編里面,其實(shí)就是CALL 一個(gè)地址,然后CALL地址前,都會(huì)壓入(push)參數(shù)進(jìn)去,push的順序是先進(jìn)后出,先把函數(shù)參數(shù)的最后push進(jìn)去,然后最后把第一個(gè)參數(shù)給push進(jìn)去。

 

//所以在調(diào)用Printf函數(shù)時(shí)候,如果格式化輸出,后面沒有跟參數(shù)比如
printf("%s");

 

#首先printf會(huì)進(jìn)行格式化字符串的解析,從參數(shù)里面獲取和符號(hào)進(jìn)行匹配,然后輸出到屏幕上

 

#如果說沒有參數(shù),那么CALL的上一層棧地址數(shù)據(jù)就會(huì)被輸出來(導(dǎo)致泄漏)!
}

收藏
0條回答
零基礎(chǔ)入門pwn
  參與學(xué)習(xí)     1808 人
  提問次數(shù)     36 個(gè)
《零基礎(chǔ)入門pwn》,短時(shí)間內(nèi)踏入漏洞利用的大門,快速成為一名合格的pwn題選手
0
我的提問
0
我的回答
0
學(xué)習(xí)收益