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. 必学必会的nginx配置location匹配顺序总结
  2. html如何实现新闻标题缩略,CSS新闻标题后面跟着new图标_CSS实例
  3. 20.二叉树怎么存储
  4. java匿名内部类的使用场景_java匿名内部类的使用场景
  5. 高并发,分布式系统要点
  6. consul 文件夹无法显示_consul集群搭建参考
  7. 狂赌智能手机 中国互联网巨头深陷零利润困局
  8. C++|Qt中QTreeWidget基本操作及完整代码下载
  9. php会员整合,会员整合Ucenter/Discuz!/PHPWind教程
  10. 产品壁垒_打破人员,流程和产品之间的壁垒
  11. golang byte转string_golang版memcached之groupcache缓存入门
  12. arm s32440a系统时钟设置
  13. activity中获取fragment布局_安卓开发入门教程Fragment
  14. Python的算数运算符
  15. vue中使用阿里图标
  16. vs2012 链接内置数据库 sql express 出现error 26 解决方法
  17. pytorch实现反向传播
  18. 16秋计算机JAVA第一节课作业(钟永钜)
  19. centos桌面系统怎么退回终端系统_CentOS下命令行和桌面模式的切换方法
  20. mediawiki mysql_MediaWiki/安装

热门文章

  1. 读书笔记-精准努力-认识自己抓住优势专注聚焦
  2. go每日新闻--2020-12-27
  3. mov指令和数据传输
  4. java房源信息管理的代码_spring mvc+jsp+jdbc开发java web房源网站后台管理系统
  5. java计算机毕业设计汽车票订购系统源代码+数据库+系统+lw文档
  6. 2023年计算机视觉与模式识别国际会议(CCVPR 2023)
  7. centos7安装Navicat
  8. 元宇宙产业委甘华鸣:关于术语“元宇宙”以及相关问题
  9. 常用linux命令记录
  10. 计算苹果的价格(计算物品类的价格可借鉴)