less-1第一关
?id=1’报错 ?id=1’--+ 不报错 ,则为单引号闭合
闭合如下
判断列数 分别输入order by1,2,3,4--+
输入127.0.01/sql-libs/Less-1/?id=1' order by 4 --+时,不显示列数,说明仅有3列。输出如下
然后进行联合注入
查找报错位 当union前面的语句为false,才会执行后面语句发现哪些位置是可以显示的
把id改为0或负数的作用 :确保联合查询的结果可见:通过将id设置为0或负数,攻击者可以确保原始查询返回的记录尽量少,甚至没有记录。这使得UNION查询的结果更容易被观察到。避免意外的数据干扰:如果原始查询返回了很多记录,这些记录可能会掩盖联合查询返回的数据。将id设置为一个不可能存在的值(如0或负数),可以避免这种情况,从而更容易查看和分析联合查询的结果。利用数据库的特性:在某些数据库系统中,id为0或负数的记录可能不存在。这有助于确保只有UNION查询返回的结果被显示。
联合查询显示数据库名和用户
爆表名---users
union select:UNION操作符用于合并两个或多个SELECT语句的结果集,并删除重复的行。这里,它用于将攻击者的查询结果与原始查询的结果合并。
group_concat(table_name)是一个聚合函数,用于将information_schema.tables表中所有table_name字段的值连接成一个字符串。1和3是占位符,用于与原始查询的列数相匹配(假设原始查询至少有两列)。
from information_schema.tables:指定了查询的数据源。information_schema.tables是MySQL的一个特殊表,包含了所有数据库的所有表的信息。
where table_schema='security':这是一个条件语句,用于过滤出table_schema(即数据库名)为security的表。--+:这是SQL注释。
爆所有表名
爆列名:id,username,password
爆数据(用户名 密码)
22
less-2第二关
?id=1 and 1=1显示与原页面相同
?id=1 and 1=2显示与原页面不同,并且1=2页面报错,数据显示不正常,则可判断位数字型注入。
后续注入方式与less-1相同,同为union注入(爆库--爆表--爆列--爆字段数据)
爆列数--可判断为3列
判断回显位
爆库名和版本
爆表名
爆列名
爆数据(账号密码)
less-3 第三关
?id=1'and 1=1 和?id=1'and '1'='1进行测试如果'1'='1页面显示正常,并且1=1页面报错或者页面部分数据显示不正常,此处为字符型注入。
后续注入方式与less-1相同,同为union注入(爆库--爆表--爆列--爆字段数据)
less-4 第四关
在id后加入反斜杠\,发现是双引号括号")闭合
根据页面报错信息得知sql语句是双引号字符型且有括号
后续操作同less-1 相同。
less-5 第五关
?id=1\ 发现是’闭合 ?id=1’ and 1=1 --+页面正常进入
页面正常显示。长度为8
利用ascii码猜测数据库名 第一个字符的ASCII码为115解码出来为“s”第二个字符的ASCII码为99解码出来为“c” ,依次类推出数据库的名字为“security”。
爆表名--第一个表第一个字符是u,依次猜解直到找到users表
判断所有列名长度,依次猜解users表中列名
账号密码
less-6 第六关
?id=1\ 发现是"闭合 ?id=1" --+成功
数据库长度为8
使用updatexml函数爆出数据库名和数据库版本号
随后爆出数据库中的所有表名
爆出所有字段
爆出字段下的内容(id,用户名,密码)
less-7 第七关
闭合方式--手工测试?id=1')) and 1=1--+成功---所以是'))闭合
用order by函数猜列数,列数为3
less-8 第八关
第八关是单引号注入
用--+进行注释,页面正常显示
字段长为8
left(database(),1)>'r'判断数据库名第一位是否大于'r',一直比下去,在's'时就会报错,就说明数据库第一位为's'
然后判断前两位是否大于'se',以此类推猜出数据库名为security。
101页面显示正常,说明就是它,101对应的字母是'e',所以第一张表的第一个字母为'e'
后边的字母也这样依次去猜,后边的表都是这样去猜,依次为emails等。
105页面显示正常,所以users表下的第一个字段的第一个字母为'i',还是一样依次类推下去可以猜出字段名,其他字段同上
68页面显示正常,说明password下的第一个字母为D,还是一样依次类推下去可以猜出字段下内容,其他字段下内容同上。
less- 9第九关
第九关是单引号注入,但是我们输入任何东西页面没有任何变化,所以这关采用时间注入,发现网页加载五秒
使用sleep()函数进行注入 然后判断数据库长度 ,页面延迟五秒刷新,说明数据库长度是大于6的,以此类推可以猜出数据库名长度
逐一判断数据库名的字符 页面延迟五秒刷新,说明数据库名第一个字母为's',以此类推可以猜出数据库名security
页面延迟五秒刷新,说明表名第一个字母为'e',以此类推可以猜出表名
方法与上关相似,不过第九关采用时间盲注。
爆字段
爆字段内容
if(ascii(substr((select group_concat(username,password) from users),1,1))=68,sleep(5),1)--+
less-10第十关
第十关是双引号注入,除了是双引号注入之外和第九关一模一样。
less-11 第11关
判断注入点
首先尝试Username 为admin'#,密码随便输入,成功进入
然后在Usename处判断列数
我们在Usename里输入 as' union select 1,2#
发现选择3时会报错,所以数据的显示就是第一列和第二列
在username中输入 sa' and updatexml(1,concat(0x5e,(select group_concat(username,0x7e,password) from users),0x5e),1)#
爆出字段信息(用户名密码)
less-12 第12关
第12关为双引号POST型字符型变形的注入
同less11类似,不同的是闭合的符号有些不一样
Usename中变为admain''即可
less 13 第13关
POST单引号变形双注入
username中输入admain‘)#,结果为下
无回显。尝试使用报错注入,
admin') and extractvalue(1,concat(0x7e,(select database()))) #
爆出库名security
然后用extract value报错函数爆出表名,字段,字段信息等其他数据。
less-14 第14关
与上一关相同
less-15 第15关