关于DVWA的学习-SQL注入

low

Background

  • 一般的查询语句的结构如下:

SELECT column_name FROM table_name WHERE ID=$id
我们输入的内容就是填充到id

需要先简单介绍一下数字型和字符型注入的基本区别:

  • 数字型:输入啥就是啥,比如我输入1,后台的查询语句就是SELECT column_name FROM table_name WHERE ID=1
  • 字符型:会给输入套上单或双引号,同样输入1,后台的查询语句就是SELECT column_name FROM table_name WHERE ID=‘1’(sql中单双引号都有可能,需要自己尝试一下得知)。
  • sql中的注释符号:#, /**/, –
    (在简单题目中一般只用到#)

  • 常用的函数(仅针对dvwa用到的):
    version() : 获取版本号
    database() : 获取当前数据库名称
    group_concat() : 将多个string以逗号为分隔符连接
    关于information_schema存储的数据(根据自己理解画的)

  • 关于select1,2,3的作用

先验证是否为数字型注入

在题目中,我们可以看到输入数字之后可以得到不同用户的first_name和last_name:

输入1+1得到的结果:

显然不是数字型注入

验证是否为字符型输入

输入 'or 1=1#,若是字符型输入,此时的查询语句变为SELECT column_name FROM table_name WHERE ID=’‘ or 1=1#',后面判断为永真,会输出所有信息。


确实为字符型注入

判断列数

利用order by语句判断列数
(order by 2即按照第二列value值顺序排列)



判断出有三列

判断回显

语句: 1’ union select 1,2#
(Background部分有说明)

利用information_schema获取数据

  1. 1’ union select 1,group_concat(table_name) from information_schema.tables where table_schema=database()# (获取当前数据库的所有table name)

  2. 1’ union select 1, group_concat(column_name) from information_schema.columns where table_name=‘users’# (获取uses表中所有列名)

  3. 1’ union select user,password from users# (获取密码)


medium


明显需要抓包,打开代理(127.0.0.1,8080)即可使用burpsuite抓包。

1 or 1=1

1 or 1=2


为数字型输入。

后续除了最后一步之外都和low级别题目一致

最后一步输入 1 union select 1, group_concat(column_name) from information_schema.columns where table_name=‘users’ 会显示error
为了方便解释这里直接查看PHP源码:

> $id = mysql_real_escape_string( $id );

关于mysql_real_escape_string()函数的解释

常见的sql注入防御以及绕过措施

简单来说,该函数过滤了单引号,用于防止sql注入,因此采用十六进制数 (0x7573657273)来代替‘users’字段。

最终输入:1 union select 1,group_concat(column_name) from information.columns where table_name=0x7573657273

1 union select user,password from users 获得密码


high

除了不会提示具体error原因之外,别的都和第一题的字符型注入没有区别。
需要注意的是SQL语句中多了一个limit关键词:

$query  = "SELECT first_name, last_name FROM users WHERE user_id = '$id' LIMIT 1;";

MySql中limit和offset的基本用法

关于union和limit共同使用时应注意的问题


impossible

在网上搜了一下,maybe,真的是impossible进行sql注入的。
采用的叫做PDO技术

PDO技术:PHP数据对象(PHP Data Object)。在生成网页时,许多PHP脚本通常都会执行除参数之外其他部分完全相同的查询语句,针对这种重复执行一个查询,每次迭代使用不同的参数情况,PDO提供了一种名为预处理语句(prepared statement)的机制。它可以将整个SQL命令向数据库服务器发送一次,以后只有参数发生变化,数据库服务器只需对命令的结构做一次分析就够了,即编译一次,可以多次执行。会在服务器上缓存查询的语句和执行过程,而只在服务器和客户端之间传输有变化的列值,以此来消除这些额外的开销。这不仅大大减少了需要传输的数据量,还提高了命令的处理效率。可以有效防止SQL注入,在执行单个查询时快于直接使用query()或exec()的方法,速度快且安全,推荐使用。


其中,prepare()函数相当于准备好一个PDO对象,并对于其中SQL语句进行了预编译,后面的bindParam()函数用于传入一个INT型的变量。
也许这种解释并不能理解为什么PDO可以防止sql注入,看了很多的博客之后,大概总结一下中心思想:
预编译之后相当于固定了SQL语句的语义,也就是说,我们若想进行注入攻击,这本质上是需要改变原本的SQL语义来完成的,但这在语句被预编译之后是无法实现的(除非再编译一次),因此,杜绝了SQL注入攻击。

关于PDO中的quote方法,占位符,bindParam函数等介绍

一般情况下,PHP代码中使用了PDO就可以宣告无法注入了,但是:
使用了PDO依旧有攻击可能的例子(目前还看不懂hh)

关于DVWA的学习-SQL注入相关推荐

  1. web安全学习-sql注入-针对mysql的攻击

    文章目录 1. 前言 补充:读取客户端本地文件到服务端mysql数据库 补充:利用全局日志写shell 补充:修改mysql的root密码 补充:配置远程登录 补充:低权限下读文件 补充:高版本mys ...

  2. 学习sql注入:猜测数据库_对于SQL的热爱:为什么要学习它以及它将如何帮助您...

    学习sql注入:猜测数据库 I recently read a great article by the esteemed @craigkerstiens describing why he feel ...

  3. 学习sql注入:猜测数据库_面向数据科学家SQL:学习简单方法

    学习sql注入:猜测数据库 We don't pick a hammer and look for nails - that would be an unusual way of solving pr ...

  4. 学习sql注入:猜测数据库_学习SQL:删除和更新数据SQL最佳实践

    学习sql注入:猜测数据库 Deleting and updating data is very common, but if performed without taking care, which ...

  5. 学习sql注入:猜测数据库_学习SQL:SQL数据类型

    学习sql注入:猜测数据库 What are SQL data types, why do we need them, and how to use them? Today, we'll try to ...

  6. 渗透学习-SQL注入篇-基础知识的学习(持续更新中)

    提示:仅供进行学习使用,请勿做出非法的行为.如若由任何违法行为,将依据法律法规进行严惩!!! 文章目录 前言 一.SQL注入产生的原因 二.手工注入大致过程 1.判断注入点: 2.猜解列名 3.猜解能 ...

  7. KALI LINUX2021环境下使用sqlmap进行DVWA中的sql注入(安全等级LOW)

    KALI LINUX2021环境下使用sqlmap进行DVWA中的sql注入(安全等级LOW) 渗透环境 第一步:将DVWA中安全等级调整为LOW (使用谷歌Chrome浏览器) 第二步:利用网页对s ...

  8. Web安全 学习日记3 - DVWA 普通手工SQL注入

    文章目录 普通注入 1.Low级别 1.1.代码分析 1.2.Poc 1.3.注入流程 2.Medium级别 2.1.代码分析 1.2.Poc 1.3.注入流程 3.High级别 4.Impossib ...

  9. Web安全渗透学习-SQL注入

    SQL注入攻击 所谓SQL注入,就是通过把SQL命令插入到Web表单提交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的SQL命令.具体来说,它是利用现有应用程序,将(恶意的)SQL命令 ...

最新文章

  1. 高级转录组分析和R数据可视化专题研讨会(2019.12)
  2. win10系统定位服务器地址,win10系统定位服务器地址
  3. Android MIPI转LVDS显示屏调试之---SN65DSI84初始化参数的确定(3)
  4. 如何下载SAP Cloud for Customer UI技术模型的XML源代码到本地
  5. CCF推荐各种国际学术会议和期刊目录
  6. 颜宁问4对科研夫妻:男女搭配,如何不累?
  7. HSqlDB(java内置数据库)
  8. 服务器gpt安装系统bios设置,系统安装的两种模式:UEFI+GPT、BIOS+MBR-网络教程与技术 -亦是美网络...
  9. 升级Spring Boot 2.x后RelaxedPropertyResolver不可用的解决方案
  10. 在nvidia AGX 边缘服务器安装kubeEdge
  11. PSIFT:Pore Scale-invariant feature transform;毛孔尺度不变特征点
  12. kindle 4.1.1越狱换中文字体
  13. 学术英语理工(第二版)Unit3课文翻译
  14. python泰坦尼克号案例分析_Python机器学习案例-泰坦尼克之灾
  15. 支付宝导出资金账单Python脚本文件Demo
  16. Kingdee常见网络问题-rubberdam.cn
  17. Steam教育对国内大学生的影响力
  18. 标准粒子群C语言程序
  19. 武器效能评估系统软件-效能评估方法有哪些
  20. python画图加注释_【IT专家】python画图笔记——注释

热门文章

  1. 钱越存越少,合理吗?
  2. Houdini中的half-edge
  3. 秒懂百科 | 什么是点云?
  4. win10移动热点无法设置
  5. 【送书福利】图论算法:如何找到最适合自己的另一半 ?
  6. Java函数式编程入门之Function<T,R>接口
  7. 简说tree-shaking
  8. 华创期货:谈谈短线交易远离亏损和骗局
  9. TensorFlow(Keras) 一步步实现Fashion MNIST衣服鞋子图片分类 (2) Coursera深度学习教程分享
  10. Android上一种效果奇好的混音方法介绍