Ywc

Web安全知识整理

Word count: 10.6k / Reading time: 39 min
2018/10/01 Share

目录:

常见漏洞

SQL注入

sql注入的原理、防御

原理:当攻击者发送的sql语句被sql解释器执行,通过执行这些恶意语句欺骗数据库执行,导致数据库信息泄露。

防御:
1.使用预编译语句,绑定变量(PreparedStatement) 复习文章
2.使用存储过程
3.检查数据类型
4.使用安全函数mysql_real_escape_string()

如何判断sql注入

单引号判断法对两种注入都有效

1.数字型注入
使用 and 1=1 或者 and 1=2 来进行判断

?id=1 and 1=1 和 ?id=1 and 1=2

2.字符型注入
使用 1’ and ‘1’=1’ 和 1’ and ‘1’=’2来进行判断

?id=1’ and ‘1’=1’ 和 ?id=1’ and ‘1’=’2

1.单引号判断法
2.and大法 and 1=1 and 1=2 同真为真,其余为假
3.ord大法 or 1=1 or 1=2 同假为假,其余为真

通过对其传入的可控参数进行简单的构造,通过服务端返回的内容来判断有无注入

  • 服务端返回错误形式
    • 错误直接回显在页面上
    • 错误隐藏在页面源代码中
    • 检测到错误跳转到另一个页面
    • 返回HTTP错误代码500或重定向302
    • 适当处理错误结果,常显示一个通用错误页面

sql注入的利用方式

1.非法查询其他数据库资源,如管理员帐号
2.执行系统命令
3.获取服务器root权限

时间盲注除了sleep还有哪些利用函数

参考文章

为什么有的时候没有错误回显,用php举例

php的配置文件php.ini进行了修改,display_errors = On 修改为 display_errors = off时候就没有报错提示.
在php脚本开头添加error_reporting(0); 也可以达到关闭报错的作用.

宽字符注入的原理?如何利用宽字符注入漏洞,payload如何构造?

原理:
mysql数据库在使用宽字节(GBK)编码时,会认为两个字符是一个汉字(前一个ascii码要大于128(比如%df),才到汉字的范围),而且当我们输入单引号时,mysql会调用转义函数,将单引号变为\’,其中\的十六进制是%5c,mysql的GBK编码,会认为%df%5c是一个宽字节,也就是’運’,从而使单引号闭合(逃逸),进行注入攻击
%df' 会被PHP当中的addslashes函数转义为%df\' ,“\”既URL里的“%5C”,那么也就是说,%df'会被转成%df%5C%27倘若网站的字符集是GBK,MYSQL使用的编码也是GBK的话,就会认为%df%5C%27是一个宽字符。也就是“縗’”

sql注入绕过技巧

复习文章

1.绕过空格

  • 注释替换:/* 注释 */
  • 两个空格代替一个空格,用Tab代替空格,%a0=空格
  • 使用浮点数
  • 括号绕过空格

2.引号绕过

  • 使用十六进制

3.逗号绕过

  • 使用from或offset

4.比较符号(<>)绕过

  • 使用greatest()、least():(前者返回最大值,后者返回最小值)
  • 使用sqlmap中的between脚本

5.or and xor not绕过

  • and=&& or=|| xor=| not=!

sql注入有哪几类

1.按照参数类型:数字型、字符型
2.按照数据库返回结果:回显注入、报错注入、盲注
3.按照注入位置及方式不同:post注入,get注入,cookie注入,盲注,延时注入,搜索注入,base64注入等

SQL注入报错注入指令

复习文章:http://wyb0.com/posts/injection-of-error-based/

报错注入只要套用公式即可,如下(第一个公式count(*)、floor()、rand()、group by不可或缺,后两个公式有32位的限制):

?id=2’ and (select 1 from (select count(*),concat( floor(rand(0)*2),(select (select (查询语句)) from information_schema.tables limit 0,1))x from information_schema.tables group by x )a )--+

?id=2’ and updatexml(1,concat(0x7e,(SELECT @@version),0x7e),1)--+

?id=1’ and extractvalue(1, concat(0x7e, (select @@version),0x7e))--+

XSS跨站脚本攻击

XSS的漏洞主要成因是后端接收参数时未经过滤,导致参数改变了HTML的结构,从而被浏览器或后端代码执行,带来漏洞

XSS有哪几类

反射型、存储型、DOMXSS

存储型 XSS
存储型 XSS 的攻击步骤:

  • 攻击者将恶意代码提交到目标网站的数据库中。
  • 用户打开目标网站时,网站服务端将恶意代码从数据库取出,拼接在 HTML 中返回给浏览器。
  • 用户浏览器接收到响应后解析执行,混在其中的恶意代码也被执行。
  • 恶意代码窃取用户数据并发送到攻击者的网站,或者冒充用户的行为,调用目标网站接口执行攻击者指定的操作。

存储型 XSS(又被称为持久性XSS)攻击常见于带有用户保存数据的网站功能,如论坛发帖、商品评论、用户私信等。
它是最危险的一种跨站脚本,相比反射型XSS和DOM型XSS具有更高的隐蔽性,所以危害更大,因为它不需要用户手动触发。任何允许用户存储数据的web程序都可能存在存储型XSS漏洞,当攻击者提交一段XSS代码后,被服务器端接收并存储,当所有浏览者访问某个页面时都会被XSS。

