日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

20169210《Linux内核原理与分析》第十二周作业

發布時間:2023/11/29 51 豆豆
生活随笔 收集整理的這篇文章主要介紹了 20169210《Linux内核原理与分析》第十二周作业 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

Return-to-libc 攻擊實驗

緩沖區溢出的常用攻擊方法是用 shellcode 的地址來覆蓋漏洞程序的返回地址,使得漏洞程序去執行存放在棧中 shellcode。為了阻止這種類型的攻擊,一些操作系統使得系統管理員具有使棧不可執行的能力。這樣的話,一旦程序執行存放在棧中的 shellcode 就會崩潰,從而阻止了攻擊。

不幸的是上面的保護方式并不是完全有效的,現在存在一種緩沖區溢出的變體攻擊,叫做 return-to-libc 攻擊。這種攻擊不需要一個??梢詧绦?#xff0c;甚至不需要一個 shellcode。取而代之的是我們讓漏洞程序調轉到現存的代碼(比如已經載入內存的 libc 庫中的 system()函數等)來實現我們的攻擊。

實驗準備:

輸入命令安裝一些用于編譯 32 位 C 程序的東西:

sudo apt-get update sudo apt-get install lib32z1 libc6-dev-i386 sudo apt-get install lib32readline-gplv2-dev

輸入命令“linux32”進入 32 位 linux 環境。輸入“/bin/bash”使用 bash:

實驗步驟

初始設置

Ubuntu 和其他一些 Linux 系統中,使用地址空間隨機化來隨機堆(heap)和棧(stack)的初始地址,這使得猜測準確的內存地址變得十分困難,而猜測內存地址是緩沖區溢出攻擊的關鍵。因此本次實驗中,我們使用以下命令關閉這一功能:

sudo sysctl -w kernel.randomize_va_space=0

此外,為了進一步防范緩沖區溢出攻擊及其它利用 shell 程序的攻擊,許多 shell 程序在被調用時自動放棄它們的特權。因此,即使你能欺騙一個 Set-UID 程序調用一個 shell,也不能在這個 shell 中保持 root 權限,這個防護措施在/bin/bash 中實現。

linux 系統中,/bin/sh 實際是指向/bin/bash 或/bin/dash 的一個符號鏈接。為了重現這一防護措施被實現之前的情形,我們使用另一個 shell 程序(zsh)代替/bin/bash。下面的指令描述了如何設置 zsh 程序:

sudo su cd /bin rm sh ln -s zsh sh exit

為了防止緩沖區溢出攻擊,最近版本的 gcc 編譯器默認將程序編譯設置為棧不可執行,而你可以在編譯的時候手動設置是否使棧不可執行:

gcc -z execstack -o test test.c #??蓤绦?gcc -z noexecstack -o test test.c #棧不可執行

本次實驗的目的,就是展示這個“棧不可執行”的保護措施并不是完全有效,所以我們使用“-z noexecstack”,或者不手動指定而使用編譯器的默認設置。

漏洞程序

把以下代碼保存為“retlib.c”文件,保存到 /tmp 目錄下。代碼如下:

這個程序有緩沖區溢出漏洞,我們的任務是利用這個漏洞。
上述程序有一個緩沖區溢出漏洞,它先從一個叫“badfile”的文件里把 40 字節的數據讀取到 12 字節的 buffer,引起溢出。fread()函數不檢查邊界所以會發生溢出。應該注意到此程序是從一個叫做“bad?le”的文件獲得輸入的,這個文件受用戶控制。現在我們的目標是為“bad?le”創建內容,這樣當這段漏洞程序將此內容復制進它的緩沖區,便產生了一個 root shell 。
編譯該程序,并設置 SET-UID。命令如下:

sudo sugcc -m32 -g -z noexecstack -fno-stack-protector -o retlib retlib.cchmod u+s retlibexit


-z noexecstack是棧不可執行。GCC 編譯器有一種棧保護機制來阻止緩沖區溢出,所以我們在編譯代碼時需要用 –fno-stack-protector 關閉這種機制。“為了方便普通用戶執行一些特權命令,SUID/SGID程序允許普通用戶以root身份暫時執行該程序,并在執行結束后再恢復身份?!眂hmod u+s 就是給某個程序的所有者以suid權限,可以像root用戶一樣操作。

我們還需要用到一個讀取環境變量的程序:

攻擊程序

把以下代碼保存為“exploit.c”文件,保存到 /tmp 目錄下。代碼如下:

獲取內存地址

gdb 獲得 system 和 exit 地址:

修改 exploit.c 文件,填上剛才找到的內存地址:

刪除剛才調試編譯的 exploit 程序和 badfile 文件,重新編譯修改后的 exploit.c:

rm exploit rm badfile gcc -m32 -o exploit exploit.c

攻擊

先運行攻擊程序 exploit,再運行漏洞程序 retlib,可見攻擊成功,獲得了 root 權限:

至此實驗結束。

轉載于:https://www.cnblogs.com/crisgy/p/6160302.html

總結

以上是生活随笔為你收集整理的20169210《Linux内核原理与分析》第十二周作业的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。