sqlilabs4

第十一关

这里开始进入post注入,首先我们需要知道,post是向服务器提交数据img

一开始是从需要从这里输入账号密码
做完之前的题目 其实就有感觉就是,你输入的东西、比如id、password之类的 最后都会转换成sql语言并发挥作用,在第一关中,我们使用了单引号,并且截图进行分析,而在这一关我们也是如此

img

img 在这个当中,我看出 我们的语句好像可以跟之前一样,在1后面的''这两个引号里面似乎可以注入我们想要的命令但其实不行

img

输出的确实这样一个语句,这个时候就很奇怪了,为什么单引号里面的内容不会被执行呢?

我们再来对比一下他和第一关的源码

img img

我吐了啊 其实有个很关键的点是,现在我们在这里输入 –+注释功能,其实已经是不起作用的了
所以上面为什么不会执行就是因为这个这个原因 !!!!!!!!!
所以这里我们只需要输入–(空格), 或者# 即可注释掉后面的语句
img

img

这样就可以了 我的天哪,我对自己太无语了

这里整理一下注释的知识点

注释手段
1mysql的注释有4 种 :

“#” : # 开头到行尾的都为注释,只能注释一行
“– ” (2个减号 一个空格) : – 开头到行尾都为注释 , 只能注释一行
“/* xxx /“ : 可以注释多行,但是一定要闭合,不然出错
”/
! 数字 代码 */“ : 可以跨行注释,但是一定要闭合,不然出错。
2
在浏览器url中,#是用来知道浏览器动作(例如锚点),对服务器端没有效果。
可以用 # 的url编码 即%23代替。
在浏览器中,url中的+解析为空格。
在myslq中,–’ 是的 – 与 单引号 连接在一起,不能形成正确的sql语句,而 –空格 则可以。
所以在浏览器的url中用 –+ 或–’使服务端能够正确注释sql语句
所以 +针对的是在url中的注释!!!

老规矩 order by 查字段数

img

字段数是2 所以 接下的操作就很明确了

img

接下来就是巩固一下代码的记忆了

接下来是第12关

第十二关 我们

img

无论输入单引号还是括号都无反应,都没有报错,所以我直接输入了双引号,出现这个报错,所以很明显 我们需要双引号加括号来闭合后面语句,并在其中注入我们的查询语句

第十三关

这个关卡其实就是需要盲注了,因为登录成功以后,他是没有登录信息的

img

接下来就是先布尔盲注

那就是看有无报错
这里我在使用burp suit暴力破解试试
发现那个密码字典里面没有emails这个名字,所以就没成功,我觉得可以去找一些字典过来。

然后这里引入一个新函数
updatexml:
作用:改变文档中符合条件的节点的值,需要注意的是 ,我们在注入中使用这个语句是加了select的,所以并没有对真正的数据进行修改,而是在内存中将取出的数据进行修改然后返回给用户
注意:这个这个函数是针对xml文件进行修改的,然后我们数据库的内容基本上是存放在这个xml文件中的
语法:updatexml(xml_document,xpath_string,new_value)
第一个参数:XML_document是String格式,为XML文档对象的名称,文中为Doc
第二个参数:XPath_string (Xpath格式的字符串)
第三个参数:new_value,String格式,替换查找到的符合条件的数据

实例
select updatexml(1,concat(‘‘,(SELECT database()),’‘),1) – img

结果是看报错 是XPATH报错,并且 输出的报错信息,是我们那个concat拼接部分的内容。

使用理解
对于这个函数,我想了一下,大概是这样的,updatexml是一个修改函数,他的语法是UPDATEXML (XML_document, XPath_string, new_value); 我们知道中间那个XPath_string是需要符合xpath格式的,所以当我们注入的格式不符合xpath他就会报错,而updatexml()报错信息是特殊字符、字母以及之后的内容,为了前面后面字母丢失,开头结尾连接特殊字符~, 这样就只有中间我们的查询语句是以结果的形式报出,而且报错的内容是将我们的语句转化过后的
后面我又将‘’里面的内容替换了一下,都是会原样输出的,但是如果是字母 则会表现无错,说明这个是合法的,那下次在使用这个语句注入的时候干脆都用字符吧,

第十四关

我们就使用extractvalue()这个函数试试
作用:
对XML文档进行查询的函数
格式
extractvalue(xml.frag,xpath_expr)
共同点
和updatexml的共同点是报错原理:Xpath格式语法书写错误的话,就会报错
并且报错的内容也是引号内的,如果是命令则会直接转化
直接上操作:

使用 extractvalue(1,concat(‘‘,(select database()),’‘)) –

img

接下来就大同小异了。

小结
其实我们使用的这两个函数,都是利用他的报错会将我们的命令语句识别,并输出我们需要的信息。

第15关

这一关没有输出报错信息,所以我们输入 ‘and1=1 – 和’and1=2 – 发现结果其实是不一样的,所以我们可以知道单引号注入。没有报错信息,意味着我们需要时间盲注
:admin’ and if(substr(database(),1,1)=’s’,sleep(5),1) –
img

和之前的也没多大区别哈哈

第十六关是双引号加括号的

小结一下:

到现在为止遇到的注入点好像就是只有or 1=1–+

1.’and 1=1–+

2.”and 1=1–+

3.)and 1=1–+

4.’)and 1=1–+

5.”) and 1=1–+

6.”))and 1=1–+

关于闭合问题的链接https://blog.csdn.net/qq_36896220/article/details/94129125

补充知识:
在看源码的时候注意到有一个isset()函数
作用
用于检测变量是否已设置并且非NULL

Author

vague huang

Posted on

2020-11-19

Updated on

2020-12-08

Licensed under

Comments