反射型 XSS
反射型 XSS 的攻击步骤:

  • 攻击者构造出特殊的 URL,其中包含恶意代码。
  • 用户打开带有恶意代码的 URL 时,网站服务端将恶意代码从 URL 中取出,拼接在 HTML 中返回给浏览器。
  • 用户浏览器接收到响应后解析执行,混在其中的恶意代码也被执行。
  • 恶意代码窃取用户数据并发送到攻击者的网站,或者冒充用户的行为,调用目标网站接口执行攻击者指定的操作。

反射型 XSS (也被称为非持久性XSS)漏洞常见于通过 URL 传递参数的功能,如网站搜索、跳转等。
由于需要用户主动打开恶意的 URL 才能生效,攻击者往往会结合多种手段诱导用户点击。
POST 的内容也可以触发反射型 XSS,只不过其触发条件比较苛刻(需要构造表单提交页面,并引导用户点击),所以非常少见。
反射型 XSS 跟存储型 XSS 的区别是:存储型 XSS 的恶意代码存在数据库里,反射型 XSS 的恶意代码存在 URL 里。

DOM 型 XSS
DOM 型 XSS 的攻击步骤:

  • 攻击者构造出特殊的 URL,其中包含恶意代码。
  • 用户打开带有恶意代码的 URL。
  • 用户浏览器接收到响应后解析执行,前端 JavaScript 取出 URL 中的恶意代码并执行。
  • 恶意代码窃取用户数据并发送到攻击者的网站,或者冒充用户的行为,调用目标网站接口执行攻击者指定的操作。

DOM 型 XSS 跟前两种 XSS 的区别:DOM 型 XSS 攻击中,取出和执行恶意代码由浏览器端完成,属于前端 JavaScript 自身的安全漏洞,而其他两种 XSS 都属于服务端的安全漏洞。

DOM通常代表在html、xhtml和xml中的对象,使用DOM可以允许程序和脚本动态的访问和更新文档的内容、结构和样式。它不需要服务器解析响应的直接参与,触发XSS靠的是浏览器端的DOM解析,所以防范DOM型XSS完全就是前端的责任,必须注意!!!。
msf

XSS的利用方式

1.获取cookie
2.DDos攻击
3.构造js代码进行挖矿
4.探测内网端口

https://www.freebuf.com/sectool/159689.html

XSS的触发机制

一、直接触发
在HTML页中插入<script></script>脚本标记,JS嵌入到HTML中的两种方式:
1.直接嵌入<script>标签

1
2
3
<script language=“javascript”>
document.write(“hello world!”);
</script>

2.在外部以js文件的形式嵌入

1
<script language=“javascript” src=“test.js”></script>

二、利用HTML标签属性触发
三、利用HTM事件触发
四、利用CSS触发

XSS防御

  • 可在cookie中设置httponly(浏览器禁止页面的js访问带有httponly属性的cookie)
  • xss filter(检查输入,设置白名单方式)
  • 输出检查(编码,转义,常用编码:html编码,js编码,16进制等)
  • 针对不同位置的输出,使用不同的处理方式
  • 处理富文本 富文本XSS问题
  • header中使用content-Sencurity-Policy字段,规定请求js的域名白名单(CSP策略)

基于白名单的富文本XSS后端过滤

富文本存储型XSS的模糊测试之道

防御XSS攻击可以从前端和后端入手。

前端防御:使用js,由客户端运行,将 ‘&’ , ‘<’ , ‘' 之类的敏感字符转义为 &amp , &lt , &gt,用户所编写的HTML代码就变成了字符,剩下的才是富文本格式。优点是可以直接在客户端运行,不需要占用服务器资源。但缺点是,如果攻击者使用伪造的HTTP请求,直接向服务器发送一段HTML代码,或者禁用js,则可以绕过前端处理及检查,直接向服务器提交包含script的HTML代码。这时就需要在服务器进行防御了。
前端防御插件:xss.js

后端防御:在服务器检查敏感的HTML代码,有基于黑名单和基于白名单的两种过滤方式。因为HTML标签种类繁多,基于黑名单的过滤方法考虑的并不全面。而且对伪协议的考虑也不全面等等。。所以这里介绍的是一种基于白名单的过滤方法,使用jsoup处理接收到的HTML,只保留合法的标签及内容。

dom xss 和反射型xss的区别

dom xss 不需要服务器解析响应的直接参与,触发XSS靠的是浏览器端的DOM解析。dom型js代码存储在数据库中。

XSS遇到后台登录限制或者HTTPONLY时

复习文章:https://blog.csdn.net/xysoul/article/details/45366695
1.可以利用XSS获取当前页面的所有URL
2.获取当前页面的代码

CSRF和XSS的区别

1.CSRF:需要用户先登录网站A,获取 cookie。
XSS:不需要登录
2.CSRF:是利用网站A本身的漏洞,去请求网站A的api。
XSS:是向网站 A 注入 JS代码,然后执行 JS 里的代码,篡改网站A的内容。

CSRF跨站请求伪造

原理

