SQL注入过程中注释符号有以下几种表达方式:

  1. --
  2. #
  3. %23

SQL注入过程中注释符号的作用是把后面不需要的语句注释掉,以保证SQL命令的完整性。

以Less-1为例,分析源代码:

$sql="SELECT * FROM users WHERE id='$id' LIMIT 0,1";

在进行注入时,输入?id=1,参数传入到后台中输入的值1会替换$id,源代码中闭合值就是这样的:

$sql="SELECT * FROM users WHERE id='1' LIMIT 0,1";

如果输入的参数是id=1 and 1=1时,后台源代码中闭合如下:

$sql="SELECT * FROM users WHERE id='1 and 1=1' LIMIT 0,1";

源代码中因为单引号把输入的值1 and 1=1当成字符串闭合了,如果我们不想当成字符串处理的话就需要绕过单引号闭合,输入id=1' and 1=1#,源代码中闭合如下:

$sql="SELECT * FROM users WHERE id='1' and 1=1#' LIMIT 0,1";

源代码中成功将id=1闭合,然后dan 1=1单独作为一个条件拼接到SQL语句中,#符号将后面的语句都给注释掉了,这样构造的SQL语句可以保证其完整性。

SQL语句还是能正常执行:

来看一个注释符号绕过waf的案例:

无论是输入?id=1'--+还是?id=1'#,后台还是对SQL语句进行了报错,这时我们需要考虑是不是被waf(web防火墙)把敏感关键字或语句给过滤掉了。

如何判断页面过滤对象:

从最简单的注入语句开始,逐渐增加复杂性,然后通过该方法判断过滤对象。

分析Less-23的部分关键源代码:

$reg = "/#/";
$reg1 = "/--/";
$replace = "";
$id = preg_replace($reg, $replace, $id);
$id = preg_replace($reg1, $replace, $id);

preg_replace 函数是用于查找和替换字符串的,例如preg_replace($reg, $replace, $id);语句中,preg_replace 函数会从$id中查找符合reg中的字符,用replace中的字符进行替换。分析Less-23代码可知,对于传入的参数$id,后台会检测查找“#”或“--”等特殊字符,然后用空字符进行替换。

现在换一种思路,在id后面手动再加一个单引号,即:?id=1' and 1=1',把源代码中的单引号闭合掉:

虽然可以把后面的单引号成功闭合,但LIMIT 0,1不能配合整条SQL语句执行,数据库在执行过程中仍然会报错,根本原因在于单引号闭合在某些情况下是无法跟and或or语句一起使用的。

这次改进一下,不加其他参数,还是使用单引号闭合,输入?id=1''进行闭合:

SQL语句可以正常执行,没有任何报错,再配合union联合查询进行注入:

红色部分就是手动输入的SQL注入语句,最终后台会将SQL语句拼接成如下图所示:

数据库可以正确执行SQL命令,使用联合注入确定了显示位后,可以将2,3的位置替换成database()和version()函数,查询数据库名和版本等信息。

注意:如果web页面是数字型注入方式的话,就不需要考虑闭合方式,在注入过程中也不需要使用注释符号。

如果Less-23源代码中闭合方式是('')这样的,那么在构造SQL注入的时候,就需要这样构造SQL注入语句进行绕过:

http://www.sqli.com/Less-23/?id=-1') union select 1,version(),3 or ('1')=('1

如何绕过后台过滤?

如果是数字型注入,则不需要考虑绕过。

如果是字符型注入,需要考虑三种情况:

1. 单引号闭合需要在后面增加一个单引号即可

2. 双引号闭合需要在后面注入语句后面增加一个双引号

