sqlilabs4
第十一关
这里开始进入post注入,首先我们需要知道,post是向服务器提交数据
一开始是从需要从这里输入账号密码
做完之前的题目 其实就有感觉就是,你输入的东西、比如id、password之类的 最后都会转换成sql语言并发挥作用,在第一关中,我们使用了单引号,并且截图进行分析,而在这一关我们也是如此
输出的确实这样一个语句,这个时候就很奇怪了,为什么单引号里面的内容不会被执行呢?
我们再来对比一下他和第一关的源码
我吐了啊 其实有个很关键的点是,现在我们在这里输入 –+注释功能,其实已经是不起作用的了
所以上面为什么不会执行就是因为这个这个原因 !!!!!!!!!
所以这里我们只需要输入–(空格), 或者# 即可注释掉后面的语句
这样就可以了 我的天哪,我对自己太无语了
这里整理一下注释的知识点
注释手段
1mysql的注释有4 种 :
“#” : # 开头到行尾的都为注释,只能注释一行
“– ” (2个减号 一个空格) : – 开头到行尾都为注释 , 只能注释一行
“/* xxx /“ : 可以注释多行,但是一定要闭合,不然出错
”/! 数字 代码 */“ : 可以跨行注释,但是一定要闭合,不然出错。
2
在浏览器url中,#是用来知道浏览器动作(例如锚点),对服务器端没有效果。
可以用 # 的url编码 即%23代替。
在浏览器中,url中的+解析为空格。
在myslq中,–’ 是的 – 与 单引号 连接在一起,不能形成正确的sql语句,而 –空格 则可以。
所以在浏览器的url中用 –+ 或–’使服务端能够正确注释sql语句
所以 +针对的是在url中的注释!!!
老规矩 order by 查字段数
字段数是2 所以 接下的操作就很明确了
接下来就是巩固一下代码的记忆了
接下来是第12关
第十二关 我们
无论输入单引号还是括号都无反应,都没有报错,所以我直接输入了双引号,出现这个报错,所以很明显 我们需要双引号加括号来闭合后面语句,并在其中注入我们的查询语句
第十三关
这个关卡其实就是需要盲注了,因为登录成功以后,他是没有登录信息的
接下来就是先布尔盲注
那就是看有无报错
这里我在使用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) –
结果是看报错 是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()),’‘)) –
接下来就大同小异了。
小结:
其实我们使用的这两个函数,都是利用他的报错会将我们的命令语句识别,并输出我们需要的信息。
第15关
这一关没有输出报错信息,所以我们输入 ‘and1=1 – 和’and1=2 – 发现结果其实是不一样的,所以我们可以知道单引号注入。没有报错信息,意味着我们需要时间盲注
:admin’ and if(substr(database(),1,1)=’s’,sleep(5),1) –
和之前的也没多大区别哈哈
第十六关是双引号加括号的
小结一下:
到现在为止遇到的注入点好像就是只有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