powershell 渗透框架[ nishang ]
0x01 前言
注意,powershell只能针对win7以后的系统使用,此之前的win系统是没有引入powershell的,powershell是什么这里就不废话了,大家请自行谷歌,在使用各种powrshell脚本过程中,系统权限自然也是越高越好,权限越大你能在系统中操作的范围就越广,至于为什么要选择powershell,想必大家早已心知肚明,免杀,可直接跟系统api交互,容易定制,轻量,远程加载执行,对目标系统的影响极小……好处众多,这里就不多啰嗦了,说破天,我们最终的目的还是希望能在实际渗透中把它用起来,不然,实际价值何在呢
0x02 关于nishang
今天我们就先来看看第一款powershell渗透框架其实,个人觉得把它称为powershell渗透框架似乎更合适些
,nishang
[想必现在早已家喻户晓],关于nishang中的各个ps脚本的选项用法,在其脚本代码的最前面都有详细说明,使用前请务必仔细阅读,因为系统默认是禁止执行ps脚本的,所以实际用的时候后面都会带上bypass选项
0x03 首先,所有内网渗透的第一步,信息搜集[Gather]
检查当前机器是否为虚拟机:
搜集当前机器的各种敏感信息,包括如下
|
|
利用卷影拷贝服务[Volume Shadow Copy Service
]转储本地的sam文件,如果是在域控上操作,它则会把ntds.dit和system.hiv一并导出来,如下图,ntds.dit文件默认位置是C:\Windows\system32\ntds.dit,如果ntds.dit不是在默认路径下,则要用-ntdsSource选项指明ntds.dit的位置,注意转储到的目录一定要能写,如果是域内用户比较少还好,用户量比较大的情况还是最好不要这种方式来导,之后从文件中把用户hash提取出来即可
扫描同内网中指定机器所开放的端口,它会根据你所给的端口一个个的遍历,速度可能会有点儿慢[似乎有点儿在逐个 telnet 的感觉]:
做出口测试用的,说实话,我真没想到它的具体利用场景
从HKLM中提取lsa证书秘钥,说白点儿就是里面存了各种账号密码
,注意可能需要system权限且powershell要在32位模式下运行,实际测试测试中,貌似光有管理权限还不够[没成功],不过类似的功能我们在实际渗透中我们完全可以用别的工具替代不用在这儿太过纠结:
抓取本地用户的密码hash,注意权限务必要够,另外,记得要把你的cmd调宽一点,不然可能看不到完整结果,不过hash貌似又不对:
获取本地用户的密码提示:
从windows Vault[其实就是各类证书管理器,具体作用请自行谷歌]中获取各种web密码,该脚本要求在powershell 3.0(也就是win8以后的系统)以上执行,还是那句话,权限必须要够,比较遗憾,本地实际测试中并未成功读出来:
抓取当前机器的无线密码 前提是当前系统中要有正在使用的无线网卡才行,不过,这种方式对个人机来说还是挺有用价值的
:
简单的一些钓鱼模块,脚本执行以后它会一直弹出输入框,直到用户输入了正确的系统账号密码它才会自动退出,最后会把刚刚用户输入的账号密码显示出来,当然啦,你一样可以把它直接存到文件中,为了给大家看的更直观些,就直接把它打印出来了
powershell版的mimiktaz,关于mimikatz的用法,相必大家都早已非常熟练,这里就不废话了:
强制登出系统中当前正处于登陆状态的用户,然后截获其再次登陆时的明文密码,有点儿劫持winlogon.exe进程的意思,但实际中多次折腾都并未成功,如果有谁成功了,麻烦也告诉本人一声,好知道到底是哪里出了问题,我比较懒,抽空容我再看看代码:
利用ReadProcessMemory()函数从内存中提取敏感数据,主要用来抓取内存中的各种网站登陆密码,实际测试过程中有时会卡死,拖慢系统,最重要的是,并没有抓到什么有价值的东西:
利用无线的ssid提取用户凭据,看作者介绍似乎非常实用[可能境外特殊的环境所致吧],原理暂时还没弄太明白,正在仔细学习中,后续会把模块单独拿出来说明
键盘记录,实际测试中还有些问题,正在看……
0x04 内网端口扫描及服务爆破[scan][目前只支持mssql,ftp,web,activedirectory爆破]
首先,来看端口扫描,可以直接把要扫的端口都事先写在代码里面,不用非要手工指定,麻烦,又显示不全[还是记得把cmd调宽一些然后存到文件中会好点],实际中也并不建议一下子扫很多,比如你想找sa,只需要指定1433即可,搞定了以后把hash抓一下,也许这事儿就成了,没必要一直扫,还容易触发报警
服务爆破,目前貌似只支持mssql,ftp,域[ActiveDirectory]和web
|
|
|
|
0x05 提权相关[Escalation]
窃取令牌
尝试bypassUAC,并弹回一个高权限的meterpreter的shell[dll可自定义],可指定不同的bypass方法,更多方法请自行参考脚本说明,这里的payload我是直接用msf生成的,为了避免单双引号的问题,记得把它编码下,实际测试中貌似并没有成功,是我编码的问题吗
卸载目标系统中指定的补丁,比如,可以尝试卸载一两个可直接用于提权的补丁,情不得已的情况下,我们也许还可以通过这种方式来快速拿回机器权限
0x06 各种执行系统指令的方式,其实挺实用的,但我自己没成功,确实挺遗憾的[Execution]
利用powershell以文本的格式下载可执行文件,然后再自动转换成可执行格式并执行,下载者? 测了很多次都没成功,不太明白它的意思是直接提供一个可执行文件还是shellcode?
下载并执行指定ps脚本
利用sa在内网中快速提权种马,这个可能需要交互,连接成功后你可以选择要返回一个什么样的shell,跟sqltools很像[自己用的比较少],基本都是靠这个小脚本,方便,灵活,隐蔽,稳定,小巧,绝逼好用
利用dns txt 执行shellcode,有些还不是很通透,正在努力学习中……
利用rundll32执行各种payload和系统指令以及bypass AppLocker,多次测试均未果,是不是想起了什么呢,没错jsrat呢,嘿嘿……
0x07 所支持的一些shell种类,至于是不是真正走的某种协议,自己拿wireshark看下就知道,篇幅原因,我就不扯的太多[Shells]
通过 regsvr32.exe 弹shell,脚本执行完以后会生成payload代码,然后把该代码拿到目标机器上去执行即可得到一个反向shell,实际测试未通过
通过 rundll32.exe 弹shell,依然未成功
通过http弹shell,可以看到成功以后它会弹回一个ps的shell
通过https弹shell,加密shell,看样子数据是接到了,但shell没弹回来
通过icmp弹shell,能ping的情况下可以尝试
普通的tcp shell,有一点点错误,不过无伤大雅
|
|
通过udp弹shell,不知为何数据容易塞住
通过wmi shell 其实你可以把它当成psexec的’powershell’版,非常实用,它支持不同的shell类型,可根据自己的实际需求选择
通过gmail向目标机器发送控制指令,会不会想起gcat或者gdog呢,嘿嘿……我们知道它是通过gmail来转储一堆json数据的,其实这俩脚本做的事情跟那个一样,因为不太稳定,实用性也不是非常大,这里就不详细说了,虽然邮箱密码不是我们的,但也不能太那啥……
0x08 内网跳板,比较实用[Pivot]
Create-MultipleSessions.ps1[根据提供的口令批量检查内网的其它机器是否同样可用],本来是可以配合Run-EXEonRemote.ps1批量远程执行的,但实际测试中一直未成功,不过没关系,我们可以在检查完口令以后,再通过wce/mimikatz配合winexec的方式,批量种马也是一样的
|
|
0x09 留后门,比较简单,这里就不一一演示了[Backdoors]
|
|
0x10 ps版的webshell,免杀效果不错,能满足日常的上传下载命以及令执行[Antak-WebShell],记得改下账号密码即可
0x11 下面是一些比较粗糙的钓鱼模块,关于office系列的就不说了吧,因为都要启用宏,比较鸡肋,成功率相对比较高的可能就下面这些了,自带的信内容肯定是不合适的,如果真想发信,自己根据实际需求改一下就好了
0x12 如果想一键使用nishang中的所有功能[powerpreter],直接导入下面的模块即可
0x13 其它的一些辅助性的功能模块[Utility]
一点小结:
不得不说,老外们的脑洞确实比我们大很多,虽然只是一款小工具,但带我们的思路确实无穷的,起码本人是受益颇多,对于win渗透来讲,powershell无疑就是最好而且纯天然的渗透工具,因为能直接跟系统api灵活接触,这一点是无可比拟的优势,所以还是很值得我们花大量的时间去研究学习的