另寻他径

前面的内容中,我们使用TEW-654TR路由器的tftp服务实现了获取目标的管理权限。但是要是tftp没有开放到外网怎么办?另寻他径:在这一篇中会我们来分析一个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 -bit LSB executable, MIPS, MIPS-II version (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 ''='

最后执行的sql就会变成

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

这样查询语句就会返回成功的结果。

验证猜想

我们实验一下:

果然跟我们预期的一样。这里需要注意的是能够以管理员身份登陆是需要一定运气的。我们构造的SQL语句where条件是or 1=1所以会返回所有的数据。恰好管理员的记录是第一条所以以管理员的身份登陆了。如果第一条是一个普通用户的数据,那么就会以普通用户的身份登陆了。为了确保一定以管理员身份登陆,可以构造如下语句:

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

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

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

逆向路由器固件之SQL注入 Part3的更多相关文章

  1. 逆向路由器固件之解包 Part1

    这个系列的文章以逆向路由器固件的方式来挖掘路由器中存在的漏洞. 本篇文章主要以介绍解包固件工具为主.文中演示用的固件可以在这里下载.由于针对设备的攻击越来越多,很多厂商把不提供固件下载作为一种安全策略 ...

  2. 逆向路由器固件之敏感信息泄露 Part2

    之前的文章中详细介绍了各种解包路由器固件的工具.解包之后就获得了固件中的文件.下一步就是分析文件寻找漏洞了.这次分析的目标是Trendnet路由器,分析的漏洞是一个远程获取路由器权限的漏洞. 初步分析 ...

  3. [置顶] SQL注入安全分析

    (一)       应用环境列表 网络互联设备操作系统 序号 操作系统名称 设备名称 脆弱性 1 IOS_路由器_内部_1 route1 2 IOS_路由器_VPN_1 路由器_VPN_1 3 IOS ...

  4. SQL注入(四)

    参数绑定(预编译语句) 虽然数据库自带的过滤是个不错的实现,但是我们还是处在“用户输入被当成 SQL语句的一部分 ”这么个圈子里,其实要跳出这个圈子还有一个实现,就是参数绑定.基本上所有的主流数据库都 ...

  5. 【转载】以Java的视角来聊聊SQL注入

    以Java的视角来聊聊SQL注入 原创 2017-08-08 javatiku Java面试那些事儿 在大二就接触过sql注入,之前一直在学习windows逆向技术,认为web安全以后不是自己的从业方 ...

  6. RED_HAWK:基于PHP实现的信息收集与SQL注入漏洞扫描工具

    无事早上就去逛freebuf看到一款不错的工具,打算介绍给大家 RED_HAWK:基于PHP实现的信息收集与SQL注入漏洞扫描工具 RED HAWK 最新版本:v1.0.0[2017年6月11日] 下 ...

  7. Java学习之路- SQL注入

    用户名: __________ 密码:——————— 假如没有使用预处理的Statement 对象 拼接字符串查数据库的话,易收到sql注入攻击: 例如说 : mysql 中   #代表的是单行注释 ...

  8. 常见的 CSRF、XSS、sql注入、DDOS流量攻击

    CSRF攻击 :跨站请求伪造攻击 ,CSRF全名是Cross-site request forgery,是一种对网站的恶意利用,CSRF比XSS更具危险性 攻击者一般会使用吸引人的图片去引导用户点击进 ...

  9. PHPCMS9.6.0最新版SQL注入和前台GETSHELL漏洞分析 (实验新课)

    PHPCMS9.6.0最新版中,由于/modules/attachment/attachments.php的过滤函数的缺陷导致了可以绕过它的过滤机制形成SQL注入漏洞,可导致数据库中数据泄漏. 而且在 ...

随机推荐

  1. axis2框架用wsdl文件生成的服务端MessageReceiveInOut文件注意事项

    在用axis2生成服务端文件和客户端文件,当客户端文件调用服务端文件时,都是通过wsdl文件生成的 配置文件进行相互的调用. 在一开始做开发测试的时候,通过soapUI进行调用接口的时候,可以调用成功 ...

  2. HashMap和LinkedHashMap的比较使用

      由于现在项目中用到了LinkedHashMap,并不是太熟悉就到网上搜了一下. import java.util.HashMap; import java.util.Iterator; impor ...

  3. PTA第三次上机

    5-1 #include <iostream> #include <cstdlib> #include <string.h> using namespace std ...

  4. python后端工程师 数据爬虫

    大数据挖掘分析平台和产品的建设. 工作职责: 独立完成软件系统代码的设计与实现: 根据需求完成设计,代码编写,调试,测试和维护: 使用Python 语言对后台业务逻辑进行开发以及维护: 能根据实际需求 ...

  5. 使用docker安装myql/redis等软件

    使用docker安装myql/redis等软件 概述 基本命令 安装mysql 安装redis 概述 在开发时经常需要安装各种软件,有时甚至为了验证一个命令不得不安装配置一个缓存.数据库.MQ等,耽误 ...

  6. go 语言字典元素删除

    package main import "fmt" func main() { /* 创建map */ countryCapitalMap := map[string]string ...

  7. [ios][swift]文本框UITextField用法

    参考:http://www.hangge.com/blog/cache/detail_530.html

  8. Codeforces 820B - Mister B and Angle in Polygon

    820B - Mister B and Angle in Polygon 思路: 由于正多边形以某个顶点分成的三角形后以这个点为顶点的角都相等,所以可以确定两个点为相邻点,只要再找一个点就够了. 证明 ...

  9. 雷林鹏分享:C# 预处理器指令

    C# 预处理器指令 预处理器指令指导编译器在实际编译开始之前对信息进行预处理. 所有的预处理器指令都是以 # 开始.且在一行上,只有空白字符可以出现在预处理器指令之前.预处理器指令不是语句,所以它们不 ...

  10. SQL 基础学习(2) Joining 和function , 作业没有做,需要看百宝箱。NOsql的概念

    SQL 基础学习(2) Joining 可以同时关联(joining)多张表进行复杂的查询. 相比于用Rails捞出数据再用Ruby进行过滤组合,使用SQL更加高效,节能. 以下是 users has ...