本文来自无问社区,更多网安知识分享可前往查看http://www.wwlib.cn/index.php/artread/artid/7560.html
一,SQL注入
分类:
从注入参数类型分:数字型注入、字符型注入 从注入效果分:报错注入、布尔注入、延时注入、联合注入、堆叠注入、宽字节注入 从提交方式分:GET注入、POST注入、HTTP头注入、COOKIE注入
报错注入用到的函数:updatexml、floor、extractvalue,exp 布尔盲注:substr,mid,left,right,ascii,ord,char,length 时间盲注:sleep
SQL注入防御
对关键函数或字符过滤如 :union select order by information_schema 等 下载相关防范注入文件,通过incloude函数包含在网站配置文件里面 pdo预处理,使用预编译语句 添加白名单来规范输入验证方法 对客户端输入进行控制,限制特殊字符和函数的输入
SQL注入绕过waf
大小写双写 使用编码:unioncode编码 十六进制编码 url编码 等价函数 如:mid,substr() ==>substring() &&和||==> and 和or =号可以用<>因为如果不大于不小于就是等于
各种编码绕过(url/二次编码/base64等)/大小写混合/空格过滤绕过/使用+替换空格/双写绕过/内**联注释绕过(如果在开头的的/后头加了感叹号(/!50001sleep(3)/),那么此注释里的语句将被执行)/分块编码传输/也可以是使用sqlmap中合适的tamper脚本
SQL注入写shell条件
知道web服务器的绝对路径 数据库具有root权限 secure_file_priv函数没有特殊的值
SQL写入shell的方式
通过本地写入into outfile函数 通过日志写入需要对 general_log 和 general_log_file 变量进行更改 通过sqlmap --os-shell命令写入
二次注入:原理后端代码对用户输入的数据进行了转义,然后在保存到数据库的时候是没有进行转义,然后再从数据库当中取出数据的时候,没有对数据库中的特殊字符进行转义和验证,就可能形成闭合,导致注入
防御:使用统一编码格式utf-8对用户输入的内容进行验证过滤
二,如何判断文件上传一次攻击:
响应包是200,返回的有没有路径, 请求包的报文内容有没有上传木马, 尝试访问路径,能不能执行命令
三,命令执行和代码执行
命令执行:Web应用的脚本代码在执行命令的时候过滤不严,从而注入一段攻击者能够控制的代码,在服务器上以Web服务的后台权限远程执行恶意指令 原因:代码层过滤不严,系统的漏洞造成命令注入,调用的第三方组件存在代码执行漏洞 常见执行函数:exec、shell_exec、system、passthru、popen
代码执行:由于服务器对危险函数过滤不严,导致用户输入的一些字符串可以被转换成代码来执行,从而造成代码执行漏洞 原因:用户能够控制函数输入,存在可执行代码的危险函数 常见执行函数:eval、assert、preg_replace()
四,CSRF 和 XSS 和 XXE 有什么区别
XSS是跨站脚本攻击,用户提交的数据中可以构造代码来执行,从而实现窃取用户信息等攻击。修复方式:对字符实体进行转义、使用HTTP Only来禁止JavaScript读取Cookie值、输入时校验、浏览器与Web应用端采用相同的字符编码。
CSRF是跨站请求伪造攻击,是由于没有在关键操作执行时进行是否由用户自愿发起的确认,模仿合法用户对服务器发起请求 。修复方式:筛选出需要防范CSRF的页面然后嵌入Token、再次输入密码、检验Referer
XXE是XML外部实体注入攻击,XML中可以通过调用实体来请求本地或者远程内容,和远程文件保护类似,会引发相关安全问题,例如敏感文件读取。修复方式:XML解析库在调用时严格禁止对外部实体的解析。
五,Shiro 550原理:
导致shiro反序列化的主要原因就是shiro提供的记住密码功能,当用户打开这个功能时会在请求阿包中生成一个cookie,cookie的value值是经过反序列->aes加密->base64加密后的字符串,关键在于aes加密的秘钥是默认的,如果没有修改这个秘钥,就会导致反序列化漏洞,攻击者可以构造恶意代码,将恶意代码序列化-aes加密-base64加密后传入cookie,这样就导致RCE漏洞。
流量特征:请求包有rememberMe=一大段base64加密字段
Shiro 721原理
Shrio所使用的cookie里的rememberMe字段采用了AES-128-CBC的加密模式,这使得该字段可以被padding oracle 攻击利用。攻击者可以使用一个合法有效的rememberMe 的cookie作为前缀来实施POA,然后制造一个特制的rememberMe来执行Java反序列化攻击。
shrio550和721的区别
主要区别在于Shiro550使用已知默认密码,只要有足够的密码,不需要Remember Cookie的 Shiro721的ase加密的key为系统随机生成,需要利用登录后的rememberMe去爆破正确的key值。 利用有效的RememberMe Cookie作为Padding Oracle Attack的前缀,再去构造反序列化攻击。
fastjson反序列化漏洞原理:
1、fastjson提供的反序列化功能允许用户传入json格式数据局的时候通过@type的value值指定任意反序列化类名 2、fastjson的反序列化机制会将反序列的类进行实例化对象,并调用该对象的setter和部分getter方法 3、恶意用户可以构造payload是目标应用的代码执行流程进入这部分setter和getter方法,如果这些方法中存在Gadget,就会造成一些安全问题。
流量特征:
- 根据返回包判断: 任意抓个包,提交方式改为POST,花括号不闭合。返回包在就会出现fastjson字样。当然这个可以屏蔽,如果屏蔽使用其它办法。
- 利用dnslog盲打: 构造以下payload(content-type字段为application/json),利用dnslog平台接收:{"zeo":{"@type":"java.net.Inet4Address","val":"ntel8h.dnslog.cn"}}(不同版本,payload不同。推荐这种方式)
- 请求报文中查找json格式的数据,重点看有无rmi或者出网的一些行为
面试爱问:
1、parse()和parseObiect()的区别
JSON.parse
方法反序列化会调用此类的setter方法,而使用JSON.parseObject
方法反序列化会调用此类getter和setter方法
2、不出网利用
打BCEL链(低版本)
log4j2原理:
Apache Log4j2中存在JNDI注入漏洞,主要原理是利用log4j2的日志输出jndi远程对象时,调用远程对象没做检查导致,程序将用户输入的数据进行日志记录时即可触发该漏洞并可在目 标服务器上执行任意代码。该漏洞利用过程需要找到一个能触发远程加载并应用配置的输入点,迫使服 务器远程加载和修改配置的前提下使目标系统通过JNDI远程获取数据库源,触发攻击者的恶意代码
流量特征
- 攻击的返回包状态码为200,有60%-70%的概率攻击成功
- 状态码为其他,也有可能攻击成功,需要上机排查(如400时可能会反弹shell)
- 看有没有对恶意payload进行外部请求
Struts2原理:
用户提交表单数据并且验证失败时,后端会将用户之前提交的参数值使用 OGNL 表达式 %{value} 进行解析,然后重新填充到对应的表单数据中。例如注册或登录页面,提交失败后端一般会默认返回之前提交的数据,由于后端使用 %{value} 对提交的数据执行了一次 OGNL 表达式解析,所以可以直接构造 Payload 进行命令执行
Weblogic原理
漏洞挺多的比如:弱口令、Java 反序列化、XMLdecoder 反序列化、SSRF 漏洞、任意文件上传 面试问的比较多的就是T3协议反序列化
- RMI :远程方法调用
- 使用协议:JRMP
- T3就是对JRMP的优化。 Java RMI 的基础通信协议是 JRMP ,但是也支持开发其他的协议来优化 RMI 的传输,这里的 Weblogic 的 T3 协议就是其优化版本,相比于JRMP协议多了一些特性 T3协议传输过程中就是序列化和反序列化方式,利用:将原本存在的序列化内容替换成我们payload的序列化内容,在传输完成后,进行反序列化达成攻击的目的
流量特征:
- 攻击成功会有明显的返回weblogic字样
- 会有带加密格式的序列化字符串
- 是否成功攻击要看日志,是否有调用恶意Java类,网络套接字,上传war包
Jboss原理
JBoss是一个基于J2EE的开放源代码应用服务器,代码遵循LGPL许可,可以在任何商业应用中免费使用;JBoss也是一个管理EJB的容器和服务器,支持EJB 1.1、EJB 2.0和EJB3规范。但JBoss核心服务不包括支持servlet/JSP的WEB容器,一般与Tomcat或Jetty绑定使用。 两种利用方式 第一种是利用未授权访问进入JBoss后台进行文件上传的漏洞 另一种是利用Java反序列化进行远程代码执行的漏洞
六,webshell管理工具
菜刀:base64加密,php马有eval,(base64_decode ($POST[z0])),&z0=QGluaV9zZXQ 蚁剑:以0x 开头的参数名,@ini_set("display_errors","0") 冰蝎: 1、大量的 content-type:application,content-type 为 application/octet-stream。 2、默认内置 16 个 ua,content-length 请求长度payload 都为定长 3、Accept头有application/xhtml+xmlapplication/xmlapplication/signed-exchange属于弱特征 哥斯拉: 1、pass=eval(base64_decode...,pass=加密数据 2、user-agent,accept,accept-language 固定
七,应急响应流程
检查系统账号安全 查看服务器是否有弱口令,远程管理端口是否对公网开放 查看服务器是否存在可疑账号、新增账号 查看服务器是否存在隐藏账号、克隆账号 检查异常端口、进程 检查启动项、计划任务、服务 查看可疑文件和目录 查看webshell创建的时间
Windows入侵排查思路
1.检查系统账号安全
2.查看服务器是否有弱口令,远程管理端口(3389)是否对公网开放(使用netstat -ano 命令、或者问服务器管理员)
3.lusrmgr.msc(本地用户和本地用户组) 快捷命令查看服务器是否存在可疑账号、新增账号,如有管理员群组的(Administrators)里的新增账户,如有,请立即禁用或删除掉
4.用 D 盾或者注册表(regedit)中查看服务器是否存在隐藏账号、克隆账号
5.结合日志,查看管理员登录时间、用户名是否存在异常,使用eventvwr.msc打开“事件查看器”,导出 Windows 日志–安全,利用 Log Parser 进行分析
6.检查异常端口、进程 netstat -ano检查端口连接情况,是否有远程连接、可疑连接 然后使用 tasklist |findstr PID 进行定位
7.使用快捷命令 msconfig查看是否存在命名异常的启动项目, 输入regedit注册表中查看开机启动项是否正常,输入gpedit.msc查看本地组策略,使用services.msc检查是否有异常服务
8.检查系统相关信息 systeminfo查看系统版本以及补丁信息 查找可疑目录及文件
Linux入侵排查思路
1.bash的账户,正常为/nologin
2.查看本机开启端口服务信息 netstat -anlutp,然后去查看每个开启服务所产生的日志信息 (var/log目录下)(举例如何查看mysql日志,首先登录mysql,然后使用 show variables like '%general_log%' 查看日志是否开启和路径信息)
服务入侵排查
1.使用last命令检查系统登录日志,统计ip登录错误次数和登录情况
2.使用 ls -l 查看 /etc/passwd文件 的修改时间 查看是否有特权用户 查看网站开启的端口ss -anlutp
3.使用ps -elf 看UID为0的进程 查看ssh的公钥是否被修改
4.查看网站根目录(/var/www)下是否存在可疑文件
5.查看计划任务 /etc/crontab
异常启动排查
1.ps -elf 查看进程
2.查看linux 系统服务 /etc/rc.d/init.d
3.查看用户自定义开机启动程序 /etc/rc.d/rc.local
溯源有哪些思路
通过分析设备的告警、钓鱼邮件、木马病毒找到攻击者IP,先去一些威胁情报平台搜索相关信息,判断攻击者为代理服务器还是跳板机还是国内的云服务器,查一查相关注册信息,对攻击者进行反向渗透,针对攻击者去搭建蜜罐,如果是云服务器,可以寻找到相关厂商,联系客服说自己忘记密码了,看看能不能获取到云服务器购买者信息,对于获取到的信息可以通过各种社工库搜一搜,各大搜索引擎去搜索看看能不能获取到更多信息,也可以直接把服务器厂商打下来,肯定就可以知道购买者的信息了,如果把跳板机拿下就可以去查看桌面的敏感信息,登录日志,历史执行命令这样一步一步去获取更多的信息。
liunx的日志
Linux 的日志文件通常存储在 /var/log 目录下,这是一个系统和应用程序日志文件的默认存储位置。不同的日志类型存储在不同的子目录下, /var/log/messages:系统日志,包含了操作系统的各种信息、警告和错误等。 /var/log/auth.log:安全认证日志,记录系统的用户登录、认证、授权等信息。 /var/log/syslog:系统日志的一个备份文件。
/var/log/kern.log:内核日志,记录内核级别的信息,例如硬件故障等。 /var/log/dmesg:内核环缓存,包含启动信息、硬件检测和驱动程序的信息等。 /var/log/cron:定时任务日志,记录定时任务执行的情况。
/var/log/maillog:邮件日志,包含了邮件服务器的日志信息。
八,windows事件ID
- 事件ID 说明
- 4624 登录成功
- 4625 登录失败
- 4634 注销成功
- 4647 用户启动的注销
- 4672 使用超级用户(如管理员)进行登录
- 4720 创建用户
九,sql注入,如何判断是攻击还是误报
先查ip,是不是内网ip,然后不是的话,放到微步等平台上查看是不是恶意ip 然后看sql查询语句,是不是正常业务语句,如果是,则是一次误报, 然后查看响应,是否跑出数据库,然后自己可以根据payload尝试打一下,如果得到数据库和数据,就是一次攻击 如果是真实攻击,需要看报文里面的工具语句,判断一下是什么类型的sql注入攻击,比如常见的sleep函数延时注入,extractvalue、updatexml函数的报错注入
注意:真或假语句应通过HTTP状态代码或HTML内容返回不同的响应。如果这些响应与查询的真/假性质一致,则表示注入
十,ssrf打redis
ssrf扫描内网,端口6379是redis服务,然后redis未授权漏洞利用
十一,常见的设备,出现误报怎么办
奇安信天眼,微步tdp,青藤云HIDS,明御安全网关,
全流量、EDR、全流量告警、态势感知、APT、
先去查看设备的完整流量日志等信息确认是否为误报,误报那就是规则问题,上报处置,提供规则优化建议
十二,序列化反序列化及其流量特征
序列化:对象转换为字符串
反序列化:字符串转换为对象
流量特征:
shiro反序列化:查看cookie中rememberme字段,恶意命令要从这里传入。判断是否有漏洞,查看返回包set cookie:rememberme=deleteme,验证失败返回的标识符。
十三,应急响应的补充
应急响应流程:
1、收集信息:搜集客户信息和中毒信息,备份
2、判断类型:判断是否是安全事件、是何种安全事件(勒索病毒、挖矿、断网、ddos等)
3、深入分析:日志分析、进程分析、启动项分析、样本分析
4、清理处置:杀掉恶意进程、删除恶意文件、打补丁、修复文件
5、产出报告:整理并输出完整的安全事件报告
告警极多
- 样本降噪,看200,看hw前有没有出现过,看是不是内部ip
- 看行为,看攻击方式,是主动外连还是外连内
- 看流量,看有没有奇怪的流量包,看有没有危险内容或函数
windows应急
1)查看系统账号安全
1、查看服务器是否有弱口令、可疑账号、隐藏账号、克隆账号、远程管理端口是否对公网开放
2、eventwmr.msc查看系统日志,查看管理员登录时间、用户名是否存在异常
2)检查异常端口、进程
1、netstat -ano 检查端口连接情况,是否有远程连接、可疑连接
2、tasklist | findstr "PID"根据pid定位进程
3、使用功能查杀工具
3)启动项检查、计划任务、服务
1、检查服务器是否有异常的启动项,msconfig看一下启动项是否有可以的启动
2、检查计划任务,查看计划任务属性,可以发现木马文件的路径
3、见擦汗服务自启动,services.msc注意服务状态和启动类型,检查是否有异常服务
4)检查系统相关信息
1、查看系统版本以及补丁信息 systeminfo
2、查找可以目录及文件 是否有新建用户目录 分析最近打开分析可疑文件(%UserProfile%\Recent)
5)自动化查杀
使用360 火绒剑 webshell后门可以使用d盾 河马等
6)日志分析
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 后门。
十三,wireshark指令
- http contains "关键字" 包含
- http.response.code == 200
- http.request.method == POST
- tcp.prot == 80
- ip.addr == "10.1.1.1" 查找所有与固定IP有关的流量包
十四,中挖矿病毒怎么解决
首先ps -aux查看进程分析
然后top 分析算力,挖矿用到的算力比较多,对流量进行过滤,含有矿池服务器的流量就是挖矿病毒
最后kill进程,rm掉程序
删不掉这么办
先下线,然后检查挖矿是否有在内网传播及时下线所有被传播的主机、上机排查攻击痕迹、一般可以从cpu占用情况,可以进程、开放端口、计划任务、服务项几个方面排查
将样本上传到在线分析平台,清除挖矿主程序主要就是双向封禁矿池地址、删除计划任务自启动、删服务,结束恶意进程、删病毒
删不掉:确认一下一下是因为程序在使用,还是权限不够,更具具体情况采取措施
直接降权,降权到没有执行权限
十五,拿到webshell不出网情况下怎么办
reg上传去正向连接。探测出网协议,如dns,icmp
十六,怎么排查java内存马
直接利用内存马检测工具去找,github也有很多检测脚本,手工的话可以分析web日志,filter或者listener类型的内存马,会有大量路径相同参数不同的url请求,或者页面不存在但是返回200的请求,分析web.xml文件,内存马的Filter是动态注册的,web.xml是没有配置的,也有可能是中间件漏洞通过代码执行加载内存马,这就可以去排查中间件的错误日志,像哥斯拉和冰蝎的内存马也会有跟webshell相似的特征,分析特殊的classloader加载,攻击者喜欢利用TemplatesImpl和bcel加载内存马,因为内存马是驻留在内存里的,本地无class文件,通过检测Filter对应的ClassLoader目录下是否存在class文件来判断,也可以把内存中所有的Filter的class dump出来,使用工具分析是否存在恶意代码
十七,蜜罐原理
- 创建虚拟环境:在网络中创建一个看似易受攻击的虚拟环境,该环境模拟真实系统的一部分或全部功能,包括应用程序、服务和操作系统。
- 引诱攻击者:通过暴露蜜罐的存在,例如通过公开可访问的IP地址或虚假的网站,吸引攻击者主动尝试入侵、扫描或攻击蜜罐系统。
- 监测和记录:一旦攻击者进入蜜罐系统,蜜罐会记录攻击者的行为、攻击技术和使用的工具。
- 这些信息对于理解攻击者的策略和行为非常有价值。
- 分析和响应:通过分析记录的数据,研究人员可以识别攻击者的行为模式、漏洞利用方法和漏洞的目标。
- 这些信息可以用于改进真实系统的安全性,及时发现和应对新的威胁。
- 蜜罐的优势在于能够提供高质量的攻击数据和情报,帮助安全团队更好地了解攻击者的行为模式和目的,加强防御措施并及时应对威胁。
- 然而,蜜罐也需要专业人员来设计、部署和管理,以确保其安全性和有效性,并避免对真实系统造成潜在的风险。
十八,内存马查杀&原理
java内存马原理:通过在Java虚拟机(JVM)中运行的恶意代码,实现对被攻击者系统的远程控制。其原理是通过在Java虚拟机中注入特定的Java类、变量或方法等Java对象,然后在Java虚拟机中运行这些代码,实现对受害者机器的远程控制
java内存马排查:
利用Java Agent技术遍历所有已经加载到内存中的class。
先判断是否是内存马,是则进入内存查杀。
识别:1,filter名字很特别 2,filter优先级是第一位 3,对比web.xml中没有filter配置 4,特殊classloader加载 5,对应的classloader路径下没有class文件 7,Filter的doFilter方法中有恶意代码
清除:1、清除内存马中的Filter的恶意代码,2、 模拟中间件注销Filter
十九,中间件解析漏洞
IIS
- 6.0目录解析漏洞:命名为1.asp的目录下的所有文件会以asp脚本形式运行
- 6.0文件解析漏洞:xx.asp;.jpg将会当作xx.aspIIS6.0 默认的可执行文件除了.asp,还包含这三种:.asa .cdx .cer
- IIS7.0配置不当会导致test.png可以用test.png/.php的方式被执行
Nginx
- 早期版本,配置不当时,1.png图片马可以通过这样访问执行:1.png/xxx.php原因是fastcgi处理.php文件时,发现文件不存在,直接解析1.png
- 空字节解析(00截断)
Apache
- 早期版本,配置不当时,从右到左判断后缀,直到解析到能解析的后缀,如1.php.a.b,.b不认识,解析.a,还不认识就解析.php
二十,危险函数
PHP危险函数
eval,asset,exec,shell_exec,system
JAVA危险函数
ProcessBuilder类
Runtime类
readObject类