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

在前面的内容中,我们使用TEW-654TR路由器的tftp服务实现了获取目标的管理权限。但是要是tftp没有开放到外网怎么办?另寻他径:在这一篇中会我们来分析一个web应用上的漏洞。

创新互联公司是专业的宁城网站建设公司,宁城接单;提供成都网站建设、做网站,网页设计,网站设计,建网站,PHP网站建设等专业做网站服务;采用PHP框架,可快速的进行宁城网站开发网页制作和功能扩展;专业做搜索引擎喜爱的网站,专业的做网站团队,希望更多企业前来合作!

初步分析

使用代理软件抓登录时候的数据包,可以看到发送的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查询的语句,尤其是:

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函数。

假设&猜想

用户提交的用户名和密码大概是传递给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语句where条件是or 1=1所以会返回所有的数据。恰好管理员的记录是***条所以以管理员的身份登陆了。如果***条是一个普通用户的数据,那么就会以普通用户的身份登陆了。为了确保一定以管理员身份登陆,可以构造如下语句:

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

上面这个语句可以确保***查询出来的数据室level***的用户的数据。

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

文章题目:逆向路由器固件之SQL注入:web应用上的漏洞
分享链接:http://www.shufengxianlan.com/qtweb/news41/278941.html

网站建设、网络推广公司-创新互联,是专注品牌与效果的网站制作,网络营销seo公司;服务项目有等

广告

声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 创新互联