文章来源:朋友写的,拿来PHP挖SQL的话还是可以,最近也和他一直在整一些事情,整理内部知识库,搭建内部平台,这个后面再说。
先看文章吧
前言:
-
在我看来,代码审计只需要关注两个点。 一个是可控的输入,另一个是危险的操作。二者相结合,即可构成漏洞。 把这个思路运用到sql审计中,我们只需要关注可控的输入,因为每一次的sql语句执行都可以当成一次危险的操作。 接下来,我们只需要解决如何快速定位到可控输入点的问题,就可以实现快速审计sql的操作了。 -
这里通用的解决办法是去阅读系统过滤器的代码,可以快速的知道系统是怎么处理前端输入的值。 这一步每个师傅阅读代码能力不一样,审计的速度也会不一样。 但是,这里还有一个坑点就是单独的功能点代码文件还会可能存在对前端传入的值处理的操作,这样即使我们能快速理解过滤器的代码,也还要对单独的功能点代码文件进行审计。 这个方法可以找到可控输入点,但无法快速的找到。 -
要想快速定位可控输入点,可以采用日志监控+FUZZ的组合方法,这个方法思路是FUZZ特定的payload,然后查看mysql日志记录判断该输入点是否可控。
日志监控+FUZZ大法(点点点1.0)
-
首先使用以下命令打开Mysql日志监控功能和获得日志文件的存放路径 SET GLOBAL general_log = 'ON';
show variables like "general_log%";
-
然后使用xia_sql插件,勾选监控Proxy功能。 设置payload为:x’x”xx注:使用该payload的目的是判断输入点是否可控,并不是为了判断是否存在注入点。3.浏览器设置好代理,就可以愉快的点点点,然后查看mysql日志就完事了。
日志监控+FUZZ大法(点点点2.0)
经过实战后发现,如果系统功能点很多或者是对系统不熟悉,就会遗漏功能点,导致测试不全面。
这时,就可以搭配正则匹配大法,把系统所有sql语句提取出来。
因为之前已经通过MySQL日志知道系统会对那些字符(‘、”、)进行处理,所以我们可以在写个脚本判断如果sql语句中的变量被单引号或者双引号包裹就排除掉。
具体思路就是:Seay源代码审计系统提取SQL语句–>编写脚本进行二次判断。
-
使用Seay源代码审计系统只把SQL注入规则开着,其余规则关掉,不然会很慢。提取完后将结果导出,使用脚本进行二次判断。 -
简单写一个判断sql语句中的变量是否单引号包裹的小脚本
实战(某OA v11.9)
SQL注入点1
-
FUZZ -
MySQL日志查看 -
漏洞验证
SQL注入点2
-
已经知道该系统会对单引号进行转义,正则匹配没有被单引号包裹的变量。 -
查看源码 -
漏洞验证
原文始发于微信公众号(goddemon的小屋):PHP SQL快速审计思路