2017-2018-1 20155321 《信息安全系统设计基础》课下作业3
2017-2018-1 20155321 《信息安全系統設計基礎》課下作業3
課堂練習第五題
因為虛擬機是64位的,所以先輸入命令sudo apt-get install libc6-dev-i386為配置32位環境做準備
使用gdb調試器,調出匯編代碼
使用命令l查看代碼并使用命令b 13在main()處設置斷點,后再輸入命令run,使用命令disassemble獲取匯編代碼,輸入命令info registers查看當前各寄存器的值
可見此時主函數的棧基址為0xffffd048,查看其內容為0輸入命令display /i $pc使得每次執行下一條匯編語句時,均打印出當前執行的代碼
調用f函數,call指令將下一句要執行的指令的地址入棧
將f函數的基地址入棧,可發現sp寄存器的值發生變化
執行sub語句
執行賦值語句
f函數的匯編代碼
實參入棧:
call指令將下一條指令的地址入棧:
執行系列運算指令
pop %ebp指令將棧頂彈到%ebp中,同時%esp增加4字節:
ret指令將棧頂彈給%eip:
因為函數f修改了%esp,所以用leave指令恢復。leave指令先將%esp對其到%ebp,然后把棧頂彈給%ebp:
緩沖區溢出漏洞實驗
緩沖區溢出:向緩沖區寫入超出預分配固定長度的數據。這一漏洞可以被惡意用戶利用來改變程序的流控制,甚至執行代碼的任意片段。這一漏洞的出現是由于數據緩沖器和返回地址的暫時關閉,溢出會引起返回地址被重寫。
因實驗樓提供的是64位的環境,因此首先要配置32位的環境,輸入以下三個命令,為之后的實驗做好準備
輸入命令sudo sysctl -w kernel.randomize_va_space=0關閉系統使用地址空間隨機化來隨機堆和棧的初始地址
創建另一個shell程序(zsh)代替/bin/bash
編寫漏洞程序
編譯stack.c程序并設置SET-UID
編寫攻擊程序
得到shellcode在內存中的地址
計算shellcode的地址并修改exploit.c中\x??\x??\x??\x??代碼,如下圖所示:
運行攻擊程序exploit和漏洞程序stack,通過攻擊得到root權限
轉載于:https://www.cnblogs.com/rafell/p/7750032.html
總結
以上是生活随笔為你收集整理的2017-2018-1 20155321 《信息安全系统设计基础》课下作业3的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 八年级上人教版英语书3页翻译
- 下一篇: Chapter34 创建主窗口/实现应用