• 我们在哪一颗星上见过 ,以至如此相互思念 ;我们在哪一颗星上相互思念过,以至如此相互深爱
  • 我们在哪一颗星上分别 ,以至如此相互辉映 ;我们在哪一颗星上入睡 ,以至如此唤醒黎明
  • 认识世界 克服困难 洞悉所有 贴近生活 寻找珍爱 感受彼此

合天网安实验室:TEW-654TR注入漏洞

路由器 云涯 4年前 (2020-10-09) 1718次浏览

1 概述

TEW-654TR路由器SQL注入

2 实验

访问路由器后台登录的web界面抓包,可以看到html登录页面会将我们提交的用户名密码等提交给my_cgi.cgiimages

接下来下载该路由器固件,是一个zip文件:unzip FW_TEW-654TR_v1.0R\(1.10.12\).zip,解压之后使用binwalk对bin文件进行提取,进入文件夹即可发现提取的文件系统images

找到my_cgi.cgi,使用IDA进行分析

images

根据burp中看到的request关键字,在strings window进行搜索。然后查看交叉引用,进入到main函数。

在其之前会调用getenv(“REQUEST_METHOD”)(C 库函数 char *getenv(const char *name) 搜索 name 所指向的环境字符串,并返回相关的值给字符串

 

images

下面这部分(loc_10914c),会从栈上恢复s0-s7,fp,ra的值。接着jr ra 重新调用getenv,

images

如果getenv返回则判断是否为get方法,如果是get,则往左走,直接跳到结束位置

images

否则继续往右走,获取content_length,content_type,remote_addr等

images

继续往下,可以看到有打开数据库的动作

images

查看文件里包含的数据库文件,发现是sqlite3,可以连接sqlite3,查看表等,能直接拿到密码等。

imagesimages

继续通过IDA分析发现是调用open_db,get_input_entries,check_remote_ip

接着是判断参数request的值是login,show_message等字符串,进行比较

传入的是login

images

可以看到来到了loc_409a6c,

images

409a6c是指向do_main,跟如发现是查询用户名密码的sql语句。这里就是登录判断校验地方。

关键点是strcpy,然后strlen计算长度,通过memset初始化空间为0

然后通过sprintf格式化,输入的用户名密码就被带入该字符串,再条用exec_sql进行执行

images

exec_sql在libdbapi.so.1.0.0中找到了该函数,确实调用了sqlite3_exec,但是并没有做任何过滤操作,这就说明sql语句参数可控,可能存在sql注入

images

通过IDA动态调试分析漏洞

首先先写一个shell脚本

记得我们前面分析的,会提取content_length,content_type,remote_addr,所以用-E设置env,-g指定了gdb远程调试的端口

需要使用qemu-mipsel-static(用户仿真器),将其复制过来,

cp $(which qemu-mipsel-static) ./

然后编写脚本:vim cgi.sh

#! /bin/sh
INPUT= "$1"
LEN=$(echo -n "$INPUT"|wc -c)
echo $INPUT | chroot . . /qemu-mipsel-static 

-E REMOTE_ ADDR="127.0.0.1" 

-E CONTENT_ TYPE="multipart/x-form-data" 

-E REQUEST_ METHOD="POST" 

-g 1234 

-E CONTENT_LENGTH=$LEN ./usr/bin/my_ cgi.cgi

然后运行脚本:bash cgi.sh “request=login&user_name=admin&user_pwd=pass”

然后使用IDA连接远程调试,Debugger-》GDB调试

然后再次Debugger->process options-》设定远程连接 10.1.1.10是运行cgi.sh的ubuntu机器地址。

images

然后先下4个断点,分别是最后两个strcpy,第二个sprintf,以及exec_sql

images

运行后第一个断点,查看A1,A1地址里面的内容,是输入的用户名

images

第二个断点再次跟如A1,发现是密码

images

继续运行至第三个断点,发现三个寄存器均指向了bss段的sql变量,但是地址中内容还是空的

images之后再单步,发现该地址内容覆盖为语句

images

再次运行到第四个断点,执行exec_sql。可以看到A1寄存器的值指向sql字符串指针。

基于上面分析,发现存在sql注入,那么就可以考虑在登录时使用sql万能密码。传入密码为:or ‘1’=’1,再进行URL编码:%20or%20’1’%3D’1

使用脚本重新发送动态包,取消前三个断点,再次分析。发现确实没有过滤

images

 

只是针对该固件调试,无法模拟。


云涯历险记 , 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:合天网安实验室:TEW-654TR注入漏洞
喜欢 (0)