CTFshow Web专题 信息收集与爆破
[TOC]
专题一:信息收集
Web1 查看源代码
<!DOCTYPE HTML>
<html>
<head>
<meta charset="utf-8">
<title>CTFshow 新手入门题目 </title>
<script type="text/javascript">
</script>
</head>
<body>
<h3>web1:where is flag?</h3>
<!-- ctfshow{418fd421-31a2-44c7-b090-eae2e3d9f190} -->
</body>
</html>
直接查看源代码得到flag
Web2 无法查看源代码
这道题应该是通过JS代码阻止了右键及F12打开源代码的方式。在前面添加 view-source: 就可以查看源代码,也可以通过浏览器打开开发者工具打开源代码查看
js前台拦截 === 无效操作
<!DOCTYPE HTML>
<html>
<head>
<meta charset="utf-8">
<title>CTFshow 新手入门题目 </title>
<script type="text/javascript">
window.oncontextmenu = function(){
return false
};
window.onselectstart = function(){
return false
};
window.onkeydown = function(){
if (event.keyCode==123{
event.keyCode=0;
event.returnValue=false;
}
};
</script>
</head>
<body>
<h3>无法查看源代码</h3>
<!-- ctfshow{8748abc0-85ba-4381-b24c-833405c13b51} -->
</body>
</html>
Web3 响应头
题目的官方解法是通过burpsuite抓包 flag在返回的响应头里面。但是抓包什么的确实是麻烦,F12重放一下就能直接看到其响应标头里有flag字段…
HTTP/1.1 200 OK
Server: nginx/1.20.1
Date: Sun, 04 May 2025 02:52:07 GMT
Content-Type: text/html; charset=UTF-8
Transfer-Encoding: chunked
Connection: keep-alive
Flag: ctfshow{ba094d65-c5a8-4865-9d2e-9c82cc7d8111}
X-Powered-By: PHP/7.3.11
Access-Control-Allow-Methods: GET,POST,PUT,DELETE,OPTIONS
Access-Control-Allow-Credentials: true
Access-Control-Expose-Headers: Content-Type,Cookies,Aaa,Date,Server,Content-Length,Connection
Access-Control-Allow-Headers: DNT,X-CustomHeader,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Authorization,x-auth-token,Cookies,Aaa,Date,Server,Content-Length,Connection
Access-Control-Max-Age: 1728000
Content-Encoding: gzip
Web4 Robots
提示 总有人把后台地址写入robots
考点是robots.txt文件,直接访问url/robots.txt获得flag
User-agent: *
Disallow: /flagishere.txt
ctfshow{99fc0267-7746-420c-b4b5-7870443cb671}
关于robot协议
Robots协议(也称为爬虫协议、机器人协议等)的全称是“网络爬虫排除标准”RobotsExclusionProtocol,网站通过Robots协议告诉搜索引擎哪些页面不能抓取。
怎么说呢?Robots协议是一种君子协议, 并不是一个规范,而只是约定俗成的,所以并不能保证网站的隐私
Web5 phps源码泄露
phps文件就是php的源代码文件,通常用于提供给用户直接通过Web浏览器查看php代码的内容
访问index.php就是当前页面 根据提示源码泄露也就是这个页面
直接访问index.phps
<?php
//ctfshow{0ba6ef57-c77d-4637-8b84-79f5be8058b3}
echo "web5:where is flag ?"
获得flag
Web6 代码泄露
#解压源码到当前目录,测试正常,收工
在网站的升级和维护过程中,通常需要对网站中的文件进行修改。此时就需要对网站整站或者其中某一页面进行备份。当备份文件或者修改过程中的缓存文件因为各种原因而被留在网站 web 目录下,而该目录又没有设置访问权限时,便有可能导致备份文件或者编辑器的缓存文件被下载,导致敏感信息泄露,给服务器的安全埋下隐患。该漏洞的成因主要有是管理员将备份文件放在到 web 服务器可以访问的目录下。
该漏洞往往会导致服务器整站源代码或者部分页面的源代码被下载,利用。源代码中所包含的各类敏感信息,如服务器数据库连接信息,服务器配置信息等会因此而泄露,造成巨大的损失。被泄露的源代码还可能会被用于代码审计,进一步利用而对整个系统的安全埋下隐患。常见的备份文件后缀有:.rar .zip .7z .tar.gz .bak .swp .txt
首先使用dirsearch 进行目录扫描 发现当前目录下有一个/www.zip的文件 这大概率就是备份文件了
按照提示,可以知道www.zip文件应该是直接落在根目录里了,直接访问url/www.zip,获得flag
Web7 git代码泄露
版本控制很重要,但不要部署到生产环境更重要
使用dirsearch 进行目录扫描 发现当前目录下有一个 .git 的文件 ,访问即可获得Flag
考察git代码泄露
- Git是一个开源的分布式版本控制系统 简单的理解为Git 是一个内容寻址文件系统,也就是说Git 的核心部分是键值对数据库
- 当我们向Git仓库中插入任意类型的内容,它会返回一个唯一的键,通过该键可以在任意时刻再次取回该内容Git是一个可以实现有效控制应用版本的系统,但是在一旦在代码发布的时候,存在不规范的操作及配置,就很可能将源代码泄露出去
- 一旦攻击者或者黑客发现这个问题之后,就可能利用其获取网站的源码、数据库等重要资源信息,进而造成严重的危害
- 在配置不当的情况下,可能会将“.git”文件直接部署到线上环境,这就造成了git泄露问题。攻击者利用该漏洞下载.git文件夹中的所有内容。如果文件夹中存在敏感信息,通过白盒的审计等方式就可能直接获得控制服务器的权限和机会
ctfshow {df8cb0a8-5b55-48ce-a8b8-e2ab31a31069}
Web8 svn泄露
使用dirsearch 进行目录扫描 发现当前目录下有一个 .svn 的文件 ,访问即可获得Flag
- 题目考察信息svn泄露
SVN 是源代码管理软工具。 使用SVN管理本地代码过程中,将生成名为.svn的隐藏文件夹,包含重要的源码信息。 当网站管理员在发布代码时,没有使用导出功能,直接进行复制粘贴,导致出现SVN信息泄露漏洞
Web9 vim缓存信息泄露
发现网页有个错别字?赶紧在生产环境vim改下,不好,死机了
考察vim缓存信息泄露,直接访问url/index.php.swp
临时文件是在vim编辑文本时就会创建的文件,如果程序正常退出,临时文件自动删除,如果意外退出就会保留,当vim异常退出后,因为未处理缓存文件,导致可以通过缓存文件恢复原始文件内容
以 index.php 为例:
- 第一次产生的交换文件名为 .index.php.swp
- 再次意外退出后,将会产生名为 .index.php.swo 的交换文件
- 第三次产生的交换文件则为 .index.php.swn
Web10 Cookie
cookie 只是一块饼干,不能存放任何隐私数据
直接F12,在请求数据包,在cookie里面就有flag
HTTP/1.1 200 OK
Server: nginx/1.20.1
Date: Sun, 04 May 2025 03:22:13 GMT
Content-Type: text/html; charset=UTF-8
Transfer-Encoding: chunked
Connection: keep-alive
Set-Cookie: flag=ctfshow%7B01dcb521-4f5e-428c-97e2-31a4c93ce865%7D
X-Powered-By: PHP/7.3.11
Access-Control-Allow-Methods: GET,POST,PUT,DELETE,OPTIONS
Access-Control-Allow-Credentials: true
Access-Control-Expose-Headers: Content-Type,Cookies,Aaa,Date,Server,Content-Length,Connection
Access-Control-Allow-Headers: DNT,X-CustomHeader,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Authorization,x-auth-token,Cookies,Aaa,Date,Server,Content-Length,Connection
Access-Control-Max-Age: 1728000
Content-Encoding: gzip
Web11 域名隐藏信息
域名其实也可以隐藏信息,比如ctfshow.com 就隐藏了一条信息
这个我确实是第一次知道, 通过dns检查查询flag https://zijian.aliyun.com/ TXT 记录,一般指为某个主机名或域名设置的说明。
Web12
有时候网站上的公开信息,就是管理员常用密码
这个算是有些社会工程学的内容了,账号admin加弱密码,虽然对专业用户来讲不怎么现实,但是真的不是每个人都是专业用户,在一些高校,特别是高校下属的二级学院,学院官网的管理员账号就是admin+办公室电话号,这种其实是十分不安全的。
Web13 技术文档泄露
#技术文档里面不要出现敏感信息,部署到生产环境后及时修改默认密码
在页面下面发现 document.png下载发现里面存在后台地址和用户名密码登录成功获 得flag
Web14 editor
有时候源码里面就能不经意间泄露重要的信息,默认配置害死人
泄露重要 editor 的信息 直接在url后面添加/editor,上传图片时,editor可以上传服务器内的内容 找到flag所在文件即可
/nothinghere/fl000g.txt
Web15
访问/admin页面 发现有一个忘记密码操作,需要输入地址,在主页面下面看到QQ邮箱,通过QQ号查询邮箱,是西安的 修改密码成功,用户名 admin 登录成功获得flag。
这个还是算是一种社会工程吧,这个拓展的说一下,像QQ的密保一样,那个密保的部分问题甚至在QQ号的公开信息上能够找到。
Web16
对于测试用的探针,使用完毕后要及时删除,可能会造成信息泄露
考察PHP探针php探针是用来探测空间、服务器运行状况和PHP信息用的,探针可以实时查看服务器硬盘资源、内存占用、网卡 流量、系统负载、服务器时间等信息。 url后缀名添加/tz.php 版本是雅黑PHP探针,然后查看phpinfo搜索flag
Web17 备份SQL文件泄露敏感信息
备份的sql文件会泄露敏感信息
直接目录扫描 发现backup.sql 这就是一个sql的备份文件,查看backup.spl就行
这道题和.git .svn泄露差不多 不小心将重要的文件放到了网站目录下 从而导致敏感信息泄露
Web18 游戏
玩到101分给你flag…
这种游戏题是肯定无法通过玩获取的,这个题是通过前段JS进行的控制,众所周知前段JS什么都控制不了
if(score>100){
var result=window.confirm("\u4f60\u8d62\u4e86\uff0c\u53bb\u5e7a\u5e7a\u96f6\u70b9\u76ae\u7231\u5403\u76ae\u770b\u770b");
}
编译一下,就能知道 你赢了去110.php看一看
, 访问110.php得到FLAG
Web19 前端密钥泄露
密钥不要放在前端
根据提示很明显秘钥放在前端了,查看源码 js 以及注释 发现密码必须是给定的一个值才可以得到flag 这个给定的值是通过AES加密得到的 AES的密钥以及偏移量都给出了 从而求出密码原始值
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<meta http-equiv="content-type" content="text/html; charset=utf-8">
<meta name="renderer" content="webkit"/>
<script src="js/jquery.min.js"></script>
<script src="js/crypto.js"></script>
<script src="js/cipher-core.js"></script>
<script src="js/aes.js"></script>
<script src="js/zero.js"></script>
<title>ctfshow web入门 web19</title>
</head>
<body>
<form action="#" method="post" id="loginForm" >
用户名:<input type="text" name="username"><br>
密 码:<input type="password" name="pazzword" id="pazzword"><br>
<button type="button" onclick="checkForm()">提交</button>
</form>
</body>
<script type="text/javascript">
function checkForm(){
var key = "0000000372619038";
var iv = "ilove36dverymuch";
var pazzword = $("#pazzword").val();
pazzword = encrypt(pazzword,key,iv);
$("#pazzword").val(pazzword);
$("#loginForm").submit();
}
function encrypt(data,key,iv) { //key,iv:16位的字符串
var key1 = CryptoJS.enc.Latin1.parse(key);
var iv1 = CryptoJS.enc.Latin1.parse(iv);
return CryptoJS.AES.encrypt(data, key1,{
iv : iv1,
mode : CryptoJS.mode.CBC,
padding : CryptoJS.pad.ZeroPadding
}).toString();
}
</script>
<!--
error_reporting(0);
$flag="fakeflag"
$u = $_POST['username'];
$p = $_POST['pazzword'];
if(isset($u) && isset($p)){
if($u==='admin' && $p ==='a599ac85a73384ee3219fa684296eaa62667238d608efa81837030bd1ce1bf04'){
echo $flag;
}
}
-->
</html>
前端查看源代码,post提交用户名密码 …
Web20 mdb文件
mdb文件是早期asp+access构架的数据库文件
貌似前几年比较多,数据库作为文件进行保存,大多数直接保存在db目录下
使用dirsearch 进行目录扫描 发现当前目录下有一个 .db/db.mdb 的文件
直接查看url路径添加/db/db.mdb 下载文件通过txt打开或者通过EasyAccess.exe打开搜索flag
flag{ctfshow_old_database}
专题二:爆破
关于这个专题,至少我做的很难受…CTFshow因为之前受到了攻击,现在限制了访问频率…这导致爆破这个专题的几道题目做着极其困难,每分钟10次就21题那个库还有4000+的密码量,爆破需要六个以上小时…
Web21
Payload set ---->custom iterator(自定义迭代器)
Web22
题有问题 答案平台直接给了
flag{ctf_show_web}
Web23 还爆破?这么多代码,告辞!
<?php
error_reporting(0);
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__);
}
?>
写一个对应的脚本即可 看看哪些数可以满足题目条件
<?php
error_reporting(0);
for ($i=0;$i<1000000;$i=$i+1){
$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";
}
}
}
web24
<?php
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');
}
?>
写一个脚本看看随机数的值为多少
<?php
mt_srand(372619038);
echo mt_rand();
?>
得到1155388967 传参成功
后续25-28是真需要在线爆破的,这几道题等未来有机会做吧