SQL-Labs靶场“46-50”关通关教程

SQL-Labs靶场通关教程:

SQL注入第一课

SQL无列名注入

SQL报错注入原理

简单的SQL练习,联合注入、报错注入

POST提交方式注入

HTTP头部注入

二次注入

一些绕过案例

HTTP参数污染攻击

一、四十六关 ORDER BY数字型注入

请求方式 注入类型 拼接方式
GET 报错、布尔盲注、延时盲注 ORDER BY $id

在这里插入图片描述
我们直接可以从界面中得知传参的参数为SORT,下面我们令参数即sort为1继续尝试输入:

?sort=1

在这里插入图片描述
我们可以看到是一个排序表格,同时我们继续尝试将sort参数变为2继续尝试:
在这里插入图片描述
可以看到按照字母顺序进行了排序,所以它便是一个使用了order by语句进行排序的查询的一种查询输出方式。
我们这里继续尝试,将参数变为1',我们可以看到它进行了报错:
在这里插入图片描述
可以看到它直接将报错信息输出了出来,所以我们之后可以进行尝试报错注入。
同时我们之前说了使用了order by,所以这里使用union注入当然是不行的,我们不必进行考虑。我们之后可以跟经常使用order by的正反排序,即为desc以及asc,当然,不加这个默认为从小到大,即为asc。
在这里插入图片描述
在这里插入图片描述
所以如果这里进行注入点判断时,我们使用order by为一个数值是没有意义的,这里我们需要使用rand函数,下面我们会谈到。

1、源码分析

<?php
include("../sql-connections/sqli-connect.php");
$id=$_GET['sort'];	
if(isset($id))
	{
   
   
	//logging the connection parameters to a file for analysis.
	$fp=fopen('result.txt','a');
	fwrite($fp,'SORT:'.$id."\n");
	fclose($fp);

	$sql = "SELECT * FROM users ORDER BY $id";
	$result = mysqli_query($con1, $sql);
	if ($result)
		{
   
   
		?>
		···
		<?php
		while ($row = mysqli_fetch_assoc($result))
			{
   
   
    			echo "<td>".$row['id']."</td>";
    			echo "<td>".$row['username']."</td>";
    			echo "<td>".$row['password']."</td>";
			}	
		echo "</table>";
		}
		else
		{
   
   
		print_r(mysqli_error($con1));
		}
	}	
	else
	{
   
   
		echo "Please input parameter as SORT with numeric value<br><br><br>
### SQL注入实验环境 sqli-labs 靶场解题思路 #### less17: Union 注入基础 Union查询是一种常见的SQL注入手法,通过`UNION SELECT`语句可以将额外的数据集附加到原始查询的结果集中。为了成功执行这种攻击,两个查询返回的列数必须相同,并且数据类型的兼容性也要匹配。 对于less17来说,目标是在存在漏洞的应用程序参数中构造有效的payload来获取敏感信息。例如,在给定条件下可以通过如下方式尝试读取当前使用的数据库名称: ```sql ?id=-1' UNION SELECT 1,database() -- ``` 上述命令利用了闭合单引号后的逻辑错误并追加了一个新的SELECT子句[^1]。 #### 获取MySQL版本与数据库名 进一步探索时,除了了解正在操作哪个具体的数据库外,知道服务器上运行的是哪一个版本也是非常有用的。这有助于判断可能存在的特定弱点或特性。下面是一个用于同时检索这两个值的例子: ```sql ?id=-1' UNION SELECT 1,CONCAT(version(),'|',database()) -- ``` 此表达式会连接MySQL版本字符串和活动库的名字作为第二列的内容输出[^2]。 #### 枚举用户名密码哈希值 一旦掌握了足够的背景知识之后就可以转向更深入的信息挖掘工作——比如从用户表里提取账户凭证。这里展示了一种方法用来列举所有用户的登录凭据(假设字段名为username,password),并且用特殊字符分隔开它们以便于解析: ```sql ?id=-1' UNION SELECT 1,GROUP_CONCAT(username,'~',password) FROM users -- ``` 这段代码将会把所有的用户名及其对应的散列形式的口令组合成单一字符串返回给调用者[^4]。 请注意,以上内容仅限学习研究目的使用;实际环境中未经授权擅自访问他人计算机信息系统属于违法行为!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值