一、SQL注入
- 概述
所谓的sql注入就是通过某种方式将恶意的sql代码添加到输入A参数中,然后传递到sql服务器使其解析并执行的一种攻击手法。
2.SQL可分为平台层注入和代码层注入。
平台层注入:由于不的数据库配安全置或数据库平台的漏洞导致。
代码层注入:程序员对输入没有细致的过滤,从而执行了非法的数据查询。G
原因:在前后端数据的交互中,前端的数据传到后台处理时,没有做严格的判断,导致其传入的数据拼接到SQL语句中,被当成SQL语句的一部分执行,从而导致数据库受损,信息丢失。
总结:后台服务器接收相关参数未经过过滤直接带入数据库查询。
3.常见的注入类型
1. 参数类型分类:
数字型、字符型
数字型:
当输入的参数为整形时,若存在注入漏洞,则是数字型注入。
字符型
当输入参数为字符串时,称为字符型注入。
区别:数字型不需要单引号来闭合,而字符串需要单引号来闭合
2. 注入类型分类:
联合查询注入、报错注入、基于布尔的盲注、基于时间的盲注、HTTP头注入、宽字节注入、堆叠查询、二阶注入。
联合查询注入
联合查询适合于有显示位的注入,即页面某个位置会根据我们输入的数据的变化而变化。
页面观察
输入id=1和id=2,若页面中值有变化,说明输入与数据库有交互
注入点判断
直接输入?id=1’若有报错则存在注入,开始判断可以从哪里注入,?id=2’1=2–+页面显示不正常,说明此处存在SQL注入,注入点在引号。
接下来开始使用SQL语句进行攻击。
报错注入
含义:就是在mysql中使用指定函数来制造报错,查询的时候加一些格式错误的信息,它会提示你格式错误,可以在中间加入一些其他信息,比如select database(),报错信息后面也会出现数据库信息.
报错注入:利用数据库的报错信息得到数据库的内容。因此需要构造语句让数据库报错。
三种报错注入的方法:
回显注入
回显注入:利用注入漏洞可以改变页面返回数据。
基于布尔的盲注
布尔盲注:即在页面不显示数据,只显示对错,此时我们输入的语句让页面呈现两种状态,相当于true和false,根据这两种状态判断我们输入的语句是否查询成功。
基于时间的盲注
时间注入:通过返回时间的长短判断。
HTTP头注入
常见的SQL注入一般是通过请求参数或是表单进行注入,而HTTP头注入是通过HTTP协议头部字段值进行注入。
条件:
1. 能够对请求头信息进行修改
2. 修改的请求头信息能带入数据库进行查询
3. 数据库没有对输入的请求信息做过滤
DNSLog注入
dns服务主要是域名解析服务器将域名转换成ip时,会生成一个日志,主要记录:什么时候请求解析,什么域名,映射出什么ip;
但一般来说是看不到解析日志的,但有开放的平台:dnslog.cn
注:
SQL漏洞修复和防范方法:
1、普通用户与系统管理员用户的权限要有严格的区分
2、 预编译,如使用参数化语句和绑定变量。
3、 加强对用户输入的验证,识别恶意内容,过滤掉某些危险语句。
4、 多使用SQL Server数据库自带的安全参数。
5、 转义,把用户的输入当成文本以及用斜杠来转义
6、数据库异常信息隐藏
6、 必要的情况下使用专业的漏洞扫描工具来寻找可能被攻击的点。
7、设置陷阱账号:
设置两个帐号,一个是普通管理员帐号,一个是防注入的帐号。将防注入的账号设置的很像管理员,如 admin,以制造假象吸引软件的检测,而密码是大于千字以上的中文字符,迫使软件分析账号的时候进入全负荷状态甚至资源耗尽而死机。
8、防火墙,限制同IP时间、禁IP访问、黑名单
9、对密码之类的信息进行加密
10、禁用某些参数,如secure file priv
二、跨站脚本攻击XSS
1. XSS 属于被动式的攻击。 攻击者先构造一个跨站页面,利用script 、img、iframe等各种方式使得用户浏览这个页面时,触发对被攻击站点的http 请求。此时,如果被攻击者如果已经在被攻击站点登录,就会持有该站点cookie。这样该站点会认为被攻击者发起了一个http 请求。而实际上这个请求是在被攻击者不知情的情况下发起的,由此攻击者在一定程度上达到了冒充被攻击者的目的。精心的构造这个攻击请求,可以达到冒充发文,夺取权限等等多个攻击目的。在常见的攻击实例中,这个请求是通过script 来发起的。
攻击者对含有漏洞的服务器发起XSS攻击(注入JS代码)。
诱使受害者打开受到攻击的服务器URL。
受害者在Web浏览器中打开URL,恶意脚本执行。
2.反射型XSS:<非持久化> 攻击者事先制作好攻击链接, 需要欺骗用户自己去点击链接才能触发XSS代码(服务器中没有这样的页面和内容),一般容易出现在搜索页面。一般是后端代码进行处理
3.存储型XSS:<持久化> 代码是存储在服务器数据库中的,如在个人信息或发表文章等地方,加入代码,如果没有过滤或过滤不严,那么这些代码将储存到服务器中,每当有用户访问该页面的时候都会触发代码执行,这种XSS非常危险,容易造成蠕虫,大量盗窃cookie(虽然还有种DOM型XSS,但是也还是包括在存储型XSS内)。
4.DOM型XSS:基于文档对象模型Document Objeet Model,DOM)的一种漏洞。DOM是一个与平台、编程语言无关的接口,它允许程序或脚本动态地访问和更新文档内容、结构和样式,处理后的结果能够成为显示页面的一部分。DOM中有很多对象,其中一些是用户可以操纵的,如uRI ,location,refelTer等。客户端的脚本程序可以通过DOM动态地检查和修改页面内容,它不依赖于提交数据到服务器端,而从客户端获得DOM中的数据在本地执行,如果DOM中的数据没有经过严格确认,就会产生DOM XSS漏洞。一般是浏览器前端代码进行处理。
5.xss的利用方式·
1.需要一个xss平台来收集cookie
2. 对于反射型xss可构造链接,当用户点击时,用户cookie被发送到xss平台
3. 窃取用户cooike之后加以利用
可以基于xss平台进行利用
6.防御xss
服务器对输入脚本进行过滤或转码
不管是反射型还是存储型 XSS 攻击,我们都可以在服务器端将一些关键的字符进行转码
充分利用 CSP
虽然在服务器端执行过滤或者转码可以阻止 XSS 攻击的发生,但完全依靠服务器端依然是不够的,我们还需要把 CSP 等策略充分地利用起来,以降低 XSS 攻击带来的风险和后果。
实施严格的 CSP 可以有效地防范 XSS 攻击,具体来讲 CSP 有如下几个功能:
限制加载其他域下的资源文件,这样即使黑客插入了一个 JavaScript 文件,这个 JavaScript 文件也是无法被加载的;
禁止向第三方域提交数据,这样用户数据也不会外泄;
禁止执行内联脚本和未授权的脚本;
还提供了上报机制,这样可以帮助我们尽快发现有哪些 XSS 攻击,以便尽快修复问题。
因此,利用好 CSP 能够有效降低 XSS 攻击的概率。
使用 HttpOnly 属性
由于很多 XSS 攻击都是来盗用 Cookie 的,因此还可以通过使用 HttpOnly 属性来保护我们 Cookie 的安全。
通常服务器可以将某些 Cookie 设置为 HttpOnly 标志,HttpOnly 是服务器通过 HTTP 响应头来设置的。
由于 JavaScript 无法读取设置了 HttpOnly 的 Cookie 数据,所以即使页面被注入了恶意 JavaScript 脚本,也是无法获取到设置了 HttpOnly 的数据。因此一些比较重要的数据我们建议设置 HttpOnly 标志。