记一次简单的SQL SERVER注入漏洞

1、APPSCAN扫描发现注入点。(appscan基本功能使用比较简单,不再赘述)

2、验证和利用。

(简单思路:1.猜测后端sql语句的拼接 2.测试后端过滤的字符(如果有过滤)3.构造不被后端过滤,或者过滤后依然可在数据库执行的语句)

2.1复制appscan请求到hackbar

记一次简单的SQL SERVER注入漏洞_第1张图片可以看到数据库错误信息都显示出来了,而且还直接暴出SQL语句,那我们就可以直接上order by 猜表的字段数。

记一次简单的SQL SERVER注入漏洞_第2张图片因为这里是int型,所以参数1后面不用带引号。直接跟order by。这里提示5超过范围。每次尝试可将数字减半,直到不再提示超出范围。记一次简单的SQL SERVER注入漏洞_第3张图片最后发现order by 3报错,2没报错。说明当前表的字段数为2。接着使用union select 1,2快速测试回显。(基本原理:1、union的用法规定,后面查询语句跟的字段数必须和前面的查询语句相同,比如这里只能带2个字段。不能是union select 1也不能是union select 1,2,3。2、union select 1,2正常的查询结果就是返回1和2,这样可以帮助我们快速在页面上判断哪个位置可以把查询结果返回回来。1,2只是习惯。union select 1,1也可以同样达到效果)记一次简单的SQL SERVER注入漏洞_第4张图片但是我们提交后,发现被后端检测到了非法参数。尝试绕过,比如常用:1、大小写绕过UniOn seleCt 2、两层绕过uniunionon seleslelectct 3、注释绕过uni/**/on se/**/lect 4、空格绕过union%0aselect 等。。。(这些方法很可能都不成功,只能多尝试多积累,多研究后端和waf的检测和过滤原理)记一次简单的SQL SERVER注入漏洞_第5张图片可以看到1和2都回显。直接union%0aselect @@servername,@@version查服务器名和版本信息记一次简单的SQL SERVER注入漏洞_第6张图片很尴尬,这里报了个错。这个错误的意思是无法将服务器名或者版本号信息转换成int型。(这个值很显然不是版本信息,那就是@@servername的位置无法输出字符串)记一次简单的SQL SERVER注入漏洞_第7张图片修改参数后成功爆出服务器名,接着查询当前数据库名和当前用户union%0aselect 1,db_name();union%0aselect 1,suer_sname()。再接着就是利用information_shema数据库暴表暴字段。相信大家都轻车熟路了,网上也有非常多的教程,这里不再赘述。或者使用sqlmap。记一次简单的SQL SERVER注入漏洞_第8张图片

成功爆出一张表名。

 

SQL注入看起来不难,但是水很深。要想完全理解每个环节每个步骤的作用和原理,还是要花点时间去研究的。第一次写稿,欢迎指正讨论。

你可能感兴趣的:(SQL注入,SQL,SERVER,绕过,安全,经验分享)