Sqli-labs学习笔记(Part1)

很久前就看到Sqli-labs这个练习Sql注入的项目,但是也只是断断续续做过几个简单的题目,也就没有再继续下去了。一直在仰望大神,自己却原地不动。还是需要脚踏实地,一步一步走。趁着这个清明假期,重新开始学习,记录一些知识点,也帮助自己重新找回方向。这篇文章也是跟着Lcamry的《MYSQL注入天书》学习,感想前辈的分享。

基础知识

(1)Sql注入分类:
基于服务器接收到的响应

1. 基于错误的SQL注入
2. 联合查询的类型
3. 堆查询注入
4. SQL盲注

  • 基于布尔SQL盲注
  • 基于时间的SQL盲注
  • 基于报错的SQL盲注

基于数据类型输入的SQL查询

基于字符串
基于数字

基于程度和顺序的注入

一阶注入
二阶注入

基于注入点的位置

通过用户输入的表单
通过cookie
通过服务器变量的位置

注入的分类也是因人而异,对于同一种类型的注入,对注入的分类可能不一样,不过这不太重要,分类也只是为了让我们自己更好的理解漏洞的原理,因此我们只需自己对漏洞原理有足够的认识就行了。

(2)系统函数:
几个常用的函数:

1. version()      //MYSQL的版本
2. user()         //数据库用户名
3. database()     //数据库名
4. @@datadir       //数据库路径
5. @@version_compile_os     //操作系统版本

(3)字符串连接函数

1.concat(str1,str2,...)     //没有分隔符的连接字符串
2.concat_was(separator, str1, str2...)   //使用separator 作为分隔符连接字符串
3.group_concat(str1, str2 );     // 连接一个组的所有字符串,并以逗号分隔每一条数据

(4)字符串截取函数

1.mid(str,start,length)    //对字符串str从start开始截取长度为length的字符串
2.substr(str,start,length)  或 substring(str,start,length)  //同mid函数一样
3.left(str,n)    //得到字符串左边指定长度为n的字符串
4.ord(s)     //返回字符s的ASCII码
5.ascii(s)   //同ord函数,返回字符s的ASCII码
6.regexp   ' s'      //正则匹配字符串
     ^str         //匹配字符串是否以str开始
     str$          //匹配字符串是否以str结束
     [str1,str2,...]     //字符集合,只要匹配其中一个就满足条件
     [^str1,str2,...]   //字符集合,只有不包含集合的所有字符才满足条件
     str*                  //字符串str出现零次或多次
     str+                 //字符串str出现一次或多次
     str{n}              //字符串str出现n次
     str{n,m}         //字符串str最少出现n次,最多出现m次

(4)一般用于尝试的语句
ps:--+可以用#替换,都是用于注释后面的语句

or  1=1 --+
' or 1=1 --+
" or 1=1 --+
) or 1=1 --+
') or 1=1 --+
") or 1=1 --+
")) or 1=1 --+

(5)一个重要的数据库 information_schema
information_schema 这个数据库是mysql自动创建的,这个数据库用来记录存在系统中的一些数据库,数据表,以及表的组成之间的关系。当我们发现sql注入漏洞时,往往也会利用这个数据库来查询服务器上的各个数据库还有数据表之间的关系,进一步获取到我们想要的数据。

查看information_schema库中的表

在图中可以看到TABLES这张表,我们可以通过这张表来查询到我们想要的东西,例如:

select table_name from information_schema.tables where table_schema = "security";

这行代码就是查询数据库名为"security"的所有数据表的名字
而我们通过这个"information_schema"数据库查询数据有一个一般的流程:

  • 猜测数据库
select schema_name from information_schema.schemata
  • 猜测某库中的数据表
select table_name from information_schema.tables where table_schema = "xxx"
  • 猜测某表中的所有列
select column_name from information_schema.columns where table_name="xxxx"
  • 获取数据
select * from "xxxx"
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 转 # https://www.cnblogs.com/easypass/archive/2010/12/ 08/...
    吕品㗊阅读 9,824评论 0 44
  • MYSQL 基础知识 1 MySQL数据库概要 2 简单MySQL环境 3 数据的存储和获取 4 MySQL基本操...
    Kingtester阅读 7,857评论 5 116
  • 1. 机器学习 评估假设一旦我们通过以下方式在我们的预测中做了一些故障排除:获得更多培训示例尝试更小的功能集尝试其...
    molscar阅读 729评论 0 0
  • 纤云弄巧, 飞星传恨, 银汉迢迢暗度。 金风玉露一相逢, 便胜却、 人间无数。 柔情似水, 佳期如梦, 忍顾鹊桥归...
    清泉_9313阅读 281评论 1 4
  • 夜深了,我渐渐进入了梦乡。在梦里我仿佛听到衣柜里有说话的声音。 我把耳朵贴近衣柜仔细听,原来是我的衣服在讨论什...
    浅浅的童话阅读 346评论 0 0