前一阵子想换工作,投简历前准备了一些技术面可能会问到的问题,文章写的比较乱,加上个人能力有限,基本上是想到什么就写什么,各位大佬凑合看看吧。。。最主要的是,我想求一个tools邀请码~~
nmap
主机发现
- -PS,SYN Ping,默认目的端口为80(SYN--SYN+ACK--RST)
- -PA,ACK Ping,默认目的端口为80(ACK--RST)
端口扫描
- -sT,全连接扫描,与目标主机建立完整的三次握手,开放:SYN--SYN+ACK---ACK、关闭:SYN--RST
- -sS,半开扫描,开放:SYN--SYN+ACK--RST,关闭:SYN--RST
- -sU,UDP扫描,开放:没有回复(UDP是无连接协议)、关闭:ICMP端口不可达
其它
-O操作系统识别、-sV服务识别
masscan
扫描速度比较快,在进行ip资产收集时,可以先使用masscan进行快速扫描,再使用nmap确认服务。
sql注入
注入点拿shell
- 注入获得管理员账号密码,通过谷歌语法、爆破、爬目录得到网站后台地址,进后台找上传点、修改允许上传文件的类型、配置文件中插马、备份数据库、找编辑器拿shell。
- 注入点的权限足够大,通过load file、into out file写文件、甚至直接os-shell获取命令执行权限。
防御
- 检查输入数据的数据类型,比如限制输入的数据只能是int型
- 使用安全的函数
- 使用预编译语句
mysql提权
- udf提权 需要有MySQL root权限,安装dll文件,5.0以上和以下版本,udf.dll导出的目录不同。高版本MySQL加入了secure-file-priv参数限制了MySQL的导出。
- mof 提权 向系统system32目录下的mof文件写入内容,MOF文件每隔几秒就会执行命令
- CVE-2016-6663 将www-data提到mysql权限
- CVE-2016-6664 将mysql权限提到root权限
XSS
原理
攻击者在网页中插入了恶意代码,当用户使用浏览器访问被插入恶意代码的网页时,恶意代码在用户的浏览器上执行。
类型
- 反射,需要欺骗用户点击、经过后台
- 存储,恶意代码存储到服务器端,经过后台
- DOM:攻击者在URL中插入XSS代码,前端从URL中获取XSS代码输出到页面,不经过后台
浏览器层面的防御
- httpOnly 浏览器禁止js读取带有httponly属性的cookie
- CSP内容安全策略 CSP的本质是白名单制度,开发者明确告诉客户端,哪些外部资源可以加载和执行,它的实现和执行全部由浏览器完成,开发者只需提供配置。 启用方法:(1)http头的Content-Security-Policy字段 (2)meta标签
- IE xss filter/Chrome xss auditor X-XSS-Protection: 0 禁止xss过滤 X-XSS-Protection: 1 启用xss过滤,检测到xss后,浏览器将清除页面(浏览器的默认配置) X-XSS-Protection: 1; mode=block,启用XSS过滤,检测到xss后,浏览器不会清除页面,而是阻止页面加载 说明:XSS-Protection配置不当也可能会造成安全问题 比如配置成1时,攻击者通过注入特定的语句,删除页面上自带的js库;还有xss filter的各种绕过技巧。 建议:xss-filter的配置需要和具体业务、开发人员水平等相适配。如果开发人员安全水平比较高,白盒审计比较完善,xss-filter就可有可无。但对于一些业务为先、开发时间紧急的项目,一个配置就能缓解一部分攻击,则可以考虑使用xss-filter。
特殊情况的xss
- 上传文件时,文件名xss
- input标签type为hidden,且过滤了闭合标签,使用accesskey触发
- 返回json格式的数据,但content-type定义成text/html,形成xss
- x-forwarded-for造成存储性xss
- jsonp回调函数的函数名过滤不严,造成xss
- url编码、html字符实体绕过过滤
Csrf
原理
正常用户发出攻击者伪造的请求。测试时使用Burp生成csrf poc,把poc代码放到自己的服务器上,使用已登录的用户访问进行验证。
防御
- referer 通过referer判断来源地址是否是站内的地址。 防御关键:前端的JS无法修改referer字段。 绕过: (1)referer中包含关键字就通过。 baidu.com.hack.com 、 hack.com/baidu.com (2)referer为空时允许通过 data协议、https跳转到http
- token 服务器随机生成token发送给客户端,客户端请求时带上token,服务器验证token的合法性。 防御关键:由于同源策略的限制,攻击者无法使用JS获取其他域的token。 绕过: 同域下存在xss漏洞时,使用js读取页面中的token,然后构造csrf poc,完成csrf攻击。
- 验证码,可能会影响用户的体验。
其它格式的csrf
- Json csrf 数据以json格式传输,没有添加token,没有限制refer,但是服务器验证了Content-Type是否为application/json。 (1)通过Flash跨域构造POC。 (2)通过307重定向带着Content-Type和Post的数据进行跳转。 原理:Flash的Header存在一个黑名单,黑名单中的Header不允许设置,比如Referer,但是Content-Type不在黑名单中。
- jsonp接口劫持 用户登录后,通过JSONP的方式获取数据,如果JSONP的接口没有做防护,就可能造成JSONP劫持攻击。 危害:获取个人信息进行密码猜解或者定向钓鱼。
同源策略
原理
协议相同、端口相同、域名相同; 如果A网站和B网站不同源,那么A网站无法操作B网站的cookie和dom; 同源政策规定,AJAX请求只能发给同源的网址;
跨域的方式
- document.domain,适用于一级域名相同,只是二级域名不同
- jsonp 原理:jsonp利用了<script>标签能跨域的特性。 步骤: (1)约定好回调函数名 (2)使用script标签,读取外域的js资源 (3)返回一段js (4)调用页面上准备好的回调函数 安全问题: (1)回调函数的函数名过滤不严,并且content-type定义成了text/html,可能造成xss (2)referer验证不严时,JSONP的接口可能造成JSONP劫持
- cors跨域资源共享 利用条件: 1、Access-Control-Allow-Origin头根据请求的Origin生成 2、Access-Control-Allow-Credentials头为true 此时,用户发送的请求会带有用户的cookie身份信息。 注意:Access-Control-Allow-Credentials头设置为true时,才能带着cookie发送请求。 危害:用户点击攻击者发送的链接时,会泄露用户的敏感信息。
- postMessage,HTML5新引入的跨域api,postmessage xss
一些常问的问题
- 为什么同源策略无法防御csrf? 同源策略不能阻止一个域向另一个域发送请求,它能阻止处理请求返回的数据,csrf在请求发送的瞬间就完成攻击了。
- cors和jsonp比较? JSONP只支持GET请求,CORS支持所有类型的HTTP请求; JSONP兼容性好,支持老式浏览器;
竞争条件漏洞
原理
多个线程同时访问同一块数据时没有进行锁操作或同步操作。
- 案例1 文件上传到服务器后,先检查文件后缀名,如果不符合条件则删除。 利用:在上传文件和文件检查的间隙,不断发起请求访问该文件;该文件一旦被执行,就在服务器上生成一个shell文件。
- 案例2:抽奖、提现 利用:使用burp intruder中的null payloads进行并发重复发包。
XXE攻击
什么是xml?
两个采用不同技术的系统通过XML交换数据。 XML文档结构包括XML声明、DTD文档类型定义、文档元素。 实体可以内部声明,也可以外部引用。
什么是xxe?
攻击者强制XML解析器去访问攻击者指定的资源内容。
利用?
引用外部实体时,将外部实体赋值为恶意内容
- 任意文件读取 file协议,file:///etc//passwd php协议,php://filter/read=convert.base64-encode/resource=index.php
- 内网端口探测,简单ssrf http协议
- xxe拒绝服务攻击
- java xxe中可以使用file协议列目录,file:///etc/
xxe无回显时,如何突破?
引用远程dtd,结合外带的方式,将读取到的内容保存成变量,然后将变量代入到url中传给攻击者的服务器,攻击者从服务器的日志中提取信息。
blind xxe小技巧:
- php环境中,使用php filter对数据进行base64编码,可绕过特殊字符(中文或<)的限制。
- java环境中,使用file协议读取数据,再通过ftp协议发送出去;ftp协议可以读到任意长度的文件,而且不受空格、换行符的影响。
xxe拿shell?
思路:使用http get请求,攻击内网中的应用,例如Struts2、sql注入等。
- 读取一些敏感信息,例如tomcat-users.xml得到帐号密码,然后登录tomcat manager部署webshell
- 结合内网中的struts2漏洞,将poc传入url中,实现远程执行系统命令,或者部署bash文件反弹shell
- 如果php环境安装了expect扩展,可以直接执行系统命令
防御?
- 过滤用户提交的XML数据
- 禁止使用XML外部实体
SSRF
原理
网站提供了从其它服务器获取数据的功能,但是没有对目标地址做过滤。 危害:攻击目标web站点的内网系统。
常见位置
- 加载远程图片
- 社交分享:分享时,web服务器通常会先获取目标网站的title标签,展示在页面上。
- 转码服务:把网页内容转为适合手机浏览的样式,服务器需要请求网页上的内容。
- 在线翻译:通过URL地址翻译对应文本的内容。
- 通用的:ueditor ssrf、weblogic ssrf,discuz ssrf等。
利用
- 使用file协议读取敏感文件
- 使用http、ftp协议进行端口扫描
- 使用dict、gopher协议攻击内网中的应用
绕过ip地址的过滤
- 将ip地址进行进制转换
- 使用短url地址
- 使用xip.io,127.0.0.1.xip.io
- 使用@符,www.baidu.com@127.0.0.1
- 使用url跳转,192.168.40.155/redirect.php?url=http://192.168.88.154
- 利用dns解析,在域名上设置A记录,指向127.0.0.1
防御
- 设置URL白名单或限制内网IP
- 过滤返回信息,避免用户根据返回信息来判断服务器的状态
- 禁止url跳转
- 禁用不必要的协议,仅允许http https请求
ssrf利用过程中如何获取内网ip?
- github搜索
- 乌云历史漏洞
- 爆破192/172/10网段
- 对所有的子域名进行敏感信息扫描,有些源代码注释中可能泄露内网ip
ssrf如何拿shell?
- weblogic ssrf+redis weblogic可以通过传入”\r\n”来注入换行符,而redis是通过换行符来分隔每条命令,所以weblogic结合redis未授权访问,向cron文件写入定时任务,可实现getshell。
- ssrf+struts2 结合struts2漏洞,将poc通过http协议访问,实现远程执行系统命令。
- ssrf+fastcgi 前提是知道目标服务器上1个php文件的绝对路径,并且fpm监听了本地端口。 构造poc,通过gopher协议发送数据包,实现getshell。
- ssrf+redis 前提是redis存在未授权访问漏洞,首先使用socat命令进行端口转发,得到攻击的poc,再结合gopher协议发送数据包,实现getshell。
- ssrf+mysql mysql有密码和无密码的认证方式不一样,如果mysql存在无密码的用户,可结合gopher协议,通过into outfile写文件,实现getshell。
一些技巧和注意事项
- 只允许使用http协议,使用php header函数进行跳转绕过
- 如果只允许访问jpg文件,可以在Apache配置文件中写入下面的内容,将jpg文件当做PHP文件来执行,AddType application/x-httpd-php .jpg
- 在php中使用gopher协议需要支持curl扩展
- Java中没有php的curl,所以Java ssrf支持的协议比较有限,gopher协议在JDK1.8版本中被彻底移除了,JDK1.7也只有几个老版本支持,可以通过import sun.net.www.protoocol中可以看到支持哪些协议
- ssrf进行端口扫描时,无回显,通过响应时间判断
- SSRF主要是使用get请求,攻击不需要授权的应用;但是如果支持gopher协议,可以构造post请求进一步攻击。
文件上传
绕过方法
- 客户端验证
- Content-Type
- 文件头
- 黑名单绕过asp、asa、cer;php3、php5、phtml
- 解析漏洞和文件包含
防御
- 判断文件类型
- 文件上传的目录设置为不可执行
- 使用随机数改写文件名和文件路径
- 使用单独的文件服务器存储上传的文件
文件包含
4个函数:include()、include_once()、require()、require_once()
本地文件包含 远程文件包含,php.ini中配置allow_url_fopen = On,allow_url_include = On
本地文件包含拿shell
- 包含图片马,结合上传漏洞
- 包含Apache、ftp、ssh日志文件getshell,需要有权限
- 包含session文件getshell,结合phpmyadmin phpmyadmin每次登录时,会带上session
- 包含临时文件getshell,结合phpinfo 向phpinfo页面发送数据包后,从返回包中可匹配出临时文件名
远程文件包含拿shell
- 包含远程服务器上的图片马
- input流写文件
- data协议写文件
绕过
- 本地文件包含:%00截断、url编码
- 远程文件包含:?号、#号
防御
- 对危险字符进行过滤
- 正确设置文件的权限
- php中使用open_basedir,将文件访问限制在指定的区域
解析漏洞
IIS
- IIS6.0 目录解析:a.asp/a.jpg 文件解析:a.asp;.jpg
- IIS7.0/IIS7.5 实际是php cgi配置不当造成的解析漏洞 a.jpg/.php
Nginx
- %00截断 影响版本:<= 0.8.37 a.jpg%00.php
- nginx解析漏洞 与Nginx版本无关,属于php cgi配置不当造成的解析漏洞 a.jpg/.php
- CVE-2013-4547 影响版本0.8.41 – 1.5.6 a.jpg(空格)\0.php
Apache
- 未知文件后缀解析漏洞 与Apache版本无关,属于配置不当造成的解析漏洞 a.php.jpg,从右向左解析
- 换行解析漏洞CVE-2017-15715 影响版本:2.4.0~2.4.29 a.php(换行)将会按php后缀进行解析
url重定向
绕过
baidu.com.hack.com、hack.com/baidu.com、 hack.com?baidu.com、baidu.com@hack.com、 hack.com#baidu.com
案例:Django任意url跳转漏洞(CVE-2018-14574) http://192.168.88.152:8000//www.baidu.com
ctlf注入
重定向的位置也可能出现crlf注入,CRLF是"回车+换行"(\r\n)的简称,HTTP Header与HTTP Body是用两个CRLF分隔的。 利用方法:
- 注入set cookie,造成会话固定漏洞 %0aSet-cookie:%20JSPSESSID%3Dwooyun
- 注入xss语句 %0d%0a%0d%0a<img src=1 onerror=alert(1)>
- 注入x-xss-protection绕过xss filter %0aX-XSS-Protection:%200%0d%0a%0d%0a<img src=1 onerror=alert(1)>
案例:nginx配置错误造成CRLF注入
Redis未授权访问
- 写ssh公钥,需要root权限
- 写定时任务,需要root权限 可利用cron的位置: 1、/etc/crontab 2、/etc/cron.d/* 3、/var/spool/cron/root为centos系统root用户的cron文件 4、/var/spool/cron/crontabs/root为debian系统root用户的cron文件
- 写webshell,需要知道web绝对路径
修复
- 设置redis密码
- 低权限用户运行redis
- 禁止外网访问redis
- 设置防火墙策略
java中间件漏洞
Tomcat
- 弱口令,进后台部署war包getshell
- put方法任意写文件漏洞 条件:Tomcat配置了可写(readonly=false) 注意:Tomcat会检测文件后缀,可以使用”/”来绕过限制。
Weblogic
- 弱口令
- XMLDecoder反序列化 (1)写文件 (2)/dev/tcp反弹shell
- T3协议反序列化,需要开启T3协议
- 任意文件上传,需要开启web服务测试页
- ssrf,结合redis未授权访问进行攻击
Jboss
- 弱口令
- 反序列化
点击劫持
原理:使用iframe把透明的恶意页面嵌套在正常的页面之上,并欺骗用户点击。
测试:burpsuite clickbandit 可以结合反射性xss与csrf一起利用。
防御:配置HTTP头X-Frame-Options,如果不设置,默认允许任意网站的iframe加载。
- DENY拒绝iframe加载
- SAMEORIGIN允许同源的iframe加载
- ALLOW-FROM允许指定来源的iframe加载
密码学
对称加密
- 加密密钥和解密密钥相同
- 速度快
- 安全性较高
- DES、AES、RC4
非对称加密
- 公钥,私钥
- 速度慢
- 安全性更高
- RSA、ECC、ElGamal
单向哈希函数
- 原理 使用hash算法对目标信息生成一段特定长度的唯一hash值,但不能通过hash值重新获得目标信息。
- 举例 MD5(128位),SHA-1(160位),SHA-256,SHA-512 SHA-2是TLS1.2惟一支持的单向加密算法。
- 应用 (1)文件校验 (2)数字签名 发送方:使用hash函数,生成数据的摘要;使用私钥来加密摘要,生成数字签名;将数据、数字签名、公钥一起发送给接收方。 接收方:使用hash函数,生成数据的摘要;使用公钥来解密数字签名,得到数据的摘要;将摘要进行对比,判断数据是否被修改过。
- 补充 为了兼顾效率和安全性,一般把对称加密和非对称加密结合使用 (1)发送方使用非对称加密的公钥来加密对称加密的密钥 (2)发送给接收方 (3)接收方使用私钥进行解密得到对称加密的密钥 (4)双方使用对称加密来进行数据的传输
https的通信过程
https只是保证了数据在传输过程中的机密性和完整性,无法防御对应用系统、服务的攻击。
- 客户端,请求https连接
- 服务端,返回证书,证书中包含公钥
- 客户端,使用根证书验证证书的合法性,并生成对称密钥,通过证书中的公钥加密,发送到服务端
- 服务端,使用私钥解密,获得对称密钥,使用对称密钥加密数据,ssl通信开始
测试ssl协议漏洞
近年来发现的SSL协议漏洞有Heartbleed、POODLE、BEAST等
- 在线评估SSL/TLS的网站
- Nmap的script脚本
- sslscan
burp https抓包相关问题
- 电脑抓包相当于中间人劫持 测试者将burp证书导入浏览器,请求https服务时,首先服务器返回证书,然后客户端使用伪造的证书去校验服务器证书。
- SSLPinning 如果手机安装burp证书后依然抓不到数据包,可能是因为app启用了SSL Pinning。即APP中封装了客户端的证书,APP收到用户伪造的证书后,对该证书进行强校验,验证该证书是不是自己承认的证书,如果不是,则断开连接。
- 绕过sslpinning抓包 1、逆向app源码,找到证书校验的代码,干掉SSL pinning,然后重新打包签名。 2、使用Xposed + JustTruestMe突破SSL pinning,JustTrustMe可以将APK中所有用于校验SSL证书的API都进行Hook,从而绕过证书检查。
- 总结:电脑抓包时,浏览器是客户端,浏览器是用户可控的;手机抓包时,app是客户端,app是开发者自己打包好的。
拒绝服务
syn攻击
向目标主机发送大量的SYN包,占用操作系统的TCP最大连接数。
Sockstress攻击
- 在三次握手的最后一次ACK应答中,攻击者将其window size窗口大小设置为0
- 目标在传输数据时,发现接收端TCP窗口大小为0
- 停止传输数据,并发出TCP窗口探测包,询问攻击者其TCP端口是否有更新
- 攻击者没有更改TCP窗口的大小,目标就会一直维持TCP连接,等待数据发送 通过使目标主机长时间的维持TCP连接,来达到拒绝服务攻击的目的。
dns放大攻击
由于dns协议的查询流量很小,但响应流量比较大,所以可以伪造源IP地址为被攻击目标的IP地址,向互联网上支持递归查询的DNS服务器发起查询。
应用层的拒绝服务:
- Ms12-020,Windows远程桌面协议的dos漏洞,使目标主机蓝屏
- http慢速攻击,目的是耗尽应用的并发连接池 (1)Slowloris 完整的http请求结尾是\r\n\r\n,攻击者一直发\r\n,服务端认为没有接收完而一直等待。 (2)Slow HTTP POST HTTP的头中声明content-length长度,但是body部分缓慢的发送。 (3)Slow Read attack 调整tcp滑动窗口大小,使服务器缓慢的返回数据。 测试工具:Slowhttptest
逻辑漏洞
任意密码重置
- 验证码返回在数据包中
- 验证码可爆破
- 验证码未绑定用户
- 每一步没有相关联,可直接构造重置密码的url
- 修改response返回包的内容绕过验证,比如将false改为true或将0改成1
- session覆盖,使用A走重置密码的步骤,走到最后一步,先别输入新密码;打开新页面,使用B走重置密码的步骤,走到接收验证码那一步;刷新A的页面,B的session覆盖了A的session,再输入新密码,成功重置了B的密码。
- 修复: (1)减少验证码有效时间 (2)验证码使用后即销毁 (3)限制单个ip提交频率,防止暴力破解 (4)对重要参数加入验证码同步信息或时间戳 (5)接收验证码的帐号由服务端提供,不能信任客户端提交的数据
支付漏洞
- 修改金额:支付金额、退款金额
- 修改订单号
- 修改购买数量,改成负数
- 修改购买年限
- 重放支付成功的页面
- 构造支付成功的url,绕过支付直接充值成功
- 调用支付宝支付时,修改充值接口返回的数据,再发送给支付宝
- 修复: (1)敏感参数不要明文放在URL中 (2)服务端效验客户端提交的参数 (3)重要参数做数据签名,如金额和订单号等
越权漏洞
- 水平越权:相同级别用户之间的越权
- 垂直越权:不同级别用户之间的越权,如普通用户执行管理员用户的权限
- 经常出现越权漏洞的点: (1)修改个人资料 (2)查询用户订单 (3)重置密码 增删改查的位置均有可能存在越权漏洞。
未授权访问
- web相关:未认证的情况下能够访问到需要认证才能访问的页面。 (1)基于url地址实现的访问控制
- 服务相关: (1)redis未授权访问 (2)NFS未授权访问 (3)MongoDB未授权访问 (4)Hadoop未授权访问等...
验证码相关
- 验证码可爆破
- 验证码返回在数据包中
- 验证码容易被识别
- 服务器端验证码不失效,只会在刷新当前URL时才会刷新验证码
- 验证码空值绕过,删除验证码的参数仍可通过
- 验证码数量有限,多刷新几次,发现系统中的验证码只有固定的几个