逆向路由器固件之动态调试

原文地址:http://xdxd.love/2016/09/20/逆向路由器固件之动态调试/

本文根据devttyS0的教程Exploiting Embedded Systems – Part 2和Exploiting Embedded Systems – Part 3复现Trendnet一个路由器的SQL注入漏洞分析过程。部门内容直接翻译引用自原文,可以看做是原文的翻译整理。

相关的环境搭建详细的路由器漏洞分析环境搭建教程。

静态分析

存在漏洞的固件下载地址FW_TEW-654TR_v1.0R(1.10.12).zip,最新版固件下载地址

使用binwalk解包:

逆向路由器固件之动态调试_第1张图片

查看登录接口的URL和参数,在解包的文件中找到my_cgi.cgi文件。

逆向路由器固件之动态调试_第2张图片

在my_cgi.cgi中查找user_name和user_pwd两个参数。

逆向路由器固件之动态调试_第3张图片

看起来select level from user where user_name='%s' and user_pwd='%s'像是登录的时候查询SQL的参数,使用IDA载入my_cgi.cgi。查询”select level from user where user_name“字符串,可以定位到do_login函数。

逆向路由器固件之动态调试_第4张图片

动态分析

分析do_login函数,在exec_sql函数执行之前下断点。

逆向路由器固件之动态调试_第5张图片

使用如下脚本运行my_cgi.cgi:

#!/bin/bash
INPUT="$1"
LEN=$(echo -n "$INPUT" | wc -c)
PORT="1234"
if [ "$LEN" == "0" ] || [ "$INPUT" == "-h" ] || [ "$UID" != "0" ]
then
    echo -e "\nUsage: sudo $0 \n"
    exit 1
fi
cp $(which qemu-mipsel-static) ./qemu
echo "$INPUT" | chroot . qemu -E REQUEST_METHOD="POST" -E CONTENT_LENGTH=$LEN -E CONTENT_TYPE="multipart/x-form-data" -E REMOTE_ADDR="1.1.1.100" -g $PORT /usr/bin/my_cgi.cgi 2>/dev/null

需要放在解压出来的squashfs-root目录下执行。

bash cgi.sh "request=login&user_name=admin&user_pwd='%20or%20'1'%3D'1"

然后IDA连接到GDB端口进行调试,具体方法参考详细的路由器漏洞分析环境搭建教程。按F9执行程序到exec_sql的断点处。可以看到寄存器$a1的值为指向sql字符串的指针。

逆向路由器固件之动态调试_第6张图片

在hex view中跳转到对应的地址,可以看到sql字符串的值为:

select level from user where user_name='admin' and user_pwd='' or '1'='1'

表明我们输入的字符串已经拼接到SQL语句中。

逆向路由器固件之动态调试_第7张图片

采用同样的方式动态调试最新版固件,可以发现漏洞已经修复。最新版对输入的参数进行了长度检查,并且检查是否含有单引号。可见这个点除了SQL,应该是也存在溢出的。

进行长度检查。

逆向路由器固件之动态调试_第8张图片

检查是否存在单引号避免SQL注入。

逆向路由器固件之动态调试_第9张图片

你可能感兴趣的:(技术学习)