zoukankan      html  css  js  c++  java
  • web安全

    Web安全面试经验

    零、前言

    前段时间主要在准备春招和某个比赛,春招面试了几家大厂,最终选择去阿里。面试是个历练和学习的过程,这里将一些经验和题目分享一下,因为直接透漏面/笔试题目可能不太好,因此这里仅分享一些通用性的题目,有些题目并没有标准答案,可以一起讨论。

    一、安全

    1、SQL注入的原理是什么

    用户可控的参数拼接到SQL语句中,导致数据操作时执行了额外的SQL语句。

    2、SQL盲注有哪些类型,盲注如何利用

    SQL盲注一般分为基于布尔的盲注和基于时间的盲注。
    时间盲注相关函数:BENCHMARK(100000,MD5(1)) 、sleep(5)、笛卡儿积
    https://p0sec.net/index.php/archives/117/
    https://www.cdxy.me/?p=789
    使用dnslog可以更方便的获取数据,此方法仅限于windows平台,使用load_file()函数发起dns请求。
    https://www.cnblogs.com/afanti/p/8047530.html

    3、SQL报错注入常用的函数有哪些

    floor()+count()+group by、exp()、extractvalue()、updatexml()+substr()、name_const()
    https://www.freebuf.com/articles/web/175049.html
    报错的原理:
    https://www.cnblogs.com/xdans/p/5412468.html

    4、SQL注入绕过相关

    过滤空格:%09 %0a %0b %0c %0d %a0 /**/
    过滤逗号:
    a、对于substr()、min()可以使用from for语句
    select substr(user(),1,1) 等价于 select substr(user() from 1 for 1)
    b、联合查询的字段使用join
    union select 1,2 等价于 union select * from (select 1)a join(select 2)b
    c、使用like
    select substr(user(),1,1) == ‘r’ 等价于 select user() like “r%”
    d、对于linit可以使用offset
    select * from table limit 0,1 等价于 select * from table limit 1 offset 1
    过滤单引号:
    a、十六进制
    ‘user’=>0x7573657273
    b、宽字节
    过滤等号:
    a、<> : ?id=’ and 1<>1
    b、like : ?id=’ and select user() like ‘r%’
    c、greatest : ?id=’ union select greatest(substr(select user(),1,1),98)
    5、order by 后的注入(头条,科恩)
    a、无limit
    select * from user order by id and select extracvalue(concat(0x7e,(select user()),0x7e))
    b、有limit
    select * from user order by id limit 1,1 procedure analyse(extractvalue(1,concat(0x7e,user())),1)

    5、如何防止SQL注入

    a、参数过滤
    b、SQL预编译
    c、存储过程
    d、使用框架API

    6、预编译的原理是什么

    这里的预编译是在数据库层面做的,使用预编译的时候客户端会首先将SQL语句模板发送到数据库进行编译,然后在将接收到的参数值填充到已经编译好的模板中(根据占位符),进行变量绑定,这样变量的值就不会改变SQL语句的结构。这里有个链接:
    https://www.zhihu.com/question/43581628
    一个更好理解的解释:
    采用了PreparedStatement,就会将sql语句:”select id, no from user where id=?” 预先编译好,也就是SQL引擎会预先进行语法分析,产生语法树,生成执行计划,也就是说,后面你输入的参数,无论你输入的是什么,都不会影响该sql语句的 语法结构了,因为语法分析已经完成了,而语法分析主要是分析sql命令,比如 select ,from ,where ,and, or ,order by 等等。所以即使你后面输入了这些sql命令,也不会被当成sql命令来执行了,因为这些sql命令的执行, 必须先的通过语法分析,生成执行计划,既然语法分析已经完成,已经预编译过了,那么后面输入的参数,是绝对不可能作为sql命令来执行的,只会被当做字符串字面值参数。所以sql语句预编译可以防御sql注入。
    注意:预编译无法防御order by后面的注入,因为order by参数化传入后不会被执行,因此只能拼接,可能会造成注入。

    7、反射型XSS与DOMXSS的区别

    反射型与DOM型XSS一般都是通过构造特定的URL来攻击,反射型在用户点击时会在返回的页面触发,而DOM型一般是在前端js处理DOM节点时动态产生的,它不会经过后端处理。

    8、如何防御XSS

    a、httponly
    b、输入检查
    c、输出检查(html encode、js encode)
    d、使用模板引擎
    e、CSP(内容安全策略)

    9、CSRF的原理什么

    当用户登陆A网站且登陆凭据未消失时,黑客可以在在B站设置恶意的请求操作,诱导用户访问B站,用户在访问B站时会在不知情的情况下自动向A站发送恶意请求。

    10、如何防止CSRF

    a、关键操作设置验证码
    b、检查referer
    d、设置token

    11、XXE漏洞原理及防御

    原理
    xml是一种文本格式,用以数据存储和交互。其中实体是定义文本或字符的变量,实体可以从内部或外部引用。外部引用就是通过SYSTEM关键词引入一个地址,这个地址就是实体的位置,它可以是一个本地文件或者是一个外部文件。
    防御
    过滤xml数据;
    在解析xml时禁止解析外部实体。

    12、SSRF漏洞以及一些协议

    原理:服务端请求伪造,模拟服务器,向内网发起请求从而进行攻击。
    协议:http、https、ftp、file、gopher、dict
    https://blog.chaitin.cn/gopher-attack-surfaces/

    13、PHP变量覆盖漏洞及预防原理

    函数:
    a、全局变量覆盖
    b、$$
    c、extract
    d、parse_str
    e、import_request_variables
    防御:做判断,已存在的变量不覆盖

    14、PHP代码执行函数

    函数:
    a、eval
    b、assert
    c、preg_replace
    d、call_user_func
    e、动态函数调用

    15、静态代码审计工具的原理

    1、遍历所有文件,寻找请求处理/逻辑处理代码文件,忽略类定义/函数定义的文件
    2、对文件进行数据搜索,统计变量/函数(危险函数、安全函数)定义信息、编码信息以及过滤信息等,生成摘要文件
    3、对代码进行编译分析,生成抽象语法树、控制流图等
    4、根据数据搜索的信息,寻找危险函数的调用位置,进行溯源和污点追踪,判断是否可控、是否存在函数过滤
    5、输出报告

    https://blog.csdn.net/u011721501/article/details/46271551

    16、反序列化漏洞的原理及防御

    原理:
    序列化是对对象的操作,使其便于在网络中传输或存储,反序列化就是将其还原的过程。以Python为例,如果对象存在__reduce__()魔术方法,那么在反序列化中就是自动执行其中的代码,造成代码执行。
    场景:
    以Django为例,Django中的session一般会存储在数据库、文件或者cookie中,在cookie中是序列化之后的数据。那么就可以构造POC通过session攻击django。
    防御:
    1、检测输入端的数据
    2、在反序列化的时候执行白名单检测,hook __reduce__()函数,不允许危险函数执行

    https://blog.csdn.net/yanghuan313/article/details/65010925

    17、Python沙箱逃逸

    1、花式导入:__import__() importlib
    2、编码:base64、rot13等
    3、SSTI

    18、Django安全机制

    Django 安全

    https://www.leavesongs.com/PENETRATION/python-string-format-vulnerability.html

    http://xxlegend.com/2015/04/01/Django%E5%AE%89%E5%85%A8%E6%9C%BA%E5%88%B6/

    19、Mysql写shell的思路有哪些

    a、ouffile函数导出一句话(需要写文件权限并知道网站路径)
    b、开启mysql日志,向日志写shell

    20、Mysql 提权的思路有哪些,什么原理

    a、UDF提权(root权限)
    UDF即是User Define Function,我们通过上传一个dll文件(里面包含了自定义的函数),然后在数据库里通过CREATE FUNCTION来调用这个dll,就可以使用其中的函数然后执行系统命令。实际上就是利用MySQL的高权限进行提权。
    b、MOF提权(导出文件权限、mof写权限、win2003及以下)
    MOF是用来进行进程监控的文件,每隔5秒执行一次,具有系统权限,那么我们就可以通过mysql向mof的目录ouf_file一个mof函数,其中包含写好的提权脚本,即可完成提权。
    c、启动项提权(root权限、导出文件权限)
    在开机启动项写入VBS脚本

    21、密码找回可能涉及的逻辑漏洞

    a、凭据泄露
    b、凭据可猜解
    c、跳转逻辑可修改
    d、用户混淆
    https://www.freebuf.com/articles/web/176211.html

    22、收集域名信息的方法

    a、爆破猜解
    b、搜索引擎
    c、DNS记录
    d、爬虫搜索
    e、ip、邮箱、whois反查
    f、https证书
    g、威胁情报接口

    23、寻找域名真实的IP

    a、子域名查询
    b、PDNS
    c、邮件订阅(目标站点给自己发邮件,在邮件头可获得真实ip)
    d、漏洞造成的信息泄露
    e、根据网站功能诱导网站访问目标服务器

    24、CSP、CORS

    CSP:内容安全策略:限定当前网页允许加载资源的源

    https://developer.mozilla.org/zh-CN/docs/Web/HTTP/CSP

    CSP严格动态:

    https://blog.cal1.cn/post/0CTF%202018%20Quals%20Bl0g%20writeup

    CORS:跨域资源共享:设置跨域资源请求的策略

    25、代码审计的思路

    1、用户输入入手,追踪变量,判断每一处代码逻辑是否可以利用,可能是一个函数或条件判断
    2、从危险函数入手,逆向追踪可疑的参数,看那些用户可控的变量是否可利用
    3、根据前端功能点,定向审计

    26、渗透的思路,给你一个站如何入手

    1)信息收集
    a. 服务器的相关信息(真实ip,系统类型,版本,开放端口,WAF等)
    b. 网站指纹识别(包括,cms,cdn,证书等),dns记录
    c. whois信息,姓名,备案,邮箱,电话反查(邮箱丢社工库,社工准备等)
    d. 子域名收集,旁站查询(有授权可渗透),C段等
    e. google hacking针对化搜索,pdf文件,中间件版本,弱口令扫描等
    f. 扫描网站目录结构,爆后台,网站banner,测试文件,备份等敏感文件泄漏等
    i. 传输协议,通用漏洞,exp,github源码等

    2)漏洞挖掘
    a、 浏览网站,看看网站规模,功能,特点等
    b.、端口,弱口令,目录等扫描
    c.、XSS,SQL注入,命令注入,CSRF,cookie安全检测,敏感信息,通信数据传输,暴力破解,任意文件上传,越权访问,未授权访问,目录遍历,文件 包含,重放攻击(短信轰炸),服务器漏洞检测,最后使用漏扫工具等

    3)漏洞利用 | 权限提升

    4)清除测试数据 | 输出报告
    a.、日志、测试数据的清理
    b.、总结,输出渗透测试报告,附修复方案

    27、内网渗透思路

    理解什么域,什么是工作组

    https://www.freebuf.com/company-information/172630.html

    http://www.cnblogs.com/iamstudy/articles/2018_defcon_china_pentest_writeup.html?from=groupmessage&isappinstalled=0https://github.com/Dm2333

    28、内网渗透中如何隐蔽的回传数据

    https://xz.aliyun.com/t/2214

    https://www.cnblogs.com/LittleHann/p/8656621.html

    29、什么是水坑攻击

    一般是针对政府、金融等高级目标的攻击,通过收集目标信息,查看目标经常访问的一些网站、服务等,然后攻破这些系统,修改其功能。当目标去访问时会对目标执行恶意操作。

    30、DDOS的种类及其原理

    a、ICMP Flood:向目标主机发送大量ICMP报文
    b、NTP Flood:NTP是基于UDP的网络时间同步协议,攻击者攻击时构造特殊的数据包,将目的ip指向NTP服务器,源ip设定未目标服务器,当NTP响应的时候会将数据包全部打到目标服务器。然后利用一些指令进行放大攻击,比如monlist会返回最近与NTP同步过时间的服务器,那么就会产生大量的响应报文。
    c、SYN Flood:利用三次握手原理,向服务器发送大量建立TCP的请求报文,但是不进行回应,也就是第三次握手不完成,导致服务器需要维护大量的半连接,从而造成资源的消耗。
    d、DNS Flood:发送大量DNS解析请求,造成DNS服务器资源耗尽,使其他Web服务无法被解析。

    31、DDOS判定的一些方法

    a、查看服务器运行状态,比如CPU占用,网卡速率
    b、查看服务运行状态,是否卡慢、无法访问等
    c、分析流量,看是否有大量异常连接,比如TCP半连接,单个IP高数量的链接

    32、DDOS防御的一些手段

    a、关闭一些不必要的服务和端口
    b、流量清洗,一些设备
    c、与运营商合作,进行分流
    d、分布式集群部署,单台服务器配置多个ip
    e、DNS解析防御、CDN

    33、Docker与虚拟机的区别

    传统虚拟机是在宿主机操作系统上再虚拟出一个完整的操作系,然后基于这个虚拟的系统提供服务。Docker实现了对宿主机操作系统的共享,只需要在Docker引擎上运行容器即可。容器基于沙箱机制,容器之间的资源和进程完全隔离。因此相比于虚拟机,Docker更快也更轻量级,同时又能保证安全性。

    34、Docker的安全性问题

    Docker的安全性是指Docker容器是否会对宿主机造成影响,是否会对其他容器产生影响。Docker的安全性主要靠隔离来实现的,它的隔离是基于Linux的namespace,但是namespace的环境本身并不是完全隔离的,比如一些文件、设备、命令执行结果等,所以相比传统的虚拟机,Docker的安全性要差一些。从攻击角度主要有以下几个方面:
    a、Docker源:恶意镜像、镜像中存在漏洞软件、中间人篡改镜像
    b、Dockers架构缺陷及本身安全问题:自身的一些CVE,信息泄露,权限绕过等

    https://www.sohu.com/a/156307982_411876
    https://www.freebuf.com/articles/system/69809.html

    二、项目

    项目根据自己的实际情况梳理清楚,一定要说的明白。用到了哪些技术栈、相比类似的产品/项目有哪些创新,关键问题如何解决等。

    三、其他

    1、编程,根据自己所熟悉的语言准备即可,比我我熟悉python,可能会问到python爬虫的实现。

    2、算法,常见的刷题中的算法,比如快排、递归以及动归等;如果简历写了机器学习也要准备常见的算法。

    3、论文,如果面试前有一篇自己的论文,面试官会很愿意聊。

    4、经历,比如比赛、实习等。

  • 相关阅读:
    Codeforces 1255B Fridge Lockers
    Codeforces 1255A Changing Volume
    Codeforces 1255A Changing Volume
    leetcode 112. 路径总和
    leetcode 129. 求根到叶子节点数字之和
    leetcode 404. 左叶子之和
    leetcode 104. 二叉树的最大深度
    leetcode 235. 二叉搜索树的最近公共祖先
    450. Delete Node in a BST
    树的c++实现--建立一棵树
  • 原文地址:https://www.cnblogs.com/hansermukk/p/11164758.html
Copyright © 2011-2022 走看看