信息搜集

1.web1

题目描述

开发注释未及时删除

解题思路

F12查看源代码获得flag
web1

1.web2

题目描述

js前台拦截 === 无效操作

解题思路

js前台拦截无法查看源代码
BP抓包放包得到flag(或使用curl方法)
web2
查看其他师傅WP了解的方法:
url前加view-source: 查看源代码
直接ctrl+u查看源代码
使用爬虫办法,即reaquest.get(未尝试)

1.web3

题目描述

没思路的时候抓个包看看,可能会有意外收获

解题思路

源代码并未泄露任何信息,按照hint抓包在响应头中发现flag
或F12 -> 网络 -> F5刷新界面 -> 查看响应头
web3

1.web4

题目描述

总有人把后台地址写入robots,帮黑阔大佬们引路。

解题思路

一直粘图片实在太累,开始水
根据提示访问/robots.txt(常用姿势)
记录了flag位于/flagishere.txt
直接跳转拿到flag

1.web5

题目描述

phps源码泄露有时候能帮上忙

解题思路

根据提示是phps文件泄露,phps存放着php源码,可通过尝试访问/index.phps读取
其他常见的有linux的备份文件,比如index.php.swpwww.zip

1.web6

题目描述

解压源码到当前目录,测试正常,收工

解题思路

用dirsearch扫到泄露文件/www.zip
直接访问解压得到flag路径 //flag in fl000g.txt

7.web7

题目描述

版本控制很重要,但不要部署到生产环境更重要。

解题思路

考察git代码泄露,直接访问url/.git/index.php

8.web8

题目描述

版本控制很重要,但不要部署到生产环境更重要。

解题思路

考察信息svn泄露,直接访问url/.svn/

9.web9

题目描述

发现网页有个错别字?赶紧在生产环境vim改下,不好,死机了

解题思路

考察vim缓存信息泄露,直接访问url/index.php.swp
临时文件是在vim编辑文本时就会创建的文件,如果程序正常退出,临时文件自动删除,如果意外退出就会保留,当vim异常退出后,因为未处理缓存文件,导致可以通过缓存文件恢复原始文件内容
详细说明及其他信息搜集知识可参考CTFhub-Web技能树之信息泄露

10.web10

题目描述

cookie 只是一块饼干,不能存放任何隐私数据

解题思路

参考cookie,直接抓包,在请求数据包看到flag
或F12在网络中查看请求头得到cookie值
注{ }通过了url编码 { ===%7B }===%7D

11.web11

题目描述

域名其实也可以隐藏信息,比如flag.ctfshow.com 就隐藏了一条信息
由于动态更新,txt记录会变
最终flag flag{just_seesee}

解题思路

通过dns检查查询域名 TXT 记录,一般指为某个主机名或域名设置的说明。
查找flag.ctfshow.com域名下的txt记录
推荐网站域名解析查询 阿里云网站运维检测平台

12.web12

题目描述

有时候网站上的公开信息,就是管理员常用密码

解题思路

dirsearch扫描或查看/robots.txt发现目录/admin
根据提示查看网页,发现最下面有一个特别的number 猜想可能为某个密码
登陆后台拿到flag

13.web13

题目描述

技术文档里面不要出现敏感信息,部署到生产环境后及时修改默认密码

解题思路

根据提示发现网页中帮助文档,其中泄露登陆后台和账号密码,登陆获得flag
注意把your-domain改为靶场地址
好弱智

14.web14

题目描述

有时候源码里面就能不经意间泄露重要(editor)的信息,默认配置害死人
小0day:某编辑器最新版默认配置下,如果目录不存在,则会遍历服务器根目录

解题思路

根据提示查看源码 ctrl F搜索editor(编辑器)发现/editor路径
找到文件上传可以查看全部路径,首先查看web根目录/var/www/html
发现可疑文件夹打开找到flag路径/editor/attached/file/var/www/html/nothinghere/fl000g.txt
此为相对路径,仿照源码中/upload下图片
访问绝对路径/nothinghere/fl000g.txt

