{"id":13797159,"url":"https://github.com/tiaotiaolong/sec_interview_know_list","last_synced_at":"2025-05-13T02:31:24.297Z","repository":{"id":105641414,"uuid":"146884367","full_name":"tiaotiaolong/sec_interview_know_list","owner":"tiaotiaolong","description":"信息安全方面面试清单","archived":false,"fork":false,"pushed_at":"2024-02-02T03:19:48.000Z","size":70,"stargazers_count":283,"open_issues_count":1,"forks_count":51,"subscribers_count":13,"default_branch":"master","last_synced_at":"2024-08-04T23:10:56.441Z","etag":null,"topics":["interview","knowledge","security"],"latest_commit_sha":null,"homepage":"","language":null,"has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/tiaotiaolong.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null}},"created_at":"2018-08-31T11:39:56.000Z","updated_at":"2024-07-17T07:58:45.000Z","dependencies_parsed_at":"2024-04-06T10:43:18.185Z","dependency_job_id":null,"html_url":"https://github.com/tiaotiaolong/sec_interview_know_list","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tiaotiaolong%2Fsec_interview_know_list","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tiaotiaolong%2Fsec_interview_know_list/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tiaotiaolong%2Fsec_interview_know_list/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tiaotiaolong%2Fsec_interview_know_list/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/tiaotiaolong","download_url":"https://codeload.github.com/tiaotiaolong/sec_interview_know_list/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":225167396,"owners_count":17431594,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["interview","knowledge","security"],"created_at":"2024-08-03T23:01:23.735Z","updated_at":"2024-11-18T11:30:48.935Z","avatar_url":"https://github.com/tiaotiaolong.png","language":null,"funding_links":[],"categories":["\u003ca id=\"8c5a692b5d26527ef346687e047c5c21\"\u003e\u003c/a\u003e收集","Others (1002)","Others"],"sub_categories":[],"readme":"**被虐经历**\n\n**知识清单**\n\n- **xss防御相关**\n    - 编码防御\n        - html实体编码\n        - js编码\n        - url编码\n        - **输出点在标签内部应该怎么防御？**\n        - **输出点在标签外部应该怎么防御？**\n        - **三种编码的关系，以及什么地方用到什么编码**\n        - **浏览器解码的过程**\n        - **开启httponly的情况下如何利用XSS漏洞**\n        - xss输出在注释里怎么利用 （换行符利用）\n        - 如果页面是gbXXX 如何利用宽字节进行xss利用\n        - 在xss利用过程中 讲 \u003c 写成 \\u003c 可以绕过安全防护 请问这个安全防护的思路是什么\n        - XSS防御的7大原则\n        - 心伤的瘦子XSS教程\n        - **富文本防御XSS的思路**\n        - 如果 ”javascript“字符串被过滤了，你的绕过思路是什么？\n            - 大小写\n            - Tab 空格 回车(%0a)\n            - 插入 “/**/” \\0 \\ \n            - 编码\n        - CSS中expression表达式可以插入xss吗\n        - 如果输出点在css style标签中 要注意expression表达式 import等之类\n\n        - **XSS编码方案(方案普遍性很高，具体要看业务场景)**(大家自行思考为什么这么做？)\n        - 关于xss编码与浏览器解码的原因 这个是个硬核知识点，基本上前端的xss安全绕过问题都是基于浏览器的特性来发现的，推荐阅读研究：[深入理解浏览器解析机制和XSS向量编码](http://bobao.360.cn/learning/detail/292.html) 这个可以解释很多标签 比如svg标签。\n       \n            - 当输出点出现在HTML标签属性：\n            \n             ```\n                \u003c -\u003e \u0026lt;\n                \u003e -\u003e \u0026gt;\n                \u0026 -\u003e \u0026amp;\n                \" -\u003e \u0026quot;\n                ' -\u003e \u0026#39\n             ```\n            \n            \n            - 当输出点出现在\u003cscript\u003e标签中。这种情况相当危险，不需要考虑xss触发，只需要考虑编写js即可\n\n            \n            ``` \n                ' -\u003e \\';\n                \" -\u003e \\\";\n                \\ -\u003e \\\\;\n                / -\u003e \\/;\n                (换行符) -\u003e \\n;\n                (回车符) -\u003e \\r;\n            ```                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    \n            \n            - 当输出点出现在body中\n            \n            ```\n                \u003c -\u003e \u0026lt;\n                \u003e -\u003e \u0026gt;\n                \u0026 -\u003e \u0026amp;\n                \" -\u003e \u0026quot;\n                ' -\u003e \u0026#39\n            ```\n            \n            - 当输出点出现在js事件中(onClick=\"你的代码\")\n            \n            ```\n                \u003c -\u003e \u0026lt;\n                \u003e -\u003e \u0026gt;\n                \u0026 -\u003e \u0026amp;\n                \" -\u003e \u0026quot;\n                ' -\u003e \u0026#39\n                \\ -\u003e \\\\;\n                / -\u003e \\/;\n                (换行符) -\u003e \\n;\n                (回车符) -\u003e \\r;\n             ```\n             \n             - 输出在URL属性中\u003cscript src=\"你的代码\"\u003e\n                - URL编码\n             \n        - **推荐阅读**\n            - [防御XSS攻击的七条原则](http://www.freebuf.com/articles/web/9977.html) \n            - [深入理解浏览器解析机制和XSS向量编码](https://www.cnblogs.com/b1gstar/p/5996549.html)  \n        \n        \n\n- **CSRF相关**\n    - 只校验Refer可以吗\n    - samesite防御csrf的原理。\n    - token放在哪里？放在cookie里可以吗？不失效可以吗？\n    - 如果后端没有session，那应该怎么防御。\n    \n- **XXE漏洞相关**\n    - XML文件格式\n    - XXE漏洞利用的方式\n    - XXE漏洞修复方案\n    - XXE漏洞\n    \n- **sql注入漏洞相关**\n    - 注入的类型\n        - 普通注入(有数据库回显)\n            - 数字型注入\n            - 字符型注入\n            \n        - 盲注\n            - 什么是盲注\n            - 三种类型\n                - 基于布尔类型的盲注\n                    - left()\n                    - substr()\n                    - version()\n                    - ascii()\n                    - user()\n                    - database()\n                    - @@basedir\n                    \n                - 基于报错的盲注\n                    - double数值类型超出范围\n                    - bigint溢出\n                    - xpath函数报错注入\n                    - extractvalue()\n                    - floor() rand() group by\n                    \n                - 基于时间延时的盲注\n                    - sleep()\n                    - benchmark()\n        \n        - 堆叠注入\n        \n        - order by注入\n                    \n        \n        - 宽字节注入\n            - 1.php?id='1%df反斜杠' (其中反斜杠为%5c,%df%5c在GBK编码下可以变成'蓮' 类似于这个字，那个字我不会打，原谅我没文化) 变成 1.php?id='1蓮'\n            - 将 \\' 中的 \\ 过滤掉，例如可以构造 %**%5c%5c%27 ，后面的 %5c 会被前面的 %5c 注释掉。\n            - 宽字节注入的修复方案\n            \n        - URLDecode二次注入\n            - 浏览器编码完之后WebServer会自动解码的，如果后端程序误用urldecode函数会造成此类情况(1.php?id=1%2527==\u003e(WebServer)1.php?id=1%27==\u003e(urldecode)1.php?id=1')\n        \n    - 检查注入的思路\n        - 通过加单引号 双引号看看是否有报错。\n            - 有报错（不一定有注入）：\n                - 通过拼接语句来进行状态判断\n                    - and ,or\n                    \n            - 没有报错（有可能是盲注）：\n                - 如果关闭错误回显的话 基于报错注入就不可能了。\n                - 构造语句利用延时注入和联合注入进行攻击\n                    - sleep benchmark extractvalue\n                    \n        - 看状态码(正常的话是200 注入的话可能会存在500 302等)\n        \n        - 特殊注入需要额外观察：\n            - 宽字节注入\n            - url二次注入\n            \n    - mysql注释\n        - '--'\n        - '#'\n        - /* */ 多行注释\n    \n    - 掌握\n    - 方案(参数化查询会有问题吗？)\n    - ORM\n    - 如果检测被拦截了怎么绕过（比如sleep被waf拦了）\n    - Mysql的提权都有哪些，UDF提权的原理。\n    - Sqlmap原理\n    - 在SSM框架中，Mybatis注入是什么情况造成的？#{},${}有什么区别，mybaties的预编译是如何实现的。\n    - 什么情况下Mybatis必须使用${},为什么只能使用${}。\n    \n\n- **CRLF注入**\n\n\n    \n- **SSRF**\n    - 说一个容易出现SSRF漏洞的场景\n    - 如果过滤了以http开头的协议怎么绕过\n    - 利用DNS重绑定来绕过SSRF的原理。\n    - SSRF的地方也是可以跟伪协议在一起利用的。\n    \n\n- **Waf绕过**\n    - 绕过的本质是什么，是在寻找2个或者多个集合之间特性的差异。利用这些差异点进行绕过。\n    - 架构层绕过WAF\n    - 资源限制角度绕过WAF\n    - 协议层面绕过WAF的检测\n    - 规则层面的绕过\n        - SQL注入\n            - 注释符绕过\n            - 空白符绕过\n            - 函数分隔符\n            - 编码相关\n        - 文件包含\n            - 相对路径 \n            - 绝对路径\n    \n- **DDOS防御相关**\n    - DDOS攻击的类型\n    - DDOS云防御的方案\n    - DDOS反射攻击基于的协议？为什么基于这个协议？\n        \n    \n\n    \n- **android逆向相关**\n    - 脱壳的原理\n    - 如何查壳\n    - smali语法\n    - davilk指令\n    - 如何防打包\n    - 如何防签名校验\n    - Android App加固原理分析(说一个加固的思路)\n    - 防御思路\n        - 对抗静态分析\n            - 代码混淆技术 ProGuard\n            - NDK保护\n            - 壳\n        - 对抗动态调试 \n            - android:debuggable=\"false\"，让程序不可调试\n            - android.os.Debug.isDebuggerConnected()\n            - 检测模拟器\n        - 防止重编译\n            - 检查签名 Eclipse自带的调试版密钥文件生成的apk文件的hash值,与上面的函数获取的hash比较\n            - 检测Dex文件的Hash\n    - android 反调试原理\n        - 检测/proc/pid/status文件中的tracePID 如果不为0的情况，就是说明有程序正在进行反调试，该值为调试的进程的pid。一般在native层会fork一个子进程来循环的读取/proc/pid/status文件中的tracePID字段，如果不为0，直接exit\n    - 绕过反调试的思路\n        - 在JNI_ONLOAD下断点\n        - 修改android内核。\n    \n    - android加壳\n        - 说一说每一代壳的主要技术和思路。\n            - 网络上对android壳的发展历史有着多个版本，有的是认为发展到现在经历了4代壳，有的则认为是5代壳。不过这些都不重要，相关的技术和思路都提现出来。这里我以5代为版本说一下我自己的理解。\n                - 一代壳最大的特点是动态加载，思路比较简单，就是在静态的情况下不让你看见整个dex文件，然后主动运行壳的入口，然后自定义类加载器进行加载，运行。这种脱壳的核心思路就是在内存中找到一个比较合适的时机，对dex文件进行dump。比如dvmDexFileOpenPartial函数下断点，这个函数是优化dex文件的函数，第一个参数就是dex文件指针。\n                \n                - 二代壳主要是实现了不落地加载。这个不落地是指文件没有流入文件系统，直接在内存中动态生成，但是由于dex文件依然是成片存在于内存中的，所以核心思路还是在合适的时机dump内存即可。由于不同厂商分别不同实现了相关函数，或者对一代壳的dvmDexFileOpenPartial函数进行了相应的保护。一般二代壳在mmap(),memcpy()等下断点依旧可以dump出dex文件。\n                \n                - 三代壳主要是在前2代的基础上增加了代码抽取。这样在你面前呈现出来的代码很多函数都是空的。那是因为在此之前你的dex文件中很多关于method_id部分中代码用00来填充，真正的代码隐藏在别处，在这个函数被执行之前，主动还原被填充的00 ins部分。这种壳脱壳可以借鉴dexhunter工具。\n                \n                - VMP壳和Ollvm混淆 目前比较领先的加固方案。\n     \n\n        - dex文件的加载流程:\n            - 见我的另外一篇分析文章。 从android源码看脱壳。 (https://tiaotiaolong.net/2019/07/05/从android源码看脱壳/)\n            \n    \n- **浏览器安全**\n    - https协议握手过程\n    - burp 中间人攻击的原理\n    - 分别说3个对称加密 非对称加密 哈希算法 \n    - CSP\n    - 除了公私钥密码加密体系还有其他可以确保传输安全的吗？\n    - 简述一下同源策略\n    - 同源策略下如何从 a.baidu.com 去获取 www.baidu.com 的 Cookie\n    - 网页木马的工作原理\n    - 同源策略下如何解决跨域请求 (分别说说原理和局限性)\n        - document.domain \n        - jsonp\n        - CORS\n    - cookie遵守同源策略吗？(其实是不完全遵守的)。\n    - jsonP安全\n    - CORS的整个流程能说一下吗？\n    - CORS跟CSRF之前有什么联系吗？能把这个问题想明白，前端跨域这块算是可以了。\n    \n- **PHP安全**\n    - PHP的那些魔法函数造成的安全问题(当然了，你也可以说程序员不了解php的语言特性 哈哈哈哈)\n        我个人觉得这些魔法函数是代码审计的基础，这也是为什么代码审计都喜欢挑php来捏，语言特性太强大。(这块的东西参考一个git吧 https://github.com/bowu678/php_bugs)\n        包括不限于 \n        - 弱比较==\n        - strpos()\n        - intval()\n        - preg_replace /e问题\n        - extract变量覆盖\n        - 当然了 变量覆盖的点还有 $$ 等\n        - 数字开头字符串和数字比较。\n        - 00截断(这里我列的肯定是不全，这块我准备慢慢更新吧)截断应该在5.3之前把。\n        - php命令注入怎么防御\n        - escapeshellcmd和escapeshellargs2个函数一起使用会造成什么安全问题。\n    - thinkphp SQL注入的分析过程(3.2版本中的find(),delete(),select()分析一下这几个函数，跟踪一下)(我分析的一处 https://tiaotiaolong.net/2019/07/19/Thinkphp3.2-SQL注入分析/ )收录到我的git项目 [tiaoVulenv](https://github.com/tiaotiaolong/tiaoVulenv) 中\n\n    - php fpm未授权访问\n    - php-fpm跟nginx搭配的情况下，可以通过nginx的特殊配置造成代码执行。\n    - thinkphp 命令执行的分析过程(5.x的命令执行) \n    - php的反序列化漏洞，和序列化中的那几个魔法函数。unserialize()\n    - webshell变形(可以利用php的特性)，那么问题来了，有什么好的检测方法或者思路可以杜绝任意的php变形webshell？行为检测？还是其他方案。\n    - phpinfo解读 从泄露的phpinfo中你能解读写什么东西?(以前渗透测试时候基本都忽略了，下面有篇文章  http://tiandiwuji.top/posts/23527/)\n    - Joomla 的反序列化 这个比较经典 涉及到了php构造对象注入。\n    - php伪协议\n    - typecho反序列化漏洞，这个算是一个老洞了，但是我觉得这个漏洞利用魔法函数触发可以说是较为经典。就算是告诉我这个漏洞点，我也找不到利用链啊。[Typecho反序列化漏洞分析](https://www.anquanke.com/post/id/155306)\n    \n       \n- **Java家族安全**\n    - 著名java反序列化漏洞 Apache的common Collection组件里的调用链的原理和利用思路(这个文章特别多) 后续的很多软件的漏洞都是因为使用了这个apache的组件导致的。我写了一个关于我的理解( https://tiaotiaolong.net/2019/07/19/Apache-Common组件反序列化原理/ )同时也收录到我自己的git项目 [tiaoVulenv](https://github.com/tiaotiaolong/tiaoVulenv) 里。\n\n    - 关于java反序列化一般都是怎么修复的，修复思路是什么？黑名单？\n    - fastjson 反序列化的问题 关于fastjson我写了一个连载，在博客里，同时也在我自己的git项目[tiaoVulenv](https://github.com/tiaotiaolong/tiaoVulenv)里。\n    - 说了fastjson 也提一下jackson，跟fastjson如出一辙，很有同感。\n    - shiro 认证模块反序列化漏洞 大致原理以及利用方式。shiro在自己并不是采用class.forname()的方式进行加载的，导致无法支持数组类型的装载，在调用链上有依赖性。\n    - shiro的密码学安全问题，PaddingOracle安全问题。\n    - Spring 安全 jndi注入和其他好多次的SpEL表达式注入，针对表达式注入有什么好的思路修复吗。\n    - Struts2 安全 我觉得和spring表达式安全问题差不多，逐渐被淘汰，可以先去理解SpEL。\n    - JBoss 安全 \n    - Tomcat 安全 put类型文件上传 和 最近新出的GhostCat\n    - WebLogic安全 原理 利用方法  本质问题是java的xmldecode的反序列化问题。这个调试起来比较有难度！\n    - jenkins 安全问题\n    - ysoserial你真的会了吗？里面几十种调用链，光commoncollection系列目前就7个，可以好好的用idea调试一下ysoserial，你会发现ysoserial的调用链太精彩了。\n    - JVM学习 可以参考深入理解Java虚拟机。学习JVM主要对我们理解类加载器装载类的过程有很大帮助，对反序列化的理解的帮助是巨大的。\n    - java动态代理，反射，spring的IOC。\n    - springboot快速创建一个简单的增删改查项目，使用maven构建，有助于我们复现漏洞环境，总不能依赖于docker吧。\n    - SSM框架可以不会写，但是要会看懂代码之间的逻辑运行关系，会读懂每个xml文件，便于审计，开发的话可以直接使用springboot。\n    - 利用RMI JNDI注入来完成命令执行的模式是怎样的，了解一下RMI协议，说说rmi的调用过程。\n    - JDK7u21 调用链 https://tiaotiaolong.net/2020/03/15/JDK7U21调用链/\n    - RMI和LDAP攻击在java的高版本是有防御机制的，那如何绕过该防御机制。\n    \n    \n    \n- **企业安全相关**\n    - Redis主从命令执行攻击的原理。\n        \n    \n  \n- **Python**\n    - python参数传递是依靠值传递还是引用传递？\n        - 传入可变对象和传入不可变对象的结果一样吗？ 为什么\n    - python lambda表达式\n    - python 闭包\n    - python 装饰器\n    \n\n- **应急响应 or 红蓝对抗**\n    - php扩展门 \n    - pwnginx后门 如果机器存在这种门，该怎么发现它？\n    - 自己纯手动搭建一次nginx,apache,tomcat。做到了解所有目录结构和配置文件。\n    - apache的扩展后门都有哪些？可以自己动手搭建一下，那这种后门的缺点是什么？\n    \n \n    \n- **安全开发**    \n    - 利用openresty写一个简易版本的WAF。谈谈基于规则检测恶意流量的缺点和优点，那如果是基于算法呢？\n    - 利用Celery实现自己的扫描器，说说扫描器的思路。\n    - 如何设计一款白盒扫描器，可以定位到漏洞点和追踪数据流向。\n    - 如果让你设计一个简单的web框架，你如何设计。\n    - 针对白盒代码审计，应该如何设计一个系统，静态的可以针对有问题的变量进行自动的回溯？\n    - 接着上面的问题，有什么思路可以动态的回溯呢？\n    \n\n- **认证**\n    - OAUTH哪些地方容易出现安全问题\n    - JWT的安全点在哪里\n    \n    \n    \n- **开放问题** \n    - XXE跟SSRF你觉得有什么关系吗，相同点跟不同点都可以说说。\n    \n    \n        \n    \n    \n            \n    \n    \n\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftiaotiaolong%2Fsec_interview_know_list","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Ftiaotiaolong%2Fsec_interview_know_list","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftiaotiaolong%2Fsec_interview_know_list/lists"}