933 字
5 分钟

WEB绕过类

2026-01-16
2026-04-16
浏览量 加载中...

#绕过积累:#

#eval执行命令型:#

一.#

前置条件:

if(preg_match("/[A-Za-oq-z0-9$]+/",$cmd))
if(preg_match("/\~|\!|\@|\#|\%|\^|\&|\*|\(|\)|\(|\)|\-|\_|\{|\}|\[|\]|\'|\"|\:|\,/",$cmd))
eval($cmd);

禁止: 大写字母 A-Z、小写字母 a-oq-z、数字 0-9、符号 $

禁止: 大部分常见的特殊符号。

留下: 小写字母 p.(点)、/(斜杠)、;(分号)、?(问号)、><=\(反斜杠)、|(管道符)以及 ```(反引号)

方法1:Linux 的 . (source) 命令#

在 Linux 中,. filename 等同于 source filename,可以执行文件中的内容(即使文件没有执行权限)。

过程拆解:

首先post一个由我们自己构造好的含有恶意命令的文件到服务器上去,然后通过 . (source) 匹配到这个文件,然后执行文件中的命令,而不是单纯依靠eval来执行。

这里有运用到一个php的特性:当你向一个 PHP 页面发送一个 POST 请求 且包含文件上传时,无论 PHP 代码里有没有处理上传的逻辑,PHP 引擎都会:

  1. 接收这个文件。
  2. 把它保存在服务器的临时目录下(通常是 /tmp)。
  3. 给它起一个随机名字,比如 phpXXXXXX

#php常见的绕过方式:#

1.#

isset($_GET['syc']) && preg_match('/^Welcome to GEEK 2023!$/i', $_GET['syc']) && $_GET['syc'] !== 'Welcome to GEEK 2023!'

把这段分成四个部分。

第一个部分要求传入数据给参数syc,get方法,且必须传入数据。

preg_match将我们传入给参数syc的数据跟前面的字符串作比较,/...../ 内表示正则表达^ 表示开始,$ 表示结束,i:忽略大小写

后面的又要求我们传入的数据不能完全等于Welcome to GEEK 2023!。

因为前面的虽然要求我们等,但可以大小写不同,所以只要改一个字母就行了。

2.类型转化#

intval($_GET['lover']) < 2023 && intval($_GET['lover'] + 1) > 2024

intval() 在解析字符串时,会从左往右读取,直到遇到第一个非数字字符为止。

比如:intval("1e10") 会返回 1

PHP 使用 + 运算符处理字符串和数字时,它会尝试将字符串转换为数值(float 或 int)。同时它也能识别科学计数法。

所以我们如果传入1e10,这样前面的读取数值只到1,而后面的加法得到的实际数字为1*10^10+1,当然大于2024了。

3.转化类型时的强比较哈希#

if (isset($_POST['qw']) && $_POST['yxx']) {
$array1 = (string)$_POST['qw'];
$array2 = (string)$_POST['yxx'];
if (sha1($array1) === sha1($array2))

POST方法传数据给两个参数qw和yxx,又用string将我们的数据强制转化成字符串的类型,后面又强制比较两者的哈希值必须完全一样,

因为string在将数组转化为字符串时,统一转化为Array,如果两个参数都是数组,那转化的字符串就一样了,哈希值当然就一样了。

qw[]=1&yxx[]=2

4.#

if (isset($_POST['SYC_GEEK.2023'])&&($_POST['SYC_GEEK.2023']="Happy to see you!")) {
echo $flag;

这边有些鸡贼,因为实际上后面是赋值没有作用,要看起那么的issert,我们需要对这个参数传入任意数据。

可以在 PHP 中如果我们填写的参数中存在 . 这个符号时,在实际上会被强制转化为_,比如如果我们写的是 1.2A=1 实际操作上会变成 1_2A=1。

但是又存在 如果参数名中出现 [,PHP 会将其替换为 _,但之后其它的字符(如点号)将不再被替换。这样的机制,因此我们就可以利用。

比如 SYC[GEEK.2023=1。

#php反序化绕过#

(preg_match('/[oc]:\d+:/i',$cmd))

oc匹配我们的对象。

OObjectO:8:"MyClass":...最常见的普通类对象。
CCustom ObjectC:11:"ArrayObject":...实现了 Serializable 接口的类。

:\d+:匹配我们的xxx组合。

因此 这个 主要是拦截 O:xxx:xxxC:xxx:xxx

可以利用正则不识别+,或者还可以利用数组。


  • 版权声明:本文由 余林阳 创作,转载请注明出处。

喜欢这篇文章吗?

点击右侧按钮为文章点赞,让更多人看到!

WEB绕过类
https://sliver-yu.cc/posts/秘籍/web绕过类/
作者
余林阳
发布于
2026-01-16
许可协议
CC BY-NC-SA 4.0

评论区

目录