前一阵子想换工作,投简历前准备了一些技术面可能会问到的问题,文章写的比较乱,加上个人能力有限,基本上是想到什么就写什么,各位大佬凑合看看吧。。。最主要的是,我想求一个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时才会刷新验证码
  • 验证码空值绕过,删除验证码的参数仍可通过
  • 验证码数量有限,多刷新几次,发现系统中的验证码只有固定的几个