bufferoverflow0
- 功能分析 :
- 綁定 11 信號為 錯誤函數(shù)(輸出 flag)框咙。
- 利用過程:
- 輸入長度 超過 0x1c 钞瀑,會破壞 ret哨苛。
- 從而 觸發(fā) 11 信號的綁定函數(shù).
- tip : 因為 flag 在 bss段 , 還可以 棧溢出 均蜜, 設置 為 puts(&flag)
exp
bufferoverflow1
- 漏洞點 : 輸入長度不限制但绕,造成棧溢出
- 利用 : 覆蓋 ret 為 win 函數(shù)
exp
bufferoverflow2
- 漏洞點 : 輸入長度不限制 , 造成棧溢出
- 利用 : 與 bufferoverflow1 相比, 需要利用棧溢出 , 調(diào)用傳參函數(shù) win(0xdeadbeef , 0xdeadc0de)
bufferoverflow3
- 功能分析:
- 讀入 canary.txt , 取出前 4 個字符為 canary
- 根據(jù)輸入指定 輸入長度 | 棧溢出
- 對 棧上地址 進行指定長度的輸入
- 判斷 canary 是否被改變 扶供, 沒有被改變過筛圆,就ret
- 利用過程:
- 因為 canary 是從文件中的讀取的4字節(jié),所以不會變化椿浓,可以爆破獲得
- tip: 應該 利用 read 的特點(不會為輸入的尾部加上 \x00)太援,逐個字符進行爆破,從而降低爆破的難度 (全部字符直接進行爆破 轰绵, 難度 256 ^ 4 , 逐個字符爆破 , 難度 256 * 4)
- 因為 canary 是從文件中的讀取的4字節(jié),所以不會變化椿浓,可以爆破獲得
can-you-gets-me
- x86 elf | 靜態(tài)鏈接
- 漏洞點:
- gets 輸入造成棧溢出
- 利用過程:
- ret2syscall (execve("/bin/sh\x00" , null , null))
- 將 /bin/sh 輸入到 bss段 (利用 pop ecx 和 pop [ecx])
- eax , 0xb
- ebx , bss
- ecx , 0 (null)
- edx , 0 (null)
- int 0x80 | 執(zhí)行函數(shù)
- ret2syscall (execve("/bin/sh\x00" , null , null))
echoo
- 漏洞點:格式化字符串
- 流程分析 :
- 讀入 flag 在棧中
- 循環(huán) 讀入和輸入 格式化字符串
- 利用 :
- %8$s 粉寞,該格式化字符串尼荆,可以輸出棧中的flag
got-2-learn-libc
- 流程分析:
- 輸出 puts 等函數(shù)的地址和 /bin/sh 的字符串地址
- gets讀入字符串左腔,造成棧溢出
- 利用過程:
- 獲取 puts 函數(shù)地址 和 /bin/sh 地址
- 利用 LibcSearcher 根據(jù) puts 地址 獲取 system 地址
- 棧溢出 調(diào)用 system("/bin/sh\x00")
got-shell
- 流程分析 :
- 輸入 地址
- 輸入 值
- 綜合 : *地址 = 值
- 利用點:
- 根據(jù) got 機制, 修改 exit@got 的 值 為win , 從而在 exit 時調(diào)用 win
shellcode
- 流程分析 :
- 用戶 輸入 一段 shellcode
- 執(zhí)行 shellcode
- 利用過程
- 使用 shellcraft 生成一段 shelllcode
- 輸入 捅儒,getshell
gps
- 流程分析:
- 輸出一個棧地址( 根據(jù) rand() 的結(jié)果 做了一定處理 )
- 在棧中 $rbp - 0x1010 輸入 0x1000 個字符
- 輸入一個地址 液样, 并且 跳轉(zhuǎn)到該地址
- 考察點:
-
- 抗隨機化 的 shellcode
- 1.1 隨機化的點 :輸出的棧地址 被 隨機數(shù)處理過,從而無法根據(jù)它找到 shellcode的具體輸入地址 , 變化范圍 ([- 0x29c , 0x29c])
- 1.2 抗隨機化的 解決方法: nop 指令
-
- 利用過程
- 獲取棧地址 并加上 0x29c 巧还, 確保 >= $rbp - 0x1010
- 利用 shellcraft.amd64.linux.sh() 生成 shellcode
- 利用 nop 對 shellcode 的 前部進行填充
- 輸入 shellcode , 跳轉(zhuǎn) 棧地址 執(zhí)行
leak-me
- 流程分析:
- 輸入 name <= 0x100
- 在 name 的輸入之后鞭莽,填入 28 個字符的字符串
- 輸入 密碼 進行 與 password.txt 的內(nèi)容 進行比較判斷
- 利用過程:
- 填充 name , 從而 leak password
- 讀取泄露的 password , 從而輸入password , 通過判斷
ropchain
- 流程分析:
- gets 造成 棧溢出
- 利用過程:
- 調(diào)用 win_function1 ,設置 win1 = 1
- 調(diào)用 win_function2(0xBAAAAAAD) , 設置 win2 = 1
- 調(diào)用 flag