跨站请求伪造,利用了网站允许攻击者预测特定操作所有细节这一特点。由于浏览器自动发送会话cookie等认证凭证,导致攻击者可以创建恶意的web页面来产生伪造请求。这些伪造的请求很难和合法的请求区分开

危害

攻击者可以让受害者用户修改任何允许修改的数据,执行任何用户允许的操作,例如修改密码,登录注销等

如何检测

1.GET类型的CSRF的检测

  • 如果有token等验证参数,先去掉参数尝试能否正常请求。如果可以,即存在CSRF漏洞

2.POST类型的CSRF的检测

  • 如果有token等验证参数,先去掉参数尝试能否正常请求。如果可以,再去掉referer参数的内容,如果仍然可以,说明存在CSRF漏洞,可以利用构造外部form表单的形式,实现攻击。如果直接去掉referer参数请求失败,这种还可以继续验证对referer的判断是否严格,是否可以绕过

防御

1.验证码

  • 验证码强制用户必须与应用进行交互,才能完成最终请求。

2.Referer Check

  • 检查请求是否来自合法的源。但服务器并非什么时候都能取得 Referer。

3.Token

  • CSRF 能够攻击成功的本质原因是重要操作的所有参数都可以被攻击者猜测得到。
  • 保持原参数不变,新增一个参数 Token,值是随机的,在实际应用中,Token 可以放在用户的 Session 中,或浏览器的 Cookies 中。
  • Token 一定要足够随机。此外,Token 的目的不是为了防止重复提交,所以为了使用方便,可以允许在一个用户的有效生命周期内,在 Token 消耗掉之前都使用同一个 Token,但如果用户已经提交了表单,则这个 Token 已经消耗掉,应该重新生成 Token。
    Token 还应注意其保密性,如果 Token 出现在 URL 中,则可能会通过 Referer 泄露,应尽量把 Token 放在表单中,把敏感操作由 GET 改为 POST,以表单或 AJAX 的形式提交,避免 Token 泄露。

SSRF服务端请求伪造

这篇文章总结

XSS,CSRF,SSRF三种漏洞的区别和共同点

相同点:
XSS,CSRF,SSRF三种常见的Web服务端漏洞均是由于,服务器端对用户提供的可控数据过于信任或者过滤不严导致的。

不同点:
XSS是服务器对用户输入的数据没有进行足够的过滤,导致客户端浏览器在渲染服务器返回的html页面时,出现了预期值之外的脚本语句被执行。

CSRF是服务器端没有对用户提交的数据进行随机值校验,且对http请求包内的refer字段校验不严,导致攻击者可以利用用户的Cookie信息伪造用户请求发送至服务器。

SSRF是服务器对用户提供的可控URL过于信任,没有对攻击者提供的RUL进行地址限制和足够的检测,导致攻击者可以以此为跳板攻击内网或其他服务器。

XXE防御、绕过

XXE漏洞学习
XXE:XML外部实体注入
防御
1.使用开发语言提供的禁用外部实体的方法,即禁用外部实体。
PHP:
libxml_disable_entity_loader(true);

JAVA:
DocumentBuilderFactory dbf =DocumentBuilderFactory.newInstance();
dbf.setExpandEntityReferences(false);

Python:
from lxml import etree
xmlData = etree.parse(xmlSource,etree.XMLParser(resolve_entities=False))

2.过滤用户提交的XML数据
关键词:<!DOCTYPE和<!ENTITY,或者,SYSTEM和PUBLIC。

JSONP漏洞

复习文章:JSONP 安全攻防技术
JSONP 全称是 JSON with Padding ,是基于 JSON 格式的为解决跨域请求资源而产生的解决方案。他实现的基本原理是利用了 HTML 里 <script></script> 元素标签,远程调用 JSON 文件来实现数据传递

JSON和JSONP的区别

复习文章
JSON是一种数据交换格式,而JSONP是一种非官方跨域数据交互协议。JSON是“暗号”,而JSONP则是接头方式。
JSON是描述信息的格式,JSONP是信息传递双方约定的方法。

CROS跨域资源共享

复习文章: 跨域资源共享CORS详解
它允许浏览器向跨源服务器,发出XMLHttpRequest请求,从而克服了AJAX只能同源使用的限制。

Ddos分布式拒绝服务攻击

复习文章:Ddos分布式拒绝服务攻击
俗称洪水攻击,攻击者控制多台主机同时向同一主机或网络发起DOS攻击(dos攻击是拒绝服务攻击)
攻击原理:利用合理的请求从而造成资源过载,导致服务不可用。攻击者通过向路由器发起海量的消息请求或者畸形报文,导致CPU无法实时处理消息,引发正常的业务交互流程、内部处理流程阻塞,达到拒绝服务的目的
udp flood: 利用大量的UDP小包冲击DNS服务器,造成网络瘫痪。复习文章
DDOS攻击主要分为三类:流量型攻击;连接型攻击;特殊协议缺陷

渗透测试

渗透测试流程

渗透测试之信息收集

入侵后痕迹清理

linux入侵控制与痕迹清理
linux查看登录日志
清理命令记录:
(1)仅清理当前用户: history -c
(2)使系统不再保存命令记录:vi /etc/profile,找到HISTSIZE这个值,修改为0
(3)删除记录:

