├── README.md ├── 做梦梦到的题目.md └── 常见技术题梳理.md /README.md: -------------------------------------------------------------------------------- 1 | # 网络安全/安全攻防/应用安全/SDL面试题 2 | 3 | > 2025年,助力所有面试的安全小伙伴,若有错漏欢迎指正。 4 | 5 | ### star 趋势 6 | 7 | [![Stargazers over time](https://starchart.cc/tangxiaofeng7/Security_Q-A.svg)](https://starchart.cc/tangxiaofeng7/Security_Q-A) 8 | -------------------------------------------------------------------------------- /做梦梦到的题目.md: -------------------------------------------------------------------------------- 1 | ## 2023年快手应用安全一面 2 | 3 | ### 各个 AST 区别、优势是什么? 4 | 5 | ### 安全评估需要评估哪些? 6 | 7 | ### Devsecops 推动过程遇到的困难怎么解决的? 8 | 9 | ### 对 SDL 的理解 10 | 11 | ### 对 devsecops 的理解是什么? 12 | 13 | ### 高并发场景经验 14 | 15 | ### 代码审计是怎么做的? 16 | 17 | ### codeql 怎么实现代码审计? 18 | 19 | ### SCA 软件成分分析 20 | 21 | ### 如何制定漏洞的修复时间?需要考虑哪些因素? 22 | 23 | ### 漏洞复盘的关键是什么? 24 | 25 | ### 什么类型漏洞是代码审计无法准确判断存在与否的? 26 | 27 | ### Java Web 应用中的反序列化漏洞的 Source 和 Sink 是什么? 28 | 29 | ### 假设你是甲方的一名安全工程师,应该如何降低逻辑漏洞的出现率? 30 | 31 | ## 2023年快手应用安全二面 32 | 33 | (1) 你 sdl 那块做的好,为什么 34 | 35 | 我熟悉常见的应用漏洞,可以对应用的风险进行全面的评估和渗透,也可以在安全评审阶段提供较为专业的建议 36 | 37 | (2) 卡点是怎么做的 38 | 39 | 首先在资源允许的情况下,所有项目参与者都应当受过安全方面的培训,确保大家理解安全的重要性,方便后续卡点的落地。 40 | 在项目初期,审查整个安全开发流程,确定卡点位置。 41 | 针对卡点,制定相关解决方案,可能会引进新的流程和工具。 42 | 一旦卡点解决,持续监控项目流程并积极收集反馈,方便及时改进卡点流程 43 | 44 | (3) 这个流程下来,有没有研发那边出现问题 45 | 46 | 白盒暴露出的漏洞比较多,研发修改后,只能通过ci/cd 流程进行验证,研发本地没有适当的工具来复测他们在流程中的安全工作。 47 | 后续通过流程改进加二次开发实现了研发电脑本地即可复测。 48 | 49 | (4) 这块的驱动力,是自己参与还是主导的 50 | 51 | 因为这一块工作之前是我负责的,所以后续的改进是我主导的,并且在我季度考核中因为这个流程的成功落地也取得了不错的绩效。 52 | 53 | (5) 有没有用一些事件来驱动这些事 54 | 55 | 通过代码实现了研发同学对于自身负责项目的漏洞数量和修复数量的榜单,展示在我们的安全平台上,推动了研发的积极性。 56 | 针对漏洞修复问题,每个季度制定了不少于三次针对研发的安全培训,有效的提升了研发同事的安全意识。 57 | 58 | (6) 你觉得 sdl 过程,如何评价自己的 sdl 59 | 60 | 做的好不好,向外面的部门比如研发如何量化自己的工作成果,哪些指标比较重要 61 | 类比SOC 运营,存在一些关键指标,如mttd ,mttr 等,在sdl流程中,我觉得漏洞报告的数量和质量,各种自动化平台的扫描结果和覆盖率,项目风险减少的趋势都是可以作为自身工作成果的指标。 62 | 63 | (7) 除了这些指标,还有没有哪些是你们想落还没有落,想落的,还可以挖掘的 64 | 65 | 比如漏洞生命周期,漏洞响应时间,漏洞影响范围,因为人力物力等资源的问题,很多安全流程没办法落地,非常可惜。 66 | 67 | (8) 黑白盒具体是怎么实现的 68 | 69 | 黑盒主要通过自动化扫描,手工渗透和fuzz 等实现。 70 | 白盒主要通过动静态分析工具来实现,像正则 sast 和 像插桩 iast 71 | 72 | (9) 减少误报率,兜底具体的逻辑是啥,除了刚才说的正则 73 | 74 | 白名单,人工自定义规则,人工check等 75 | 76 | (10) order by 为什么会产生误报 77 | 78 | 复杂的sql语句可能会有误报,动态生成sql也可能导致误报。 79 | 80 | (11) 为什么不能用#,原理是什么 81 | 82 | 有些SQL需要使用动态表名和列名,这种时候就不能使用预编译了,需要把#{id}换成${id},手动过滤 83 | 84 | (12) 这种场景一般会写过滤函数,函数的逻辑具体是什么 85 | 86 | ·输入验证 87 | ·过滤特殊字符 88 | ·转义字符 89 | ·白名单过滤 90 | ·输出编码 91 | 92 | (13) union select 和 union all 有什么区别 93 | 94 | 当需要去除重复行并获取唯一结果集时,可以使用 UNION 操作符。而当不需要去除重复行,或者需要获取完整的结果集时,可以使用 UNION ALL 操作符以提高性能。 95 | 96 | (14) union select 原理 97 | 98 | UNION SELECT 的原理是将两个或多个查询的结果集合并成一个结果集。 99 | 100 | (15) 建设过程有用到其他开发语言吗,有做一个什么样子的项目,比如扫描器啥的 101 | 102 | (16) log4j 利用 rmi 和 ldap 有什么区别 ,哪个成功率高 103 | 104 | RMI的JNDI注入在8u121后限制,需要手动开启`com.sun.jndi.rmi.object.trustURLCodebase`属性 105 | LDAP的JNDI注入在8u191后限制,需要开启`com.sun.jndi.ldap.object.trustURLCodebase`属性 106 | 107 | (17) fastjson 推动升级遇到的问题 108 | 109 | 向后兼容性 110 | 111 | (18) ssrf 和 xxe 哪个危害大 112 | 113 | SSRF(Server-Side Request Forgery,服务端请求伪造)和 XXE(XML External Entity,XML 外部实体) 114 | 115 | (19) java 反射的原理 116 | 117 | 反射是根据字节码获得类信息或调用方法,反射最大的意义是提高程序的灵活性 118 | 119 | (20) 漏洞修复提供给研发,AOP 切面是个啥 120 | 121 | AOP是一种编程范式,它旨在通过将横切关注点从核心业务逻辑中分离出来,以提高代码的模块化性、可维护性和可重用性。 122 | 123 | (21) python 网络交互 多线程 携程 什么地方可以使用线程,什么地方可以使用携程 124 | 125 | 多线程适用于 I/O 阻塞和长时间计算,而协程适用于异步 I/O 操作和高并发网络请求 126 | 127 | (22) hw 你觉得什么样的方式,可以比较高效的拿到靶标 128 | 129 | (23) 怎么能够快速的得高分 130 | 131 | (24) 假如你所在的公司作为防守方,应该做哪些事情 132 | 133 | - 安全意识宣贯 134 | - 建立专门的重保团队 135 | - 资产梳理 136 | - 收敛攻击面 137 | - 脆弱性检查及策略基线配置检查 138 | - 安全加固漏洞修复 139 | - 丰富安全产品生态 140 | 141 | (25) 比如说钓鱼方式,钓鱼的时候用木马,做到域前置技术 142 | 143 | 域前置技术的目的是躲避IOC。 144 | 145 | (26) 零信任 描述一下 146 | 147 | 从不信任,永远验证 148 | 149 | ## 2023年北京奇安信蓝队面试 150 | 151 | 问:内网不出网如何判断: 152 | 153 | 答: 154 | 1、通过 ICMP或者 DNS 隧道反弹 shell 155 | 2、通过架设转发代理实现反弹 shell 156 | 3、通过 cs 进行会话中转 157 | 如果是fastjson 不出网可以动态类加载进行命令执行 158 | 159 | 问:mysql蜜罐 fake mysql 160 | 161 | 答: 162 | 当客户端尝试连接mysql蜜罐的时候,mysql客户端会自动发起一个查询,mysql(蜜罐)服务端会给与一个回应,当回应的数据包中加入 163 | load data local infile可以读取攻击者的本地文件达到反制的目的 164 | 在Windows目录下可以找到用户名,然后通过用户名再去读取微信默认配置文件config.data、AccInfo.dat,可以获取微信ID、手机号 165 | 166 | 问:jsonp跨域劫持漏洞 167 | 168 | 答: 169 | 客户端通过请求脚本标签发送跨域请求,然后服务器输出JSON数据并执行回调函数,这种跨域数据输出方式称为JSONP 170 | 171 | 问:CRLF攻击原理 172 | 173 | 答: 174 | CR符号\r,LF符号\n 175 | HTTP请求包中状态行和首部中的每行以CRLF结束,当应用程序处理不恰当的时候,可能会存在CRLF漏洞。 176 | 本质类似XSS,将恶意数据发送给应用程序,应用程序将恶意数据输出在HTTP响应头中 177 | 178 | 问:reids未授权漏洞利用 179 | 180 | 答: 181 | redis默认端口是6379,如果没有配置策略,那么就存在未授权漏洞 182 | 常见的利用方式有 183 | 1.利用redis写webshell 184 | 2.当redis以root身份运行,可以给root账户写入SSH公钥文件,直接通过SSH登录目标服务器 185 | 3.利用redis写入计划任务反弹shell 186 | 4.主从复制getshell 187 | 188 | 问:溯源反制经验 189 | 190 | 答: 191 | 1.通过攻击IP反打,反向渗透服务器进行分析,最终定位到攻击者相关信息 192 | 2.通过攻击IP历史解析记录/域名,对域名注册信息进行溯源分析 193 | 3.利用ID追溯邮箱,真实姓名,通过姓名找到相关简历信息 194 | 4.提取木马样本特征、用户名、ID、邮箱、C2服务器等信息—同源分析 195 | 5.基于JSONP跨域,获取攻击者的主机信息、浏览器信息、真实 IP及社交信息等 196 | 197 | 问:cs防溯源 198 | 199 | 答: 200 | 1.修改cs默认证书 201 | 2.域名上线走CDN 202 | 203 | 问:shiro721和550区别和原理 204 | 205 | 答: 206 | 区别在于Shiro550使用已知默认密钥,只要有足够的密钥 207 | Shiro721的ase加密的key为系统随机生成,需要利用登录后的rememberMe去爆破正确的key值。利用有效的RememberMe Cookie作为Padding Oracle Attack的前缀,再去构造反序列化攻击 208 | 209 | 550 210 | 211 | Payload产生的过程: 命令=>序列化=>AES加密=>base64编码=>RememberMe Cookie值 在整个漏洞利用过程中,比较重要的是AES加密的密钥,如果没有修改默认的密钥那么就很容易就知道密钥了, 212 | 721 213 | 214 | 默认通过AES-128-CBC模式加密,这种加密方式容易受到Padding Oracle Attack(Oracle填充攻击),利用有效的RememberMe Cookie作为Padding Oracle Attack的前缀,然后精心构造 RememberMe Cookie 值来实现反序列化漏洞攻击. 215 | 216 | 217 | 问:shiro流量分析 218 | 219 | 答: 220 | 主要通过流量行为进行分析,爆破利用链的行为,命令执行的行为 221 | 请求-header 222 | 响应-body 223 | 响应-header 224 | 225 | ## 2024年杭州ZOOM应用安全二面 226 | 227 | 该面试为3人交叉面 228 | 229 | 第一人 230 | 问:你在甲方综合说一下你主要做的事情 231 | 232 | 问:对渗透跟代码审计哪个会更熟悉一点 233 | 234 | 问:你能介绍一下在审计Java Web的思路 235 | 236 | 答: 237 | 1.确定框架,组件,依赖库,过滤器 238 | 2.确定SQL注入漏洞是否存在 239 | 3.查看验证框架,如shiro、spring securtiy,查看是否存在低版本漏洞 240 | 4.代码函数执行,可执行函数搞清楚传递过程,是否用户可控 241 | 表达式注入(如OGNL、SpEL、MVEL、EL、Fel、JST+EL等) 242 | 后端模板引擎注入(如Freemarker、Velocity、Thymeleaf等) 243 | 第三方开源组件(如Fastjson、Shiro、Xstream、Struts2) 244 | 5.寻找SSRF危险函数,如 245 | urlConnection.getInputStream 246 | HttpURLConnection.getInputStream 247 | URLConnection.getInutStream 248 | HttpClient.execute 249 | OkHttpClient.newCall.execute 250 | Request.Get.execute 251 | Request.Post.execute 252 | URL.openStream 253 | ImageIO.rea 254 | 6.寻找XXE危险函数,如 255 | xlsx-streamer poi-ooxml 256 | Documentbuilder|DocumentBuilderFactory|SAXReader|SAXParser|SAXParserFactory|SAXBuilder|TransformerFactory|reqXml|getInputStream|XMLReaderFactory|.newInstance|SchemaFactory|SAXTransformerFactory|javax.xml.bind|XMLReader|XmlUtils.get|Validator 257 | javax.xml.parsers.DocumentBuilder 258 | javax.xml.stream.XMLStreamReader 259 | org.jdom.input.SAXBuilder 260 | org.jdom2.input.SAXBuilder 261 | javax.xml.parsers.SAXParser 262 | org.dom4j.io.SAXReader 263 | org.xml.sax.XMLReader 264 | javax.xml.transform.sax.SAXSource 265 | javax.xml.transform.TransformerFactory 266 | javax.xml.transform.sax.SAXTransformerFactory 267 | javax.xml.validation.SchemaFactory 268 | javax.xml.bind.Unmarshaller 269 | javax.xml.xpath.XPathExpression 270 | org.apache.commons.digester3.Digester 271 | 272 | 问:让你不借助自动化工具手动去审计Java Web的代码,你的审计的框架跟思路是什么 273 | 274 | 问:你刚才提到路由涉及到权限的控制,在Java Web里涉及权限控制的实现方式有哪些 275 | 276 | 答: 277 | 基于角色的访问控制(RBAC) 278 | 基于规则的访问控制 279 | 强制访问控制(MAC) 280 | 自主访问控制(DAC) 281 | 基于属性的访问控制(ABAC) 282 | 基于风险的访问控制 283 | Spring Security框架 284 | Apache Shiro框架 285 | 自定义过滤器 286 | 注解式权限控制(AOP) 287 | 288 | 问:Java中AOP可以实现权限访问控制吗 289 | 290 | 问:Spring Security这个安全框架,它实现了哪些安全功能 291 | 292 | 答: 293 | 身份验证 294 | 授权 295 | 防止CSRF 296 | 防止XSS 297 | 缓存控制 298 | 内容类型选项 299 | HTTP 严格传输安全 300 | X-Frame-选项禁用 iframe 中的渲染页面 301 | 内容安全策略 (CSP) 302 | 重定向至HTTPS 303 | 与其他工具类集成 304 | 305 | 问:比如说在开发过程当中,CSRF的防护,开发都是怎么去防护的 306 | 307 | 答: 308 | 同源检测 309 | CSRF Token 310 | 自定义请求头 311 | CSRF保护框架 312 | 313 | 问:有没有现成的一些库或者组件,去实现这种CSRF toekn 314 | 315 | 答: 316 | OWASP CSRF Guard 317 | Spring Security 318 | 319 | 问:现在业务想引入一个安全包,你一般怎样去评估它的安全风险 320 | 321 | 答: 322 | 1.判断来源是否可信 323 | 2.查看包的说明文档 324 | 3.审查当中的代码 325 | 4.检查JAR包中的依赖 326 | 5.使用扫描工具进行检测 327 | 6.监控JAR包的更新 328 | 最终进行一个评估 329 | 330 | 问:能不能站在组件安全的角度,来告诉开发能不能去引入这个包 331 | 332 | 答: 333 | 1.已知漏洞和安全问题 334 | 2.依赖项安全性 335 | 3.社区支持和维护 336 | 4.更新频率 337 | 5.安全测试 338 | 6.安全文档和最佳实践 339 | 7.合规性要求 340 | 341 | 问:你最熟悉的一种安全漏洞类型是什么 342 | 343 | 问:你能举个实际挖掘的例子吗 344 | 345 | 问:反序列化命令执行是如何挖掘的 346 | 347 | 答: 348 | 1.寻找一个类,通过构造一个对象,使其在被反序列化时能执行到危险(sink)方法。 349 | 2.寻找一个类,存在可能的执行路径,从反序列化入口(source)方法执行到危险 (sink)方法自动化搜索 350 | 3.构造这个对象,使危险(sink)方法参数可控。 351 | 352 | 问:JNDI可以支持哪些协议 353 | 354 | 答: 355 | JDBC、LDAP、DNS、NIS、NDS、RMI、CORBA、IIOP 356 | 357 | 问:反序列化漏洞修复的方案 358 | 359 | 答: 360 | 1.更新和升级依赖项 361 | 2.安全的反序列化,白名单 362 | 3.严格限制允许的输入 363 | 4.配置安全管理器(SecurityManager)以限制应用程序的权限 364 | 5.实施安全开发最佳实践 365 | 366 | 问:黑名单类一般禁止方式是什么 367 | 368 | 答: 369 | 直接在业务上使用黑名单的方式来禁止已知危险的类被反序列化 370 | 371 | 问:XSS的一个防护方案,包括前后端的 372 | 373 | 答: 374 | 1.前端防护: 375 | 输入过滤和验证 376 | 内容安全策略(CSP) 377 | XSS Filter 378 | 使用安全框架和库,如 React、Angular、Vue.js 379 | 不信任内容使用安全的方式进行显示,如将其插入到 DOM 中而不是使用 innerHTML。 380 | 2.后端防护: 381 | 服务器端对输出进行编码,以确保所有特殊字符都会被正确地转义 382 | 设置 HTTP 头来防止 XSS 攻击,如设置 HTTPOnly 标志来防止 Cookie 被 JavaScript 访问,设置 X-XSS-Protection 标志来启用浏览器的 XSS 过滤器。 383 | 后端对用户输入进行验证和过滤 384 | 385 | 386 | 第二人 387 | 问:JAVA中RCE一般会有哪些方法 388 | 389 | 答: 390 | Runtime.getRuntime().exec(cmd) 391 | LoadJs 392 | ProcessBuilder 393 | ProcessImpl 394 | 反序列化 395 | 服务器端模板注入 396 | 397 | 问:写过一些Waf或者IDS的规则吗 398 | 399 | 问:suricata里面误报非常多,你们是如何处理的 400 | 401 | 答: 402 | 修改默认配置文件,否则误报特别多 403 | 网上开源的很多规则进行整理 404 | 405 | 问:平常会去做一些CVE漏洞的研究吗 406 | 407 | 问:log4j漏洞它是怎么利用的 408 | 409 | 答: 410 | 对于`${jndi:}`格式的日志默认执行`JndiLoop.lookup`导致的RCE。日志的任何一部分插入`${}`都会进行递归处理,也就是说`log.info/error/warn`等方法如果日志内容可控,就会导致这个问题 411 | 412 | 问:除了IDS还有了解过其他的安全防护的设备 413 | 414 | 问:能说一下Webshell怎么去防护检测 415 | 416 | 问:服务器上已经被发现Webshell,应急怎么做 417 | 418 | 第三人 419 | 420 | 问:最近有在挖漏洞吗 421 | 422 | 问:owasp top 10最新版最火的是BAC(Broken Access Control),之前有挖过类似这种漏洞吗,有什么思路可以快速的发现这类问题 423 | 424 | 答: 425 | 对应用程序的权限控制机制进行审计 426 | 对每个访问点进行权限验证测试,尝试使用不同的用户角色和权限级别访问受限资源 427 | 尝试越权访问系统中的敏感资源或执行未经授权的操作 428 | 建立持续监控机制,定期扫描系统以发现新的权限控制漏洞 429 | 430 | 问:针对只能操作一次的资源怎么处理 431 | 432 | 问:一个项目有很多这种越权漏洞的话有没有一些解决方案 433 | 434 | 答: 435 | 执行越权专项漏洞检测 436 | 最小权限原则 437 | 通过运营去发现异常行为 438 | 439 | 问:安全团队怎么保证安全左移以后开发和测试能覆盖所有越权的测试用例 440 | 441 | 问:开发如果把功能点遗漏掉,没办法测试相关功能,如何解决 442 | 443 | 问:前端框架本身对XSS做了哪些防御 444 | 445 | 答: 446 | 主要是基于DOM的,Vue、React 将模板/jsx解析为树,在 renderer 里调用 DOM API,因而减少了 encode 操作,减少了 XSS 隐患,但dangerouslySetInnerHTML、onload=字符串、href=字符串 等,还是有可能造成 XSS 漏洞。 447 | 448 | 问:举个例子前端框架是怎么做实体化编码的 449 | 450 | 答: 451 | 使用 React.js 提供的 dangerouslySetInnerHTML 属性来实现实体编码。 452 | 453 | 问:针对可能出现在html的body里,JS里,CSS里,编码的格式都不太一样 454 | 455 | 问:富文本编辑器如果有XSS的话,怎么去解决 456 | 457 | 答: 458 | 输入过滤和验证 459 | 内容安全策略(CSP) 460 | 富文本编辑器配置 461 | 实体化编码 462 | 限制编辑器功能 463 | 464 | 问:做黑盒的测试一般怎么做 465 | 466 | 问:有没有自动化的方式挖掘存储型XSS 467 | 468 | 第一人: 469 | 问:尝试开发过静态扫描的工具吗?使用过比如Codeql类似的工具吗 470 | 471 | -------------------------------------------------------------------------------- /常见技术题梳理.md: -------------------------------------------------------------------------------- 1 | ## 说明 2 | 3 | 记录平时遇到得到或者想到的一些面试题目,涉及到实战上的可问问题就更多了,因为每个人测试的行业和业务各不相同,遇到的测试点也不同,所以问的问题也会千奇百怪,这类问题只能说凭借自己往常的测试经验去回答. 4 | 5 | ## 介绍 6 | 7 | Q: 自我介绍 8 | A: 9 | 一个好的自我介绍,非常加分,反之,非常减分 10 | 11 | 初级工程师: 12 | 13 | ``` 14 | 在xx安全论坛投稿过xx篇文章,获得xx元稿费. 15 | 在xx众测,提交过xx漏洞,获得过xx元奖金. 16 | 有x年以上的Web/App漏洞挖掘、业务逻辑漏洞挖掘经验. 17 | 精通xx,xx,xx语言,能独立开发poc和exp. 18 | 获取xx张CNVD证书 和 xx CVE编号. 19 | 在xx安全会议上进行过xx演讲. 20 | ``` 21 | 22 | 资深的工程师: 23 | 24 | ``` 25 | 结合自身经历和工作经验进行阐述 26 | ``` 27 | 28 | Q: 最近研究什么新的漏洞? 29 | A: 30 | vite 31 | weblogic 32 | fastjson 33 | log4j2 34 | springshell 35 | 36 | Q: 职业发展规划 37 | A: 38 | 结合自身目标进行阐述 39 | 40 | Q: 擅长哪块技能,未来想往哪方向去深入 41 | A: 42 | 如果自己擅长什么都说不清楚,面试肯定是会减分的 43 | (深入肯定结合目标公司的需求去深入) 44 | 45 | Q: 跳槽原因 46 | A: 47 | 在公司个人发展受限. 48 | 49 | ## Web 50 | 51 | Q: MySQL 写 WebShell 有几种方式,利用条件 52 | A: 53 | (1) 多种方式 54 | union select 后写入 55 | lines terminated by 写入 56 | lines starting by 写入 57 | fields terminated by 写入 58 | COLUMNS terminated by 写入 59 | (2) 利用条件 60 | 61 | ·root 权限 62 | ·GPC 关闭(能使用单引号),magic_quotes_gpc=On 63 | ·有绝对路径(读文件可以不用,写文件必须) 64 | ·没有配置 –secure-file-priv 65 | ·有读写的权限,有 create、insert、select 的权限 66 | 67 | Q: 谈谈你对信息收集的理解/方式 68 | A: 69 | 信息收集一般分为两个方向,主动信息收集和被动信息收集 70 | 主动信息收集会通过端口扫描、目录扫描、指纹识别去收集目标信息 71 | 被动信息收集通过公开情报、whois 信息、DNS 历史解析记录、子域名信息、旁站信息、C 段资产、证书信息、企业信息、备案信息等 72 | 收集的意义主要用于扩大攻击面和确定攻击路径 73 | 74 | Q: 信息收集时如何处理子域名爆破泛解析问题 75 | A: 76 | 根据确切不存在的子域名记录获取黑名单 IP,对爆破过程的结果进行黑名单过滤.但存在误报,如泛解析 IP 和某个子域名 IP 为同一 IP 77 | 78 | Q: CDN 是什么 79 | A: 80 | 内容分发网络,主要用于对网站做负载均衡,提供内容缓存服务,有的会提供 CND web 防护,可以帮助网站加速访问,隐藏真实 IP,提供 waf 等 81 | 82 | Q: 攻防实战中你有哪些优秀案例 83 | A: 84 | (1) 红队: 85 | 省级 市级 86 | 介绍自己在团队中的负责部分 87 | 主要做的是:外网打点,扩大资产,上免杀,横向=》vlan 内网、域控组策略 gpo.(这里简单给几个关键词) 88 | 89 | (2) 蓝队: 90 | 主要做的是: 1.反打扫描 IP,分析肉鸡,找攻击者的利用工具,配置文件,连接 ip 2.微步查询得到该 IP,找到注册人邮箱,利用邮箱社工 3.各种各样的蜜罐(商用/开源) 4.溯源钓鱼邮件,分析附件木马回连地址,邮件头找到真实发件人,利用邮件信息及 id 去社工,寻找博客,企业信息,社交信息等 91 | 获取 id 之后,百度,谷歌,src,微博,微信,支付宝,豆瓣,贴吧,知乎,脉脉,钉钉,CSDN,facebook,领英,github 等进行查询绘制攻击者画像 92 | 93 | Q: XSS 分类和防护,反射型 XSS 和 DOM 型 XSS 的区别 94 | A: 95 | (1) 分类 96 | 反射型 XSS、DOM 型 XSS、储存型 XSS 97 | 98 | (2) 防护 99 | 100 | ·httpOnly 防止读 cookie(可被绕过) 101 | ·实体化编码输出(主要多个输出点/输出平台) 102 | ·参数白名单 103 | ·增加 Waf 设备,cdn 等 104 | 105 | (3)区别 106 | · DOM 型不经过服务器,通过网页本身的 JavaScript 进行渲染触发的 107 | · 反射 XSS 经过服务器 108 | 109 | Q: sql 注入原理,sql 注入类型,防护方式 110 | A: 111 | (1) 原理 112 | 113 | 把用户输入的恶意代码拼接到了数据库查询语句中 114 | 115 | (1) 联合查询注入 116 | (2) 报错注入 117 | (3) 布尔盲注 118 | (4) 时间盲注 119 | (5) 堆叠查询 120 | (6) 二次注入 121 | (7) 宽字节注入 122 | 123 | 防护方式: 124 | 125 | 1)设备方式:增加 waf,cdn 等 126 | 127 | 2)代码方式:一般推荐用框架,比如 mybatis 中使用 %获取参数是直接进行拼接 #获取参数是进行预编译 128 | 129 | Q: sql 注入使用预编译之后,是否可以完全修复? 130 | A: 131 | 不可以 132 | ·如果 sql 语句是 order by等,那么预编译是不会生效的 133 | 在 Mybatis 的一些场景,使用#会报错 134 | 如果一定要使用 order by,推荐的安全方案是,使用 Mybatis 自带的指令 135 | ·一定要记住使用#{},如果使用${},预编译也不会生效 136 | ·能使用白名单,最好就使用白名单 137 | 138 | Q: 渗透测试流程 139 | A: 140 | 1)信息收集 141 | ip、域名、子域名、端口、邮箱、公众号、小程序、生活号、应用、指纹、操作系统、版本、中间件、waf、网盘、github、gitee、语雀、股权架构 142 | 143 | 2)漏洞探测 144 | 端口漏洞 145 | 端口弱口令 146 | 目录探测 147 | Web 应用漏洞-poc扫描 148 | 管理后台漏洞 149 | 逻辑漏洞 150 | 151 | 3)绕 waf 152 | 绕waf 进行漏洞利用( 1 注释替换空格 2 字符集绕过 3 chunked 绕过 4 上传请求 multipart 绕过 5.参数污染 6.垃圾数据污染) 153 | 154 | 4)拿到 webshell 之后,提权 155 | windows 提权:1.systminfo 根据系统补丁提权 2.第三方服务提权 3.数据库提权 156 | linux 提权:1.利用系统内核漏洞进行提权 2.泄漏密码提权 3.sudo 提权 4.SUID 提权 157 | 158 | 5)内网横向 159 | CS msf 160 | 域控 161 | 162 | 6)清理痕迹,输出报告 163 | 164 | Q: App 安全测试 165 | A: 166 | (1)安卓: 167 | drozer 审计安卓 app adb 来操作 drozer,四大组件 168 | Activity、Service、Broadcast Receiver、Content Provider 169 | 170 | 反编译: 171 | 如果加固可以尝试用 github 上的 frida-dexdump 脱壳 172 | 173 | 破解防御: 174 | 信任证书, 175 | APK 的安全机制,自签名证书(Xposed - JustTrustMe,SSLUnPinning),用 proxifier 代理工具.Hook 技术(只需要 Hook 证书校验失败的处理方法,让其继续加载页面并保持通讯即可.) 176 | 客户端内置代理,hook "system.setproperty" 设置代理到本地 177 | 客户端检测是否开启代理(修改 smail 代码绕过,或者 nop 掉检测方法) 178 | 179 | 双向认证绕过:做了双向验证的 apk,反编译后在 APK 的 assets 中就可以找到客户端证书 .p12 和.cer 的文件,导入时会需要一个证书密码,一般可以通过静态分析代码,搜索 KeyStore 或者 逆向分析客户端的.p12 来找到密码. 180 | 181 | 接口测试其实跟 Web 渗透一样 182 | 183 | Q: 如何设计开发漏扫平台 184 | A: 185 | (1) 确定好开发语言: 186 | 一般使用框架来开发代码: 187 | 188 | 前端:用 Vue 或者 React 189 | 后端:用 SpringBoot 或者 Go(gin/goframe/http.server) 190 | 191 | (2) 设计好平台逻辑 192 | 比如:你作为甲方,你肯定会在自家 waf 给自己的扫描 IP 加个白名单,有必要去是被 Waf,肯定没必要 193 | 比如: 你是挖 SRC,你觉得你不需要去识别 Waf,现在稍微正常的公司,他都会有 Waf,有些公司业务比较杂,乱,可能没上 WAf,甚至担心 WAF 影响业务,导致没开,那肯定疯狂扫他(记得有授权) 194 | 195 | 域名=》子域名(oneforall)=》IP、端口、cdn、waf(放弃自动化扫描/代理池)、C 段=》端口爆破=》端口漏洞=》Web 服务=》Web 目录扫描=》Web 爬虫=》Web 漏洞 196 | masscan 扫全端口,nmap 扫 masscan 扫到存活的端口 197 | 198 | (3) 发现漏洞进行告警(邮件/企业微信机器人/钉钉机器人/) 199 | 200 | Q: 应急响应怎么策划,怎么做 201 | A: 202 | (1)应急响应 PDCERF 模型 203 | Prepare(准备) 204 | Detection(检测): 205 | 紧急事件监测:包括防火墙、系统、web 服务器、IDS/WAF/SIEM 中的日志,不正常或者是执行了越权操作的用户,甚至还有管理员的报告 206 | Containment(抑制): 207 | 首先先控制受害范围,不要让攻击的影响继续蔓延到其他的 IT 资产和业务环境,切记不要直接一股脑的投入全部精力到封堵后门.紧接着要做的是去寻找根源原因,彻底解决,封堵攻击源,把业务恢复到更张水平 208 | Eradication(根除) 209 | Recover(恢复) 210 | Follow-Up(跟踪) 211 | 212 | (2) 213 | 内存信息 free -m `htop 214 | 系统进程 ps top netstat ss 215 | 路由信息 tracert 216 | ifconfig 查看网卡流量,检查网卡的发送、接收数据情况 217 | NetHogs 实时监控带宽占用状况 218 | 查看 Linux 系统日志 /var/log 219 | 查看系统计划任务 220 | 221 | Q: PHP 熟悉的函数 222 | A: 223 | 1)代码执行: 224 | eval,preg_replace+/e,assert,call_user_func,call_user_func_array,create_function 225 | 2)文件读取: 226 | file_get_contents(),highlight_file(),fopen(),read 227 | file(),fread(),fgetss(), fgets(),parse_ini_file(),show_source(),file()等 3)命令执行: 228 | system(), exec(), shell_exec(), passthru() ,pcntl_exec(), popen(),proc_open() 229 | 230 | Q: Redis 未授权访问漏洞如何入侵利用 231 | A: 232 | redis 漏洞产生原因 233 | 234 | (1) redis 绑定在 0.0.0.0:6379,且没有添加防火墙规则直接暴露在公网 235 | (2) 没有设置密码认证 236 | (3) root 权限运行 237 | 238 | redis 利用方法 239 | ·写 crontab 利用计划任务反弹 shell 240 | ·开启 ssh 端口,写公钥获得系统权限 241 | ·知道 web 目录写 webshell 242 | ·redis 4.x 之后,主从复制 getshell 243 | 244 | Q: SSRF 漏洞原理、利用方式及修复方案?Java 和 PHP 的 SSRF 区别? 245 | A: 246 | (1) SSRF 漏洞原理 247 | 原理:利用服务当作跳板来攻击其他服务 248 | 249 | (2) SSRF 漏洞可能存在 250 | ·分享:通过 url 地址分享网页内容 251 | ·转码:通过 URL 地址把原地址的网页内容调优使其适合手机屏幕浏览 252 | ·在线翻译:通过 URL 地址翻译对应文本的内容 253 | ·图片加载与下载:通过 URL 地址加载或下载图片 254 | ·图片、文章收藏功能 255 | 256 | 主要看 api 接口 257 | 258 | (3) SSRF 漏洞利用 259 | 260 | ·利用 file 协议读取文件 261 | ·利用 dict 协议查看端口开放 262 | ·利用 gopher 协议反弹 shell 263 | 264 | (4) SSRF 漏洞利用绕过 265 | ·使用@:http://A.com@10.10.10.10 = 10.10.10.10 266 | ·IP 地址转换成十进制、八进制:127.0.0.1 = 2130706433 267 | ·使用短地址:http://10.10.116.11 = http://t.cn/RwbLKDx 268 | ·端口绕过:ip 后面加一个端口 269 | 270 | 271 | 272 | ·通过 js 跳转.. 273 | ·利用 DNS 解析 274 | ·利用句号(127.0.0.1) 275 | ·利用[::](http://[::]:80/); 276 | ·利用短地址(http://dwz.cn/11SMa); 277 | ·协议(Dict://、SFTP://、TFTP://、LDAP://、Gopher://) 278 | 279 | (5) SSRF 漏洞修复方式: 280 | ·使用正则对参数进行效验,防止畸形请求绕过黑名单. 281 | ·过滤返回信息,验证远程服务器对请求的响应是比较容易的方法; 282 | ·统一错误信息,避免用户可以根据错误信息来判断远端服务器的端口状态; 283 | ·限制请求的端口为 http 常用的端口,比如,80,443,8080,8090; 284 | ·黑名单内网 ip.避免应用被用来获取获取内网数据,攻击内网; 285 | ·禁用不需要的协议.仅允许 http 和 https 请求; 286 | ·禁止 30x 跳转 287 | 288 | (6) Java 和 PHP 的 SSRF 区别 289 | PHP 支持的协议 290 | ·file:// — Accessing local filesystem 291 | ·http:// — Accessing HTTP(s) URLs 292 | ·ftp:// — Accessing FTP(s) URLs 293 | ·php:// — Accessing various I/O streams 294 | ·zlib:// — Compression Streams 295 | ·data:// — Data (RFC 2397) 296 | ·glob:// — Find pathnames matching pattern 297 | ·phar:// — PHP Archive 298 | ·ssh2:// — Secure Shell 2 299 | ·rar:// — RAR 300 | ·ogg:// — Audio streams 301 | ·expect:// — Process Interaction Streams 302 | 303 | Java 支持的协议 304 | ·file 305 | ·ftp 306 | ·gopher 307 | ·http 308 | ·https 309 | ·jar 310 | ·mailto 311 | ·netdoc 312 | 313 | Q: 宽字节注入漏洞原理、利用方式及修复方案? 314 | A: 315 | (1) 原理 316 | php 中 gbk 编码 317 | (2) 利用方式 318 | 使用%df 可以闭合引号 319 | (3) 修复方案 320 | 使用 mysql_set_charset(GBK)指定字符集 321 | 322 | Q: 如何设计落地一个 CSRF Token 323 | A: 324 | 在请求中添加一个攻击者不知道的参数(且该参数浏览器不会自动发送),让服务端可以区别出请求是否经过用户的同意. 325 | 326 | 这样用户知道该参数,发送请求的时候,携带 cookie 和该参数;而攻击者不知道该参数,浏览器发送请求时,只自动携带了 cookie.服务端即可通过校验该参数,来判断操作是否是用户真实想进行的. 327 | 328 | 这个参数,就被称为 csrf token. 329 | 330 | HTTP request Header: 将 token 添加在 header 中发送,它具有一个天然的优势,可以利用浏览器的同源策略:csrf token header 相当于一个自定义 header,在跨域请求时,携带自定义 header,会触发预检请求,若预检请求不通过,正式请求就不会发送. 331 | 332 | 双重提交(Double Submit Cookie) 333 | 334 | 在请求到达服务端后,服务端不需要再从数据库/缓存中读取对应的值来跟 csrf token 比对.只需要跟请求中的 csrf cookie 比对即可.这个 cookie 就是服务端当初签发出去的 token 参数.只要它们相等,就证明请求是经过用户同意发送的,因为攻击者无法读取这个 cookie 值,也就无法将这个值作为 token 参数,添加到请求中发送,而用户是知道的(用户可以读取 csrf token cookie). 335 | 我们可以使用加密签名的方式: 336 | 将用户的 session token 作为明文,使用服务端的密钥进行加密签名,加密后的秘文作为 csrf token value 发送给客户端.使用 session token 作为明文有 2 个好处:即保证了 csrf token 跟 user 绑定,又保证了 csrf token 的随机且唯一.即: 337 | csrf_token = HMAC(session_token, application_secret) 338 | 339 | 当服务端收到请求后,从缓存/数据库/cookie 中获取原来的加密明文 session_token,使用服务端的密钥再进行一次加密签名,比对签名后的结果 和 请求中携带的 csrf token 参数是否相等,若相等,则: 340 | csrf token 是服务端签发的,签名的内容没有被篡改,即该 token 就是当前用户的. 341 | 342 | 现成框架包括: 343 | OWASP CSRF Guard 344 | Spring Security 345 | 346 | Q: CORS 原理、利用及修复? 347 | A: 348 | (1) CORS 全称是"跨域资源共享"(Cross-origin resource sharing),Origin 源未严格,从而造成跨域问题,允许浏览器向跨源服务器,发出 XMLHttpRequest 请求 349 | 350 | (2) Origin 为\*的时候,使用 curl 测试 CORS, 351 | 352 | curl -H “Origin: https://evil.com” -I 353 | (3) 设置白名单域名 354 | 355 | Q: CRLF 注入原理 356 | A: 357 | CRLF 指的是回车符(CR,ASCII 13,\r,%0d) 和换行符(LF,ASCII 10,\n,%0a). 358 | 359 | CRLF 注入漏洞的本质和 XSS 有点相似,攻击者将恶意数据发送给易受攻击的 Web 应用程序,Web 应用程序将恶意数据输出在 HTTP 响应头中.(XSS 一般输出在主体中) 360 | 361 | 所以 CRLF 注入漏洞的检测也和 XSS 漏洞的检测差不多.通过修改 HTTP 参数或 URL,注入恶意的 CRLF,查看构造的恶意数据是否在响应头中输出. 362 | 363 | Q: shiro 漏洞原理 364 | A: 365 | shiro 550 简单讲就是在 1.2.4 版本下使用了固定 aes 加密 key,在对 remeberme 字段进行反序列化时,由于 key 泄露导致用户可以构造恶意内容,最后导致命令执行\ 366 | 或者官方一点\ 367 | shiro 默认使用 CookieRememberMeManager,对 rememberMe 的 cookie 做了加密处理,在 CookieRememberMeManaer 类中将 cookie 中 rememberMe 字段内容先后进行序列化、AES 加密、Base64 编码操作 368 | 369 | 攻击者可以构造一个恶意的对象,并且对其序列化、AES 加密、base64 编码后,作为 cookie 的 rememberMe 字段发送.Shiro 将 rememberMe 进行解密并且反序列化,最终就造成了反序列化的 RCE 漏洞 370 | 371 | Q: Fastjson 反序列化漏洞的原理? 几次绕过的绕过方式? 如何彻底解决 Fastjson 漏洞? 372 | A: 373 | 374 | (1) 原理 375 | 攻击者可以传入一个恶意构造的 JSON 内容,程序对其进行反序列化后得到恶意类并执行了恶意类中的恶意函数,进而导致代码执行. 376 | 377 | (2) 绕过 378 | ·fastjson-1.2.24 379 | (fastjson 接受的 JSON 可以通过艾特 type 字段来指定该 JSON 应当还原成何种类型的对象,在反序列化的时候方便操作) 380 | 381 | ·fastjson-1.248 以下 382 | (checkAutoType 中使用 TypeUtils.getClassFromMapping(typeName)去获取 class 不为空,从而绕过了黑名单检测) 383 | 利用解析问题可以加括号或大写 L 绕过低版本 384 | 高版本利用了哈希黑名单,找到可以绕过了类 385 | 在 1.2.47 版本中利用缓存绕过 386 | 387 | ·1.2.68 版本 388 | 1.2.68 之前的 66 和 67 可以利用 JNDI 相关类,比如 Shiro 的 JndiObjectFactory 和 ignite 项目的类 389 | 1.2.68 中有一个期望类属性,实现了期望接口的类可以被反序列化 390 | 利用类必须是 expectClass 类的子类或实现类,并且不在黑名单中,即可直接绕过 AutoType 检测,例如常见的 AutoCloseable 391 | 这样的 Payload 通常第一个@type 是 AutoCloseable 等合法类,第二个@type 是恶意类,后续参数是恶意类需要的参数 392 | 393 | (3) 修复 394 | ·方案一:开启 safemode 395 | 适用于完全不需要 autoType 的应用.开启时,会强制关闭 autoType. 396 | 397 | 优点:最安全的方案,完全禁用 autoType,新的版本再爆出反序列化漏洞时,极大概率不需要再升级也能免疫. 398 | 399 | 不足:仅适用于完全不需要 autoType 的应用. 400 | 401 | ·方案二:配置一个 autoType 白名单. 402 | 403 | 优点:相对安全,可以避免一些恶意类的传入,前提是白名单范围要尽量缩小.新的版本再爆出反序列化漏洞时,大概率不需要再升级也能免疫. 404 | 405 | 不足:情况复杂的业务,梳理有哪些数据是需要用到 autoType 反序列化的,整理出白名单需要一定时间. 406 | 407 | ·方案三:autoType 黑名单 408 | 409 | 优点:整改成本低,处理速度快. 410 | 411 | 不足:安全性不如前两种方案,短期内可作为临时方案,缓解外部漏洞探测.有极低的概率会对已有业务产生影响(反序列化的内容里包含 java.net.前缀类型对象的情况). 412 | 413 | Q: 扫描端口遇到端口全部开放的情况怎么办? 414 | A: 415 | 一般是 CDN 或者防火墙的安全策略导致的 416 | 417 | 判断 CDN 1.直接基于 CNAME 判断 2.多地 ping 418 | 绕过 CDN,尝试寻找真实 IP: 419 | 1、子域名可能未配置 CDN 420 | 2、邮件,通过网站服务来确定服务器 IP 421 | 3、国外 IP 访问,通过国外 dns 查询 422 | 4、查找历史 DNS 解析记录 423 | 5、通过系统泄露(js 泄露、配置文件泄露、报错信息等) 424 | 6、漏洞利用获取,想办法让主机连接自己 425 | 7、全网扫描 426 | 427 | Q: XSS 除了获取 cookies 还能干嘛? 428 | A: 429 | 获取服务器真实 ip 430 | xss 蠕虫 431 | 钓鱼攻击 432 | 前端 JS 挖矿 433 | 获取键盘记录 434 | 435 | Q: 文件上传漏洞绕过方式 436 | A: 437 | 双写后缀、文件名覆盖、%00 截断、添加特殊字符、构造异常包、构造大文件、分块传输、利用服务器解析漏洞 438 | 439 | Q: 泛解析的域名如何进行子域名爆破? (★★★) 440 | A: 441 | 首先的访问一个随机并不存在的域名 test.xx.com,记录其泛解析到的 IP 地址. 442 | 然后通过字典枚举域名的 A 记录,并与最开始的 test.xx.com 的 A 记录做对比,不同的则是存在的域名 443 | 444 | Q: sqlmap 时间盲注参数 445 | A: 446 | --time-sec 设置时间盲注延迟 447 | 448 | Q: xss 在 a 标签怎么利用? 449 | A: 450 | javascript 伪协议 451 | xss 452 | 453 | Q: 存在注入然后数据库没有数据怎么办? 454 | A: 455 | 尝试写 WebShell 456 | 457 | Q: PHP eval 和 system 的区别 458 | A: 459 | 命令执行和代码执行的区别 460 | 461 | Q: 文件上传中`%00`截断的原理是什么,官方是如何设计修复方案的? 462 | 463 | (1) 原理: 464 | %00 被解码为 0x00,系统在对文件名的读取时,如果遇到 16 进制的 0x00,就会认为读取已结束进行截断. 465 | (2) 修复: 466 | 比较长度是否一样 467 | 468 | Q: 介绍一下自认为有趣的挖洞经历 469 | A: 470 | 1. 挖到一个厂商子平台账号漏洞,该账号直接涉及目标厂家的所有平台,直接定级为核心严重 471 | 2. 找到一个 ssrf 接口,厂家定级中危,后通过该接口打到其内网的 redis 并 getshell,漏洞升级高危. 472 | ... 473 | 474 | Q: CSRF 的成因及防御措施(不用 token 如何解决) 475 | A: 476 | 1. CSRF 主要是因为浏览器没有判断是否是用户本人操作 477 | 2. 防御一般是: 478 | (1) 请求 Header 头增加随机值,服务端对随机值进行验证,验证通过服务端才允许请求成功 479 | (2) 增加验证码 480 | (3) 增加当前用户密码的验证 481 | 482 | Q: 简述一下 SSRF 中 DNSRebind 的绕过原理及修复方法 483 | A: 484 | 1. 原理: 485 | DNS 重绑定攻击,DNS 解析是有时间差,把第一次解析的 IP 设为合法 IP,就能绕过 host 合法性检查了;把第二次解析的 IP 设为内网 IP,就达到了 SSRF 访问内网的目的 486 | 487 | 2. 修复方法: 488 | (1) DNS 安全代理 489 | (2) 第三方 DNS 服务 490 | 491 | Q: CSP 应该如何使用及配置,有哪些绕过 CSP 的方式 492 | A: 493 | > CSP(Content Security Policy,内容安全策略) 494 | 495 | - 利用跳转功能绕过 location.href 496 | - link 标签预加载绕过 497 | - meta 网页跳转绕过 498 | - iframe 绕过 499 | - CDN 绕过(CDN 存在低版本的框架) 500 | - 不完整的 script 标签绕过 501 | - 302 重定向绕过 502 | 503 | Q: 简述一下 XXE 漏洞产生的原理,针对 PHP 和 JAVA,XXE 分别可以进行哪些恶意利用? 504 | A: 505 | 1. 原理: 506 | 507 | 当 应用允许引用 XML 外部实体时,攻击者通过构造恶意内容,就可能进行任意文件读取、系统命令执行、内网端口探测、内网网站攻击等操作 508 | 509 | Q: JWT 相较于 SESSION 优劣势? (★★★) 510 | A: 511 | (1) 区别: 512 | seesion 保存在服务端 513 | jwt 保存在客户端 514 | (2) 优劣势: 515 | 516 | · jwt 优点: 517 | 可拓展性好 518 | 无状态 519 | 520 | · jwt 缺点: 521 | 安全性 522 | 性能 523 | 一次性: 524 | 无法废弃 525 | 续签 526 | 527 | Q: 安全、网络名称理解 528 | A: 529 | H5 负载均衡 530 | IDS 入侵检测 531 | IPS 入侵防御 532 | EDR 终端防护 533 | HIDS 主机入侵检测 534 | WAF Web应用防火墙 535 | 蜜罐 攻击诱导 536 | DLP 数据防泄漏 537 | AD 域 538 | GPO 组策略 539 | AP 热点 540 | CDN 内容分发网络 541 | CF cloudflare 542 | SAST 静态应用程序安全性测试(白盒测试) 543 | DAST 动态应用程序安全性测试(黑盒测试) 544 | IAST 交互式应用程序安全测试(IAST 将代理放置在应用程序中,并在应用程序中,开发过程中的任何位置,IDE,连续集成环境,QA 甚至生产环境中的任何位置实时进行所有分析) 545 | RASP 运行时应用程序安全保护 546 | 547 | Q: PHP disable_function 548 | A: 549 | 1 寻找未禁用的函数 550 | exec 551 | shell_exec 552 | system 553 | passthru 554 | popen 555 | proc_open 556 | pcntl_exec 557 | 2 com 组件拓展 558 | 3 利用 LD_PRELOAD 环境变量 559 | 560 | Q: 内网纵深防御 561 | A: 562 | 主要为了防止一个手段无法防御到,所以以多个手段来防御 563 | 边界防御 564 | 监测响应 565 | 访问控制 566 | 终端安全 567 | 安全运维 568 | 569 | Q: 免杀绕过系统 570 | A: 571 | Windows API 中的 syscall 函数,在 Windows Defender 的检测当中,只要你调用此接口,就直接拦截了 572 | 573 | Q: 溯源反制怎么做 574 | A: 575 | 溯源钓鱼邮件,分析附件木马回连地址,邮件头找到真实发件人,利用邮件信息及 id 去社工,寻找博客,企业信息,社交信息等 576 | 获取 id 之后,百度,谷歌,src,微博,微信,支付宝,豆瓣,贴吧,知乎,脉脉,钉钉,CSDN,facebook,领英,github 等进行查询绘制攻击者画像 577 | 578 | Q: mysql 蜜罐 579 | A: 580 | 当攻击者用爆破 mysql 密码的扫描器扫描到我们的 mysql 并连接上的时候,客户端(攻击者)会 581 | 自动发起一个查询,我们(服务端)会给与一个回应,我们在回应的数据包中加入 load data 582 | local infile 读取攻击者的本地文件到我们数据库中,达到反制的目的. 583 | 584 | Q: 协程和线程区别 585 | A: 586 | 一个线程可以多个协程,一个进程也可以单独拥有多个协程. 587 | 线程进程都是同步机制,而协程则是异步. 588 | 589 | 协程和线程相比,有三个优势. 590 | 1、减少了线程切换的成本.Java 中的线程,不管是创建还是切换,都需要较高的成本.子程序切换不是线程切换,而是由程序自身控制,因此,没有线程切换的开销,和多线程比,线程数量越多,协程的性能优势就越明显.这也就是说,协程的效率比较高. 591 | 2、协程的第二大优势就是,不需要多线程的锁机制,因为只有一个线程,也不存在同时写变量冲突,在协程中控制共享资源不加锁,只需要判断状态就好了,所以执行效率比多线程高很多. 592 | 3、协程更轻量级.创建一个线程栈大概需要 1M 左右,而协程栈大概只需要几 K 或者几十 K. 593 | 有优势也有劣势,因为前面的程序看起来在"上串下跳",所以,协程看起来也没那么好控制. 594 | 595 | Q: 挖过什么逻辑漏洞,如何修复 596 | A: 597 | 横向越权:可通过建立用户和可操作资源的绑定关系,用户对任何资源进行操作时,通过该绑定关系确保该资源是属于该用户所有的;对请求中的关键参数进行间接映射,避免使用原始关键参数名. 598 | 纵向越权:建议使用基于角色访问控制机制来防止纵向越权攻击,即预先定义不同的权限角色,为每个角色分配不同的权限,每个用户都属于特定的角色,即拥有固定的权限,当用户执行某个动作或产生某种行为时,通过用户所在的角色判定该动作或者行为是否允许. 599 | 体系加强: 600 | ● 基础安全架构,完善用户权限体系.要知道哪些数据对于哪些用户,哪些数据不应该由哪些用户操作; 601 | ● 永远不要相信来自用户的输入,对于可控参数进行严格的检查与过滤; 602 | ● 执行关键操作前必须验证用户身份; 603 | ● 不要直接使用对象的实名或关键字;直接对象引用的加密资源 id,防止攻击者枚举 ID; 604 | ● 鉴权,服务端对请求的数据和当前用户身份做校验,前后端同时校验; 605 | ● 调用功能前验证用户是否有权限调用相关功能; 606 | 607 | 技术增强: 608 | 与三方系统对接,无法通过登录信息做鉴权的,可以设计签名,预防接口被随意调用.解决方法:给三方系统颁发一个 appId、Secret(记录在自己系统里),要求调用方传递参数时带上 appId,然后传递一个签名 sign,sign 可以设计为 md5(业务参数+Secret).接收方根据 appId 查询出来对应的 Secret,然后用同样的算法计算 sign,对比一致即可放行.设计签名,攻击方无法修改业务参数,因为修改了业务参数,sign 便不对了,只要调用方不泄露 secret,它就是安全的.接收方做好幂等,业务也不会有问题.最多被重放请求(ddos),并且重放也可以通过参数里加时间戳来解决. 609 | 610 | 所有鉴权问题搞定后,数据字段透出最好做到最小化,前端不需要的字段不透出,敏感字段要脱敏. 611 | 612 | Q:谈谈你对信息收集的理解\方式 613 | A: 614 | 信息收集一般分为两个方向,主动信息收集和被动信息收集 615 | 主动信息收集会通过端口扫描、目录扫描、指纹识别去收集目标信息 616 | 被动信息收集通过公开情报、whois 信息、DNS 历史解析记录、子域名信息、旁站信息、C 段资产、证书信息、企业信息、备案信息等 617 | 收集的意义主要用于扩大攻击面和确定攻击路径 618 | 619 | Q:信息收集时如何处理子域名爆破泛解析问题 620 | A: 621 | 根据确切不存在的子域名记录获取黑名单 IP,对爆破过程的结果进行黑名单过滤.但存在误报,如泛解析 IP 和某个子域名 IP 为同一 IP 622 | 另外也可以根据 TTL(TTL 值全称是“生存时间(Time To Live)”,简单的说它表示 DNS 记录在 DNS 服务器上缓存时间),在权威 DNS 中,泛解析记录的 TTL 肯定是相同的,如果子域名记录相同,但 TTL 不同,那这条记录可以说肯定不是泛解析记录 623 | 624 | Q:CDN 是什么 625 | A: 626 | 内容分发网络,主要用于对网站做负载均衡,提供内容缓存服务,有的会提供 CND web 防护,可以帮助网站加速访问,隐藏真实 IP,提供 waf 等 627 | 628 | Q:如何判断网站是否使用了 CDN 629 | A: 630 | 1、多地 ping,通过返回结果来看 631 | 2、查询解析 IP、通过对 IP 的归属查询可以确定 CDN 厂商 632 | 633 | Q:如何绕过 CDN 查找真实 IP 634 | A: 635 | 1、子域名可能未配置 CDN 636 | 2、邮件,通过网站服务来确定服务器 IP 637 | 3、国外 IP 访问,通过国外 dns 查询 638 | 4、查找历史 DNS 解析记录 639 | 5、通过系统泄露(js 泄露、配置文件泄露、报错信息等) 640 | 6、漏洞利用获取,想办法让主机连接自己 641 | 7、全网扫描 642 | 643 | Q:中间件是什么,常见的中间件有哪些 644 | A: 645 | web 架构中的中间交换层,有消息中间件和服务中间件. 646 | 常见的有 weblogic、apache、nginx、tomcat、jboss 等 647 | 648 | Q:phpinfo 文件关注点 649 | A: 650 | 服务器真实 IP、网站绝对路径、禁用函数等 651 | 652 | Q:XSS 分为哪几种 653 | A: 654 | 反射型 XSS、储存型 XSS、DOM 型 XSS 655 | 656 | Q:XSS 能用来做什么? XSS 有什么危害 657 | A: 658 | 反射型 xss 可以用来钓鱼、储存型 xss 可以用来窃取 cookie、网页劫持、网页挂马等 659 | 660 | Q:XSS 除了获取 cookies 还能干嘛? 661 | A: 662 | 获取服务器真实 ip 663 | xss 蠕虫 664 | 钓鱼攻击 665 | 前端 JS 挖矿 666 | 获取键盘记录 667 | 668 | Q:XSS 怎么防御 669 | A: 670 | 对所有用户输入的内容进行转义、或者输出转义 671 | 672 | Q:CSRF 是什么 673 | A: 674 | 跨站请求伪造,可以通过构造 csrf 请求诱导他人点击,从而导致信息被篡改的操作 675 | 676 | Q:CSRF 如何防御 677 | A: 678 | 设置 tonken、增加验证码 679 | 680 | Q:SameSite 如何防止 CSRF 681 | A: 682 | cookie 设置 samesit 属性后,可以有效控制 cookie 是否跟随发送,当值为 strict(严格模式)时,表明只有同站请求才能携带 cookie;值为 Lax(宽松模式),限制了 post,普通跨站请求携带 cookie,值为 none,白给 683 | 684 | Q:cookie 和 session 的区别 685 | A: 686 | cookie 储存在客户端,session 是基于 cookie 实现的,session 存储在服务器端 687 | 688 | Q:SSRF 是什么,有什么危害,怎么利用 689 | A: 690 | 服务器请求伪造,可以让攻击者构造有服务器自己发送的请求,以便实现访问一些内部资源.通过该漏洞可以读取服务器文件,探测内网端口,利用 Gopher 协议还能进一步攻击内网服务 691 | 692 | Q:SSRF 漏洞怎么防御 693 | A: 694 | 禁止跳转,URL 检测,限制协议等 695 | 696 | Q:文件上传漏洞有什么危害,怎么利用 697 | A: 698 | 上传 webshell、上传恶意木马诱导管理员下载、连续上传大文件造成系统服务崩溃 699 | 700 | Q:文件上传漏洞绕过方式 701 | A: 702 | 双写后缀、文件名覆盖、%00 截断、添加特殊字符、构造异常包、构造大文件、分块传输、利用服务器解析漏洞 703 | 704 | Q:php 的 %00 截断的原理是什么? 705 | A: 706 | 因为在 C 语⾔中字符串的结束标识符 %00 是结束符号,⽽ PHP 就是 C 写的,所以继承了 C 的特性,所以判断为%00 是结束符号不会继续往后执⾏ 707 | 条件:PHP<5.3.29,且 GPC 关闭 708 | 709 | Q:常⻅的中间件解析漏洞利⽤⽅式 710 | A: 711 | IIS 6.0 712 | /xx.asp/xx.jpg "xx.asp" 是⽂件夹名 713 | IIS 7.0/7.5 714 | 默认 Fast-CGI 开启,直接在 url 中图⽚地址后⾯输⼊ / 1.php,会把正常图⽚当成 php 解析 715 | Nginx 716 | 版本⼩于等于 0.8.37,利⽤⽅法和 IIS 7.0/7.5 ⼀样,Fast-CGI 关闭情况下也可利⽤. 717 | 空字节代码 xxx.jpg%00.php 718 | Apache 719 | 上传的⽂件命名为:test.php.x1.x2.x3,Apache 是从右往左判断后缀 720 | 721 | Q:分块传输绕 WAF 原理 722 | A: 723 | 分块传输是一种HTTP协议特性,它允许将请求体分成多个小块发送.攻击者可以利用这个特性,将恶意代码分散到多个数据块中,使得WAF无法完整识别恶意内容.比如将SQL注入语句分成多个小块,WAF可能无法识别完整的注入语句,从而绕过检测. 724 | 725 | Q:文件包含漏洞有什么危害,怎么利用 726 | A: 727 | 文件包含漏洞可以让攻击者读取服务器上的敏感文件,比如配置文件、数据库密码等.攻击者还可以通过包含恶意文件来执行任意代码.利用方式包括本地文件包含(LFI)和远程文件包含(RFI),通过修改URL参数来包含目标文件,比如通过修改?file=参数来包含/etc/passwd等敏感文件. 728 | 729 | Q:XXE 漏洞是什么,有什么危害,怎么利用 730 | A: 731 | XXE(XML外部实体注入)漏洞发生在处理XML数据时,攻击者可以构造恶意的XML数据,让服务器读取本地文件或发起网络请求.危害包括读取服务器文件、发起SSRF攻击、执行系统命令等.利用方式是通过构造包含外部实体的XML,比如,然后通过解析这个实体来读取文件. 732 | 733 | Q:XPATH 注入有什么危害,怎么利用 734 | A: 735 | XPATH注入可以让攻击者绕过身份验证,获取数据库中的敏感信息.攻击者通过构造恶意的XPATH查询语句,比如在登录时注入'or'1'='1这样的条件,使得查询条件永远为真,从而绕过身份验证.还可以通过构造复杂的XPATH查询来获取数据库中的其他用户信息. 736 | 737 | Q:SQL 注入是什么?怎么利用? 738 | A: 739 | 由于信任用户输入,导致输入内容被带入到数据库查询中,并返回结果或响应不同内容. 740 | 通过 SQL 注入我们可以获取用户表的用户和密码(一般时加密的 hash,可能能解密)、权限够还可以写 webshell、或者利用 741 | 742 | Q:怎么避免 SQL 注入漏洞,如何防护? 743 | A: 744 | 避免SQL注入最有效的方法是使用参数化查询或预编译语句,这样用户输入的数据会被当作参数处理,而不是SQL语句的一部分.其他防护措施包括:对用户输入进行严格的过滤和转义、使用ORM框架、设置数据库用户最小权限、使用WAF等.同时要避免直接拼接SQL语句,这是最容易产生SQL注入的地方. 745 | 746 | Q:SQL 注入绕 WAF 的方式有哪些? 747 | A: 748 | SQL注入绕WAF的常见方式包括:使用注释符(如/**/)分割关键字、使用大小写混合、使用URL编码、使用十六进制编码、使用Unicode编码、使用空格替代(如使用%09、%0A等)、使用函数替代(如使用concat替代字符串拼接)、使用内联注释等.这些方法可以混淆WAF的检测规则,使其无法识别出恶意的SQL语句. 749 | 750 | Q:SQL 注入分哪些种类? 751 | A: 752 | 1)报错注入 753 | 2)bool 型注入 754 | 3)延时注入 755 | 4)宽字节注入 756 | 757 | Q:盲注时如何加速注入过程? 758 | A: 759 | 加速SQL盲注的方法包括:使用二分法查找数据、使用多线程并发请求、使用更高效的查询语句、使用工具自动化(如sqlmap)、减少请求次数(如使用位运算)、使用缓存机制等.还可以通过分析响应时间来判断数据,而不是仅仅依赖布尔值,这样可以提高注入效率. 760 | 761 | Q:时间盲注时如果 Sleep 函数被禁用,该怎么办? 762 | A: 763 | 当Sleep函数被禁用时,可以使用其他延时函数替代,如benchmark()、heavy query(执行大量计算)、pg_sleep()等.也可以使用其他方式来判断注入结果,比如通过比较字符串长度、使用条件语句触发错误、使用DNS查询延时等.这些方法都可以达到类似Sleep的效果,帮助判断注入是否成功. 764 | 765 | Q:sqlmap 如何下载数据库数据 766 | A: 767 | 使用sqlmap下载数据库数据可以通过以下命令:sqlmap -u "目标URL" --dump -D 数据库名 -T 表名.这个命令会先探测数据库结构,然后下载指定表的所有数据.还可以使用--dump-all参数下载所有数据库的数据,或者使用--columns参数只下载特定列的数据.下载的数据会保存在sqlmap的输出目录中. 768 | 769 | Q:sqlmap 如何统计数据表有多少数据 770 | A: 771 | 使用sqlmap统计表数据量可以通过以下命令:sqlmap -u "目标URL" --count -D 数据库名 -T 表名.这个命令会返回表中记录的总数.还可以使用--first和--last参数来获取第一条和最后一条记录的位置,从而估算数据量.这些信息对于评估数据泄露的影响范围很有帮助. 772 | 773 | Q:sqlmap os shell 原理是什么,利用条件是什么? 774 | A: 775 | 利用条件有三个,dba 权限、网站绝对路径、有写入权限,sqlmap 遍历路径,利用 into outfile 函数写入两个文件,一个文件实现文件上传功能,另外一个文件实现命令执行 776 | 777 | Q:mysql 和 msssql 注入时的区别 778 | A: 779 | MySQL和MSSQL注入的主要区别在于语法和函数.MySQL使用#或--作为注释符,而MSSQL使用--;MySQL的字符串连接使用concat()函数,MSSQL使用+号;MySQL使用version()获取版本,MSSQL使用@@version;MySQL使用information_schema获取数据库信息,MSSQL使用sys.databases.这些差异需要在构造注入语句时特别注意. 780 | 781 | Q:SQL 注入获取系统权限需要哪些条件 782 | A: 783 | 通过SQL注入获取系统权限需要满足以下条件:数据库用户具有高权限(如root或sa)、数据库配置允许执行系统命令、服务器未禁用相关函数.在MySQL中需要secure_file_priv未设置限制,在MSSQL中需要xp_cmdshell未被禁用.同时还需要知道网站的绝对路径,这样才能写入webshell或执行系统命令. 784 | 785 | Q:mysql 和 oracl 注入时的区别 786 | A: 787 | MySQL和Oracle注入的区别主要体现在:Oracle使用dual表进行查询测试,MySQL不需要;Oracle的字符串连接使用||,MySQL使用concat();Oracle使用rownum限制返回行数,MySQL使用limit;Oracle的注释使用--,MySQL使用#或--;Oracle使用v$version获取版本,MySQL使用version().这些差异需要在构造注入语句时注意. 788 | 789 | Q:DDOS 和 CC 的区别,如何防护 790 | A: 791 | DDOS是通过大量请求占用服务器资源,而CC攻击是通过模拟正常用户请求消耗服务器资源.防护措施包括:使用CDN分散流量、配置防火墙规则、限制单个IP的请求频率、使用验证码、部署WAF、启用流量清洗等.同时要定期检查服务器日志,及时发现异常流量,做好应急预案. 792 | 793 | Q:同源策略是什么,能起什么作用 794 | A: 795 | 同源策略是浏览器的重要安全机制,它限制不同源的网页之间的交互.同源指的是协议、域名、端口都相同.这个策略可以防止恶意网站窃取其他网站的数据,比如防止XSS攻击获取其他网站的cookie.但它也会限制正常的跨域请求,所以需要通过CORS等机制来解决跨域问题. 796 | 797 | Q:windows 下 redis 利用方式 798 | A: 799 | 在Windows下Redis未授权访问的利用方式包括:通过redis-cli连接后写入webshell到网站目录、修改计划任务执行命令、写入SSH公钥获取系统权限等.具体步骤是:先连接redis,然后使用config set dir设置目录,使用config set dbfilename设置文件名,最后使用set命令写入恶意内容. 800 | 801 | Q:bypass uac 的方式 802 | A: 803 | 绕过UAC(用户账户控制)的常见方式包括:利用白名单程序提权、修改注册表、使用COM接口、利用计划任务、使用DLL劫持等.比如可以通过修改HKCU\Software\Classes\mscfile\shell\open\command注册表项,或者利用cmstp.exe等白名单程序来绕过UAC限制,获取管理员权限. 804 | 805 | Q:windwos defender 安全机制 806 | A: 807 | Windows Defender的安全机制包括:实时保护、云保护、行为监控、网络保护等.它会监控文件操作、注册表修改、网络活动等,使用特征码和行为分析来检测恶意软件.同时它会定期更新病毒库,使用机器学习算法识别新型威胁.用户可以通过组策略或注册表来配置其行为,但要注意不要完全禁用防护. 808 | 809 | Q:域内委派是什么? 810 | A: 811 | 域内委派是Active Directory中的一种权限机制,允许一个服务代表用户访问其他服务.比如Web服务器可以代表用户访问数据库服务器.委派分为约束委派和非约束委派,约束委派限制服务只能访问特定资源,而非约束委派允许服务访问任何资源.正确配置委派可以提高系统安全性,错误配置可能导致权限提升. 812 | 813 | Q:PTH 原理 814 | A: 815 | PTH(Pass The Hash)攻击的原理是利用Windows认证机制中的NTLM哈希值.攻击者获取到用户的NTLM哈希后,不需要知道明文密码,直接使用这个哈希值进行身份验证.这是因为Windows在认证时使用的是哈希值而不是明文密码,所以只要哈希值正确,就能通过认证,获取系统权限. 816 | 817 | Q:PTH 利用条件 818 | A: 819 | PTH攻击需要满足以下条件:获取到目标用户的NTLM哈希值、目标系统启用了NTLM认证、攻击者有网络访问权限.同时目标系统不能启用CredSSP或Restricted Admin模式,这些安全机制会阻止PTH攻击.攻击者通常使用Mimikatz等工具来获取哈希值,然后使用这个哈希值进行横向移动. 820 | 821 | Q:java 反射可以做哪些事情 822 | A: 823 | Java反射可以动态获取类的信息、创建对象、调用方法、修改字段值等.具体包括:获取类的构造方法、方法和字段;动态创建对象实例;调用私有方法;修改私有字段;获取注解信息;动态代理等.这些功能使得程序可以在运行时动态操作类,提高了代码的灵活性,但也可能带来安全风险. 824 | 825 | Q:weblogic 漏洞原理 826 | A: 827 | WebLogic漏洞主要涉及反序列化、XML解析、JNDI注入等方面.比如CVE-2020-14882漏洞,攻击者可以通过构造特殊的HTTP请求,绕过身份验证直接访问管理控制台.CVE-2020-14645漏洞则是通过JNDI注入实现远程代码执行.这些漏洞通常是由于配置不当或代码缺陷导致的,需要及时更新补丁修复. 828 | 829 | Q:fastjson 漏洞原理 830 | A: 831 | Fastjson漏洞主要是反序列化漏洞,攻击者可以构造恶意的JSON数据,在反序列化时执行任意代码.漏洞原理是Fastjson在反序列化时会自动调用对象的setter方法,攻击者可以通过@type指定恶意类,利用其setter方法执行命令.不同版本的Fastjson有不同的绕过方式,需要及时更新到安全版本. 832 | 833 | Q:stauts2 漏洞原理 834 | A: 835 | Struts2漏洞主要是OGNL表达式注入漏洞,攻击者可以在请求参数中注入OGNL表达式,在服务器端执行任意代码.漏洞原理是Struts2在处理请求参数时,会将参数值作为OGNL表达式解析,如果未做严格过滤,就会导致代码执行.不同版本的Struts2有不同的漏洞,需要及时更新补丁. 836 | 837 | Q:讲一次印象深刻的漏洞挖掘经历 838 | Q:讲一次印象深刻的渗透测试经历 839 | Q:讲一下最近比较火的的安全漏洞,你的分析过程和如何快速处置 840 | Q:讲一下你个人的职业规划及发展方向 841 | Q:讲一下在项目执行过程中遇到的困难和处理方式 842 | Q:讲一下自己觉得出色的开发项目或者对优秀工具的研究(cs 的二开、burp 破解、burp 插件、cna 插件等) 843 | --------------------------------------------------------------------------------