第八天作业
1.在vps安装docker和docker-compose
2.上课涉及的vulhub中的漏洞,全部复现,同时说明漏洞成因
3.总结RCE漏洞的原理和利用条件及解决方案
一、在vps安装docker和docker-compose
1.安装docker
以Linux为例,其他Linux发⾏版操作基本⼀致。
apt install docker.io -y
安装完成后,需要启动Docker服务。使⽤以下命令来启动Docker服务,并将其设置为开机⾃启:
systemctl start docker
systemctl enable docker
由于⽹络原因,下载Docker镜像时可能会很慢。为了加快下载速度,你可以配置Docker加速器。编辑或创建 /etc/docker/daemon.json ⽂件,并添加以下内容
{
"registry-mirrors": ["http://hub-mirror.c.163.com"]
}
2.安装docker-compose
Docker Compose是⼀个⽤于定义和运⾏多容器Docker应⽤程序的⼯具。可以直接通过通过apt命令下载docker-compose
apt-get install docker-compose
二、vulhub漏洞复现
1.Tomcat弱口令及后台getshell 漏洞复现
先在vulhub中打开漏洞环境,进入漏洞目录,输入docker-compose up -d
输入docker ps查看该漏洞环境对应的端口号,查看到端口号为8080
进入到漏洞环境tomcat,此处尝试用tomcat弱口令进行登录,也可以使用爆破工具进行登录
找到漏洞存在点,此处可以上传一个war包,war是一个可以直接运行的web模块,通常用于网站,打成包部署到容器中。以Tomcat来讲,将war包放置在其\webapps\目录下,然后启动Tomcat,这个包就会自动解压,就相当于发布了。
创建一个shell.jsp木马文件,使用命令生成war包,并将该war包上传到tomcat后台。
jar -cvf shell.war shell.jsp
使用蚁剑,添加数据,对木马文件进行连接。
漏洞成因
tomcat使用了默认密码,存在弱口令漏洞。同时tomcat没有对上传的war包内容进行检查。
2.weblogic弱口令/任意文件读取
弱口令
打开漏洞环境,并查看端口号
使用ip+端口/console访问登录页面
此处存在弱口令漏洞,可以使用默认口令weblogic/Oracle@123进行登录
常见弱口令:
system:password weblogic:weblogic admin:secruity
joe:password mary:password system:sercurity
wlcsystem: wlcsystem weblogic:Oracle@123
任意文件读取
任意文件读取
http://47.97.58.250:7001/hello/file.jsp?path= #文件路径
例如将文件路径改为/etc/passwd,即可读取到敏感文件。
漏洞成因
环境存在任意文件读取漏洞,服务器没有对用户的输入做过滤和限制,导致可利用此漏洞读取任意文件。
3.apache换行解析/druid RCE
3.1 apache换行解析
进入vulhub下httpd目录,打开CVE-2017-15715漏洞环境
使用命令docker-compose up -d
打开环境
访问目标网页,使用冰蝎生成php木马文件进行上传,可以发现提示bad file,上传失败
通过修改后缀名为png文件,再通过burp suite进行抓包再修改文件名后缀,进行重放,可以发现仍然提交失败,猜测是后端进行验证文件类型。
了解到解析php文件时,如果文件名后缀有一个换行符\x0a,apache仍然会将其作为php进行解析,于是尝试在上传文件时,在后缀php后加上换行符进行解析,在burpsuite中查看请求体的十六进制,找到上传点,在后面加上0a。
重放后可以发现上传成功,此处再用冰蝎进行连接。
漏洞成因
apache在解析php文件时,如果后缀名有换行符\x0a,则会当作正常php文件进行解析,导致了apache换行解析漏洞。
3.2 druid RCE
进入vulhub下apache-druid目录,打开CVE-2021-25646漏洞环境
使用命令docker-compose up -d
打开环境
进入到环境界面:
进入Druid console控制台界面
添加以下内容:
Base directory: quickstart/tutorial/
File filter: wikiticker-2015-09-12-sampled.json.gz
打开burpsuite进行抓包,点击apply,修改post请求内容,成功执行了js中的命令
漏洞成因
Druid是一个常用的数据库连接池组件,在某些版本中,由于未对外部输入进行充分验证和过滤,攻击者可以通过构造恶意请求,利用Druid的某些功能执行任意代码,从而控制服务器。
三、总结RCE漏洞的原理和利用条件及解决方案
1.RCE漏洞原理
代码执行漏洞
传入php代码到执行函数的变量,客户端可控,并且没有做严格的过滤,攻击者可以随意输入他想执行的代码,并且这些代码在服务端执行
命令执行漏洞
应用在调用这些函数执行系统命令的时候,如果将用户输入作为系统命令的参数拼接到命令行中,如果没对用户的输入进行过滤的话,就会造成命令执行漏洞
2.利用条件
1.开发人员调用了能够执行代码命令或者系统命令的函数
例如:
代码执行漏洞相关函数
eval() 将字符串当作php代码执行
assert() 将字符串当作php代码执行
preg_replace() 将字符串正则匹配后替换
call_user_func() 回调函数
array_map() 回调函数
系统命令执行漏洞相关函数
system() 将字符串当作os命令执行
exec() 将字符串当作os命令执行,但只输出命令执行的最后一行,约等于没有回显
shell_exec() 将字符串当作os命令执行
passthru() 将字符串当作os命令执行
popen() 能过执行os命令,相当于把命令执行结果输出到一个文件内
2.用户输入的数据被用作这些函数的参数,并且这些参数没有经过严格的过滤或验证。
3.应用程序有足够的权限去执行一些敏感操作
3.解决方案
1.尽量不要使用eval等危险函数的使用,如果要是使用则要进行严格的过滤
2.preg_replace()函数放弃使用/e修饰符
3.尽量减少危险函数的使用,并在php.ini配置文件中disable_functions中禁用
disable_functions=system,assert
4.参数值尽量用引号包裹,并在拼接前调用addslashes() 进行转义
一些敏感操作