1
2
3
删除登录失败记录:echo > /var/log/btmp
删除登录成功记录:echo > /var/log/wtmp (此时执行last命令就会发现没有记录)
删除日志记录:echo > /var/log/secur

Linux查看/var/log/wtmp文件查看可疑IP登陆last -f /var/log/wtmp

/var/log/wtmp日志文件介绍
/var/log/wtmp文件的查看方法

绕过绕过cdn获取网站的真实IP

复习文章:https://blog.csdn.net/qq_29277155/article/details/52463908/
1.查询二级域名
方法:

  • 在线查询http://i.links.cn/subdomain/
  • 使用AWVS中的子域名查询工具

2.nslookup
cmd中nslookup
3.直接ping一下
4.看历史纪录
在线网址:http://toolbar.netcraft.com/site_report?url=www.xxx.com
5.phpinfo
6.看订阅邮件
7.rss订阅

WAF绕过

  • 大小写混合
  • URL编码
  • 关键字替换
  • 多参数请求拆分
  • HTTP参数污染
  • 生僻函数
  • 注入参数到cookie

漏洞相关

最近分析的漏洞:幽灵猫漏洞

https://yinwc.github.io/2020/03/01/CVE-2020-1938/

项目相关

静态二维码问题

静态条码容易被“调包”、利用收款码伪造交通罚单等、嵌入木马,扫码被盗刷或窃取信息

https://www.bbaqw.com/wz/93625.htm

二维码本身是一串文本,不会含有病毒,木马和恶意扣费软件。目前主要的安全问题是二维码到一个手机应用的下载链接,这个手机应用包含病毒,木马、广告和恶意扣费内容。推荐从权威的网站和可靠的印刷品上扫描。对扫描的内容的可信度请保持谨慎态度。 如果扫描内容显示正在下载应用,请谨慎安装。 做到以上两点,就放心大胆地扫描吧。


HTTP协议

http1.0与http1.1的区别

参考文章1
阮一峰的网络日志

1.长连接:HTTP 1.1支持长连接(PersistentConnection)和请求的流水线(Pipelining)处理,在一个TCP连接上可以传送多个HTTP请求和响应,减少了建立和关闭连接的消耗和延迟,在HTTP1.1中默认开启Connection: keep-alive,一定程度上弥补了HTTP1.0每次请求都要创建连接的缺点。这是最大的变化,就是引入了持久连接(persistent connection),即TCP连接默认不关闭,可以被多个请求复用,不用声明Connection: keep-alive。
2.缓存处理:在HTTP1.0中主要使用header里的If-Modified-Since,Expires来做为缓存判断的标准,HTTP1.1则引入了更多的缓存控制策略例如Entity tag,If-Unmodified-Since, If-Match, If-None-Match等更多可供选择的缓存头来控制缓存策略。
3.带宽优化及网络连接的使用:HTTP1.0中,存在一些浪费带宽的现象,例如客户端只是需要某个对象的一部分,而服务器却将整个对象送过来了,并且不支持断点续传功能,HTTP1.1则在请求头引入了range头域,它允许只请求资源的某个部分,即返回码是206(Partial Content),这样就方便了开发者自由的选择以便于充分利用带宽和连接。
4.错误通知的管理:在HTTP1.1中新增了24个错误状态响应码,如409(Conflict)表示请求的资源与资源的当前状态发生冲突;410(Gone)表示服务器上的某个资源被永久性的删除。
5.Host头处理*:在HTTP1.0中认为每台服务器都绑定一个唯一的IP地址,因此,请求消息中的URL并没有传递主机名(hostname)。但随着虚拟主机技术的发展,在一台物理服务器上可以存在多个虚拟主机(Multi-homed Web Servers),并且它们共享一个IP地址。HTTP1.1的请求消息和响应消息都应支持Host头域,且请求消息中如果没有Host头域会报告一个错误(400 Bad Request)。

http 1.1 新增options、put、delete、trace、connect五种HTTP请求方法,加上get、post、head原1.0中的三种请求共八种协议。

HTTP除了get、post常见的请求还有哪些?

OPTIONS:这个方法可使服务器传回该资源所支持的所有HTTP请求方法。用’‘来代替资源名称,向Web服务器发送OPTIONS请求,可以测试服务器功能是否正常运作。
*
HEAD:与GET方法一样,都是向服务器发出指定资源的请求。只不过服务器将不传回资源的本文部分。它的好处在于,使用这个方法可以在不必传输全部内容的情况下,就可以获取其中“关于该资源的信息”(元信息或称元数据)。
**PUT
:向指定资源位置上传其最新内容
DELETE:请求服务器删除Request-URI所标识的资源
TRACE:回显服务器收到的请求,主要用于测试或诊断
CONNECT:HTTP/1.1协议中预留给能够将连接改为管道方式的代理服务器。通常用于SSL加密服务器的链接(经由非加密的HTTP代理服务器)

常见的响应码

2开头 成功
· 200 OK,表示从客户端发来的请求在服务器端被正确处理
· 204 No content,表示请求成功,但响应报文不含实体的主体部分
· 206 Partial Content,进行范围请求

