GlasgowSmile-v2通关笔记
GlasgowSmile-v2描述:
获取主机DHCP地址
使用到工具
- nmap
- disearch
- wfuzz
- wireshark
- BurpsSuit
- Python
扫描主机开放服务
从上图可知:80,22端口对外开放,8080端口含有过滤规则。
浏览器访问80端口
http://192.168.33.136
很无奈打开发现只有一张图片,并没有多余的东西。到这里只能Fuzzing目录文件。
首先使用Kali自带的dirb进行目录扫描:
正如上图看到的扫描结果并没有得到有用的东西,这个工具不行,显然要更换工具继续干。常用的WEB目录扫描工具有:Dirsearch、DirBuster 、御剑等。
这里我使用dirsearch工具,具体用法请自行百度。
root@kali:~/dirsearch# python3 dirsearch.py-e php,txt,zip -u http://192.168.33.136
很幸运,扫描得到了一些文件。浏览器访问http://192.168.33.136/todo.txt
根据提示,该站点可能存在自动化脚本,继续爆破扫描。工具我使用wfuzz,字典使用kali自带目录/usr/share/wordlists/下的rockyou.txt.gz,并解压出来。
root@kali:~/dirsearch# ls/usr/share/wordlists/
root@kali:~# wfuzz -w rockyou.txthttp://192.168.33.136/FUZZ.sh
经过一段时间的等待,得到一个joke.sh的自动化脚本文件。
浏览器访问
http://192.168.33.136/joke.sh
下载后打开后得到内容如下图:
浏览器访问如上地址:
http://192.168.33.136/Glasgow---Smile2/
从访问后可以获取该站点CMS系统是 Drupal8,含有登录和注册页面。
尝试了一番并没有成功登陆进入,只好返回看看已有的信息。
把自动化脚本仔细阅读,猜测该站点可能存在pcap数据包文件,进一步扫描。
root@kali:~# wfuzz -w rockyou.txt --hc404,400 http://192.168.33.136/FUZZ.pcap
很快得到一个smileyface.pcap文件。
浏览器访问
http://192.168.33.136/smileyface.pcap
下载后得到如下文件
跟踪数据流
看到包含Authorization: Basic内容,很明显需要进行base64解密。
尝试登陆网站
值得庆祝的是成功登陆进入后台。既然到了这里,我们肯定想进一步拿到shell权限。
仔细想想我们还有一个CMS的指纹信息没有利用。先搜索查看Drupal 8有没有已知漏洞利用。最终检索到一个集成好的RCE。
把该project克隆到本地并利用
root@kali:~/Drupalgeddon2#./drupalgeddon2.rbhttp://192.168.33.136/Glasgow---Smile2/
当然也可以POST含有漏洞的URI并自己构造pyload,并使用nc反弹
如果做过靶场环境的小伙伴们,应该都比较清楚所谓的flag都在相应的家目录下。因此进一步进入/home目录。
从上图可知,获取信息的顺序是riddler -> bane ->carnage -> venom -> root
为了搞明白nmap扫描出的结果8080为什么被过滤,查看运行的端口服务:
使用常用的socat工具实现tcp端口转发,进一步在外部机器可以访问,方便寻找信息。
socat -d TCP4-LISTEN:12345,reuseaddr,fork TCP4:127.0.0.1:8080
确认12345端口已被打开:
浏览器访问:
http://192.168.33.136:12345/
查看网页源代码:
分析可能存在文件包含(LFI)漏洞,从而查看nginx相关配置文件。
根据上图路径推测,可能需要至少向上4层:
浏览器访问如下链接:
http://192.168.33.136:12345/?page=../../../../../../etc/passwd
从passwd文件得到的用户都是不可以进行远程登陆,从而进一步查看nginx的配置文件,获取可能用价值的信息。
浏览器访问如下链接:
http://192.168.33.136:12345/?page=../../../../../../etc/nginx/nginx.conf
从上图得知nginx站点配置目录在/etc/nginx/sites-enabled/下。进一步去查看站点配置文件:
浏览器访问如下链接:
http://192.168.33.136:12345/?page=../../../../../../etc/nginx/sites-enabled/default.conf
从上图得知站点默认首页index.php文件访问路径
得到一个谜语,填写正确的谜底将会得到riddler用户密码。(通过搜索可知谜底)
使用 su riddler用户切换
文件查看得到theworldmustbeburned的提示,数据被处理过。
把burn文件内容重新代码格式化,以便阅读。
<? php
function grdl($q0) {
$b1 = fopen($q0, 'r') or die();
$a2 = 0;
while (!feof($b1)) {
$t3 = fgets($b1);
$a2++;
}
rewind($b1);
$s4 = 0;
$n5 = rand(0, $a2);
while ((!feof($b1)) && ($s4 <= $n5)) {
if ($x6 = fgets($b1, 1048576)) {
$s4++;
}
}
fclose($b1) or die();
return $x6;
}
function gws($n7) {
$j8 = str_split($n7);
$a9 = 0;
foreach($j8 as $m10) {
$a9 += ord($m10);
}
return $a9;
}
function encrypt($c11, $j12, $e13) {
$f14 = true;
$l15 = gws($c11);
$q16 = gws($j12);
$f17 = str_split($e13);
$a18 = "";
foreach($f17 as $m10) {
$f14 = !$f14;
$p19 = $l15;
if ($f14) {
$p19 = $q16;
}
$a18. = ord($m10) + $p19;
if ($f14) {
$a18. = "A";
} else {
$a18. = "F";
}
}
return $a18;
}
$q0 = "jokerinthepack";
$e13 = readline("Enter the string to encrypt: ");
$c11 = trim(grdl($q0));
$j12 = trim(grdl($q0));
print "n";
print "Your keys:";
print "n";
print "Key 1: ".$c11;
print "n";
print "Key 2: ".$j12;
print "n";
$a18 = trim(encrypt($c11, $j12, $e13));
print "Encrypted string:".$a18.
"nnn"; ? >
代码解读:
PHP代码转化为Python代码
代码审计逆向解密脚本:
运行Python脚本,输入message.txt文件中的Encrypted string进行解密。
解密得到后bane的密码,从而使用bane进行登录。使用sudo -l 查看当前用户权限。
得知有一个make可以提权到carnage用户。使用GTFOBins搜索提权方法。
不断搜寻可以查看的文件
没有看出什么头绪,想使用sudo -l但是不知道用户密码。从而想到使用pspy查看运行的进程。使用bane用户进行sftp登陆,上传pspy文件查看进程。
转到/opt/get_out/相应目录,查询到一个help.txt文件。其文大概意思是:zip文件被删除后会被恢复。
删除devil.zip文件,发现devil.zip真的被恢复了。然而我删除我自己建立的压缩文件却没有被恢复。思考了一段时间进行解压查看,提示告警:没有zipfile文件。
进行了一段时间的搜索得知可能是Python调用zip库实现此压缩包恢复功能。
因为这是会自动调用的python脚本,从而嵌入反弹程序。
此时再次删除devil.zip文件,成功实现反弹效果。并使用python 一句话获取标准shell
搜索查看可以阅读的文件。
搜索查看有没有suid权限
使用cat去逐个查看文件,打开发现有乱码。是二进制文件,使用strings进行打开。
发现gothamwillburn4中有使用cat命令查看batman。因此使用bash进行提权。
再次执行./ gothamwillburn4文件,发现权限更改成root。
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 技术分享 | Online DDL 工具 pt-osc
- 基于hexo框架搭建个人博客【技术创作训练营】
- 对比讲解lambda表达式与传统接口函数实现方式
- 如何使用Java8 Stream API对Map按键或值进行排序
- TencentOS tiny RTOS快速入门
- Nginx用户认证与域名重定向
- LNMP架构介绍与搭建
- Mac 最新版Python3.7.4安装配置,设置默认python版本
- 15个应该掌握的Jupyter Notebook 使用技巧
- python 环境重启方法,系统环境变量配置后python生效设置方法
- 快速上手 WebAssembly 应用开发:Emscripten 使用入门
- Python爬虫之mongodb的索引操作
- (六)日志生成
- Python爬虫之mongodb的权限管理
- Python爬虫之mongodb和python交互