sqli-labs第一关的闯关

第一关:单引号错误

SQL的注入最终是为了拿到数据库的文件或者数据。

 刚进页面,显示需要输入id。
 于是我们使用在地址栏后面加上   ?id=1 

sqli-labs第一关的闯关_第1张图片
第二行的黄色字体是我自己添加的内容,表示被传入mysql执行的语句(方便我加深理解),绿色字体是正常显示的内容。
如果你也想要显示此语句,可以在安装目录下的此页面的php当中,加入这条语句
echo “$sql

sqli-labs第一关的闯关_第2张图片

  1. 判断有无注入点:
    老规矩:加上and 1=1;and 1=2,看一下回显有没有不同。没有!说明其在sql中不是单纯应用数值作为参数。
    尝试闭合符号闭合参数。闭合符号有四种:‘、"、’)、")

依据:id是否有被作为可控制的参数传入后台执行

因此我们依次尝试

?id=1‘、?id=1‘)、?id=1"、?id=1")

(自行尝试,然后理解一下如果没有错误回显,如何判断闭合符号)

当?id=1‘、?id=1‘)时页面报错, near ‘‘1’’ LIMIT 0,1’ at line 1
第一个和最后一个引号之间的是报错内容,1’是我们传进去的,1前后面还有一个引号,说明闭合符号是 ‘ ,传入sql中执行的内容是字符串类型的。

LIMIT 0,1:作为参数的意思是从第0条数据开始,只显示一条数据。
因此
也可以再尝试?id=1"、?id=1") 增加判断准确定性 ——显示正常。说明单引号为闭合符号。且id=1dasdasdas时,与id=1显示一致,说明后面字符被sql忽略,说明id参数为数字字符型,非字符型。

?id=1‘ and’1‘=’1和?id=1‘ and’1‘=’2
前者正常,后者报错。回显不一致。说明存在注入点。
2. 判断列数
猜列数有多少段:order by 数字。后面跟着‘limit 0,1直接用#或–+注释掉(也是绕过),注意#需要换成url编码后的%23输入到地址栏中
sqli-labs第一关的闯关_第3张图片
不一一演示了。在我这里,数字大于4会报错,小于等于4不会出错。所以列数为4。

  1. 接下来就是注入的目的了,拿到数据库数据
    使用union查询语句(联合查询)。前面语句要报错才能正常执行union之后的语句。
    2,3回复有显示,说明2,3两个点的数据可以出现,因此可以注入。
    sqli-labs第一关的闯关_第4张图片
    我们据此可以爆出所有的当前数据库、数据库版本、当前用户。
    sqli-labs第一关的闯关_第5张图片
    数据库版本再5.0以上时,因为information_schema数据库里面拥有这些所有的数据字段,还可以爆出所有数据库名,所有用户名,所有字段名。
    使用语句

?id=-1’ union select 1,group(schema_name),3,4 from information_schema.schemata–+

?id=-1’ union select 1,group(table_name),3,4 from information_schema.tables where table_shcema=‘security’–+

?id=-1’ union select 1,group(column_name),3,4 from information_schema.columns where table_schema=‘security’ and table_name=‘users’

sqli-labs第一关的闯关_第6张图片
至此,数据已经完全展现在你眼前了

  1. 还可以下载数据,写入数据(写入需要修改my.ini文件),我没去下载,不演示了(PS:不知道可不可以)
    load_file()
    into outfile()或者into dumpfile()

题外话:没有securoty这个数据库,以及security的users用户表里面没有数据这件事,需要自己手动去数据库里面添加,这不算是第一关的内容,但确实是刚开始坑能会遇到的问题。

你可能感兴趣的:(mysql,sql,database)