3开头 重定向:表示要完成请求,需要进一步操作。 通常,这些状态代码用来重定向
· 301 moved permanently,永久性重定向,表示资源已被分配了新的 URL
· 302 found,临时性重定向,表示资源临时被分配了新的 URL
· 303 see other,表示资源存在着另一个 URL,应使用 GET 方法丁香获取资源
· 304 not modified,表示服务器允许访问资源,但因发生请求未满足条件的情况
· 307 temporary redirect,临时重定向,和302含义相同

4开头 客户端错误:请求错误,这些状态代码表示请求可能出错,妨碍了服务器的处理。
· 400 bad request,请求报文存在语法错误
· 401 unauthorized,表示发送的请求需要有通过 HTTP 认证的认证信息
· 403 forbidden,表示对请求资源的访问被服务器拒绝
· 404 not found,表示在服务器上没有找到请求的资源

5开头 服务器错误:这些状态代码表示服务器在尝试处理请求时发生内部错误。 这些错误可能是服务器本身的错误,而不是请求出错。
· 500 internal sever error,表示服务器端在执行请求时发生了错误
· 503 service unavailable,表明服务器暂时处于超负载或正在停机维护,无法处理请求

从URL输入到页面展现的整体过程

  • DNS 解析:将域名解析成 IP 地址
  • TCP 连接:TCP 三次握手
  • 发送 HTTP 请求
  • 服务器处理请求并返回 HTTP 报文
  • 浏览器解析渲染页面
  • 断开连接:TCP 四次挥手

SDL

https://yinwc.github.io/2019/06/15/SDL%E5%AE%89%E5%85%A8%E5%BC%80%E5%8F%91%E6%B5%81%E7%A8%8B/

MySQL

MySQL写shell的方法

1.select “” into outfile “”
2.开启log写shell 复习文章

MySQL提权

MySQL提权复习文章

JAVA

复习文章1
复习文章2

Linux下反弹shell的方法

参考文章1参考文章2

1.使用linux命令反弹shell bash

2.使用python、java、perl、Ruby反弹shell,可以配和msf利用。

3.使用nc、Telnet反弹shell

redis的利用方式,getshell的方法

参考文章1
参考文章2

利用方式:

  1. 通过向Web目录中写webshell的方式进行getshell
  • 当自己的redis权限不高时,可以向web里写入webshell,但需要对方有web服务且有写入权限。假设靶机里面存在WEB服务并且目录在 /var/www/
  • redis 192.168.242.134:6379>config set dir /var/www/a
    redis 192.168.242.134:6379>config set dbfilename shell.php
    redis 192.168.242.134:6379>set x “
    redis 192.168.242.134:6379>save
  1. 通过写SSH key的方式进行getshell

  2. 通过写corntab的方式进行getshell

具体的写法: https://blog.csdn.net/fly_hps/article/details/80937837

PHP

PHP的字符串中单引号与双引号的区别

“ “双引号里面的字段会经过编译器解释,然后再当作HTML代码输出。
‘ ‘单引号里面的不进行解释,直接输出。
双引号中的变量($var)和特殊字符(\r\n之类)会被转义,单引号中的内容不会被转义(所以效率更高)
单引号解析的时间比双引号快 。

同源策略

同源策略是浏览器的一个安全功能,不同源的客户端脚本在没有明确授权的情况下,不能读写对方资源,同源是指,域名,协议,端口相同。

常见端口

复习文章:https://zhuanlan.zhihu.com/p/24926870

web类

  • 80 web
  • 80-89 web
  • 8000-9090 web

数据库类(扫描弱口令)

  • 1433 MSSQL SQLServer
  • 1521 Oracle
  • 3306 Mysql
  • 5432 PostgreSQL

常用端口类(扫描弱口令/端口爆破)

  • 21 ftp
  • 22 SSH
  • 23 Telnet
  • 2601,2604 zebra路由,默认密码zebra
  • 3389 远程桌面

特殊服务类(未授权/命令执行类/漏洞)

  • 443 SSL心脏滴血
  • 873 Rsync未授权
  • 5984 CouchDB http://xxx:5984/_utils/
  • 6379 redis未授权
  • 7001,7002 WebLogic默认弱口令,反序列
  • 9200,9300 elasticsearch 参考WooYun: 多玩某服务器ElasticSearch命令执行漏洞
  • 11211 memcache未授权访问
  • 27017,27018 Mongodb未授权访问
  • 50000 SAP命令执行
