mysql注入新姿勢(數字與字符編碼注入) hex,conv


0x01 前言 

今天看到師傅們發的一篇文章,感覺mysql注入還能這么用,於是自己搭建了一個簡單的環境,進行復現.

0x02原理

首先介紹兩個mysql函數 hex和conv

conv(N,from_base,to_base) conv函數接收一個數字,進行進制轉換

如上圖就是將25從16進制轉化成10進制,我們復原的結果同樣也證實了這樣的猜想

hex(str) 將str轉化成16進制 
unhex  復原

所以我們可以通過語句將字符串轉換成數字   先將test轉換成16進制,再轉換成10進制

由於Mysql的特性 導致輸入的字符串的最大長度為8個字節,超過會導致不能成功解碼

這時候我們可以用substr來截取

 

0x03 復現

demo1

 1 <?php
 2 $id= $_GET['x'];
 3 $conn = mysql_connect('127.0.0.1','root','root'); 
 4 mysql_select_db('flag',$conn);
 5 $sql = "select name from flag where id=$id";
 6 $result = mysql_query($sql);
 7 while($row = mysql_fetch_array($result)){     
 8     echo $row['name'];
 9 }  
10 mysql_close($conn);
11 echo "<hr>";   
12 echo $sql
13 ?>

一個簡單的sql注入

 

自己在本地編寫好payload代碼

成功利用 

demo2 update注入中關閉顯錯

首先介紹一篇文章 利用insert,update和delete注入獲取數據

 1 <meta charset="utf-8"/>
 2 <?php
 3 $conn = mysql_connect("localhost","root","root")or die("error".mysql_error());
 4 $db = mysql_select_db("test");
 5 mysql_query("set name utf8");
 6 $id = @$_GET['id'];
 7 $username = @$_GET['username'];
 8 $sql1 = "update users set username='$username' where id ='$id'";
 9 $sql2 = "select * from users where id = '$id'";
10 mysql_query($sql1);
11 if($result = mysql_query($sql2)){
12     $row = mysql_fetch_array($result);
13     echo "ID".$id."的用戶變為".$row['username'];
14     mysql_close();
15 }
16 else{
17     var_dump(mysql_error());
18 }
19 ?>

 

在mysql開啟報錯的時候,可以使用幾種報錯函數得到結果 payload之一

:?id=1&username=wakakaka' or extractvalue(1,concat(0x7e,database())) or'

就可以得到數據。

如果開啟了報錯可以用conv hex來得到數據

 Mysql注入博大精深,以后還有很多姿勢需要學習

參考 mysql繞過新思路

   在Update的注入中如果關閉了顯錯該怎么辦  

感謝作者提供的思路

轉載需注明原文地址 http://www.cnblogs.com/Mrsm1th/p/6842300.html


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM