一个人的武林:内网渗透测试思路(二)

写在前面

跟web渗透(上一篇)不同,内网渗透需要更多的随机性和突破口,情况较为复杂,遇到障碍,有时可以换种思路突破,很多时候则无奈的只能止步于此。下面分享一些自己总结的内网渗透经验。主要是以windows下的操作为主。

0×01 斗转星移

(在拿到webshell的时候,想办法获取系统信息拿到系统权限)

一、通过常规web渗透,已经拿到webshell。那么接下来作重要的就是探测系统信息,提权,针对windows想办法开启远程桌面连接,针对linux想办法使用反弹shell来本地连接。

① Webshell应该都可以调用系统cmd执行一些简单的命令,那么whoami(查看当前权限),netuser(查看用户/组),systeminfo(查看系统补丁修复情况)等常见命令应该是首先被执行

探测的。

I: 不具备系统权限:

①  Serv-U提权,现在很多的webshell都集成了Serv-U一键提权功能,只需要点击一下就拥有了系统权限,简单快速。

②  SQL Server提权,利用webshell的目录翻阅功能,查找网站根目录下的数据库配置文件,以php为例则为config.php;查看文件内容一般都会发现数据库的登陆信息用户名/密码,(密码md5或者其他的加密方式解密一下即可),通过webshell或者数据库端口开放的话利用数据库连接工具Navicat等工具来连接数据库。

连接数据库检查xp_cmdshell是否存在,扩展存储过程是否打开,再利用xp_cmdshell来执行系统命令,添加用户、开启远程桌面等。

常用命令:

③ MYSQL提权,如SQL Server一样,首先找到数据库连接文件来找到数据库的登陆信息,登陆MYSQL数据库,利用MYSQL的Create Function来添加自定义函数,向mysql添加命令执行函数来执行系统命令。需要使用的文件为udf.dll。

也有一些自动化工具可以完成以上操作。

II:具备系统权限:

直接通过wehshell来执行相关命令,添加用户等操作。

② 可能遇到的障碍:

1. 无法执行cmd命令:

有可能执行的命令不具备执行权限或者system32/cmd文件自身拒绝被调用;一般可以通过自己上传cmd命令程序来解决,为当前用户权限。

2. 添加用户的命令net user /add不能被执行:

一般是由于net.exe文件不存在或者拒绝被调用导致,可通过上传net.exe文件来解决,包括tasklist等命令无法被执行时,都可以通过上传相应可执行文件来解决。

3. SQL Server扩展存储过程无法开启:

在管理员做过数据库加固的情况下,xplog70.dll文件会被管理员删除,从而不能够成功开启数据库扩展存储过程,解决方案为上传xplog70.dll文件。

4. 不能在目录下上传文件,或者上传的文件执行权限不够:

根据文件目录的执行权限,首先查找可读、可写目录,假如不好找的话,一般建议将文件上传到相应盘符的recycler文件夹内,这个文件夹在每个盘下面默认都会存在,并且具有可读、写、执行权限。

5. 新建用户成功,但是无法确定管理员组:

没有明确标识的administrator组,在新建用户加入管理员组的过成中,系统管理员已经将管理员组更名,此时需要查询管理员组名称,再在相应的组中加入。

6. 3389端口虽然打开,但是远程桌面无法连接:

一般这种情况是由于windows的防火墙进行的端口限制或者在远端服务器网络出口有安全设备如防火墙进行了外联端口限制,这个时候就要祭出前辈大神的LCX端口转发工具,对相应端口进行转发到常规使用的端口上,再从外部连接转发后的端口。

二、 没有通过常规渗透拿到webshell,但是由于中间件的配置失误,可以上传shell。

Apache,Tomcat等中间件以system权限运行,存在管理控制台manager,尝试弱口令或者暴力破解登入,可以通过控制台上传jsp、war等格式的webshell,从而进一步执行系统命令。

三、Web存在sql注入,数据库为SQLServer,通过SQL Server的特性,开启扩展存储过程XP_cmdshell,从而添加管理员用户/组,开启远程桌面。或者MYSQL存在web sql中注入,则不通过webshell翻阅文件来获取数据库连接密码,直接从外部利用数据库连接工具来进行提权。

四、利用系统已知漏洞来提权,通过wehsell执行systeminfo来确定系统打补丁的情况,从而使用metasploit来溢出提权,选择payloads来开启远程桌面。在windows下比较出名的漏洞如MS-08067,MS11-080,MS11-046等。

五、对于Linux系统:

① 在拿到webshell的前提下,一般的流程为使用相应exp或者执行上传的脚本,反弹shell出来在本地进行连接,运行提权程序获得root权限。

如windows下一样,在Linux下首先通过webshell执行whoami来确定当前用户是什么用户,执行uname–r来确定Linux的内核版本,依照此版本来找对应的exp;当然对应很多版本的Linux内核,都是没有exp来对用执行的,很多情况下只能无奈止步或者另辟蹊径。常用工具nc。

② 可能遇到的障碍:

1.反弹shell的时候在本地无法正常连接:

一般这种情况是由于Linux的iptables防火墙进行的端口限制或者在远端服务器网络出口有安全设备如防火墙进行了外联端口限制,这个时候就要祭出前辈大神的LCX端口转发工具,对相应端口进行转发到常规使用的端口上。

2.提权exp或者自己远程编译的脚本无法执行:

检查是否当前文件具有可读、写、执行权限,尝试修改目录、文件的权限,使用chmod u+x,假如无法修改权限的话就寻找具有相应权限的目录重新上传执行。

六、关于一句话木马:

使用webshell方式固然好处是强大的各种功能,但是webshell的缺点体现在:

对于一句话木马,在web应用中可以根据情况直接插入,对应的菜刀chopper可以轻松连接一句话翻阅目录,并且可以进行数据库管理和自定义cmd路径执行。好处主要在于不容易被查杀,并且不容易被管理员发现。在上传了webshell后,在可读可写的目录下新建一句话木马连接文件也不失为一种保存后门的方式。同时注意隐藏,将一句话木马的文件名改名为config.php , run.php等系统文件名更具有迷惑性。

0×02 隔山打牛

(在拿到一台服务器的时候,拿下内网更多的服务器,更有用的信息)

1. 信息获取

信息获取总是第一步执行的操作,利用管理员的疏忽或者内网机器的弱口令来发现更多的信息。

① 可以使用工具pwdump来抓取管理员hash,配合彩虹表或者在线hash破解,获得管理员的明文密码,这个可以作为自己的密码表,在进行内网其他机器的登陆时尝试。

② 查看远程桌面的连接信息,一般通过远程桌面经常连接的机器会在该程序打开时候的下拉菜单中保存,如果管理员选择的是记住密码的话,那么就轻松跳转其他机器。

③ 假如存在数据库管理工具,ftp管理工具等,如Navicat,SecureCRT,flashfxp等,查看是否是保存的密码,尝试登陆。

④ 各款浏览器的保存登陆密码,作为自己的密码表,在进行内网其他机器的登陆时尝试。

⑤ 有无VPN连接信息。

2. 内网探测

① 通过cmd下执行命令arp –a,查看相邻主机IP。

② 通过上传一些工具,如Cain,可以探测本地程序缓存的密码,通过嗅探器可以嗅探到相邻机器的username和password。

③ 通过上传一些工具,如HScan,可以探测同一个段内存活机器的IP,端口,开启的服务等信息,包括存活机器的弱口令。

④ 通过本地远程桌面跳转到相应的服务器上。

⑤ 如web渗透一样,在进行端口/服务探测时,可以根据探测到的服务版本信息,根据已知的漏洞来使用matesploit进行溢出攻击,从而获得对应服务器权限。 

3. 找到交换机/路由器

通过内网端口/IP扫描找到类似交换机/F5的设备,网络设备没有特殊安全加固的话一般没有设置权限密码或者使用默认密码/弱口令,比较好突破。也可以下载路由器/交换机的配置文件,从而读取到登陆密码。拿到网络设备以后该网段的拓扑结构基本上能做到心中有数。

对内网渗透而言,更多的是利用管理员或者用户组的疏漏而进行的深入,具有较大的随机性,很多情况下也是无疾而终,无奈的终结于此。不过思路和方法是多变的,正所谓没有绕不过的防火墙,终归会有更好的方法出现来解决更多的问题。

对于外网——内网渗透思路系列,并不是倡导一个如何有效入侵的方案,而是通过种种思路的总结来帮助我们的管理员同志更好地抵御外界的威胁,同时我们也倡导大家做有社会使命感的白帽子。在技术方面共同进步,不浮于表面,更多的去进行学习漏洞挖掘分析等更深层次的技术细节,了解漏洞的原理,为提高我们的技术水平而不懈努力。