1. 程式人生 > >南郵CTF攻城記(6)

南郵CTF攻城記(6)

總結參考:https://blog.csdn.net/u012763794/article/details/50959166

密碼重置

Q:

S:

首先隨便輸入密碼,並正確輸入驗證碼,進行操作。

事實上,我對這個error不感冒,首先直接說賬號為ctfuser,就必定無法直接出結果。

位址列的“Y3RmdXNlcg==”進行base64解密為“ctfuser”,則在傳值時將賬號經過base64加密後進行傳遞。

根據題目的提示,我們重置的目標是admin,日常使用burp,看看有何目標:

可以看到“ctfuser”的base64編碼結果出現了兩個地方,但連同最後一行,我們需要修改三個地方。

admin加密:YWRtaW4=

開心。

SQL Injection

Q:

S:

檢視原始碼:


<!--
#GOAL: login as admin,then get the flag;
error_reporting(0);
require 'db.inc.php';

function clean($str){
	if(get_magic_quotes_gpc()){
		$str=stripslashes($str);
	}
	return htmlentities($str, ENT_QUOTES);
}

$username = @clean((string)$_GET['username']);
$password = @clean((string)$_GET['password']);

$query='SELECT * FROM users WHERE name=\''.$username.'\' AND pass=\''.$password.'\';';
$result=mysql_query($query);
if(!$result || mysql_num_rows($result) < 1){
	die('Invalid password!');
}

echo $flag;
-->
Invalid password!

根據提示,反斜槓是突破點,可用來轉義,則重點關注$query='SELECT * FROM users WHERE name=\''.$username.'\' AND pass=\''.$password.'\';';  ,程式碼中仍然是傳入使用者名稱和密碼的,首先經過clean函式的清洗,刪除反斜槓,最後使用htmlentities()方法將把字元轉換為 HTML 實體,htmlentities($str, ENT_QUOTES)。

這種轉換我們在平時網頁中輸入時也會自動被轉換為html實體,以防止被html解釋或執行。單引號跟上反斜槓也會被轉移。

直接進行轉換:

<font color=#FF0000 size=3>'</font>SELECT * FROM users WHERE name='<font color=#FF0000 size=3>'</font>+username+<font color=#D02090 size=3>'</font>' AND pass='<font color=#D02090 size=3>'</font> + password + <font color=#32CD32 size=3>'</font>';<font color=#32CD32 size=3>'</font>

如果傳入的是:username=ctfuser&password=1234

原始碼即為:SELECT * FROM users WHERE name='ctfuser' AND pass='1234',其中,在資料庫中反斜槓將會被過濾掉,只剩下需要轉移的單引號!,其他單引號用於字串的拼接。

提示中告訴我們可以使用反斜槓對單引號進行轉移,上面的原始碼可事先進行一些構造:

SELECT * FROM users WHERE name=<font color=#FF0000 size=3>'</font>ctfuser' AND pass=<font color=#FF0000 size=3>'</font>1234'

在mysql查詢語句中轉義字元不參與閉合,所以第一個單引號將和第三個單引號進行閉合,然後使用
username=ctfuser\&password=or 1 %234,即可繞過,SQL語句如下:

SELECT * FROM users WHERE name=<font color=#FF0000 size=3>'</font>ctfuser' AND pass=<font color=#FF0000 size=3>'</font> or 1 #'

 

需要告一段落了,感覺自己水平有限,還需要實戰中慢慢積累經驗。

繼續加油!