端口号 端口说明 攻击技巧
21/69 ftp/tftp:文件传输协议 爆破/嗅探/溢出/后门
22 ssh:远程连接 爆破OpenSSH;28个退格
23 talnet:远程连接 爆破\嗅探
25 smtp:邮件服务 邮件伪造
53 DNS:域名系统 DNS区域传输\DNS劫持\DNS缓存投毒\DNS欺骗\利用DNS隧道技术刺透防火墙
67/68 DHCP 劫持\欺骗 UDP67和UDP68 67接收 68发送
110 pop3 爆破
137/139/445 samba 可尝试爆破以及smb自身的各种远程执行类漏洞利用,如,ms08-067,ms17-010,嗅探等……
143 imap 爆破
161 snmp 爆破
389 ldap 注入攻击\未授权访问
443 SSL心脏滴血 web漏洞测试
512/513/514 linux r 直接使用rlogin
873 rsync 未授权访问
1080 socket 爆破:进行内网渗透
1352 lotus 爆破:弱口令\信息泄漏:源代码
1433 mssql 爆破:使用系统用户登录\注入攻击
1521 oracle 爆破:TNS\注入攻击
2049 nfs 配置不当
2181 zookeeper 未授权访问
3306 mysql 爆破\拒绝服务\注入
3389 rdp 爆破\Shift后门
4848 glassfish 爆破:控制台弱口令\认证绕过
5000 sybase/DB2 爆破\注入
5432 postgresql 缓冲区溢出\注入攻击\爆破:弱口令
5632 pcanywhere 拒绝服务\代码执行
5900 VNC 爆破:弱口令\认证绕过
6379 redis 未授权访问\爆破:弱口令
7001 weblogic Java反序列化\控制台弱口令\控制台部署webshell
80/443/8080 web 常见web攻击\控制台爆破\对应服务器版本漏洞
8069 zabbix 远程命令执行
9090 websphere控制台 爆破:控制台弱口令\Java反序列
9200/9300 elasticsearch 远程代码执行
11211 memcacache 未授权访问
27017 mongodb 爆破\未授权访问

解析漏洞

IIS 5.x/6.0解析漏洞

1.目录解析

/xx.asp/xx.jpg

如:test.asp/test.jpg

