sql注入的学习总结(仅get)

                      关于sql注入(仅GET)的一些方法总结

这是萌新第一次写博客,难免有些差错,望各位大佬们指点和矫正233

终于辛苦肝完了sqli-labs(27~28左右还是有点不太清楚,为什么我的%a0就不可以啊啊啊啊啊)

好了,进入正题,接下来分享一下我的个人经验(仅仅涉及GET形式且不涉及过滤)

假如我们现在正在做sqli-labs的题(GET形式),那么该如何判断传输过去的id是怎么处理的呢?

                                         第一节

分享一下我的思路,首先我会让 id=1 and 1=8(使条件不成立即可),观察一下反馈,如果界面没有报错或者成功显示相关信息,那么说明不是数字型注入(即条件成立)。(原理的话不太清楚,我是这样理解的,如果为’ '型,或者" "型的话,那么将我们输入的值放到里面就是 ’ 1 and 1=8 ’ 或 " 1 and 1=8 ",那么就相当于一个字符串,所以id仅仅会取开头的1,感觉类似于字符串转换为数值,当然以上仅仅是我的猜测,还不确定。求大佬解释 )

当然如果不成功了,(即没有正常显示信息),就及有可能是数字型注入,但也不要立马下判断,因为有可能是 ( )型 或者 (( ))型,这个时候就要用到注释符了, 此时输入 id=1 and 1=1(使条件成立)–+,观察一下变化,如果是没有括号的类型的话那么就直接会成功显示信息,即id=1 and 1=1成立(得出sql注入的类型和方式),但是如果不成功的话,就可能是加了括号的类型,假设此处是一个括号的类型,那么在sql语句中则为

id=( 1 and 1=1 --+)

可以看到因为注释掉了一个括号导致了不匹配(其实在知道了为数字型后就不用在后面加 and 1=1,这是我的习惯QAQ)。那么不急,这个时候我们在1的后面加上一个 ) 试试。那么此处为

id=(1) and 1=1 --+)

可以看到条件匹配,会有相应的信息出来。也就得到了注入的类型与方法了。
当然如果是 (( ))型的那么此处还是会报错,因为

id=((1) and 1=1--+))

此时因为有两个括号,还是不匹配,那么接下来再一次往1后面再加一个)

id=((1)) and 1=1

于是又一次成功得到了其注入类型与方法。


以上前提都是在 id=1 and 1=8 不成功显示信息的情况下,如果成功显示了相关信息那么就要考虑到是符号型注入了

                                      第二节

既然成功显示出了信息,那我们就来判断他是那种字符型注入,首先从 ’ ‘型分析(我的习惯),还是令条件不成立 ,只不过换成了 id= 1’ and ‘a’='c
如果他是属于 ’ ‘型或者多加了括号型的那么就不会显示信息(注意:报错与不显示信息的区别,报错是因为语法错误,不显示信息是因为条件不成立但语法正确。除非是关闭了报错信息的题两者才看起来区别不大 )
假如这里是’ '型的,那么就不会显示信息,即

id= '1' and 'a'='c'//加了括号类型的也成立

可以看到条件不成立(语法正确,不会报错),没有任何信息显示。当然如果是" "型的就会显示出信息,因为

id=" 1' and 'a'='c "//成立

因为外面的" " 是配对的,这个时候我们输入的 1’ and ‘a’=‘c 整体就被当做字符串了。因为不会涉及到外面的双引号 " 配对,于是又一次类型转换,再次取1,就有了回显。
接下来继续对 id=1’ and ‘a’=‘c 不显示信息分析。
此时我们确定是 ’ ’ 型的,接下来我们让条件成立,即id=1’ and ‘a’='a ,试一试,如果单单只是 ’ ’ 型的话就成立。

id='1' and 'a'='a'//成立,加括号也成立。

可以看到成立,于是就判断是那种 ’ ‘型的,令id=1’ and ‘a’=‘a’ --+
如果是单纯的 ’ ’ 型的 ,那么直接成立,即

id='1' and 'a'='a'--+'//得到其注入类型

当然如果是加了括号类型的就会报错(无论是几个括号类型的)

id=('1' and 'a'='a'--+') 或者  id=(('1' and 'a'='a'--+'))  //两者都不成立

于是就又进入了上方的逐个添加括号的情节。。

id=('1') and 'a'='a'--+')    或者  id=(('1')) and 'a'='a'--+'))   //逐个添加括号使其相等判断出其类型

好了以上都是基于 第二节的id=1’ and ‘a’='c 没有回显的情况下,若是成功显示那么就要考虑 " " 型的情况了。情况与上方的步骤类似。就不一一举例了。

以上举例均为有报错信息,回显的情况下,还有许多情况都需要一一尝试,毕竟熟能生巧。接下来拿一道题来举例。
接下来拿62题举例(注意:本题要求我们将它盲注出来,在此我们只将判断他的类型)
首先还是老话:

``

http://localhost/master/less-62/?id=1 and 1=8//判断是否为是数字型 

发现sql注入的学习总结(仅get)正常回显,判断是字符型,先从 ’ ’ 型开始判断,构造语句如下:

http://localhost/master/less-62/?id=1' and 'a'='c  //判断是否为 ' ' 型

在次发现sql注入的学习总结(仅get)回显消失了,于是就判断不是 " " 型,下面令条件正确试试

http://localhost/master/less-62/?id=1' and 'a'='a  //判断条件为真能否成功

然后。。。。sql注入的学习总结(仅get)嘿嘿还真的成功了,但是还要判断是那种情况的 ’ ’ 型,于是用注释符–+

http://localhost/master/less-62/?id=1' and 'a'='a' --+ //用注释符判断是那种类型

结果。。。。。。。。sql注入的学习总结(仅get)果然失败了,看来没有想得那么简单,一定是有括号作对,我们注释符将其注释掉了,导致括号不匹配,下面我们加上一个括号试试。

http://localhost/master/less-62/?id=1')  and 'a'='a' --+ //判断是否是一个括号的类型

然后。。。sql注入的学习总结(仅get)mmp的终于出来了5555555。好了,终于找到了这道题的类型了。

以上是我对sql注入的一些见解,如果有什么不对的话请各位大佬指教。毕竟学无止境啊!!
共勉!(第一次写不会排版见谅!)