NCTF SQL注入1
阿新 • • 發佈:2018-12-17
原始碼:
<html> <head> Secure Web Login </head> <body> <?php if($_POST[user] && $_POST[pass]) { mysql_connect(SAE_MYSQL_HOST_M . ':' . SAE_MYSQL_PORT,SAE_MYSQL_USER,SAE_MYSQL_PASS); mysql_select_db(SAE_MYSQL_DB); $user = trim($_POST[user]); $pass = md5(trim($_POST[pass])); $sql="select user from ctf where (user='".$user."') and (pw='".$pass."')"; echo '</br>'.$sql; $query = mysql_fetch_array(mysql_query($sql)); if($query[user]=="admin") { echo "<p>Logged in! flag:******************** </p>"; } if($query[user] != "admin") { echo("<p>You are not admin!</p>"); } } echo $query[user]; ?> <form method=post action=index.php> <input type=text name=user value="Username"> <input type=password name=pass value="Password"> <input type=submit> </form> </body> <a href="index.phps">Source</a> </html>
關鍵: 以post方式提交user和pass
當user=admin&pass=pass時,SQL語句如下:select user from cft where (user=‘admin’) and (pw=‘pass’),查詢當user=admin和pw=pass時的user,user和pw在資料庫中
【從下面的圖回看,只知道user=admin,不知道pw的值時,where條件滿足不了,這條SQL查詢是查不到的,意味著下面的query : https://zhidao.baidu.com/question/983573447239383259.html
當執行的SQL查詢的user為admin時,顯示flag,有個關鍵在SQL查詢能不能執行,看回上面第二幅圖
解題思路:通過post提交方式 user與pass,而且提交的user必須是admin.但是密碼不知道。所以就得在pass."’) 這段 ,所以構造的語句就是這樣語句:Username=admin ‘)# 實際執行的SQL語句:select user from cft where (user=‘admin ‘)#’) and (pw=‘pass’),#後的都被註釋掉了,兩個if都滿足了
總結:並不是通過閉合直接查詢資料庫中的使用者名稱和密碼,而是使顯示flag的兩個if語句執行。 要想拿到flag,要滿足兩個if,第一個if要求有user和pass的post輸入,第二個if要求$query查詢的user為admin