web15
提示:公開的信息比如郵箱,可能造成信息泄露,產生嚴重后果
進入題目后看到有個QQ郵箱,我們搜一下它的QQ。沒啥信息,返回到剛才的網站加后綴看能不能進去后臺:
不知道用戶名密碼哎,那忘記密碼吧!發現一個信息:
剛才搜的QQ用戶在西安,我們 試試,
果然不出我所料,然后返回輸入密碼,得到flag。
web16
提示:對于測試用的探針,使用完畢后要及時刪除,可能會造成信息泄露
啥是探針呢?搜索一下,最后看到有關于PHP探針的解釋
php探針是用來探測空間、服務器運行狀況和PHP信息用的,探針可以實時查看服務器硬盤資源、內存占用、網卡流量、系統負載、服務器時間等信息。
具體解釋請點擊php探針。
我們試試**/tz.php**
有個PHP信息,打開看看:
打開之后直接找關鍵字符“”,得到flag。
web17
提示:備份的sql文件會泄露敏感信息
沒思路啊
我在網上搜了一下查看自己備份的SQL文件也不知道怎么辦。但備份的英語好像是,看一下**/.sql文件**,找到flag。
知識點
sql文件的備份一般為.sql
web18
提示:不要著急,休息,休息一會兒,玩101分給你flag
我第一反應就是抓包改數據,那就試試吧!
抓了好幾次,沒用。像往常一樣,看看源代碼
點開看看:
直接找“”找不到,那看看有什么間接的信息。
好像有線索,是某種類型的編碼,嘗試解一下。
去110.php看看,出現flag。
web19
提示:密鑰什么的,就不要放在前端了
是用post傳入的,
得到flag。
注意
第一反應看到有賬號密碼時我就直接輸入了,那肯定是錯誤的,因為我沒有仔細看題意。錯了之后才知道是post傳參。
反省:一定要仔細審代碼,這關乎著成敗。
web20
提示:mdb文件是早期asp+構架的數據庫文件,文件泄露相當于數據庫被脫褲了。
asp+最大的安全隱患在于數據庫可以被別人下載。
mdb文件是早期asp+構架的數據庫文件 直接查看url路徑添加/db/db.mdb 下載文件通過txt打開或者通過.exe打開搜索flag
數據庫的隱患 數據庫的存儲隱患
在ASP+應用系統中,如果獲得或者猜到數據庫的存儲路徑和數據庫名,則該數據庫就可以被下載到本地。
數據庫的解密隱患
由于數據庫的加密機制非常簡單,所以即使數據庫設置了密碼,解密也很容易。該數據庫系統通過將用戶輸入的密碼與某一固定密鑰進行異或來形成一個加密串,并將其存儲在*.mdb文件中從地址“&H42”開始的區域內。由于異或操作的特點是“經過兩次異或就恢復原值”,因此,用這一密鑰與*.mdb文件中的加密串進行第二次異或操作,就可以輕松地得到數據庫的密碼。基于這種原理,可以很容易地編制出解密程序。
程序設計中的安全隱患
ASP代碼利用表單(form)實現與用戶交互的功能,而相應的內容會反映在瀏覽器的地址欄中,如果不采用適當的安全措施,只要記下這些內容,就可以繞過驗證直接進入某一頁面。例如在瀏覽器中敲入“…… page.asp?x=1”,即可不經過表單頁面直接進入滿足“x=1”條件的頁面。因此,在設計驗證或注冊頁面時,必須采取特殊措施來避免此類問題的發生。
解決方案
自己在網上搜索
爆破 web21
爆破什么的,都是基操
給了一個字典文件,保存一下要用到。
打開鏈接后讓我們輸入賬號密碼,明顯需要用bp抓包。
被加密了,解密后得到用戶:密碼
OK,我們sent to
設置好要爆破的內容,切換到頁面
添加第一部分:用戶名
添加第二部分::(英文狀態下)
添加第三部分:密碼,用剛才下載的文件字典。
別忘了再編碼,因為抓包時用戶密碼被加密了。
取消勾選
開始爆破,
得到密碼,然后再解碼,得到用戶密碼,輸入之后便可得到flag。
思路:
抓包后是得到加密后的用戶密碼,然后解密后看到用戶密碼被加工了。將數據發送到爆破模塊,選中編碼后的用戶名和密碼。選擇access數據庫忘記密碼,設置為 (自定義迭代器)自定義迭代器可以自定義拼接方式 的位置即為我們的拼接方式,根據上述解碼的密碼的格式:用戶名:密碼 ----->則的位數為3。3個拼接完成后,需要進行編碼; 進行編碼設置。取消 編碼。然后爆破成功!
web22
提示:域名也可以爆破的,試試爆破這個ctf.show的子域名
查詢一下他的子域名,最后在vip.ctf.show的源代碼中看到了flag。
;
include('flag.php');
if(isset($_GET['token'])){
$token = md5($_GET['token']);
if(substr($token, 1,1)===substr($token, 14,1) && substr($token, 14,1) ===substr($token, 17,1)){
if((intval(substr($token, 1,1))+intval(substr($token, 14,1))+substr($token, 17,1))/substr($token, 1,1)===intval(substr($token, 31,1))){
echo $flag;

}
}
}else{
highlight_file(__FILE__);
}
?>
分析一下代碼:
如果存在一個token值,且token值是被md5加密過的,如果if中的條件滿足,則打印出flag。需要傳遞一個 token值,寫腳本爆破,在這里我用PHP語言,腳本如下:
error_reporting(0);
for ($i=0;$i<=10000:$i++)
{
$token = md5($i);
if(substr($token, 1,1)===substr($token, 14,1) && substr($token, 14,1) ===substr($token, 17,1))
if((intval(substr($token, 1,1))+intval(substr($token, 14,1))+substr($token, 17,1))/substr($token, 1,1)===intval(substr($token, 31,1))){
echo $i."\n";}
}
?>
思路是因為token存在一個整數值,但現在不知道是多少,我假設是在10000之內,運行一下,得到422和1202然后在url后加上**?token=1202或?token=422**回車后得到flag。
我認為以后會有很多題要用腳本。
web24
<?php
/*
# -*- coding: utf-8 -*-
# @Author: h1xa
# @Date: 2020-09-03 13:26:39
# @Last Modified by: h1xa
# @Last Modified time: 2020-09-03 13:53:31
# @email: h1xa@ctfer.com
# @link: https://ctfer.com
*/
error_reporting(0);