即:新建一个名为”test.asp”的目录,该目录中的任何文件都被IIS当做asp程序执行(特殊符号是”/“

2.文件解析

sp.asp;.jpg

即分号后的不被解析,仍被IIS当做asp程序执行。

Apache 解析漏洞

文件后缀,Apache 从右到左开始判断解析,如果为不可识别解析,就再往左判断.

文件上传

文件上传校验姿势

  • 客户端javascript校验(一般只校验后缀名)
  • 服务端校验
    • 文件头content-type字段校验(image/gif)
    • 文件内容头校验(GIF89a)
    • 后缀名黑名单校验
    • 后缀名白名单校验
    • 自定义正则校验
  • WAF设备校验(根据不同的WAF产品而定)

文件上传的绕过

1.绕过上传检查

  • 前端检查扩展名

2.抓包绕过即可

  • Content-Type 检测文件类型

3.抓包修改 Content-Type 类型,使其符合白名单规则。

  • 服务端添加后缀

4.尝试 %00 截断

  • 服务端扩展名检测

5.利用解析漏洞。

  • Apache 解析 IIS 解析

其他方式后缀大小写、双写、特殊后缀如 php5 等,修改包内容的大小写过 WAF 等。

文件读取除了可以读取敏感文件还有什么利用方式

文件包含的利用方式 https://anquan.baidu.com/article/235

1、通过写入webserver的errorlog或者accesslog来实现一句话。适用于存在本地文件包含,但是无法上传文件的场景。

伪协议 php://input phar php://filter https://thief.one/2017/04/10/2/
利用php协议进行包含
截断包含
远程包含shell
本地包含配合文件上传
本地包含配合apache日志拿shell
利用/proc/self/environ进行包含

OWASP Top 10

注入

将不受信任的数据作为命令或查询的一部分发送到解析器时,会产生诸如SQL注入、NoSQL注入、OS注入和LDAP注入的注入缺陷。
攻击者的恶意数据可以诱使解析器在没有适当授权的情况下执行非预期命令或访问数据。

失效的身份认证和会话管理

简介
通常,通过错误使用应用程序的身份认证和会话管理功能,攻击者能够破译密码、密钥或会话令牌,或者利用其它开发缺陷来暂时性或永久性冒充其他用户的身份。
原理
开发者通常会建立自定义的认证和会话管理方案。但与身份认证和回话管理相关的应用程序功能往往得不到正确的实现,要正确实现这些方案却很难,结果在退出、密码管理、超时、密码找回、帐户更新等方面存在漏洞,这就导致了攻击者攻击者破坏密码、密钥、会话令牌或攻击其他的漏洞去冒充其他用户的身份

  • 身份认证:身份认证最常用于系统登录,形式一般为用户名和密码登录方式,在安全性要求较高的情况下,还有验证码、客户端证书、Ukey等
  • 会话管理:HTTP利用会话机制来实现身份认证,HTTP身份认证的结果往往是获得一个令牌并放在cookie中,之后的身份识别只需读授权令牌,而无需再次进行登录认证

危害
可能导致部分甚至全部账户遭受攻击,攻击者一旦成功,攻击者能执行受害用户的任何操作。因此管理员账户、特权账户是常见的攻击目标

检测失效的身份认证和会话管理

  • 用户身份验证凭证没有使用哈希或加密保护
  • 认证凭证可猜测,或者能够通过薄弱的的帐户管理功能(例如账户创建、密码修改、密码恢复, 弱会话ID)重写
  • 会话ID暴露在URL里 (例如URL重写)
  • 会话ID容易受到会话固定(session fixation)的攻击
  • 会话ID没有超时限制,或者用户会话或身份验证令牌特别是单点登录令牌在用户注销时没有失效
  • 成功注册后,会话ID没有轮转
  • 密码、会话ID和其他认证凭据使用未加密连接传输

防范

  • 分区公共区域和受限区域:站点的公共区域允许任何人用户进行匿名访问,受限区域只能接受特定用户的访问
  • 对cookie内容进行加密
  • 可以设置锁定账户策略
  • 设置密码和会话的有效期,并使用强密码(密码必须是数字和字母的组合)
  • 账号密码以密文形式传输

复习文章

敏感数据泄露

简介
许多Web应用程序和API都无法正确保护敏感数据,例如:财务数据、医疗数据和PII数据。攻击者可以通过窃取或修改未加密的数据来实施信用卡诈骗、身份盗窃或其他犯罪行为。
未加密的敏感数据容易受到破坏,因此,我们需要对敏感数据加密,这些数据包括:传输过程中的数据、存储的数据以及浏览器的交互数据。
原理
许多Web应用程序和API都无法正确保护敏感数据,例如:财务数据、医疗数据和PII数据。攻击者可以通过窃取或修改未加密的数据来实施信用卡诈骗、身份盗窃或其他犯罪行为。未加密的敏感数据容易受到破坏,因此,我们需要对敏感数据加密,这些数据包括:传输过程中的数据、存储的数据以及浏览器的交互数据。
防御
1.加密存储和传输所有的敏感数据
2.确保使用合适强大的标准算法和密钥,并且密钥管理到位
3.确保使用密码专用算法存储密码
4.及时清除没有必要存放的重要的/敏感数据
5.禁用自动收集敏感数据,禁用包含敏感数据的页面缓存

XXE外部实体注入

许多较早的或配置错误的XML处理器评估了XML文件中的外部实体引用。攻击者可以利用外部实体窃取使用URI文件处理器的内部文件和共享文件、监听内部扫描端口、执行远程代码和实施拒绝服务攻击.
具体见XXE漏洞的学习

失效的访问控制

简介
未对通过身份验证的用户实施恰当的访问控制。攻击者可以利用这些缺陷访问未经授权的功能或数据,例如:访问其他用户的帐户、查看敏感文件、修改其他用户的数据、更改访问权限等。
原理
大多数web应用程序在实现UI中可见的功能之前,都要验证功能级别的访问权限。但是,当访问每个函数时,应用程序需要在服务器上执行相同的访问控制检查。如果请求没有得到验证,攻击者将能够伪造请求,以便在没有适当授权的情况下访问功能。
防御
1.检查管理权限的过程并确保能够容易进行升级和审计,切忌硬编码。

2.默认缺省情况下,应该拒绝所有访问的执行权限。

3.对于每个功能的访问,需要明确的角色授权。检查每个功能分配的权限合理有效。

安全配置错误

简介
安全配置错误是最常见的安全问题,这通常是由于不安全的默认配置、不完整的临时配置、开源云存储、错误的 HTTP 标头配置以及包含敏感信息的详细错误信息所造成的。
因此,我们不仅需要对所有的操作系统、框架、库和应用程序进行安全配置,而且必须及时修补和升级它们。
原理
良好的安全性需要为应用程序、框架、应用服务器、web服务器、数据库服务器和平台定义和部署安全配置。默认值通常是不安全的。另外,软件应该保持更新。攻击者通过访问默认账户、未使用的网页、未安装补丁的漏洞、未被保护的文件和目录等,以获得对系统未授权的访问。
防御
1.及时了解并部署每个环境的软件更新和补丁信息,包括所有的代码库。(自动化安装部署)
2.统一出错处理机制,错误处理会向用户显示堆栈跟踪或其他过于丰富的错误消息信息。
3.使用提供有效分离和安全性强大的应用程序架构。

XSS跨站脚本攻击

简介:
当应用程序的新网页中包含不受信任的、未经恰当验证或转义的数据时,或者使用可以创建 HTML或JavaScript 的浏览器 API 更新现有的网页时,就会出现 XSS 缺陷。
XSS 让攻击者能够在受害者的浏览器中执行脚本,并劫持用户会话、破坏网站或将用户重定向到恶意站点。

具体见常见漏洞之XSS跨站脚本攻击

原理
指一个已经授权的用户,通过更改访问时的一个参数,从而访问到了原本其并没有得到授权的对象。

出现的原因
1.Web应用往往在生成Web页面时会用它的真实名字,且并不会对所有的目标对象访问时来检查用户权限,所以这就造成了不安全的对象直接引用的漏洞。

2.服务器上的具体文件名、路径或数据库关键字等内部资源被暴露在URL或网页中,攻击者可以尝试直接访问其他资源。

防御措施
1.避免在URL或网页中直接引用内部文件名或数据库关键字。

2.可使用自定义的映射名称来取代直接对象名,例如, http://example.test/online/news.asp?item=0245等

3.锁定网站服务器上的所有目录和文件夹,设置访问权限。

4.验证用户输入和URL请求,拒绝包含./或../的请求。

不安全的反序列化

简介:
不安全的反序列化会导致远程代码执行。即使反序列化缺陷不会导致远程代码执行,攻击者也可以
利用它们来执行攻击,包括:重播攻击、注入攻击和特权升级攻击。

使用含有已知漏洞的组件

简介
组件(例如:库、框架和其他软件模块)拥有和应用程序相同的权限。如果应用程序中含有已知漏洞的组件被攻击者利用,可能会造成严重的数据丢失或服务器接管。
同时,使用含有已知漏洞的组件的应用程序和API可能会破坏应用程序防御、造成各种攻击并产生严重影响。
原理
开发人员使用的组件也会含有漏洞,这些漏洞能够被自动化工具发现和利用。然后攻击者根据需要定制攻击代码并实施攻击。
防御
1.标识正在使用的所有组件和版本,包括所有依赖项
2.及时关注这些组件的安全信息并保证他们是最新的。
3.建立使用组件的安全策略,禁止使用未经安全评估的组件。
4.在适当情况下,对组件进行安全封装,精简不必要的功能,封装易受攻击部分

不足的日志记录和监控

不足的日志记录和监控,以及事件响应缺失或无效的集成,使攻击者能够进一步攻击系统、保持持
续性或转向更多系统,以及篡改、提取或销毁数据。大多数缺陷研究显示,缺陷被检测出的时间超
过200天,且通常通过外部检测方检测,而不是通过内部流程或监控检测。

原文作者: Ywc

原文链接: https://yinwc.github.io/2018/10/01/%E9%9D%A2%E8%AF%95/

发表日期: October 1st 2018, 8:16:53 pm

版权声明:

CATALOG
  1. 1. 常见漏洞
    1. 1.1. SQL注入
      1. 1.1.1. sql注入的原理、防御
      2. 1.1.2. 如何判断sql注入
      3. 1.1.3. sql注入的利用方式
      4. 1.1.4. 时间盲注除了sleep还有哪些利用函数
      5. 1.1.5. 为什么有的时候没有错误回显,用php举例
      6. 1.1.6. 宽字符注入的原理?如何利用宽字符注入漏洞,payload如何构造?
      7. 1.1.7. sql注入绕过技巧
      8. 1.1.8. sql注入有哪几类
      9. 1.1.9. SQL注入报错注入指令
    2. 1.2. XSS跨站脚本攻击
      1. 1.2.1. XSS有哪几类
      2. 1.2.2. XSS的利用方式
      3. 1.2.3. XSS的触发机制
      4. 1.2.4. XSS防御
      5. 1.2.5. dom xss 和反射型xss的区别
      6. 1.2.6. XSS遇到后台登录限制或者HTTPONLY时
      7. 1.2.7. CSRF和XSS的区别
    3. 1.3. CSRF跨站请求伪造
      1. 1.3.1. 原理
      2. 1.3.2. 危害
      3. 1.3.3. 如何检测
      4. 1.3.4. 防御
    4. 1.4. SSRF服务端请求伪造
    5. 1.5. XSS,CSRF,SSRF三种漏洞的区别和共同点
    6. 1.6. XXE防御、绕过
    7. 1.7. JSONP漏洞
      1. 1.7.1. JSON和JSONP的区别
    8. 1.8. CROS跨域资源共享
    9. 1.9. Ddos分布式拒绝服务攻击
  2. 2. 渗透测试
    1. 2.1. 渗透测试流程
    2. 2.2. 渗透测试之信息收集
    3. 2.3. 入侵后痕迹清理
    4. 2.4. 绕过绕过cdn获取网站的真实IP
    5. 2.5. WAF绕过
  3. 3. 漏洞相关
    1. 3.1. 最近分析的漏洞:幽灵猫漏洞
  4. 4. 项目相关
  5. 5. HTTP协议
    1. 5.1. http1.0与http1.1的区别
    2. 5.2. HTTP除了get、post常见的请求还有哪些?
    3. 5.3. 常见的响应码
    4. 5.4. 从URL输入到页面展现的整体过程
  6. 6. SDL
  7. 7. MySQL
    1. 7.1. MySQL写shell的方法
    2. 7.2. MySQL提权
  8. 8. JAVA
  9. 9. Linux下反弹shell的方法
  10. 10. redis的利用方式,getshell的方法
  11. 11. PHP
    1. 11.1. PHP的字符串中单引号与双引号的区别
  12. 12. 同源策略
  13. 13. 常见端口
    1. 13.0.1. web类
    2. 13.0.2. 数据库类(扫描弱口令)
    3. 13.0.3. 常用端口类(扫描弱口令/端口爆破)
    4. 13.0.4. 特殊服务类(未授权/命令执行类/漏洞)
  • 14. 解析漏洞
    1. 14.1. IIS 5.x/6.0解析漏洞
    2. 14.2. Apache 解析漏洞
  • 15. 文件上传
    1. 15.1. 文件上传校验姿势
    2. 15.2. 文件上传的绕过
  • 16. 文件读取除了可以读取敏感文件还有什么利用方式
  • 17. OWASP Top 10
    1. 17.1. 注入
    2. 17.2. 失效的身份认证和会话管理
    3. 17.3. 敏感数据泄露
    4. 17.4. XXE外部实体注入
    5. 17.5. 失效的访问控制
    6. 17.6. 安全配置错误
    7. 17.7. XSS跨站脚本攻击
    8. 17.8. 不安全的反序列化
    9. 17.9. 使用含有已知漏洞的组件
    10. 17.10. 不足的日志记录和监控