首页 安全防御正文

逆向路由器固件之SQL注入:web应用上的漏洞

我们使用前面的内容TEW-654TR路由器的tftp服务实现了获取目标的管理权限。但如果是tftp如果没有向外网开放怎么办?另寻他径本文中,我们将分析一个web应用漏洞。

逆向路由器固件之SQL注入:web应用上的漏洞

初步分析

逆向路由器固件之SQL注入:web应用上的漏洞

用 *** 软件抓取登录时的数据包,可以看到发送的数据包http请求如上图所示。数据发送到my_cgi.cgi这个脚本。我们分析一下这个文件看看。

➜ rootfs git:(master) ✗ find . -name my_cgi.cgi./usr/bin/my_cgi.cgi➜ rootfs git:(master) ✗ file ./usr/bin/my_cgi.cgi./usr/bin/my_cgi.cgi: ELF 32-bit LSB executable,MIPS,MIPS-II version 1 (SYSV),dynamically linked (uses shared libs),stripped

用户在登录页面上输入的两个参数是通过抓包知道的’user_name’和’user_pwd’,那么我们在CGI在脚本中搜索这两个字符串。

逆向路由器固件之SQL注入:web应用上的漏洞

看起来有几行字符串。SQL特别是:

select level from user where user_name='%s' and user_pwd='%s'

它似乎应该根据用户名和密码查询数据库,看看密码是否正确。从上一篇文章的分析可以看出,路由器是使用的SQLite做数据库存储密码。

使用IDA载入my_cgi.cgi。查询”select level from user where user_name“可定位字符串do_login函数。

逆向路由器固件之SQL注入:web应用上的漏洞

假设&猜想

用户提交的用户名和密码可能是传递给用户的sprintf函数生成SQL句子sql变量中,***进入exec_sql函数。这个过程似乎没有转义数据。除非数据进入do_login函数之前或之前exec_sql有转义,否则很可能存在SQL注入的漏洞。假设我们是对的,数据没有处理进入SQL在句子中,我们可以使用最传统的***绕过登录验证的密码:

' or '1'='1

***执行的sql就会变成

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

这样查询句子就会回到成功的结果。

验证猜想

我们来实验一下:

逆向路由器固件之SQL注入:web应用上的漏洞

果然,这和我们预期的一样。这里需要注意的是,作为管理员登录需要一些运气。我们建造的SQL语句where条件是or 1=1所以它将返回所有数据。管理员的记录恰好是***所以作为管理员登录了。***如果条是普通用户的数据,则将作为普通用户登录。为确保必须作为管理员登录,可构建以下句子:

' or level = (select level from user order by level desc limit 1)/*

以上句子可以保证***查询出来的数据室level***用户数据。

这一次,我们终于看到了冰山一角的逆向分析。下一篇文章将讨论使用Qemu虚拟机运行路由器固件,动态调试相关内容。

   
版权声明

本文仅代表作者观点,不代表本站立场。
本文系作者授权发表,未经许可,不得转载。