15.web15

题目描述

公开的信息比如邮箱,可能造成信息泄露,产生严重后果

解题思路

跳转/admin发现后台登陆
按照提示使用邮箱作为密码登陆失败
回答密保问题重置密码,社工QQ号IP地址为西安
重置密码后登陆获得flag

16.web16

题目描述

对于测试用的探针,使用完毕后要及时删除,可能会造成信息泄露

解题思路

考察PHP探针php探针是用来探测空间、服务器运行状况和PHP信息用的,探针可以实时查看服务器硬盘资源、内存占用、网卡 流量、系统负载、服务器时间等信息。 url后缀名添加/tz.php 版本是雅黑PHP探针,然后查看phpinfo搜索flag

17.web17

题目描述

备份的sql文件会泄露敏感信息

解题思路

根据提示备份的sql文件泄露敏感信息
常用访问backup.sql(或用dirsearch可以扫到)

18.web18

题目描述

不要着急,休息,休息一会儿,玩101分给你flag

解题思路

是我喜欢(❤ ω ❤)的游戏题,玩到101分拿到flag,看这个速度和判定根本不可能
查看源代码发现是纯前端的JS脚本控制
找到flag的出现条件

1
2
3
4
5
6
7
if(score>100)
{
var result=window.confirm("\u4f60\u8d62\u4e86\uff0c\u53bb\u5e7a\u5e7a\u96f6\u70b9\u76ae\u7231\u5403\u76ae\u770b\u770b");
}
else
{
var result=window.confirm("GAMEOVER\n是否从新开始");

控制台运行
alert('\u4f60\u8d62\u4e86\uff0c\u53bb\u5e7a\u5e7a\u96f6\u70b9\u76ae\u7231\u5403\u76ae\u770b\u770b')
弹出提示框到/101.php拿到flag

19.web19

题目描述

密钥什么的,就不要放在前端了

解题思路

查看源代码看到注释掉的js脚本(绕过前端直接提交密码哈希大大简化步骤)

1
2
3
4
5
6
7
$flag="fakeflag"
$u = $_POST['username'];
$p = $_POST['pazzword'];
if(isset($u) && isset($p)){
if($u==='admin' && $p ==='a599ac85a73384ee3219fa684296eaa62667238d608efa81837030bd1ce1bf04'){
echo $flag;
}

hackbar以POST形式传入u和p以获得flag
username=admin&pazzword=a599ac85a73384ee3219fa684296eaa62667238d608efa81837030bd1ce1bf04

未简化版本
若隐藏以上JS脚本,我们已知AES加密函数,密文,密钥,偏移量,可解码获得明文
密码学会不了一点
直接使用解密网站
加密模式:CBC 填充:zeropadding 密钥:0000000372619038
偏移量:ilove36dverymuch 输出:hex 字符集:UTF-8
密文:a599ac85a73384ee3219fa684296eaa62667238d608efa81837030bd1ce1bf04
解出密码:i_want_a_36d_girl 直接登录即可(楽)

20.web20

题目描述

mdb文件是早期asp+access构架的数据库文件,文件泄露相当于数据库被脱裤

解题思路

打开靶机发现提示asp程序,access数据库
mdb文件是早期asp+access构架的数据库文件 直接查看url路径添加/db/db.mdb
下载文件通过txt打开或者通过EasyAccess.exe打开搜索flag
或使用diesearch扫描到/db目录,进一步扫描也可发现/db/db.mdb文件


爆破

21.web21

题目描述

爆破什么的,都是基操

解题思路

本题给出密码本,BP抓包发现采用basic认证,发送到Intruder准备爆破
先确定变量位置,发现采用了base64编码
设置payload,加载密码本,设置前缀(Prefix)为admin:
采用base64-encode
注意顺序并取消特殊符号的编码
开始爆破找到状态码为200的即为成功,发包得到flag

22.web22

题目描述

域名也可以爆破的,试试爆破这个ctf.show的子域名

解题思路

原题中flag所在的子域名应该已经失效
主要理解搜集子域名的意义
推荐一个子域名爆破网站

23.web23

题目描述

还爆破?这么多代码,告辞!

解题思路

代码审计,直接编写PHP脚本得到token值,源码中php可以直接使用

1
2
3
4
5
6
7
8
9
10
11
12
<?php
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= ',$i;
}
}
}
#$i= 422
#$i= 1202

