week6
第六周
工具安装
这里首先安装一些后续要使用的工具
1、gobuster |
这也是一个目录爆破的工具,然后这里kali的话默认不安装,我们直接输入命令会提示是否安装,输入y即可。
2、seclists #这是一个字典大合集,也是输入命令然后选择y安装即可。 |
默认的安装目录在
/usr/share/seclists/
其中Discovery里面就有web目录的字典Web-Content
可以看到非常多的字典
信息收集
不多说。
这里可以发现80端口开启了http服务,那么就可以通过浏览器去进行访问测试。
进来发现只有一个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 |
最后我们扫描结果可以发现一个secret
目录,然后就没有其他的情况了。还有一个robots.txt
这里直接去访问secret
也是空白的页面。然后这里我们查看源代码也是没有东西的,那么我们是可以进行二级目录的爆破的。
我们在实战中也是可以这样使用的,深度爬取是非常有必要的。有利于我们发现更多的信息
这里可以发现扫描出现一个evil.php
,名字就是那种恶意php文件。但是方式依旧是空白的,这里我们就需要使用到另一种攻击手段。
Fuzz 参数
打点
我们都知道php前后端交互主要通过传参。
比如
http://example.com/hello.php?a=b
,参数为a,值为b。那么如果我们访问页面空白但是存在这么一个php文件的话,我们可以通过去爆破参数有可能就可以触发它的一些处理逻辑。
这里参数名字典在我们安装的seclists
内已经存在,参数值字典的话我们可以自己手动定义一个。
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 /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页面,所以直接指定即可。
这里可以看到成功fuzz出一个参数command
输入测试发现确实成功了,那么我们可以确定它是存在这么一个漏洞的。
http://192.168.18.7/secret/evil.php?command=/etc/passwd |
这里我们可以利用php的伪协议去读取到目标文件的源代码
http://192.168.18.7/secret/evil.php?command=php://filter/convert.base64-encode/resource=evil.php |
|
这里的话,我们清楚它存在一个文件包含的漏洞,文件包含漏洞也有很多方式可以getshell,但是这里就不一一尝试了。
ssh公钥认证
前面通过文件包含去查看了/etc/passwd
文件,发现存在账户mowree
。同时靶机也是开启了ssh服务的。那么我们可以去测试连接查看是否能得到一些有用的信息。
ssh mowree@ip -v #-v参数可以查看连接的一些详细信息 |
在这里可以查看到目标ssh支持两种登录方式,密钥登录和密码登录。
https://www.cnblogs.com/damoxilai/p/16672336.html |
如果可以采用密钥登录ssh的话,那么目标账户文件夹下就会存在.ssh
这么隐藏文件夹。
公钥: .ssh/authorized_keys |
这里知道了文件的位置,那么我们就可以尝试使用文件包含漏洞去读取
http://192.168.18.7/secret/evil.php?command=/home/mowree/.ssh/authorized_keys |
这里成功的读取到了公钥
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 |
-----BEGIN RSA PRIVATE KEY----- |
公私密钥现在我们都已经清楚了。
现在我们就可以利用公钥认证的机制去登录到目标的服务器。
目标服务器存储公钥,我们本地指定私钥。那么就可以进行一个身份认证了。
我们在本机创建一个id_rsa
文件,将上面获取的私钥粘贴进去。
同时还需要赋予这么一个600的权限。
ssh mowree@ip -i id_rsa |
结果发现我们还是需要一个密码,这个密码是用来加密私钥文件的。这个时候我们能想到的就是是否可以去爆破密码。当然会可以。这里可以使用到一个字典。rockyou.txt
,这个字典非常大,kali自带。然后我们把它复制到我们的文件夹,然后进行解压缩。
密码爆破
这里密码爆破工具我们选择john
,这里对这个私钥的加密密码爆破之前需要先转换私钥的文件格式。这个john
也是自带这么一个脚本的。
这里进入到john
的文件夹底下,然后选择这个脚本,选择我们的私钥文件,然后把它转换为hash这个文件。
john hash --wordlist=rockyou.txt |
这里可以发现密码已经爆破出来了
unicorn
这里我们重新登录然后输入爆破出来的密码。这样就可以成功登录到目标服务器了。
这里拿到第一个flag
提权
几个方式都测试没有发现可以利用的提权方法。这个时候我们就可以查找是否存在suid标志的文件。
find / -perm /4000 2>/dev/null |
这里可以发现这些命令也是比较正常的,没有可以进行利用的命令。
这个时候还有一个思路就是去查找我们可以写入的文件,如果该文件是通过高权限用户运行的,那么我们也是可以提权的。
find / writable 2>/dev/null | grep run | grep proc | grep sys···· |
这里会发现一个奇怪的文件/etc/passwd
,这个文件按道理来说是不应该可写的。
可以看到,作为普通用户来说我们不可写,可以读。但是目标靶机用户却是可以读写的。那么这里肯定是配置错误的。
我们都知道/etc/passwd
这个文件保存了linux用户的信息,包括密码。但是现在linux采取的方式是密码另外存在一个文件/etc/shadow
。但是如果我们在/etc/passwd
内指定了密码的话那么/etc/shadow
的密码将会被覆盖。
在passwd文件内,这个x就是指代的用户密码,因为所有用户对这个文件都是可读的,那么处于安全考虑的话就采取了上述的操作。使用一个x来占位。
那么因为我们可以对这个文件进行修改,那么我们就可以手动给root用户指定一个密码。但是这个密码是需要先加密生成的。
这里我们可以使用openssl去生成密码
openssl passwd -1 #-1指定的是一种加密算法,然后输入我们要设定的密码 |
复制这个密码。
然后输入
vi /etc/passwd |
先把光标移到这个x上面,然后按x
键就可以删除这个x了
然后按方向键回到前面那个冒号。
然后这里按i
进入编辑模式。把我们的加密密码复制过去。
然后按esc
键退出编辑模式。输入:
进入命令模式 然后就是wq了。
如果!!!那一步错了,先按esc
退出模式,然后输入:
进入命令模式输入q!
强制退出。就不会保存了。
修改成功之后我们切换root用户。输入我们上面设置的密码即可。
拿到第二个flag