华云an-渗透测试实习生面试记录

记录一次渗透测试实习生的面试经过,然后自己整理的答案,希望对大家有帮助

1、渗透的流程

渗透测试的流程主要包括以下几个步骤:

  1. 明确目标:确定需要渗透的资产范围、规则和需求,例如确定渗透的程度、时间限制、能否修改上传等。这是渗透测试的第一步,为后续的工作奠定基础。
  2. 信息收集:在确定了目标之后,需要收集尽可能多的信息,包括目标系统的IP地址、开放的端口、运行的服务、使用的操作系统、应用软件的版本等。信息收集的方式可以是主动的,例如使用扫描工具进行扫描,也可以是被动的,例如通过搜索引擎搜索相关信息。
  3. 漏洞探测(挖掘):根据收集到的信息,分析目标系统可能存在的漏洞,并进行探测和挖掘。这个过程可以通过使用各种渗透测试工具、脚本和手动测试来完成。
  4. 漏洞验证(利用):在找到可能的漏洞后,需要对其进行验证,确认其是否真的存在并可以被利用。这个过程通常需要构造特定的攻击代码或数据来进行测试。
  5. 提升权限:一旦成功利用漏洞进入目标系统,可能需要进行提权操作,以获得更高的权限,从而能够访问更多的数据和执行更多的操作。
  6. 清除痕迹:在完成渗透测试后,需要清除在目标系统上留下的所有痕迹,以确保不会给目标系统带来额外的风险。
  7. 编写渗透测试报告:将整个渗透测试的过程、结果和建议写成报告,提交给客户或相关部门。报告中应包含详细的步骤、发现的问题、利用的方法以及改进的建议等。

2、信息收集如何处理子域名爆破中的泛解析问题和绕过CDN寻找真实IP

对于子域名爆破中的泛解析问题,可以采取以下策略:

  1. 识别泛解析:首先,通过访问一个不存在的子域名,观察其解析行为。如果无论访问哪个不存在的子域名都指向同一个IP地址或一组IP地址,那么很可能存在泛解析。
  2. 构建黑名单:记录这些由泛解析返回的IP地址,形成一个黑名单。在爆破过程中,如果解析的IP地址在这个黑名单中,就默认跳过,以避免不必要的测试和误报。
  3. 利用TTL值:除了IP黑名单外,还可以利用TTL(Time To Live)值来辅助判断。在权威DNS中,泛解析记录的TTL通常是相同的。如果某个子域名的TTL与其他子域名不同,那么它可能不是由泛解析产生的。

绕过CDN寻找真实IP的方法包括:

  1. 邮件订阅查找:很多网站都提供RSS邮件订阅功能。通过订阅目标网站的邮件,并在邮件源码中查找,可能会发现服务器的真实IP地址。这是因为有些邮件系统在处理邮件时,会将发送邮件的服务器的IP地址包含在邮件头信息中。
  2. 网站漏洞利用:通过寻找和利用目标网站的漏洞,如XSS盲打、命令执行反弹shell、SSRF等,有时可以直接或间接地获取到网站的真实IP地址。这需要具备一定的漏洞挖掘和利用能力。
  3. 网络空间搜索引擎:利用一些网络空间搜索引擎,如Shodan、Censys等,可以通过特定的查询语句来搜索目标网站的真实IP地址。这些搜索引擎会爬取互联网上的设备信息,并提供查询接口供用户搜索。
  4. Zmap扫描:如果需要找到特定网站的真实IP地址,可以使用Zmap等工具对全网进行扫描。首先,从相关机构获取目标网站的IP段信息,然后使用Zmap对这些IP段进行扫描,寻找开放特定端口(如80端口)的主机,并通过抓取banner信息等方式确认目标网站的真实IP地址。

