常见漏洞原理、利用方式及修复方式----SQL注入及XSS-爱代码爱编程
SQL注入
A、原理:
(1)将SQL语句插入或添加到应用(用户)的输入参数中,再将这些参数传递给后台的SQL服务器加以解析并执行。
(2)刚开始接触sqli,首先我们得明白常见的web架构是怎么样的,通俗点来说,也就是所有的浏览器通过表示层来访问一个网站,其具体的工作流程是什么样的?
流程:浏览器发起一个请求,并将请求交给服务器,服务器当中运行着Apache\Nginx等中间件来解析请求,当对请求中的网站进行解析的时候,需要用到解析脚本(ASP\PHP\JSP.NET),而存储层的东西是不能直接使用的,所以就出现了逻辑层,由逻辑层来从存储层当中取东西。 明白了整体的web架构,那么也就很容易地理解sqli的原理操作了,就是sqli所有的操作都是在表示层,通过构造恶意的sql语句,然后对存储层的数据服务器进行恶意的操作,然后这个恶意的操作是由逻辑层来干的。
B、利用方式:
(1)Union注入
(2)盲注 //分为延时盲注和布尔盲注
(3)报错注入
(4)堆叠查询
(5)宽字节注入
(6)HTTP参数污染注入
C、常见的mysql函数
函数 | 名称 |
---|---|
user() | 用户名 |
system_user() | 系统用户名 |
current_user() | 当前用户名 |
database() | 当前数据库名字 |
@@datadir | 数据库路径 |
@@version_compile_os | 操作系统信息 |
length() | 字符串长度 |
substring() \ substr() | 截取字符 |
mid(m,n) | 需要截取的字符串,从第几位开始截取 |
left() | 需要截取的字符串,取几位 |
concat() | 无分割拼接字符串,意思就是拼接时中间不出现空格 |
concat_ws() | 含分割拼接字符串 |
group_concat() | 连接一组字符串(结果放在同一行) |
ord() \ ascii() | 由字符推出ascii值,例如ord(‘a’) |
char() | 由ascii码反推对应的字符 |
hex() | 十六进制形式 |
md5() | 针对字符串进行md5加密 |
floor() | 向下取整 |
rang() | 生成一个0~1之间的浮点数 |
hex() | 将字符转换成十六进制值 |
unhex() | 由十六进制值反推出字符 |
D、SQL注入成功条件
- 读文件操作:
(1)知道文件的绝对路径
(2)能使用union查询
(3)web目录需要拥有写权限 - 写文件操作:
(1)文件名必须绝对路径
(2)对文件具有写权限
(3)对单引号 ’ 未过滤
E、修复方式:
- SQL语句预编译
- 针对SQL输入内容进行限制、过滤 //目前使用WAF对这一块进行处理
- 针对提交的关键数据进行转义 ,比如\select
- 关闭错误信息输出 ,因为有些错误返回信息,会返回物理路径、数据库版本信息等
- 数据库权限严格控制 ,不同级别的用户,只能进行相应级别权限的操作
- 敏感信息严格加密处理
XSS
A、介绍:
跨站脚本(Cross-site Scripting,因与CSS较相像,故简称为XSS或跨站脚本或跨站脚本攻击)是一种针对网站应用程序的安全漏洞攻击技术,是代码注入的一种。它允许恶意攻击者将代码注入网页,其他用户在浏览网页时就会受到影响。恶意用户利用XSS代码攻击成功后,可能得到很高的权限(如执行一些操作)、私密网页内容、会话和cookie等各种内容。
B、原理
- 反射型XSS
反射型XSS又称为非持久型XSS,该类型的攻击方式特点是一次性的。
攻击链:攻击者通过电子邮件、广告投送等方式将包含XSS代码的恶意链接发送到目标用户。当目标用户点击访问该链接时,服务器接收该目标用户的请求并进行处理,然后服务器把带有XSS代码的数据发送到目标用户的浏览器,浏览器接收并解析这段带有XSS代码的恶意脚本后,就会触发XSS漏洞,返回攻击者想要的敏感数据。 - 存储型XSS
存储型XSS又称为持久型XSS,攻击脚本只要未被发现,就会永久地保存在目标服务器的数据库或者文件当中,具有非常高的隐蔽性。
攻击链:这种类型的攻击多常见于论坛、博客和留言板,只要是能够输入信息的地方都存在风险,攻击者在发帖子或者留言的过程中,将恶意脚本连同正常信息一起写到帖子的内容当中,随着帖子被服务器存储下来,其中的恶意脚本也永远地存放在服务器的后端存储器中。当其他用户浏览这个被注入了恶意脚本的帖子时,恶意脚本会在他们的浏览器中得到执行。
例如,攻击者在留言版中拼接以下代码
:
i like this book<script>alert(/hello_hacker/)</script>
- 当其他用户访问留言板时,就会在页面中弹出一个弹窗。由此而知,存储型XSS的攻击方式能够将恶意代码永久地嵌入到一个页面当中,所有成功访问这个页面的用户都将成为受害者
- 相对来说,如果我们能够谨慎对待不明链接,那么反射型XSS攻击将不会有多大的效果,但相反,存储型XSS所形成的危害相对较大,它会注入在一些我们比较信任的页面,无论我们防范意识多强,只要一成功加载,就会遭受攻击。
- DOM型XSS
DOM全称为Document Object Model,使用DOM可以使程序和脚本能够动态访问及更新文档结构、内容及样式。
攻击链:用户请求一个经过专门设计的url,它由攻击者提交,而且其中包含XSS代码。服务器在响应中不会以任何形式包含攻击者的脚本。只有当用户的浏览器处理这个响应时,DOM对象就会处理XSS代码,导致存在XSS漏洞。
DOM型XSS的漏洞原理,最核心的在于它是基于DOM文档对象模型的一种漏洞。
在HTML中,其标签都是节点,而这些节点构成了DOM的整体结构——节点树。通过HTML DOM,树中的所有节点均可以通过JavaScript进行访问。其中所有的HTML元素(节点)均可被修改,也可以创建以及删除节点。
HTML DOM树结构如下图所示:
- 在网站页面中有许多的元素,当浏览器接收到页面时,浏览器就会为页面创建一个顶级的Document object文档对象,接着生成各个子文档对象,每个页面元素对应一个文档对象,每个文档对象包含属性、方法和事件。可以利用JS脚本对文档对象进行编辑,从而修改页面的元素。由此看来,客户端的脚本程序可以通过DOM动态修改页面内容,进而从客户端获取DOM中的数据并在本地执行。由于DOM是在客户端修改节点的,所以基于DOM型的XSS漏洞不需要与服务器端进行交互,它只发生在客户端处理数据的阶段,就此,DOM型XSS相对来说利用的很少,甚至几乎无用。
- 总的来说,大部分的攻击最主要都是围绕着获取目标数据库中的内容而展开的,若没有与数据库产生更多交互的攻击方式,能够用到的机会就很少。
C、利用方式
- 反射型XSS攻击
反射型的XSS攻击最大的特点,就是对搜索框、登录框进行弹窗,是一种非持久性的攻击,也就是攻击了一次就结束了。模拟反射型XSS攻击的话,我们可以利用DVWA平台进行演示操作。
下面为针对URL使用的插入语句
xxx.xxx.xxx.xxx/dvwa/vulnerabilities/xss_d/?default=English<script>alert(/xss/)</script>
这里所使用到的HTML标签是< script >,一般常用于XSS的HTML标签为
标签名称 | 主要用途 |
---|---|
< script > | 定义客户端脚本 |
< img > | 定义HTML页面中的图像 |
< iframe > | iframe 元素会创建包含另外一个文档的内联框架(即行内框架) |
能够造成页面弹窗的原因,是因为在浏览器渲染整个页面的时候,会执行这条
<script>alert(/xss/)<script>
语句,其中的JS函数alert()导致浏览器进行弹窗,并显示“xss”字样。
- 存储型XSS攻击
存储型XSS攻击所实现的功能是:获取用户所输入的留言信息、标题及内容,然后将输入的信息插入到数据库当中,并将数据库的留言信息输出到页面上,就此利用DVWA页面来复现XSS stored漏洞。
漏洞利用的关键插入语句:
<img src=1 onerror=alert(/想要返回的内容/)>
(1)抓取数据包进行修改
(2)将POST数据包中data部分的txtName参数内容test修改为<img src=1 oneerror=alert(/test_xss_stored/)>
,其目的在于利用图片报错信息来嵌入一段XSS代码,达到持久化的作用。
(3)再次访问页面,发现存储型XSS生效了
D、防御手段
- 针对输入、URL的敏感参数进行过滤
- 针对输出内容进行编码
- 白名单
- 黑名单
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。 本文链接: https://blog.csdn.net/qq_37698661/article/details/111033285