GET方式传入token得到flag

24.web24

题目描述

爆个🔨

解题思路

代码审计,发现用PHP随机数生成函数且种子固定
因此生成的伪随机数固定
编写php脚本(注意token错误可能是因为php版本问题)

1
2
3
4
5
<?php
mt_srand(372619038);
echo intval(mt_rand());

#1155388967

25.web25

题目描述

爆个🔨,不爆了

解题思路

这题需要看懂逻辑(终于有个有意思的了),先分析以下源码

1
2
3
4
5
6
7
8
9
10
11
12
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;
}
}

$rand = intval($r)-intval(mt_rand());当传入r=0时,可输出生成第一个随机数的负值(因flag随机生成,随机数每次不同)
接下来我们要用生成的第一个随机数反推随机数种子随机数种子反推工具
在kali上编译并运行工具
得到随机数种子(不同php版本有差异)
接下来编写php脚本验证种子正确性并得到第二、三个随机数之和

1
2
3
4
5
6
7
<?php
mt_srand(0x04a34661);
echo mt_rand();
echo ' ';
echo mt_rand()+mt_rand();

#2085542740 2190553804

搞定!payload:?r=2085542740 cookie:token=2190553804

26.web26

题目描述

这个可以爆

解题思路

由于出题人底层代码错误,直接连接也可链接到数据库
抓包放包可获得flag
也可像web21一样爆破,不再赘述

27.web27

题目描述

CTFshow菜鸡学院招生啦!

解题思路

该题为一个教务管理系统,但是并不知道学生的学号和密码
但下方给出了录取名单 身份证621022********5237中有八位被遮挡
思路清晰,要爆破可用的身份证
这里要会写身份证检验的脚本,能大大减少爆破的数据量

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
#include <iostream>
using namespace std;

bool checkCard(int ID[18])
{
int list[] = { 7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2 };
int src[] = { 1,0,10,9,8,7,6,5,4,3,2 };
int sum = 0;
for (int i = 0; i < 17; i++)
{
sum += list[i] * ID[i];
}
sum = sum % 11;
if (src[sum] == ID[17]) return true;
else return false;
}

int main()
{
int id[18] = { 6,2,1,0,2,2,0,0,0,0,0,0,0,0,5,2,3,7 };
for (int y = 1990; y < 2024; y++)
{
id[6] = y / 1000;
id[7] = y / 100 % 10;
id[8] = y / 10 % 10;
id[9] = y % 10;
for (int m = 1; m < 13; m++)
{
if (m < 10)
{
id[10] = 0;
id[11] = m;
}
else
{
id[10] = 1;
id[11] = m % 10;
}
for (int d = 1; d < 31; d++)
{
id[12] = d / 10;
id[13] = d % 10;
if (checkCard(id))
{
for (int i = 0; i < 18; i++)
cout << id[i];
cout << endl;
}
}
}
}
}

可用数据大概有一千多条,抓包爆破找到反常长度的返回即可获得flag

28.web28

题目描述

大海捞针

解题思路

进去发现毫无提示,真是大海捞针
不过既然原域名发生重定向到/0/1/2.txt,又属于爆破题(注意爆破时要将2.txt改为默认文件index.php)
可以想到BP抓包爆破域名
/0~100/0~100
爆破后在/72/10/index.php返回状态码200
拿到flag