RCE

   RCE全称是remote command/code execute,即远程执行漏洞。
   在命令注入的漏洞中,最为常见的是PHP的命令注入。

  PHP命令注入攻击存在的主要原因是Web应用程序员在应用PHP语言中一些具有命令执行功能的函数时,对用户提交的数据内容没有进行严格的过滤就带入函数中执行而造成的。
  在web程序中,因为业务功能需求,需要通过web前端传递参数到后台服务器上执行(特别是一些网络设备的web管理界面),但由于开发人员没有对输入进行严格的过滤,导致攻击者可以构造一些额外的“带有非法目的”的命令,欺骗后台服务器执行,造成破坏。

传入的必须是有效的 PHP 代码,所有的语句必须以分号结尾。

assert()

(其他的略)

2.命令执行
system(),exec(),passthru()
区别:
system() 输出并返回最后一行shell结果。
exec() 不输出结果,返回最后一行shell结果,所有结果可以保存到一个返回的数组里面。
passthru() 只调用命令,把命令的运行结果原样地直接输出到标准输出设备上。
相同点:都可以获得命令执行的状态码

3.常用命令
ls 列出目录
dir 列出目录
ls / 列出根目录
cat 文件名 显示文件内容
cat /etc/passwd 显示用户信息文件
rev 反向显示文件内容(有时有奇效)
find / -name flag* 查找

4.常见过滤
(1)过滤cat,flag等关键字
代替:
more:一页一页的显示档案内容
less:与 more 类似
head:查看头几行
tac:从最后一行开始显示,可以看出 tac 是 cat 的反向显示
tail:查看尾几行
nl:显示的时候,顺便输出行号
od:以二进制的方式读取档案内容
vi:一种编辑器,这个也可以查看
vim:一种编辑器,这个也可以查看
sort:可以查看
uniq:可以查看
file -f:报错出具体内容

(2)过滤空格
%09(url传递)(cat%09flag.php)
${IFS}
$IFS$9
<>(cat<>/flag)
<(cat</flag)
{cat,flag}

RCE总结推荐博客:https://blog.csdn.net/qq_44657899/article/details/107676580

php变量覆盖

   通常将可以用自定义的参数值替换原有变量值的情况称为变量覆盖漏洞。经常导致变量覆盖漏洞场景有:$$使用不当,extract()函数使用不当,parse_str()函数使用不当,import_request_variables()使用不当,开启了全局变量注册等。 

extract()函数导致的变量覆盖问题
extract() 该函数使用数组键名作为变量名,使用数组键值作为变量值。针对数组中的每个元素,将在当前符号表中创建对应的一个变量。
语法: extract(array,extract_rules,prefix)

解题方法:将变量的值设置为空或者不存在的文件以满足xxxx==xxxx
payload例子:?flag=&liwu=

parse_str函数导致的变量覆盖问题
parse_str() 函数用于把查询字符串解析到变量中,如果没有array 参数,则由该函数设置的变量将覆盖已存在的同名变量。
语法:parse_str(string,array)

正则表达式

正则表达式(regular expression)描述了一种字符串匹配的模式(pattern),可以用来检查一个串是否含有某种子串、将匹配的子串替换或者从某个串中取出符合某个条件的子串等。

/i表示对大小写不敏感

选择
用圆括号 () 将所有选择项括起来,相邻的选择项之间用 | 分隔。
() 表示捕获分组,() 会把每个分组里的匹配的值保存起来, 多个匹配值可以通过数字 n 来查看(n 是一个数字,表示第 n 个捕获组的内容)。