远程代码注入漏洞
原理
攻击者可利用代码注入漏洞执行任意代码,来操作服务器
危害
执行任意代码,来操作服务器
操作数据库,插入恶意数据,可能获取 系统权限
攻击修改系统配置,修改网络配置,可能对 服务器及网络造成影响
可以进一步对网络渗透,由于代码注入攻击多半可获取系统权限,对网络的进一步渗透难度大大降低
代码执行、文件读取、命令执行的函数:
文件执行:eval、call_user_func、call_user_func_array 、assert()等
文件读取:fopen()、readfile()、fread()、file()、show_source()等
命令执行:system()、exec()、shell_exec()、passthru()、pcntl_exec() 等;“反引号()
反引号()
实际调用的shell_exec()函数
防御
敏感函数禁用
变量过滤或固定
WAF产品
修复方法
不需要执行远程代码时,可以修改php.ini配置:allow_url_fopen = Off allow_url_include = Off
不要直接导入用户输入的内容
执行代码的参数,或文件名,禁止和用户输入相关,只能由开发人员定义代码内容,用户只能提交“1、2、3”等参数,代表相应代码。
命令执行漏洞
原理:
攻击者通过web应用执行系统命令,获得敏感信息,进而控制服务器攻击内网。
产生条件
应用调用执行命令的函数
将用户输入的内容作为系统参数拼接到命令中
没有对用户输入的内容过滤或过滤不严格
产生原理
应用有时需要调用一些执行系统命令的函数,如PHP中的system、exec、shell_exec、passthru、popen、proc_popen等,当用户能控制这些函数中的参数时,就可以将恶意系统命令拼接到正常命令中,从而造成命令执行攻击。
防御方法
少用执行命令的函数或者禁用
参数值使用引号包括,并在拼接前调用addslashes函数进行转义
在使用动态函数前,确保使用的函数是指定的函数之一
在进入执行命令的函数方法之前,对参数进行过滤,对敏感字符进行转义
对于可控点是程序参数的情况下,使用escapeshellcmd函数进行过滤
严格控制文件名参数值,先判断文件名或文件路径是否合法
危害
继承Web服务程序的权限去执行系统命令或读写文件。
反弹shell(就是控制端监听在某个端口,被控制发起请求到该端口,并将其命令行的输入输出转到控制端)
控制整个网站甚至控制服务器。
为什么需要反弹shell?
反弹shell通常用于被控端因防火墙受限、权限不足、端口被占用等情形。在渗透过程中,往往因为端口限制而无法直连目标机器,此时需要通过反弹shell来获取一个交互式shell,以便继续深入。
进一步内网渗透
命令执行漏洞怎么发现?
通过nessus扫描器的Sitemap模块,发现了可疑目录
根据sitemap的目录信息,打开URL:http://x.x.x.x:28076/file/,发现存在未授权访问漏洞,逐个查看里面的文件,蒙了一下dirFiles.jsp的 参数,使用"path"作为参数名可列出目录、文件信息,URL,同样的方法,发现show.jsp存在任意文件读取漏洞
修复方法:
严格控制文件名参数值,先判断文件名或文件路径是否合法可修复漏洞
标签:shell,函数,命令,代码,exec,漏洞,代码执行,执行 From: https://www.cnblogs.com/xlvbys/p/17588831.html