3、PHPINFO页面应该关注哪些信息

  1. PHP版本:了解正在运行的PHP版本对于确定是否存在已知的安全漏洞至关重要。较旧的PHP版本可能包含未修复的漏洞,这些漏洞可以被攻击者利用。
  2. 服务器信息:PHPINFO页面通常会显示Web服务器的名称和版本(如Apache、Nginx等)。这些信息对于确定服务器的潜在攻击面很重要。
  3. 已加载的模块/扩展:PHPINFO页面列出了所有已加载的PHP扩展。某些扩展可能会引入安全风险,特别是如果它们包含已知漏洞或配置不当。
  4. 配置选项:关注与安全相关的PHP配置选项,如allow_url_fopenregister_globalsmagic_quotes_gpcdisplay_errors等。这些选项的不当配置可能导致安全漏洞。
  5. 禁用的函数:通过disable_functions指令,可以查看PHP环境中被禁用的函数列表。这有助于了解哪些功能被限制或禁用,可能影响到潜在的攻击向量。
  6. 环境变量:环境变量部分可能包含敏感信息,如数据库凭据、API密钥等。虽然这些信息通常不应该出现在PHPINFO输出中,但配置错误可能导致泄露。
  7. 会话和Cookie配置:查看与会话和Cookie相关的配置,如session.save_path(会话保存路径)和session.cookie_secure(是否仅通过HTTPS传输Cookie)等,以确保它们的安全配置。
  8. 数据库支持:如果PHP环境配置了数据库支持,PHPINFO页面将显示有关数据库客户端库和配置的信息。这些信息可能有助于攻击者了解如何与目标数据库交互。
  9. OPcache状态(如果启用):OPcache是PHP的一个内置优化器,用于提高PHP脚本的执行性能。关注OPcache的状态和配置可以帮助评估其对安全性的影响。

4、有没有了解权限维持

是的,我对权限维持有一定的了解

权限维持,也称为持久性访问或后门技术,是攻击者在获得对系统的初步访问权后采取的一系列措施,以确保即使系统重启、凭据更改或其他中断访问的情况发生,他们仍能保持对系统的访问。这是攻击者为了长期控制目标系统而采取的一种策略。

权限维持的技术和方法多种多样,包括但不限于:

  1. 创建后门账户:攻击者可能会在系统中创建隐藏的或伪装的用户账户,以便以后可以轻松重新获得访问权。
  2. 安装恶意软件:例如Rootkit,这是一种能够隐藏自身存在并允许攻击者远程访问系统的恶意软件。
  3. 修改系统配置:攻击者可能会修改系统的启动脚本、服务或其他配置,以便在系统启动时自动执行恶意代码或重新建立远程访问连接。
  4. 计划任务:在Windows系统中,攻击者可能会使用“任务计划程序”来创建定期运行恶意代码的任务。在Linux系统中,攻击者可能会使用cron作业来实现类似的目的。
  5. 利用系统漏洞:如果攻击者发现了系统中的某个漏洞,并知道该漏洞的利用方法,他们可能会利用这个漏洞来重新获得访问权,即使系统的凭据已经更改。
  6. 网络隧道:攻击者可能会建立加密的网络隧道,以绕过防火墙和其他网络安全措施,从而保持对目标系统的访问。
  7. Webshell:在Web应用程序中,攻击者可能会上传Webshell,这是一种允许他们通过Web浏览器远程执行命令的恶意脚本。

5、举例一个漏洞详细描述

当然,我可以为您详细描述一个著名的漏洞——永恒之蓝(EternalBlue)。

漏洞名称:永恒之蓝(EternalBlue)

漏洞编号:CVE-2017-0144(针对SMBv1的漏洞)

漏洞描述: 永恒之蓝是一个在Microsoft Windows操作系统中SMBv1(Server Message Block version 1)协议实现上存在的远程代码执行漏洞。攻击者可以利用此漏洞,在不需要身份验证的情况下,通过特制的SMB数据包远程执行任意代码,从而控制目标系统。

漏洞影响: 该漏洞影响了大量未打补丁的Windows系统,包括Windows XP、Windows Server 2003、Windows Vista、Windows Server 2008、Windows 7、Windows Server 2008 R2等版本。由于SMB协议在Windows网络中的广泛使用,该漏洞的潜在影响范围非常广泛。

