安恒信息蓝队初级面试题
一.owasp top10(2021年版本)
1.访问控制崩溃
风险描述:攻击者可通过修改URL,HTML页面绕过访问控制检查;或目录遍历,目录爬升和回溯进行未授权访问;越权访问(垂直越权、平行越权)敏感资源,冒充用户、管理员或拥有特权的用户,或者创建、访问、更新或删除任何记录。
对业务的影响取决于应用程序和数据的保护需求。
加固建议:
除了公共资源外,默认禁止访问;
确保以尽可能少的方式提供给用户、程序或进程访问权限;
禁止列出WEB服务器目录,确保元数据和备份文件不在根目录;
限制访问API的频率,使自动化扫描攻击工具的损害最小化;
token应该在登出后立刻失效;
加强引用参数的封装、加密;
记录所有的访问控制事件;
2.敏感数据泄露
风险描述:
由于使用弱加密、未加密、过时的哈希函数(例如 MD5 或 SHA1)、默认加密密钥或重复使用弱加密密钥、缺少二次身份校验,而导致系统泄露敏感信息,造成损失。
加固建议:
使用随机加密;
避免使用不安全的加密算法;
始终使用二次身份验证,而不是只进行加密;
使用安全协议传输数据;
3.注入
风险描述:
恶意攻击者可通过SQL注入漏洞构造SQL注入语句,对服务器端返回特定的错误信息来获取有利用价值的信息,甚至可篡改数据库中的内容并进行提权。
加固建议:
对产生漏洞模块的传入参数进行有效性检测,对传入的参数进行限定;
当用户输入限定字符时,立刻转向自定义的错误页,不能使用服务器默认的错误输出方式;
对标签进行危险字符过滤或转义,禁止(’、”、+、%、&、、()、;、and、select等)特殊字符的传入;
加密数据库内存储信息;
与数据库链接并访问数据时,使用参数化查询方式进行链接访问。
4.不安全的设计
风险描述:
由于开发过程中的设计缺陷,可能导致注入、文件上传等漏洞被利用;
加固建议:
建立并使用安全设计库或安全组件;
分离系统层和网络层;
将威胁建模用于关键身份验证、访问控制、业务逻辑和关键数据流;
5.安全配置错误
风险描述:
在应用栈中任意一处没有安全加固,云服务器授权没有正确配置;
非必要的特性被启用或安装;
使用默认账户和密码;
异常报错抛出堆栈,或其他包含信息过多的错误消息被泄露给了用户;
可升级的系统中最新的安全特性没有被启用或正确配置;
应用服务器、应用框架、数据库中的安全设置没有被设为安全值;
服务器没有发送安全头或指令,或是没有被正确设置;
加固建议:
使用可重复的加固程序,但使用不同的凭据;
最小化原则。系统不包含任何非必须的特性,组件,文档,删除或不安装未使用的功能和框架;
通过分段、容器化或云安全组 (ACL) 在组件或用户之间提供有效且安全的分离;
向客户端发送安全指令;
使用自动化进程以验证所有环境中配置的有效性;
6.使用含有已知漏洞的组件
风险描述:
管理员不知道使用的所有组件的版本,无法及时了解到组件的安全状况;
使用易受攻击的,不再支持,或是过时的组件。包括OS, web服务器,DBMS,APIs和所有组件,运行环境、库。
没有周期性扫描漏洞,没有关注所使用组件的安全公告;
没有及时修复或升级平台,框架,依赖;
软件开发者没有测试升级,更新,补丁的兼容性.
加固建议:
删除不再使用的依赖,不必须的功能,组件,文件,文档;
持续记录当前用的组件和依赖的版本。持续关注CVE, NVD上的关于对应组件的漏洞,订阅关于所使用组件的邮件通知。
仅通过安全链接,从官方来源获取组件。
关注不再维护的库和组件,如果无法打补丁,考虑部署虚拟补丁。
7.认证崩溃
风险描述:
允许自动化的攻击,如凭据填充(credential stuffing,撞库)攻击。
允许爆破等攻击;
允许默认口令,弱密码;
使用弱或无效的凭据,恢复和忘记密码找回;
使用明文,加密或弱hash的密码;
使用损坏的或无效的多因子认证;
在URL中暴露会话ID;
在成功登录后没有轮换会话ID;
没有及时把会话ID,验证令牌等信息无效化。
加固建议:
避免使用默认密码;
进行弱密码检查;
确保注册,凭据恢复和API加固以抵御账户枚举攻击;
限制或延迟失败的登录尝试,并记录所有失败尝试并在发动攻击时报警;
使用服务端内置的会话管理,确保对于每次登录生成随机会话ID。会话ID不应该在URL中,且应该及时销毁
8.软件与数据完整性失败
风险描述:
应用程序依赖来自于不受信任的来源;
不安全的 CI/CD 管道可能会导致未经授权的访问、恶意代码或系统受损;
应用程序更新在没有充分完整性验证的情况下被下载并应用于以前受信任的应用程序;
攻击者可能会上传自己的更新以分发并在所有安装上运行;
对象或数据被编码或序列化为攻击者可以看到和修改的结构,容易受到不安全的反序列化。
加固建议:
使用数字签名或类似机制来验证软件或数据来自预期来源且未被更改;
确保使用安全工具验证组件不包含已知漏洞;
确保未签名或未加密的序列化数据不会在没有检查或数字签名的情况下发送到不受信任的客户端;
9.不足的日志记录和监控
风险描述:
审计日志记录不足,无法有效定位到操作者;
警告和错误日志记录不全面、不清晰;
应用和API关于可疑事件的日志没有被监管;
日志无备份,仅本地保存;
日志留存时间较短;
攻击事件未实时监测或未触发告警;
加固建议:
确保登录、访问控制,服务器验证失败和成功等事件均会被日志记录,同时记录足够多的操作以确定可疑账号与可疑行为。
保存足够长时间的日志(至少留存6个月)便于分析。
确保日志的格式,便于阅读与管理。
对日志进行备份存储;
建立有效的监管和报警机制,使得可疑活动能被及时检测和处置。
10.服务器请求伪造
风险描述:
是一种由攻击者构造形成由服务端发起请求的一个安全漏洞。一般情况下,SSRF攻击的目标是从外网无法访问的内部系统。(正是因为它是由服务端发起的,所以它能够请求到与它相连而与外网隔离的内部系统)SSRF 形成的原因大都是由于服务端提供了从其他服务器应用获取数据的功能且没有对目标地址做过滤与限制。比如从指定URL地址获取网页文本内容,加载指定地址的图片,下载等等。也就是说,存在一个web服务端和另一个外网隔绝的服务器,web端可以与该服务器通信,web端可以从其他服务器获取数据并返回,黑客就可以通过利用或伪造这个web服务端的请求来向内网服务器发起攻击获取数据。
加固建议:
验证所有客户端提供的数据;
使用白名单强制执行 URL 架构、端口和目标;
不向客户端发送原始响应;
禁用 HTTP 重定向;
URL一致性,避免 DNS 重新绑定和“检查时间、使用时间”(TOCTOU) 竞争条件等攻击。
限制请求端口为http常用端口:80,8080,443,8090.
CSRF(跨站请求伪造)
概念:挟持了当前已经登录的用户程序去做用户非本意的操作,
比如以你的名义发送邮件、发消息,盗取你的账号,添加系统管理员,甚至于购买商品、虚拟货币转账等。 如下:其中Web A为存在CSRF漏洞的网站,Web B为攻击者构建的恶意网站,User C为Web A网站的合法用户。
攻击原理:
1. 用户C打开浏览器,访问受信任网站A,输入用户名和密码请求登录网站A;
2.在用户信息通过验证后,网站A产生Cookie信息并返回给浏览器,此时用户登录网站A成功,可以正常发送请求到网站A;
3. 用户未退出网站A之前,在同一浏览器中,打开一个TAB页访问网站B;
4. 网站B接收到用户请求后,返回一些攻击性代码,并发出一个请求要求访问第三方站点A;
5. 浏览器在接收到这些攻击性代码后,根据网站B的请求,在用户不知情的情况下携带Cookie信息,向网站A发出请求。网站A并不知道该请求其实是由B发起的,所以会 根据用户C的Cookie信息以C的权限处理该请求,导致来自网站B的恶意代码被执行。
防御手段:1.同源策略,检查referer字段,拒绝非本站的请求
2.检查taken校验码,服务器生成的伪随机数发给用户,后台会拒绝掉错误的请求
SSRF(服务器请求伪造)
概念:服务器提供服务的其他应用未对其访问进行限制,存在一个web服务端和另一个外网隔绝的服务器,web端可以与该服务器通信,web端可以从其他
服务器获取数据并返回,黑客就可以通过利用或伪造这个web服务端的请求来向内网服务器发起攻击获取数据。
防御手段:1.验证所有客户端提供的数据;
2.使用白名单强制执行 URL 架构、端口和目标;
3.不向客户端发送原始响应;
4.禁用 HTTP 重定向;
5.URL一致性,避免 DNS 重新绑定和“检查时间、使用时间”(TOCTOU) 竞争条件等攻击。
6.限制请求端口为http常用端口:80,8080,443,8090.
SSRF与CSRF漏洞的区别:
csrf由客户端发起请求的安全漏洞
Ssrf是由服务器端发起请求的安全漏洞
XSS(跨站脚本攻击)
概念:往web页面中插入恶意代码,用户浏览该网页时恶意代码会执行
反射型:XSS攻击脚本被Web服务器反射回来给浏览器解析执行。
存储型:是攻击者将恶意脚本代码存储到Web服务器中并被解析,客户当访问到这网页时将受到攻击
DOM型:基于DOM文档对象模型的一种漏洞,所以受客户端浏览器的脚本代码所影响
区别:攻击对象不同:反射型XSS的被攻击对象一般是攻击者去寻找的,存储型XSS是广撒网的方式或者指定的方式,DOM型XSS的被攻击对象其实和反射型XSS被攻击对象差不多,就是给攻击对象放送URL。
解析位置不同:反射型XSS的脚本被解析的地方是浏览器,而存储型XSS的脚本被解析的地方是服务器,DOM型XSS也是浏览器,所以DOM型又叫DOM反射型XSS。但是反射型XSS需要联网,而DOM型不需要!
存储时间不同:反射型XSS没有持久性,存储型XSS是存储在服务器上,只要服务器不挂机或者是被干掉,就一直会有,DOM型XSS和反射型差不多
防御措施:主要就是过滤输入和转义输出
1.比如说对用户提交的url、http头、post数据进行输入验证
2.输出的话,比如说对用户输出的内容使用标签,标签内的内容会直接显示
3.还有就是严格控制字符输入字数
4.或者在脚本执行的代码里杜绝掉用户输入
反序列化:
序列化:把对象转换成字节流,便于保存或者传输;
反序列化:就是把字节流还原成对象
Java中的ObjectOutputStream类的writeObject()方法可以实现序列化,
ObjectInputStream类的readObject()方法用于反序列化。
在java读取完字节流后,会判断是否存在用户自定义的“readObject”方法,如果存在的话,就优先使用udf。所以,如果存在一个自定义了“readObject”方法的对象,而这个方法是危险的,比如说执行系统命令,就会导致反序列化后形成威胁。
防御措施:
需要在objectinputstream类反序列化时,对生成的对象类型做限制,比如说设置白名单
XXE(xml外部实体注入)
概念:注入是指xml数据在传输过程中被修改,导致服务器执行了恶意代码
防御措施:
配置xml处理器使用禁用DTD、禁止外部实体解析
使用开发语言提供的禁用外部实体的办法
通过黑名单过滤用户提交的xml数据
不允许xml中含有任何自己声明的DTD
SQL注入
概念:就是在和数据库有交互的地方,对输入的参数没有进行严格的过滤导致输入的恶意查询语句被执行;或者对字符串进行拼接构造sql注入
sql注入的分类有哪些?
a.从注入方式上看有联合查询注入、报错型注入、布尔型注入、延时注入、堆叠注入这些
b.从数据类型上有:字符型、数字型
c.从注入位置可以分为GET型、POST型、HTTP头部、cookie数据
报错注入函数:
updatexml():是mysql对xml文档数据进行查询和修改的xpath函数
extractvalue():是mysql对xml文档数据进行查询的xpath函数
floor():mysql中用来取整的函数
exp():此函数返回e(自然对数的底)指数X的幂值
Union联合注入函数:
concat():凭借字符串拼接
concat_ws():指定字符串拼接
group_concat():内容以逗号隔开显示出来
布尔盲注函数:
Length():返回指定对象的长度
Left(),right():对字符串str从左开始数起,返回num个字符
Substr():截取字符串
ascii():返回字符串第一个字符的 ASCII 值
时间盲注函数:
Sleep()
If()
读写文件函数:load_file():读取
into outfile:写入
sqlmap使用:
sqlmap -u “http://www.xx.com?id=x” 【查询是否存在注入点
2. –dbs 【检测站点包含哪些数据库
3. –current-db 【获取当前的数据库名
4. –tables -D “db_name” 【获取指定数据库中的表名 -D后接指定的数据库名称
5. –columns -T “table_name” -D “db_name” 【获取数据库表中的字段
6. –dump -C “columns_name” -T “table_name” -D “db_name” 【获取字段的数据内容
2#、COOKIE注入:
sqlmap -u “http://www.xx.com?id=x” –cookie “cookie” –level 2 【cookie注入 后接cookie值
3#、POST注入:
(1)目标地址http:// www.xxx.com /login.asp
(2)打开brup代理。
(3)点击表单提交
(4)burp获取拦截信息(post)
(5)右键保存文件(.txt)到指定目录下
(6)运行sqlmap并执行如下命令:
用例:sqlmap -r okay.txt -p username
// -r表示加载文件(及步骤(5)保存的路径),-p指定参数(即拦截的post请求中表单提交的用户名或密码等name参数)
(7)自动获取表单:–forms自动获取表单
例如:sqlmap -u www.xx.com/login.asp –forms
(8)指定参数搜索:–data
例如:sqlmap -u www.xx.com/login.asp –data “username=1”
4#、常用指令:
1. –purge 【重新扫描(–purge 删除原先对该目标扫描的记录)
2. –tables 【获取表名
3. –dbs 【检测站点包含哪些数据库
4. –current-db 【获取当前的数据库名
5. –current-user 【检测当前用户
6. –is-dba 【判断站点的当前用户是否为数据库管理员
7. –batch 【默认确认,不询问你是否输入
8. –search 【后面跟参数 -D -T -C 搜索列(C),表(T)和或数据库名称(D)
9. –threads 10 【线程,sqlmap线程最高设置为10
10. –level 3 【sqlmap默认测试所有的GET和POST参数,当–level的值大于等于2的时候也会测试HTTP Cookie头
的值,当大于等于3的时候也会测试User-Agent和HTTP Referer头的值。最高为5
11. –risk 3 【执行测试的风险(0-3,默认为1)risk越高,越慢但是越安全
12. -v 【详细的等级(0-6)
0:只显示Python的回溯,错误和关键消息。
1:显示信息和警告消息。
2:显示调试消息。
3:有效载荷注入。
4:显示HTTP请求。
5:显示HTTP响应头。
6:显示HTTP响应页面的内容
13. –privileges 【查看权限
14. –tamper xx.py,cc.py 【防火墙绕过,后接tamper库中的py文件
15. –method “POST” –data “page=1&id=2” 【POST方式提交数据
16. –threads number 【采用多线程 后接线程数
17. –referer “” 【使用referer欺骗
18. –user-agent “” 【自定义user-agent
19. –proxy “目标地址″ 【使用代理注入
sqlmap常用路径:
1. 添加表字段的目录在/usr/share/sqlmap/txt/common-tables.txt
2. 存放扫描记录的目录在/root/.sqlmap/output
常用数据库常见漏洞,框架漏洞:
Mysql:3306 弱口令爆破,提权(udf提权:udf为自定义函数,导入到指定目录以dll后缀,引入udf.dll文件,引入自定义函数达到提权
mof提权:上传mof需要root权限,将mof上传到任意文件夹,用mysql执行
启动项提权:将想要执行的命令写入到vbs,bat文件通过mysql导入到开机启动目录),注入
Mysql server:1433 爆破弱口令,注入
Oracle:1521 弱口令爆破,注入攻击,TNS劫持:Tns劫持本质就是一个大代理,因为负载均衡把一部会话转到黑客处,黑客改包后在转回给真实数据库处,因此得以查询敏感信息 打补丁
数据库配置不当:所有账号最小权限控制
PostgreSQL:5432 弱口令爆破,
缓冲区溢出(经过身份验证的远程用户通过contrib/hstore/hstore_io.c内的hstore_recv, hstore_from_arrays, hstore_from_array函数及contrib/hstore/hstore_op.c内的hstoreArrayToPairs函数,利用此漏洞可触发缓冲区溢出,导致在受影响应用上下文中执行任意代码。)
MongoDB:27017 弱口令,未授权访问
Redis数据库:6379 爆破,未授权访问:Redis服务绑定到公共接口,并且没有开启认证,又暴露在公网上,这样就会导致任意用户在可以访问此公网的情况下未授权访问Redis以及读取Redis的数据
解决:禁止外部访问Redis服务端口 禁止使用root权限启动redis服务
web中间件常见漏洞:
Apache解析漏洞:防护:将AddHandler application/x-httpd-php .php的配置文件删除
Apache目录遍历:修改apache配置文件httpd.conf
找到Options+Indexes+FollowSymLinks +ExecCGI并修改成 Options-Indexes+FollowSymLinks +ExecCGI 并保存
Tomcat远程代码执行:启用了 HTTP PUT 请求方法,可通过构造的攻击请求向服务器上传包含任意代码的 JSP 文件,造成任意代码执行
禁用put方法
Tomcat war后门文件部署:Tomcat 支持在后台部署war文件,可以直接将webshell部署到web目录下
低权限运行Tomcat应用程序,后台管理避免弱口令
Weblogic反序列化:反序列话则是再把字节序列恢复为java对象的过程,然而就在这一转一变得过程中,程序员的过滤不严格,就可以导致恶意构造的代码的实现
升级补丁,对访问wls-wsat的资源进行访问控制
Weblogic SSRF:利用该漏洞可以发送任意HTTP请求,进而攻击内网中redis、fastcgi等脆弱组件。
SearchPublicRegistries.jsp直接删除,删除uddiexplorer文件夹
Weblogic 任意文件上传:原理:通过访问config.do配置页面,先更改Work Home工作目录,用有效的已部署的Web应用目录替换默认的存储JKS Keystores文件的目录,之后使用”添加Keystore设置”的功能,可上传恶意的JSP脚本文件
进入Weblogic Server管理控制台,domain设置中,启用”生产模式
Weblogic war后门文件部署:防火墙设置端口过滤,设置只允许访问后台的IP列表,避免后台弱口令
Spring RCE:JDK 9版本里,spring MVC的数据绑定时出现的漏洞
升级官方补丁
Log4j2 :Apache Log4j2某些功能存在递归解析功能,攻击者可直接构造恶意请求,触发远程代码执行漏洞
防护:关闭对应应用的网络外连,禁止主动外连,设置“log4j2.formatMsgNoLookups=True”
Log4j:搜索的 url 里面,加上 ${jndi:ldap://127.0.0.1/test} ,log4j 会对这串代码进行表达式解析,给 lookup 传递一个恶意的参数指定.升级版本,查看是否关闭lookup
Jboss 反序列化:不需要http-invoker.sar 组件的用户可直接删除此组件,用于对 httpinvoker 组件进行访问控制
Struts远程代码执行 使用了Java的 unicode字符串表示\u0023,攻击者就可以绕过保护
上海奇安信蓝队初级面试题:
使用过的工具:Wireshark(过滤规则,ip,协u议端口过滤,tcp.port==80,ip.src==)rips,sqlmap,bp,seay,
Nmap
-sT TCP (全)连接扫描,准确但留下大量日志记录
-sS TCP SYN (半)扫描,速度较快,不会留下日志
-sN null 扫描,标志位全为 0,不适用 Windows
-sF FIN 扫描,标志位 FIN=1,不适用 Windows
-O 查看目标主机系统版本
-sV 探测服务版本
-A 全面扫描
apache解析漏洞复现
Weblogic反序列化:使用vulhub实验环境,访问靶机,抓包,修改相应位置数据。Kali启动监听。 发送数据包成功后,拿到shell。
Linux应急响应
①识别现象,从客户场景的主机异常现象出发,先识别出病毒的可疑现象②清除病毒 然后定位到具体的病毒进程以及病毒文件,进行清除③闭环兜底 病毒一般会通过一些自启动项及守护程序进行重复感染,所以我们要执行闭环兜底确保病毒不再被创建④系统加固-将主机上的病毒项清除干净后,最后就是进行系统加固了,防止病毒从Web再次入侵进来。
误报
修改报警规则,重新设置告警触发阈值
多次误报
根据设备加白名单,修改策略,如果依然误报找产品售后进行咨询
分析被代理出来的数据流:分析数据包中请求头中的xff,referer信息
大的日志分析:攻击匹配规则,统计方法,统计请求次数,低于平均次数为异常请求,白名单模式,日志工具分析。
日志分析思路:用流量监测的安全设备,看报文,分析报文里ip 使用微步查询ip是否为恶意,使用 wireshark对数据包深度分析源 IP 与目的 IP 地址,host 字段,发包内容等
JAVA代码审计:敏感函数,关键字回溯参数传递过程,文件上传 upload,反序列化:readobjeck xss:getparameter 审计工具 idea
Java内存马:如果是jsp注入,日志中排查可疑jsp的访问请求。
如果是代码执行漏洞,排查中间件的error.log,查看是否有可疑的报错,判断注入时间和方法根据业务使用的组件排查是否可能存在java代码执行漏洞以及是否存在过webshell,排查框架漏洞,反序列化漏洞。如果是servlet类型,根据上报的webshell的url查找日志,根据url最早访问时间确定被注入时间。
Shiro:shiro是apache的一个开源框架,是一个权限管理的框架,实现用户认证、用户授权
550:当我们勾选remember me 的时候 shiro 会将我们的 cookie 信息序列化并且加密存储在 Cookie 的 rememberMe字段中,这样在下次请求时会读取 Cookie 中的 rememberMe字段并且进行解密然后反序列化
721:可以通过Padding Oracle加密生成的攻击代码来重新构造一个恶意的rememberMe字段,重新请求网站,进行反序列化攻击,最终导致任意代码的执行。
Cs远控如何处理:看下当前系统的反向连接端口都开了哪些,然后看看对应的服务项是否有被篡改的迹象,对比下修改时间。cmd命令运行netstat -an看看都有哪些IP在连接哪些端口,并一一对应查看,看看有无反向连接到443端口的IP和进程,如果有的话就对应进程ID查找所属程序,然后看看这个程序有无和之前的大小体积不一样。查到对应的反向连接到443可疑的IP的时候可疑直接把此IP直接禁止访问即可
绿盟堡垒机,qax网神防火墙,态势感知天眼(sql注入,看union还是时间,看语句)策略上的话身份识别策略然后NAT,DOS服务,配置地址表,地址组,配置负载均衡功能,例如虚拟服务器,有效服务器。明御ids,玄武盾防火墙
JAVA反序列化:ctf 相关函数serialize,unserialize 有串php代码
有file_get_content(),可以利用伪协议写入‘welcome to the zjctf ‘过判断;同时看到提示有useless.php ,可以利用include()读一下文件构造payload:得到base64源码:
框架漏洞:Spring是Java EE编程领域的一个轻量级开源框架,weblogjic
溯源
1.攻击源捕获
安全设备报警,如扫描IP、威胁阻断、病毒木马、入侵事件等
日志与流量分析,异常的通讯流量、攻击源与攻击目标等
服务器资源异常,异常的文件、账号、进程、端口,启动项、计划任务和服务等
邮件钓鱼,获取恶意文件样本、钓鱼网站 URL 等
蜜罐系统,获取攻击者 ID、电脑信息、浏览器指纹、行为、意图的相关信息
2.溯源反制手段
IP 定位技术
根据IP定位物理地址–代理 IP
ID 追踪术
搜索引擎、社交平台、技术论坛、社工库匹配
网站 url
域名 Whois 查询–注册人姓名、地址、电话和邮箱 –域名隐私保护
3.攻击者画像
攻击路径
攻击目的:拿到权限、窃取数据、获取利益、DDOS 等
网络代理:代理 IP、跳板机、C2 服务器等
攻击手法:鱼叉式邮件钓鱼、Web渗透、水坑攻击、近源渗透、社会工程等
Xss窃取cookie payload:document.cookie
Sql经验长圆高能网站发现可能含有注入点的url界面,?Id=234 添加and1=1 跟1=2,通过测试发现所以新闻页面均存在数据库回显状况,可以判定此URL未过滤注入关键词并含有注入漏洞,order by查询字段长度,判断出了共有26字段 在错误界面爆出字段位置,然后查询当前用户权限和数据库 查询表名和列名 因为数据库中不止有一个表名,所以加limit语句进行查询,可以limit X,1逐个查询表名,查询字段中数据,也可以配合工具sqlmap结合使用.
解决措施:1.限制数据类型:比如整型 Integer,随后加入函数判断,如is_numeric($_GET[‘id’]) 只有当get到的id为数字或者数字字符时才能执行下一步,限制了字字符自然就限制了注入。2.正则表达式匹配传入参数,但是这种匹配非常消耗性能,因此攻击时可以构造大量的正常语句‘骗’过服务器,当后台对数据的处理达到最大限制时就会放弃匹配后面我们构造的非法语句,从而略过这个数据包。3.函数过滤转义:在php中最基本的就是自带的magic_quotes_gpc函数,用于处理 ’ ” 符号加上/ 防止转义4.预编译语句应该是最佳的,绑定变量,避免了类似sql语句拼接、闭合等非法操作。
Webshell流量特征分析:中国菜刀:payload特征:
PHP:
ASP: 数据包流量特征:
1,请求包中:ua头为百度,火狐
2,请求体中存在eavl,base64等特征字符
冰蝎:paylaod分析:php在代码中同样会存在eval或assert等字符特征
在aps中会在for循环进行一段异或处理,在jsp中则利用java的反射,所以会存在ClassLoader,getClass().getClassLoader()等字符特征
冰蝎2.0流量特征:
第一阶段请求中返回包状态码为200,返回内容必定是16位的密钥
建立连接后的cookie存在特征字符
所有请求 Cookie的格式都为: Cookie: PHPSESSID=; path=/;
冰蝎3.0流量特征:
请求包中content-length 为5740或5720(可能会根据Java版本而改变)
采用动态二进制加密,与检测传统的网站管理工具不同的,中国菜刀、中国蚁剑、c刀等都从POST请求中去提取特征,而冰蝎在通信过程中使用加密传输无法获取明文,因此,利用冰蝎在和服务端通信过程中会获取密钥的特性去检测
文件包含:原理就是注入一段用户能控制的脚本或代码,并让服务端执行
文件包含函数:PHP:include()、include_once()、require()、require_once()
Php伪协议:file:// — 访问本地文件系统:使用file://协议去包含本地的phpinfo.php
php协议:// — 访问各个输入/输出流(I/O streams),php://filter用于读取源码:php://input用于执行php代码。
zip协议:// — 压缩流,可以访问压缩文件中的子文件,更重要的是不需要指定后缀名,可修改为任意后缀:jpg png gif xxx等等,涉及一些ctf的题目
任意文件下载:利用信息收集信息>猜路径 >>下载配置文件/代码文件 >> 利用服务器软件漏洞> shell> 提权)
任意文件下载漏洞的利用主要是为了信息收集,我们通过对服务器配置文件的下载,获取到大量的配置信息、源码,从而根据获取的信息来进一步挖掘服务器漏洞从而入侵。下载常规的配置文件,例如: ssh,weblogic,ftp,mysql等相关配置下载各种.log文件,从中寻找一些后台地址,文件上传点之类的地方,
下载web业务文件进行白盒审计,利用漏洞进一步攻入服务器
猜解Windows路径:C:\boot.ini //查看系统版本 C:\Windows\System32\inetsrv\MetaBase.xml //IIS配置文件 C:\Windows\repair\sam //存储系统初次安装的密码
Linux:/root/.ssh/authorized_keys
/usr/local/app/php5/lib/php.ini //PHP配置文件
/etc/httpd/conf/httpd.conf //apache配置文件
修复:对下载路径进行过滤,如下载前对传入的参数进行过滤,并且对下载文件类型进行检查,是否是允许下载的类型过滤.(点),使用户在url中不能回溯上级目录
XSS:反射型:XSS攻击脚本被Web服务器反射回来给浏览器解析执行。
存储型:是攻击者将恶意脚本代码存储到Web服务器中并被解析,客户当访问到这网页时将受到攻击
DOM型:基于DOM文档对象模型的一种漏洞,所以受客户端浏览器的脚本代码所影响
区别:攻击对象不同:反射型XSS的被攻击对象一般是攻击者去寻找的,存储型XSS是广撒网的方式或者指定的方式,DOM型XSS的被攻击对象其实和反射型XSS被攻击对象差不多,就是给攻击对象放送URL。解析位置不同:反射型XSS的脚本被解析的地方是浏览器,而存储型XSS的脚本被解析的地方是服务器,DOM型XSS也是浏览器,所以DOM型又叫DOM反射型XSS。但是反射型XSS需要联网,而DOM型不需要!
存储时间不同:反射型XSS没有持久性,存储型XSS是存储在服务器上,只要服务器不挂机或者是被干掉,就一直会有,DOM型XSS和反射型差不多
防御:使用XSS Filter,即跨站脚本过滤器,用于分析用户提交的输入,并过滤可能存在的脚本攻击及恶意的HTML或简单的HTML格式错误等
对特殊符号及特殊语句进行的严格过滤
设置黑名单和白名单
安全狗绕过:waf的检测机制是正则匹配(正则偏多)还有字符串强匹配,还有语义解析特殊字符绕过 编码绕过 等价替换(利用其他函数代替)
文件上传绕过:客户端检测绕过:修改脚本JS,将自定义的文件类型后缀添加进去。在上传时使用Burp拦截数据,将其中的扩展名改为php,就可以绕过客户端验证。
服务端检测绕过:mime验证绕过:上传php文件时,并使用 Burp 拦截查看 MIME 类型,更改 Content-Type 即可通过验证。
黑白名单
Spring框架漏洞
Spring Security OAuth2是为Spring框架提供安全认证支持的一个模块。Spring Security OAuth2处理认证请求的时候如果使用了whitelabel views,response_type参数值会被当做Spring SpEL来执行,攻击者可以在被授权的情况下通过构造response_type值也就是通过构造恶意SpEL表达式可以触发远程代码执行漏洞。
Struts2
现阶段已知的S2poc大多数都是远程命令执行漏洞,主要出现位置有:url中,报文内容中,content-type中;
S2-052:REST插件使用到XStreamHandler处理xml数据,由于未对xml数据做任何过滤,在进行发序列xml数据转换为Object时导致RCE
2-053:Struts2在使用Freemarker模板引擎的时候,同时允许解析OGNL表达式,导致用户输入的数据本身不会被OGNL解析,但由于被Freemarker解析一次后变成离开一个表达式,被OGNL解析第二次,导致任意命令执行漏洞。
最新漏洞Spring Framework远程代码执行漏洞
发布时间 2022-03-31 JDK 版本 >= 9
使用了 Spring 框架或衍生框架
项目中 Controller 参数接收实体类对象并存在代码调用
struts2框架漏洞 复现过,content-type出现异常字段,非MIME类型标识
2.字段格式为典型的注入代码格式%{ognl}
3.存在命令执行方法java.lang.ProcessBuilder().start()
4.执行命令“whoami”,返回包中返回执行成功信息“root”
5.出现类似于“3345*23565”的日志,通常都是扫描器扫描的日志
Windows常见命令
netstat -ano
taskkill | -f | -t | im 6140
Ipconfig
chmod 777 *ch(执行所有.ch文件)
Linux常见命令
rm -rf 被删除的目录的路径
mkdir 新目录的路径
cp 被复制的文件的路径 目标目录的路径
显示文件全部内容:cat
日志
windows 主要有以下三类日志记录系统事件:应用程序日志、系统日志和安全日志
系统日志: %SystemRoot%\System32\Winevt\Logs\System.evtx
应用程序日志:%SystemRoot%\System32\Winevt\Logs\Application.evtx
安全日志:%SystemRoot%\System32\Winevt\Logs\Security.evtx
Linux
日志默认存放位置:/var/log/
查看日志配置情况:more /etc/rsyslog.conf
nmap -p n1,n2… IP nmap指定端口扫描命令
frp 是一个专注于内网穿透的高性能的反向代理应用,支持 TCP、UDP、HTTP、HTTPS 等多种协议。可以将内网服务以安全、便捷的方式通过具有公网 IP 节点的中转暴露到公网
ps -l(ps -u)#仅查看隶属于自己进程的详细信息
ps aux(ps -le) #查看所有用户执行的过程的详细信息
ps -o pid,comm,ni 列出占用CPU最多的5个进程,并按从大到小进行排序
Linux
netstat命令参数:
-t : 指明显示TCP端口
-u : 指明显示UDP端口
-l : 仅显示监听套接字(所谓套接字就是使应用程序能够读写与收发通讯协议(protocol)与资料的程序)
-p : 显示进程标识符和程序名称,每一个套接字/端口都属于一个程序。
-n : 不进行DNS轮询,显示IP(可以加速操作)
Windows
netstat -ano 查看端口占用情况
netstat -ano | findstr xxxx.查看某个端口被占用情况
taskkill /pid xxxx -t -f 结束指定进程