Web常见漏洞

Web常见漏洞个人笔记、个人看法

功有所不全,力有所不任,才有所不足。——宋濂

0X0 SQL注入

漏洞原理

SQL注入攻击是通过将恶意的SQL查询或添加语句插入到应用的输入参数中,再在后台SQL服务器上解析执行进行的攻击,它目前是黑客对数据库进行攻击的最常用的手段之一。

利用方式

SQL注入根据注入点类型可以分为数值型注入和字符型注入
数值型测试

#访问页面时,参数:
?id=1
#将参数改为
?id=1+1
#页面访问了 ?id=2 ,为数值型注入
#后端sql语句类似于
select xxx(name, email,...) from table where id = n(1,2,3,4…)

字符型测试

#访问页面时,参数:
?id=1
#将参数改为
?id=1a
#页面访问了 ?id=1a(后端得有1a页面,数值型会报错) ,为字符型注入
#后端sql语句类似于
select xxx(name, email,...) from table where id = 'n(1,2,3,4…)'

判断完注入类型后,开始判断利用方式
基本的注入姿势:

    union联合注入
    报错注入:
   	    updatexml();        第二个参数包含特殊字符会报错(mysql)
	    extractvalue();     第二个参数包含特殊字符会报错(mysql)
	    floor();                 用来取整,不是数值就会报错(mysql)
		convert();   用来类型转换,第二个参数包含特殊字符会报错(sqlserver)
		cast();        用来类型转换,参数包含特殊字符会报错(sqlserver)
    布尔盲注
    延时注入
    使用sqlmap

然后就是获取数据库名==》获取表名 ==》获取列名 ==》获取记录

修复建议

  1. SQL语句预编译
  2. 针对SQL输入内容进行限制、过滤 //目前使用WAF对这一块进行处理
  3. 针对提交的关键数据进行转义 ,比如\select
  4. 利用addslashes()函数, 主要用来防止sql注入 可任意将’等进行转义
  5. 关闭错误信息输出 ,因为有些错误返回信息,会返回物理路径、数据库版本信息等
  6. 数据库权限严格控制 ,不同级别的用户,只能进行相应级别权限的操作
  7. 敏感信息严格加密处理

1X0 XSS

漏洞原理

XSS 即(Cross Site Scripting)中文名称为:跨站脚本攻击。XSS的重点不在于跨站点,而在于脚本的执行。那么XSS的原理是:
恶意攻击者在web页面中会插入一些恶意的script代码。当用户浏览该页面的时候,那么嵌入到web页面中script代码会执行,因此会达到恶意攻击用户的目的。那么XSS攻击最主要有如下分类:反射型、存储型、及 DOM-based型。 反射性和DOM-baseed型可以归类为非持久性XSS攻击。存储型可以归类为持久性XSS攻击。

反射性XSS的原理是:反射性xss一般指攻击者通过特定的方式来诱惑受害者去访问一个包含恶意代码的URL。当受害者点击恶意链接url的时候,恶意代码会直接在受害者的主机上的浏览器执行。

存储型XSS的原理是:主要是将恶意代码上传或存储到服务器中,下次只要受害者浏览包含此恶意代码的页面就会执行恶意代码。

DOM型全称Document Object Model,在网站页面中有许多页面的元素,每个页面元素对应一个文档对象,每个文档对象包含属性、方法和事件。可以通过JS脚本对文档对象进行编辑从而修改页面的元素。简单来说DOM是通过url传入参数来触发XSS的,也可以认为是反射型的一种。

利用方式

一些绕过姿势:

  1. 基本的xss
<script>alert(`xss`);</script>
  1. 大小写绕过、字符拼接
<sCRipt>ALert('xss')<ScriPT>
<scr<script>ipt>alert(`Rdrug`)</script>
  1. 过滤了<script>的其他姿势
