CTFshow Web专题 信息收集与爆破


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

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是真需要在线爆破的,这几道题等未来有机会做吧


文章作者: 十二惊惶
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 十二惊惶 !
  目录