甲.数字型注入

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

抓包查看

构造语句

提交后

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

乙.字符型注入

首先我们要知道一点,字符串在数据库中提交是需要用引号将字符串包含的。所以字符型注入一般需要用到引号来闭合字符串,闭合引号后就可以接执行的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. FTP免费工具,FTP免费工具推荐!

    IIS7服务器管理工具是FTP操作的客户端软件,能够作为批量操作FTP命令!同时,它还能够作为VNC的操作客户端进行VNC的相关操作!能够连接Windows和Linux的服务器和PC,并进行实时的检测 ...

  2. Keycloak快速上手指南,只需10分钟即可接入Spring Boot/Vue前后端分离应用实现SSO单点登录

    登录及身份认证是现代web应用最基本的功能之一,对于企业内部的系统,多个系统往往希望有一套SSO服务对企业用户的登录及身份认证进行统一的管理,提升用户同时使用多个系统的体验,Keycloak正是为此种 ...

  3. Java实现 LeetCode 面试题62. 圆圈中最后剩下的数字(约瑟夫环)

    面试题62. 圆圈中最后剩下的数字 0,1,n-1这n个数字排成一个圆圈,从数字0开始,每次从这个圆圈里删除第m个数字.求出这个圆圈里剩下的最后一个数字. 例如,0.1.2.3.4这5个数字组成一个圆 ...

  4. Java实现 蓝桥杯VIP 基础练习 分解质因数

    题目介绍 问题描述 求出区间[a,b]中所有整数的质因数分解. 输入格式 输入两个整数a,b. 输出格式 每行输出一个数的分解,形如k=a1a2a3-(a1<=a2<=a3-,k也是从小到 ...

  5. Java实现 蓝桥杯VIP 算法训练 拦截导弹

    1260:[例9.4]拦截导弹(Noip1999) 时间限制: 1000 ms 内存限制: 65536 KB 提交数: 4063 通过数: 1477 [题目描述] 某国为了防御敌国的导弹袭击,发展出一 ...

  6. java实现 猜数字游戏

    猜数字游戏 猜数字 很多人都玩过这个游戏:甲在心中想好一个数字,乙来猜.每猜一个数字,甲必须告诉他是猜大了,猜小了,还是刚好猜中了.下列的代码模拟了这个过程.其中用户充当甲的角色,计算机充当乙的角色. ...

  7. Java实现第八届蓝桥杯魔方状态

    魔方状态 题目描述 二阶魔方就是只有2层的魔方,只由8个小块组成. 如图p1.png所示. 小明很淘气,他只喜欢3种颜色,所有把家里的二阶魔方重新涂了颜色,如下: 前面:橙色 右面:绿色 上面:黄色 ...

  8. python3 优惠券查询GUI程序

    from tkinter import ttkfrom tkinter import messageboximport pymssqlimport tkinterimport decimalimpor ...

  9. 国外程序员整理的Java资源大全(全部是干货)

    原文 译者 唐尤华 翻译自 github akullpp 这里搜集了用来构建应用程序的工具. Apache Maven:Maven使用声明进行构建并进行依赖管理,偏向于使用约定而不是配置进行构建.Ma ...

  10. Hbase的基本架构以及对应的读写流程

    一.HBase简介 1,定义: HBase 是一种分布式.可扩展.支持海量数据存储的 NoSQL 数据库. 2,HBase的架构图: 架构角色: 1)Master Master是所有Region Se ...