<img src=1 onerror=alert(\`xss\`);>
<input onfocus="alert('xss');">	
##当 input 输入框获取焦点时执行一段 Javascript代码
<input onblur=alert("xss") autofocus><input autofocus>
##当用户离开input输入框时执行一段Javascript代码
<input onfocus="alert('xss');" autofocus>
##通过autofocus属性执行本身的focus事件,这个向量是使焦点自动跳到输入元素上,触发焦点事件,无需用户去触发。(容易造成死循环)
<iframe onload=alert("xss");></iframe>
​一个内联框架被用来在当前 HTML文档中嵌入另一个文档,onload 事件在frame或者iframe载入完成后被触发。
<video><source onerror="alert("xss")">
<body/onload=alert("xss");>
<body onscroll=alert("xss");><input autofocus>
​##onscroll 事件在元素滚动条在滚动时触发。

<link rel=import href="http://127.0.0.1/1.js">
##利用link远程包含js文件

具体还是得看源码,怎么去闭合、绕过(屁话)
在这里插入图片描述

修复建议

  1. 对输入的数据进行HTML转义,使其不会识别为可执行脚本
    Spring的工具类HtmlUtils
    String result = HtmlUtils.htmlEscape(source);
    
  2. 利用htmlspecialchars()函数, 用于转义类似于<,>主要用来过滤xss
  3. 白名单过滤
    根据白名单的标签和属性对数据进行过滤,以此来对可执行的脚本进行清除(如script标签,img标签的onerror属性等)

2X0 跨站请求伪造

漏洞原理

CSRF(即跨站请求伪造)是指利用受害者尚未失效的身份认证信息、(cookie、会话等),诱骗其点击恶意链接或者访问包含攻击代码的页面,在受害人不知情的情况下以受害人的身份向(身份认证信息所对应的)服务器发送请求,从而完成非法操作(转账,改密码等)。

有三个引发攻击形成的必要条件。
  1) 浏览器会自动发送用户标识的会话信息,并且用户毫不知情也无法干预。换而言之,用户不知道浏览器发送的内容中,已经包含身份标识信息。身份标识信息(例如 cookie)主要是站点用于识别受认证用户的一个标志。如果站点收到带有受害者认证信息的请求,那么这个请求就会被看作是已登录的受害者发送而来的正确 操作请求。
  2) 攻击者清楚在被攻击网站的特殊敏感操作的URL结构,并能分析其中所支持的参数和允许值。一般而言,通过访问被攻击Web应用程序,查看潜入在HTML或 JavaScript中的URL、分析提交的表单结构就可以了解到相应的信息。如果是一个开源项目,攻击者直接就可以从源代码中进行分析提取可以攻击的特 殊敏感操作。
  3) 被攻击网站完全依赖于会话信息识别用户。因为会话信息其实对浏览器而言是透明的,浏览器只负责存放和在发送请求时附加相关的会话信息,通过浏览器并不能解 析出会话信息的内容。为了提高Web应用的便利性,降低开发的成本,部分Web应用就会完全依赖这类信息来标识一个用户会话。从而导致Web应用程序不会 判断一个请求是否真是由合法用户发送的。
  一般来说,要发生跨站请求伪造攻击,需要有以下几个特点:
  1) 在受攻击站点已经登录,且没有正常退出。
  2) 受攻击站点的会话失效时间比较长。而且失效时间越长受攻击机率越高。
  3) 受攻击站点的特殊敏感操作没有严谨的用户身份标识验证。
  4) 受害者主动访问含有伪造请求的页面。电子邮件、论坛、博客等常见的互联网应用都是攻击者可利用的社会工程学的范围

利用方式

  1. 自动发起 GET 请求的 CSRF
    GET 类型的 CSRF 是最简单的,一般是这样:

    <img src="http://a.com/pay?amount=10000&for=hacker" > 
    

    攻击者将支付的接口请求隐藏在 img 标签内,在加载这个标签时,浏览器会自动发起 img 的资源请求,a.com 就会收到包含受害者登录信息的一次跨域请求

    如果服务器认为该请求有效的话,就会将 10000 块转移到攻击者的账户上去了

  2. 自动发起 POST 请求的 CSRF

    这种就是表单提交:

    <form action="http://a.com/pay" method=POST>
        <input type="hidden" name="account" value="sisterAn" />
        <input type="hidden" name="amount" value="10000" />
        <input type="hidden" name="for" value="hacker" />
    </form>
    <script> document.forms[0].submit(); </script> 
    

    访问该页面后,表单会自动提交,相当于模拟用户完成了一次 POST 操作。

  3. 引诱用户点击链接的 CSRF
    链接类型的CSRF并不常见,比起其他两种用户打开页面就中招的情况,这种需要用户点击链接才会触发。这种类型通常是在论坛中发布的图片中嵌入恶意链接,或者以广告的形式诱导用户中招,攻击者通常会以比较夸张的词语诱骗用户点击,例如:

    <div>
      <img width=150 src=https://img-blog.csdnimg.cn/c4efad063f6d44ebb4ea6804f2dfc741.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBAR3JlZW5fSGFuZF8wMQ==,size_17,color_FFFFFF,t_70,g_se,x_16> </img> 
      <a href="http://xxxxxxxxxxx?amount=10000&for=hacker" taget="_blank">
        点击查看更多美女
      </a>
    </div>
    
    

    由于之前用户登录了信任的网站A,并且保存登录状态,只要用户点击了这个超链接,则表示攻击成功

修复建议

  1. 验证请求的Referer值,如果Referer是以自己的网站开头的域名,则说明该请求来自网站自己,是合法的。如果Referer是其他网站域名或空白,就有可能是CSRF攻击,那么服务器应拒绝该请求,但是此方法存在被绕过的可能。

  2. CSRF攻击之所以能够成功,是因为攻击者可以伪造用户的请求,由此,抵御CSRF攻击的关键在于:在请求中放入攻击者不能伪造的信息。例如可以在HTTP请求中以参数的形式加入一个随机产生的token,并在服务器端验证token,如果请求中没有token或者token的内容不正确,则认为该请求可能是CSRF攻击从而拒绝该请求。

3X0 文件上传

漏洞原理

文件上传漏洞是指由于程序员在对用户文件上传部分的控制不足或者处理缺陷,而导致的用户可以越过其本身权限向服务器上上传可执行的动态脚本文件。这里上传的文件可以是木马,病毒,恶意脚本或者WebShell等。“文件上传”本身没有问题,有问题的是文件上传后,服务器怎么处理、解释文件。如果服务器的处理逻辑做的不够安全,则会导致严重的后果。

利用方式

常见上传方式

  1. 图片马
copy 1.jpg /b + 1.php /a 2.png
# 1.jpg:原图
# 1.php: 一句话等等
# 2.png: 生成的图片马名字

在这里插入图片描述

  1. JS验证
    前端验证,用bp抓个包改一下扩展名等等
  2. Content-type
  3. 构造后缀
    多后缀|.user.ini、大小写、点绕过
  4. htaccess
    .htaccess是apache的php的文件解析配置文件。利用它,可以手工添加服务器的可执行后缀或文件
    上传文件后缀为 .htaccess的文件内容如下:
    <FilesMatch"abc.jpg">
    SetHandler application/x-httpd-php
    </FilesMatch>
    
    再上传一个php木马文件名为abc.jpg
    访问abc.jpg,检测执行结果

修复建议

  1. 上传文件的存储目录禁用执行权限

  2. 文件的后缀白名单,注意0x00截断攻击

  3. 不能有本地文件包含漏洞

  4. 及时修复web上的代码

  5. 升级web server

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值