Brainfuck靶机渗透实践-rsa算法和维吉尼亚解密
hackthebox是一个在线的渗透平台,通过渗透获取邀请码,即可在这个平台上注册一个账号。
该平台的在线靶机一共20台,每周会下线一台靶机,如果靶机下线了呢,分数就会全部清空。而成功渗透靶机就能获取一定的分数,分数够了就能提升等级。
在线的靶机都是没有writeup的,所以你的等级很大程度可以证明你的渗透实战能力。
该平台一共7个用户等级,刚注册是等级Noob:
- Noob 无知者
- script kiddle 脚本小子
- hacker 黑客
- Pro hacker 专业黑客
- Elite Hacker 精英黑客
- Guru 大师
- Omniscient (最高等级)无所不知者
靶机的分数为20-50分
- 20分-easy 简单
- 30分-medium 中等难度
- 40分-hard 困难的
- 50分-Insane 疯狂的
下面介绍关于过期的机器Brainfuck的渗透过程,难度等级为hard。
扫描
用脚本扫描,好处是不用每次输入很多命令。运行以下脚本,输入IP:10.10.10.17
,即可扫描udp和tcp的65535个端口,以及端口的版本。
1 |
|
以下是扫描结果:
1 |
|
smtp(简单邮件传输协议)枚举存在用户
smtp-user-enum -M VRFY -U /usr/share/metasploit-framework/data/wordlists/unix_users.txt -t 10.10.10.17
web分析
访问地址https://10.10.10.17
1 |
|
nmap、nikto,都显示了域名:commonName=brainfuck.htb
同样也可以用sslyze查询域名。
1 |
|
- 用burp,将host修改为brainfuck.htb,可以看到nginx 默认配置页面变成了另一个页面。
访问https://brainfuck.htb/,可以看到wordpress站
修改/etc/hostsecho 10.10.10.17 brainfuck.htb sup3rs3cr3t.brainfuck.htb www.brainfuck.htb>> /etc/hosts
分析三个域名的网页
访问:https://brainfuck.htb/,https://www.brainfuck.htb,https://sup3rs3cr3t.brainfuck.htb
wordpress扫描器——wpscan
1 |
|
该扫描器发现了4个插件漏洞。主要是“WP Support Plus Responsive Ticket System”
searchsploit
searchsploit WP Support Plus Responsive
1 |
|
经过测试,找到了可用exp
wordpress插件“WP Support Plus Responsive Ticket System 7.1.3”提权漏洞。https://www.exploit-db.com/exploits/41006
你可以无需知道密码以任何用户名登陆,因为使用函数wp_set_auth_cookie()的方式不正确。
漏洞利用
将以下表单,保存为exp.html
1 |
|
用python开启本地服务器
点击exp.html,跳转到一个表单,点击Login
稍等一会儿,然后访问wordpress的管理页面https://brainfuck.htb/wp-admin
,发现我们进行漏洞利用成功了。
获得web后台权限
登陆wordpress表单后,网站后台获得一个口令。
orestis
| kHGuERB29DNiNE
获得了一个口令,然后我们用这个口令登入143端口,这是IMAP服务。Internet Message Access Protocol(互联网邮件访问协议)
简便起见,我们使用图形化界面的邮件客户端。
配置IMAP客户端
1 |
|
得到了一个论坛的口令,在论坛https://sup3rs3cr3t.brainfuck.htb/
以该口令登陆,然后看到了一些编码后的信息。
搜索Vigenere加密(维吉尼亚密码),在在线网站http://www.dcode.fr/vigenere-cipher进行解密
维吉尼亚密码
在一个凯撒密码中,字母表中的每一字母都会作一定的偏移,例如偏移量为3时,A就转换为了D、B转换为了E……而维吉尼亚密码则是由一些偏移量不同的恺撒密码组成。
为了生成密码,需要使用表格法。这一表格包括了26行字母表,每一行都由前一行向左偏移一位得到。具体使用哪一行字母表进行编译是基于密钥进行的,在过程中会不断地变换。
破译维吉尼亚密码的关键在于它的密钥是循环重复的。如果我们知道了密钥的长度,那密文就可以被看作是交织在一起的凯撒密码,而其中每一个都可以单独破解。使用卡西斯基试验和弗里德曼试验来得到密钥的长度。
将图中的字符串解密,得到了一个http地址,下载文件后,发现是ssh密钥。https://10.10.10.17/8ba5aa10e915218697d1c658cdee0bb8/orestis/id_rsa
1 |
|
尝试连接,发现需要密码。于是我们用john爆破密码。
http://grayhat.shoutwiki.com/wiki/SSH_tricks,这篇blog提到的方法,可以破解id_rsa的密钥。
1 |
|
获得user权限
接下来准备提取root权限,我们看到目录下,有一个c代码,将/root/root.txt
(这个是我们想要获取的flag)进行编码,生成了debug.txt
在这里,我们需要知道一点RSA算法。 https://zh.wikipedia.org/wiki/RSA
跟我复习一下RSA算法的原理。
P、Q是随意选择的两个质数(越大越安全)
e是随意选择的一个整数,e与m(m与p和q相关)互为质数。
n是pq的乘积。
公布的数是n和e,其他的数字作为私钥不公布。
注意,这里总共提到了四个数PQNE,PQ是随意选择的质数,
m与PQ相关,e与m相关,n是PQ之积
也就是说只有三个数是规定的,pqe
而在代码中,将pqe这三个数写入了debug.txt
1 |
|
于是我们来查看一下debug.txt
写一段python代码,将output.txt “Encrypted Password:”这一段密码解密,通过参数pqe(debug.txt给出)以及rsa算法解密,即可得到flag。