漏洞利用: 攻击者可以利用永恒之蓝漏洞,通过发送特制的SMB数据包到目标系统的445端口(SMB服务的默认端口),触发漏洞并执行恶意代码。一旦成功利用,攻击者可以在目标系统上执行任意操作,如安装恶意软件、窃取数据或创建后门账户等。

漏洞修复: Microsoft已经发布了针对永恒之蓝漏洞的安全补丁。为了防范该漏洞的攻击,建议用户尽快安装适用于其Windows版本的最新安全补丁,并禁用不必要的SMBv1协议。此外,还可以采取其他安全措施,如使用防火墙限制对445端口的访问、启用网络隔离和分段等。

6、输出到href的XSS如何防御

输出到 href 属性的跨站脚本(XSS)攻击是一种常见的安全威胁,攻击者尝试在网页的链接中注入恶意脚本,当用户点击这些链接时,恶意脚本将在用户的浏览器中执行。

  1. 输入验证和过滤
    • 对所有用户输入进行严格的验证和过滤,确保它们不包含恶意代码。
    • 使用白名单验证方法,只允许已知的、预期的字符或模式通过。
  2. 输出编码
    • 在将任何数据输出到 href 属性之前,确保对其进行适当的编码。这可以防止浏览器将注入的内容解释为代码。
    • 使用例如 HTML 实体编码(&, <, >, " 等应被替换为 &amp;, &lt;, &gt;, &quot;)来转义特殊字符。
  3. 使用安全的API
    • 使用现代的、安全的API和框架,这些API和框架通常内置了防御XSS的机制。
    • 例如,在JavaScript中,使用 textContentinnerText 而不是 innerHTML 来设置元素的内容,以避免HTML解析和潜在的脚本执行。
  4. 内容安全策略(CSP)
    • 实施内容安全策略(CSP)来限制页面可以加载和执行哪些资源。
    • CSP 允许你指定一个白名单,列出允许加载和执行脚本的源。
  5. 避免直接在 href 中使用JavaScript
    • 尽量避免在 href 中使用 javascript: 协议,因为这可能使你的代码容易受到注入攻击。
    • 如果需要使用JavaScript来处理点击事件,建议使用事件监听器而不是内联JavaScript。
  6. 用户教育和培训
    • 对用户进行安全教育和培训,让他们了解如何识别可疑链接和避免点击它们。
    • 鼓励用户使用最新版本的浏览器,并启用内置的安全功能。
  7. 定期更新和审计
    • 定期更新你的网站、框架和库,以确保你使用的是最新和最安全的版本。
    • 定期进行安全审计和代码审查,以识别和修复潜在的安全漏洞。
  8. 使用HTTP-only Cookies
    • 设置HTTP-only标志可以防止通过JavaScript访问cookie,这增加了攻击者利用XSS漏洞窃取会话cookie的难度。

7、samesite防御CSRF的原理

SameSite是一种cookie属性,它用来帮助防御跨站请求伪造(CSRF)攻击。这种属性的主要工作原理是限制cookie在何种情况下可以被发送到服务器。它有三个可能的值:Strict、Lax和None。

  1. Strict:当SameSite属性设置为Strict时,浏览器将只在同一站点的上下文中发送cookie。这意味着,如果请求是从其他站点发出的,即使是用户主动触发的(例如,点击一个链接),浏览器也不会包含cookie。这是最严格的防御方式,可以有效防止CSRF攻击,但可能会对用户体验造成一些影响,特别是在第三方登录和跨站点导航的场景中。
  2. Lax:Lax模式相对宽松一些。在这种模式下,浏览器将允许在顶级导航(即从地址栏输入URL、点击链接等)时将cookie发送到同一站点。但是,对于嵌入在其他站点中的iframe或通过XHR/fetch API发出的跨站点请求,浏览器将不会发送cookie。这提供了一种平衡安全性和用户体验的方式,但在某些情况下可能无法完全防止CSRF攻击。
  3. None:当SameSite属性设置为None时,浏览器将不会对cookie的发送施加任何限制。然而,出于安全考虑,大多数现代浏览器还要求在使用None值的同时设置Secure属性,以确保cookie只能通过HTTPS协议发送。如果未设置Secure属性,浏览器可能会忽略SameSite=None并回退到默认行为(通常是Lax模式)。

8、讲讲CSRF的防御

CSRF(跨站请求伪造)是一种常见的网络攻击,攻击者利用用户在其他网站的身份,发送伪造的请求到目标网站,执行未授权的操作。为了防御CSRF攻击,可以采取以下几种措施:

  1. 使用CSRF令牌
    • CSRF令牌是一种随机生成的字符串,用于确保请求是从合法的源发送的。
    • 服务器在表单中嵌入一个CSRF令牌,并在提交表单时要求包含该令牌。当接收到请求时,服务器会验证令牌的有效性。
    • 攻击者无法获取到有效的CSRF令牌,因此无法伪造合法的请求。
  2. 检查请求的来源
    • 通过检查HTTP请求头中的Referer字段,可以验证请求是否来自预期的页面。
    • 服务器可以拒绝来自未知或不受信任的Referer的请求。
    • 但要注意,Referer头可以被伪造或禁用,因此不能完全依赖它。
  3. 使用SameSite Cookie属性
    • 设置Cookie的SameSite属性为StrictLax可以限制Cookie在跨站点请求中的发送。
    • Strict模式仅在请求来自同一站点时发送Cookie,而Lax模式允许在顶级导航时发送Cookie。
    • 这有助于防止攻击者利用用户的Cookie进行CSRF攻击。
  4. 验证HTTP请求方法
    • 对于可能引发状态更改的请求(如修改、删除操作),应使用POSTPUTDELETE等HTTP方法,而不是GET方法。
    • GET请求容易被攻击者嵌入在链接或图片中,从而触发CSRF攻击。
  5. 限制跨域资源共享(CORS)
    • 通过配置CORS策略,限制哪些源可以访问你的API或资源。
    • 这可以防止攻击者从其他域发送伪造的请求到你的服务器。
  6. 用户教育和培训
    • 教育用户识别可疑的链接和表单,并避免在不受信任的网站上输入敏感信息。
    • 鼓励用户使用最新版本的浏览器和插件,以确保其安全性。
  7. 定期更新和审计
    • 定期更新你的网站、框架和库,以确保你使用的是最新和最安全的版本。
    • 定期进行安全审计和代码审查,以识别和修复潜在的安全漏洞。

9、json格式的CSRF如何防御

由于JSON通常用于API请求和响应,因此防御策略可能略有不同于传统的表单提交场景。

  1. 使用CSRF令牌
    • 与表单提交类似,可以在API请求中包含一个CSRF令牌。
    • 客户端在发送JSON请求时,应将令牌作为请求头或请求体的一部分发送。
    • 服务器端验证接收到的令牌是否有效。
  2. 使用HTTP方法限制
    • 对于可能引发状态更改的请求(如创建、更新、删除资源),应使用POSTPUTPATCHDELETE等HTTP方法。
    • 避免使用GET请求进行状态更改操作,因为GET请求容易被嵌入在链接中,从而触发CSRF攻击。
  3. SameSite Cookie属性
    • 虽然SameSite Cookie主要用于防御跨站点请求伪造,但在API场景中,如果使用了Cookie进行身份验证,设置SameSite属性仍然是有益的。
    • 将SameSite设置为StrictLax可以限制Cookie在跨站点请求中的发送。
  4. Content-Type检查
    • 服务器端应验证请求的Content-Type头是否为预期的application/json或其他合适的MIME类型。
    • 这有助于防止攻击者通过伪装成其他类型的请求来绕过CSRF保护。
  5. CORS策略
    • 配置CORS(跨源资源共享)策略以限制哪些源可以访问你的API。
    • 仅允许受信任的源发送请求到你的服务器。
  6. 自定义请求头
    • 引入自定义的请求头,如X-Requested-With,并为其设置一个难以猜测的值。
    • 客户端在每次请求时都包含这个自定义头,服务器端验证其存在和正确性。
  7. OAuth 2.0 或其他身份验证机制
    • 使用OAuth 2.0或其他身份验证和授权机制来验证API请求。
    • 这些机制通常包括访问令牌或其他身份验证信息,可以增加对CSRF攻击的防御能力。
  8. 输入验证和过滤
    • 对所有从客户端接收到的数据进行严格的输入验证和过滤。
    • 确保接收到的数据符合预期的格式和范围,不包含恶意代码或注入攻击。
  9. 安全日志和监控
    • 记录所有API请求和响应的详细信息,包括请求头、请求体和响应状态。
    • 定期对日志进行审查和分析,以检测任何可疑或异常的活动。

10、浏览器解析顺序和解码顺序

浏览器解析顺序

  1. HTML解析
    • 浏览器首先获取HTML文件并开始解析。
    • HTML解析器通常以状态机的方式运行,识别标签、属性等,并构建DOM树(Document Object Model)。
  2. CSS解析
    • 在解析HTML的同时,浏览器会遇到链接到外部CSS文件或内嵌在<style>标签中的CSS代码。
    • CSS解析器会解析这些代码,生成CSSOM(CSS Object Model)。
  3. JavaScript解析
    • 当浏览器遇到<script>标签时,通常会暂停HTML解析,开始解析和执行JavaScript代码(这可能导致页面渲染的阻塞)。
    • 有一些方法可以优化这一点,如将脚本放在页面底部或使用asyncdefer属性。
  4. DOM和CSSOM合并
    • 一旦HTML和CSS都被解析完毕,浏览器会将DOM和CSSOM合并成一个渲染树(Render Tree)。
    • 渲染树只包含需要显示在屏幕上的节点。
  5. 布局和绘制
    • 根据渲染树,浏览器开始布局过程,计算每个元素的大小和位置。
    • 然后进行绘制操作,将每个节点转换为屏幕上的实际像素。

浏览器解码顺序

  1. HTML实体解码
    • 在HTML解析过程中,浏览器会遇到一些字符实体(如&amp;表示&),这些会被解码成对应的字符。
  2. URL解码
    • 当解析到如<a href="...">这样的标签时,浏览器会对URL进行解码,以便正确处理链接。
    • 特别注意的是,如果是javascript:伪协议,URL解码后可能会直接执行JavaScript代码。
  3. JavaScript解码
    • 在解析和执行JavaScript代码时,浏览器会对代码中的Unicode转义序列(如\u00a9表示©)或十六进制/八进制转义序列进行解码。

需要注意的是,浏览器的解析和解码过程并不是完全独立的,它们是相互交织的。例如,在解析HTML时可能会遇到需要解码的实体或URL,而在执行JavaScript时可能会动态地修改DOM或CSSOM。

11、过滤逗号的SQL注入如何绕过

(1)如果waf过滤了逗号,并且只能盲注,在取子串的几个函数中,有一个替代逗号的方法就是使用from pos for len,其中pos代表从pos个开始读取len长度的子串 常规写法 select substr("string",1,3)

若过滤了逗号,可以使用from pos for len来取代 select substr("string" from 1 for 3)

(2)也可使用join关键字来绕过

select * from users union select * from (select 1)a join (select 2)b join(select 3)c#相当于union select 1,2,3

(3)使用like关键字,适用于substr()等提取子串的函数中的逗号

select user() like "t%"#相当于select ascii(substr(user(),1,1))=114

(4)使用offset关键字,适用于limit中的逗号被过滤的情况,limit 2,1等价于limit 1 offset 2

select * from users limit 1 offset 2#相当于select * from users limit 2,1

12、过滤limit后的逗号如何绕过

使用offset关键字,适用于limit中的逗号被过滤的情况,limit 2,1等价于limit 1 offset 2

select * from users limit 1 offset 2#等价于 select * from users limit 2,1

13、说说fastjson相关漏洞

  1. 反序列化漏洞:Fastjson在处理JSON数据时,会将JSON字符串反序列化为Java对象。如果攻击者能够控制反序列化的输入,他们可能会构造恶意的JSON数据来触发反序列化漏洞,从而执行任意代码或访问敏感数据。为了防御这种攻击,Fastjson提供了一些安全特性,如白名单机制、autoDetectFieldName关闭等,但仍然需要谨慎处理反序列化操作。
  2. 远程代码执行漏洞:在某些情况下,攻击者可以利用Fastjson的漏洞来执行远程代码。例如,当Fastjson使用黑白名单的方法来防御反序列化漏洞时,攻击者可能会发现新的反序列化Gadgets类,从而绕过黑白名单防御机制,实现远程命令执行。这种漏洞对系统的安全性构成了严重威胁,因此需要及时更新Fastjson版本并采取相应的安全措施。
  3. 任意文件写入漏洞:在某些Fastjson版本中,攻击者可以利用特定条件下的反序列化漏洞来实现任意文件写入。这种漏洞可能会导致攻击者能够在目标系统上写入恶意文件,从而进一步攻击系统或窃取敏感数据。为了防止这种攻击,应该限制Fastjson对文件系统的访问权限,并及时更新到安全的Fastjson版本。

14、Python相关漏洞回答(flask、SSTI原理)

`1. Flask漏洞

Flask是一个流行的Python Web框架,用于构建Web应用程序。然而,就像任何其他软件框架一样,Flask也可能存在漏洞。以下是一些常见的Flask漏洞类型:

跨站脚本攻击(XSS)

如果Flask应用程序不正确地处理用户输入,并将其直接插入到HTML响应中,就可能遭受跨站脚本攻击(XSS)。攻击者可以通过注入恶意脚本来窃取用户信息、执行恶意操作或欺骗用户。

防御措施

  • 使用Jinja2模板引擎的自动转义功能,确保用户输入在渲染时被正确转义。
  • 对用户输入进行验证和过滤,只允许预期的字符或格式。
  • 使用内容安全策略(CSP)来限制页面上可执行的脚本。
跨站请求伪造(CSRF)

Flask应用程序如果不实施适当的防御措施,就可能面临跨站请求伪造(CSRF)攻击。攻击者可以通过欺骗用户在浏览器中执行恶意请求,从而在用户不知情的情况下执行敏感操作。

防御措施

  • 使用Flask-WTF或类似的库来生成和验证表单令牌。
  • 在执行敏感操作之前验证令牌。
  • 确保同源策略正确配置,以防止跨站请求。
不安全的直接对象引用

如果Flask应用程序允许用户通过URL直接访问数据库对象,并且没有适当的访问控制,就可能存在不安全的直接对象引用漏洞。攻击者可以通过修改URL中的对象ID来访问未经授权的数据。

防御措施

  • 实施适当的访问控制,确保用户只能访问他们被授权的数据。
  • 对数据库查询进行验证和过滤,以防止SQL注入等攻击。
  • 使用UUID或其他不可预测的对象标识符,而不是自增ID。
  1. 服务器端模板注入(SSTI)原理

服务器端模板注入(SSTI)是一种攻击技术,涉及将恶意模板代码注入到服务器端模板引擎中,从而导致未授权的代码执行或信息泄露。在Flask中,如果使用Jinja2模板引擎并且不正确地处理用户输入,就可能受到SSTI攻击。

攻击原理

当用户输入被直接插入到模板中并且未经适当验证或过滤时,攻击者可以利用模板引擎的功能来执行恶意代码。例如,攻击者可以尝试注入Jinja2模板代码来获取敏感信息、执行任意代码或绕过安全限制。

防御措施

  • 不要将用户输入直接插入到模板中,而是使用Jinja2的自动转义功能来确保输入被正确转义。
  • 对用户输入进行验证和过滤,只允许预期的字符或格式。
  • 使用沙箱环境或限制模板引擎的功能,以防止恶意代码的执行。
  • 更新和修补Flask和Jinja2库,以确保使用最新版本并修复已知漏洞。
  • 29
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Pluto-2003

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值