ARTICLE DETAIL

建站实战干货

来自一线的建站与推广经验沉淀,每一条都经过真实交付验证。

ctf_show(web入门笔记)持续更新中

2026/10/4 4:11:34 拓冰建站 浏览量
ctf_show(web入门笔记)持续更新中

信息收集

1-2:查看源代码

3:bp抓包

4:robots.txt(这个文件里会写有网站管理者不想让爬虫的页面或其他)

5:网站源代码泄露index.phps

6:同样也是源码泄露,(拿到以后还得访问放flag的url)###可跑脚本找是哪个源代码泄露

7:.git泄露

git其中有一个目录.git,是个类似于备份目录,我们使用git的所有被追踪的操作和被操作的文件都会被记录

如果没有配置好导致.git被上线,导致可以访问.git获取源代码,那就可以白盒审计,如果获得敏感信息则直接可以获取服务器权限。

8:.svn泄露

svn是源代码管理工具,使用svn管理本地源代码时会生成一个.svn文件,如果管理员直接复制粘贴源代码没有导出,则会造成.svn泄露

9:.swp泄露

原理:在linux生产环境上使用vim或者vi或产生一个以.swp为后缀的文件,例如修改index.php文件就会生成一个index.php.swp文件(同样也属于源码泄露)####可用脚本跑

10:cookie

11:需要用nslookup命令-query=any (host)来查询域名的指定解析类型的解析记录

12:找到登录页面,网站存在敏感信息可直接获取管理员密码

13:网页最下有可下载文件里面有敏感信息以及后台网站地址

14:网站默认配置的问题,目录扫描加信息收集

15:找到登录页面看到能忘记密码重新修改但是需要管理员设置的地址,通过管理员遗留的各种信息找到比如qq邮箱,通过qq查询qq邮箱找到是哪里的

16:考察php探针,最后在phpinfo中找到flag

php探针是用php语言编写的一个程序,可以用来查看服务器的状态,比如服务器操作系统信息,服务器CPU、内存和硬盘的使用状况,php版本和组件信息,数据库版本信息,实时网速等。可以非常方便地了解服务器的运行状态

三款常用的探针:

雅黑php探针:url/tz.php

x prober:url/x.php

upupw php:url/u.php

可将这些写入目录扫描使用的字典里,可以跟方便的扫东西

17:dirsearch扫目录能扫到备份文件

18:考察简单js,可用开发者模式控制台直接执行js语句或者引导他的条件让他通过判断给出flag

19:查看源代码有PHP语句,可直接获取账户密码

20:还是备份文件下载,下载后用二进制软件解码即可

爆破

21:直接bp抓包跑字典,需base64加密

22:可用工具跑也可用浏览器找还可以用网上做好的域名查找去找

23:此题需跑脚本已经附上自写脚本

最后跑出来六个答案一个一个尝试得到答案为3j

import hashlibm = "0123456789qwertyuiopasdfghjklzxcvbnm"
# 这串英文就是24个英文字母
for i in m:for a in m:md5 = hashlib.md5()# 构造一个hashlib对象str_1 = str(i) + str(a)# 构造payloadmd5.update(str_1.encode('utf-8'))# 指定位utf-8加密方式b = md5.hexdigest()# MD5加密if b[1:2] == b[14:15] and b[14:15] == b[17:18]:print(str_1)# 输出答案

24:所以直接把它设置的复制一下拿到php在线运行网站跑一下就能得到

这一题很像是版本漏洞,通过看提示从php4.2.0开始就不用mt_scrand(seed)来播种,会自动播种,如果设置了mt_scrand(seed)并且seed有值,那就会生成伪随机数(俗称假的随机数),生成的数字就会固定。

25:这一题和上一题不一样,需要用工具跑(工具:php_mt_seed)

这里有和24题一样的漏洞,使用了mt_srand()播种就会生成特定的随机值,这里我们需要传入同样的随机值让rand的变量为零才能进入if

虽然说使用mt_rand()会生成特定的数,但是每次的使用会不一样

例如:第一次使用mt_rand()会生成123456但第二次使用mt_rand()会生成456789,但是无论刷新多少次他们都不会变

这里还需要我们传入cookie里的token值需要弱等于两个随机值相加(每一次使用,mt_rand()生成的都会不一样,本来我还想直接bp抓包爆破来着,但是显然不可行)

####这里使用工具怎么跑出来的不清楚原理,有些许复杂

这里跑出来的是mt_srand('种子')的种子,把他拿到php在线执行中去跑,直到第一次使用mt_rand()等于784681645(每个人都不一样)

例如这样:

26:直接暴力破解密码即可

27:这一题我直接用万能的bp做的

首先呢,他会验证这中间部分是否日期,如果长度或者大小都不正确的话,会直接弹窗且不发包,这里我直接用bp爆破模式添加了三个放payload的位置

这里是三个payload

28:直接bp抓包爆破,看状态码,返回200的就是存在目录,就会直接给flag

命令执行

29:有很多种方法可以使用内联法例如system('cat `ls`')或者像它提示的一样echo `nl fl""ag.php`

nl和cat的区别就是nl会列出文件内容并且带有行号

30:这里与29题原理相同只不过多禁用了一个system和php####请通过29题举一反三

31:这一题有多种解法看自身理解,答案不唯一

get嵌套

利用了eval()函数再写了一个$_GET['s']来接受变量,这样可以完全绕过所有验证

最后payload:c=eval($_GET['s']);&s=system('cat flag.php')

passthru()虽然system被禁用了但是还有很多可以调用系统命令的函数

例如:exec,shell_exec(),popen()之类的,可自行尝试

pyload:

c=passthru("c\at\$IFS\$1fla*");

最后还可以使用无参数rce,就像给的提示一样

32:这一题还是一样多种解法这里演示两种

第一种通过include包含文件

payload:

c=include$_GET["a"]?>&a=data://text/plain,<?php%20eval(system("cat%20flag.php"));?>

这个符号?>是应为防护里过滤了;符号,所以我们直接将后面的代码全部不要了直接闭合

例如:

<?php include$_GET["a"]?>preg_match("/flag|system|php|cat|sort|shell|\.| |\'|\`|echo|\;|\(/i", $c));?>

a后面使用的是伪协议也可以使用php://filter/read=convert.base64-encode/resource=flag.php

其他的伪协议也可以使用

第二种利用系统的日志文件写入代码然后访问利用(!!!这里的前提是可以访问到日志)

payload:

c=include$_GET["a"]?>&a=../../../../var/log/nginx/access.log

先随便刷新然后写入代码让日志文件记住

然后再刷新再写入我们包含日志文件的代码

bp抓包在user—agent写入代码

原理:日志文件会自动收集user—agent的信息,然后通过文件包含include命令来引用日志文件。

33-36:同样还是使用文件包含就能过,($_GET[参数],这里的参数可以是数字或者字母带小飘或者不带小飘,例如:'a'和a)

37-39:这一题用伪协议随便过(简单的文件包含)

例如:data://text/plain;base64,base64加密后的命令

如果传入参数后会有自动添加点东西可用//注释掉###如果有影响才会去注释它

例如:?c=data://text/palin,<?php%20eval(system(%27cat%20`ls`%27));?>//