3. ('')单引号加括号这种需要多加一个or ('')=('1

4. ("")双引号加括号这种需要多加一个or ("")=("1

注释符号是WAF绕过中经常使用的一种方式,注释符号绕过方式主要的作用就是对注入的SQL指令变形和混淆,从而绕过WAF防火墙的过滤。

在前面学习数据库中已知的注释符号有:“#” 和 “--+”两种方式,第三种/* */注释符号在mysql数据库中是多行注释的作用,在WAF绕过中对SQL注入指令变形和混淆会用的比较多。通常,数据库对/* */注释符号里的内容是不做任何解释和执行的。

例如来看这条SQL语句:

select * /*and*/ from users where id>5 , 数据库在执行这条SQL执行时会把/*and*/符号里的内容当做注释来处理。

如果想要让数据库执行/* */注释符号里的内容时可以使用这样的SQL语句(/*!xxx*/):

/*!xxx*/是mysql数据库对/**/符号功能的一种扩展,如果在/* */注释符号内最前面添加了感叹号的话,那么多行注释符号里的内容将会执行。也就是说,上图中的SQL语句在执行过程中,会将/*!where id >5*/里的内容当做SQL指令来执行,而不是当做注释来处理。

再来看另一个SQL语句:

这条SQL指令中仅仅只是在/*!xxx*/做了一点改变:添加了一个五位数的数字。数据库在执行SQL执行时没有将/*!50005 where id >5*/里的内容当做SQL指令来执行,这是因为/*!50000 where id >5*/指令中的数字50000表示:数据库在执行之前会先判断当前数据库的版本,如果当前数据库的版本是在5.00.05以上的话,注释符号里的内容会被当做SQL指令执行。

通过查看数据库版本发现,数据库的版本是在5.6.17版本,很明显要高于5.00.05,但是要低于7.00.07,因此第一条SQL指令的注释符号里的内容会被当做SQL指令执行,而第二条SQL指令中当前mysql数据库的版本不高于7,因此注释内的指令不会执行。

通过这种方式我们可以绕过WAF的过滤,例如对select和union进行绕过:

有些WAF会对union select进行过滤,但在构造SQL注入语句时可以使用/*!80000or*/对注入指令中的union和select关键字进行变形混淆,绕过WAF的检测。

7-Web安全——SQL注入WAF绕过之注释符号相关推荐

  1. 第19篇:WEB漏洞~SQL注入~SqlMap绕过WAF

    目录 1. 本文 2. 示例 2.1. 简要其他绕过方式学习 2.1.1. IP 白名单 2.1.2. 静态资源 2.1.3. url 白名单 2.1.4. 爬虫白名单 2.2. FUZZ绕过脚本结合 ...

  2. mysql延迟注入br_(原创)安全狗SQL注入绕过思路[sql注入waf绕过][sql注入bypass]

    2017/09/03_Bypass_safedog_Sql注入 prat 1 本文大致内容 + 思路以及想法 - 四重注释绕过safedog + 实战绕过 - 绕过and 1=1 - 绕过union+ ...

  3. mysql 绕过select报错_Web安全之SQL注入(原理,绕过,防御)

    首先了解下Mysql表结构 mysql内置的information_schema数据库中有三个表非常重要 1 schemata:表里包含所有数据库的名字 2 tables:表里包含所有数据库的所有的表 ...

  4. CTFshow——web入门——sql注入

    web入门--sql注入 基础知识点 判断是否注入 order by 判断列数 使用union select 判断回显 查询数据库 web171 web172 web173 web174 web175 ...

  5. ctfshow web入门-sql注入

    ctfshow web入门-sql注入 web171 web172 web173 web174 web175 web176 web177 web178 web179 web180 web181 web ...

  6. web之SQL注入篇BUU

    web之SQL注入篇BUU [强网杯 2019]随便注 预处理语句 handler [SUCTF 2019]EasySQL 判断是字符型还是数字型注入 判断是否可以联合查询 判断是否可以使堆叠注入 | ...

  7. 关于SQL注入,绕过逗号过滤

    关于SQL注入,绕过逗号过滤 前言 题目 测试 解题 1.union联合注入 2.盲注 总结 前言 最近在i春秋遇到一道sqli题目,觉得很有意思,总结一下与大家分享. "百度杯" ...

  8. 《从0到1:CTFer成长之路》书籍配套题目-[第一章 web入门]SQL注入-2

    [第一章 web入门]SQL注入-2 一.信息收集 1.首页 2.登录成功会跳转到 3.进行测试判断 二.尝试破解 1.用post型的sqlmap破解 <1>.首先,开burp截包 < ...

  9. SQL注入漏洞-绕过

    绕过条件过滤 掌握了基本的注入手段.但是随着网站开发人员的安全意识的提高,纷纷使用了各种防注入的手段.最简单的就是条件过滤了.条件过滤,顾名思义就是黑名单机制,过滤掉符合条件的语句.因此我们要想办法绕 ...

最新文章

  1. 维特根斯坦:为何夸大人工智能是对人性的贬损?
  2. 在ECS实例的centos系统中安装Hadoop
  3. 分布式文件系统研究-fastDSF架构介绍
  4. href up test.php,test.php
  5. 老罗直播原定的12台半价哈弗F7仅售4台就下架?官方回应来了
  6. ActionItemBadge:在actionbar上显示badge数字提示
  7. 手机900e模式如何救_手机护眼模式真的有用吗?长时间看手机如何保护视力?...
  8. 金属重量计算机在线,金属重量计算器
  9. windows U盘分区方法
  10. javascript 视频进度条制作
  11. 谁将打开腾讯业绩增速天花板?
  12. Android 集成友盟统计
  13. YP.2.7 Other Representations(双语)
  14. 国籍SQL—— 看自己需求 ( 港澳台 也独立出来了)
  15. 现代数据中心标准COTS服务器的演进
  16. win7 svchost.exe 占用内存cpu过高
  17. 新品周刊 | 可口可乐与时尚包袋品牌Kipling推出联名系列;阿迪达斯推出电竞灵感跑鞋...
  18. 在迷茫中坚守的Neri,可能是惠普企业(HPE)的最后一位高管
  19. System Toolkit for Mac(mac系统维护软件)
  20. win7安装远程控制软件 TeamViewer

热门文章

  1. js下Uint8Array合并读取的方式
  2. 十字星战法 出手便是强势股 出手必赢,炒股新手入门知识
  3. 西瓜书课后题9.4(K均值)
  4. 主从数据库相关知识及原理
  5. 整个前端小玩意儿:用three.js开发的手机太空穿越VR游戏,特效非常猛
  6. 基于python的tcp的端口转发程序
  7. 护眼台灯哪个品牌更好?2022护眼台灯品牌排行榜
  8. 嵌入式软件常见英文总结
  9. 基于位置的服务(简介)
  10. USACO-Mixing Milk