include("flag.php");
if(isset($_GET['r'])){
$r = $_GET['r'];
mt_srand(372619038);
if(intval($r)===intval(mt_rand())){
echo $flag;
}
}else{
highlight_file(__FILE__);
echo system('cat /proc/version');
}
?>
通過seed給播種,然后通過梅森旋轉算法生成偽隨機數。如果指定seed,那么播出來的種子是固定的,生成的偽隨機數也是固定的:
mt_srand(372619038);
print(mt_rand());
?>
get傳參傳入?r=,得到flag.
web25
打開后有以下代碼
/*
# -*- coding: utf-8 -*-
# @Author: h1xa
# @Date: 2020-09-03 13:56:57
# @Last Modified by: h1xa
# @Last Modified time: 2020-09-03 15:47:33
# @email: h1xa@ctfer.com
# @link: https://ctfer.com
*/
error_reporting(0);
include("flag.php");

if(isset($_GET['r'])){
$r = $_GET['r'];
mt_srand(hexdec(substr(md5($flag), 0,8)));
$rand = intval($r)-intval(mt_rand());
if((!$rand)){
if($_COOKIE['token']==(mt_rand()+mt_rand())){
echo $flag;
}
}else{
echo $rand;
}
}else{
highlight_file(__FILE__);
echo system('cat /proc/version');
}
(seed)這個函數的意思,是通過分發seed種子,然后種子有了后,靠()生成隨機數。
這里沒有明確給出seed,因此我們需要用工具逆推出seed。
$rand = intval($r)-intval(mt_rand());
從這里我們可以判斷出,如果我們輸入的r為0access數據庫忘記密碼,那么$rand為第一個隨機數的負數,并且因為非零,在if判斷中會在else中輸出,因此我們先GET輸入?r=0,得到第一個隨機數的負數。
虛擬機打開終端輸入ls查看,得到文件,輸入* ./第一個隨機數*
bp抓包后send為php7.0以上版本
這里有三個(用php7.0版本以上運行代碼)
mt_srand(3095355977);
echo mt_rand()."\n";
echo mt_rand()+mt_rand();
三種可能都試一下,
通過代碼:
if((!$rand)){
if($_COOKIE['token']==(mt_rand()+mt_rand())){
echo $flag;
}
令r=可以使得!$rand為真,然后執行if語句,如果傳入值正確,得出flag。
利用進行get傳參,進行傳參得到flag。