• 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、经历,比如比赛、实习等。

  • 相关阅读:
    在chrome中利用“油猴”为每个网页增加“返回顶部”功能
    EasyVS 0.3版本发布 给力变换vs编辑器主题
    python使用matplotlib绘图 barChart
    Automatic IE Testing With Python
    上网计时小助手
    关于在未安装frontpage 服务扩展的情况下创建web应用程序的问题
    申请加入了sharepoint团队
    Linq学习之旅——LINQ查询表达式
    使用 ASP.NET 创建的 XML Web 服务的概述
    用C#获取硬盘序列号,CPU序列号,网卡MAC地址
  • 原文地址:https://www.cnblogs.com/hansermukk/p/11164758.html
Copyright © 2020-2023  润新知