1.读题
一开始是这个界面,提示输入id,这里能够输入的地方只有http请求里边,所以输入:
得到密码,当把id换成2,3,4都可以得到对应password。但是要实现查询各种信息还不行。接下来找注入点
2.找注入点
id=1在数据库的存储形式大概是要么直接id=1或者id='1'或者id="1"
测试一下id=1'
出错
id=1"呢?
没问题,基本可以确定就是id='1'这种格式
那么我们就验证一下:输入http://localhost./sqll/sqli-labs-master/Less-1/?id=1‘%23
#号是注释符,在url编码中是%23(%+对应字符的ASCII值的十六进制数)
这是因为我们输入了一个单引号所以如果把后边一个引号注释掉就可以存在db里了,格式在数据库里变为 id='1'#'
果然正确
3.爆数据库
使用order判断该表有几列,并且哪一列会输出
当order by 4的时候提示错误,说明该表有3行。
3.使用union爆数据库
易知是 2,3列可以输出
然后就是你大展身手的时候了,不过有以下知识让你更容易拿到username和password
4.常用姿势
database() //当前网站使用的数据库
version() //当前MySQL的版本
user() //当前MySQL的用户
url编码: 空格是%20,单引号是%27, 井号是%23,双引号是%22
ysql>5.0会有information_schema数据库
表:
SCHEMATA:存所有数据库库名 (SCHEMA_NAME)
TABLES: 存用户创建的数据库库名(TABLE_SCHEMA)和表名(TABLE_NAME)
COLUMNS: 存用户创建的所有数据库的库名(TABLE_SCHEMA),表名(TABLE_NAME), 字段名(COLUMN_NAME)
limit 0,5 //从第0行开始,显示5行,当然这里第二个数字没有意义,只能显示一行,所以改变第一个数字吧
如:
?id=-1' union select 1,database(),table_name from information_schema.tables where table_schema='security'%20 limit 3,1%23