通过两道CTF题学习过滤单引号的SQL注入 | 您所在的位置:网站首页 › mysql字符型注入 › 通过两道CTF题学习过滤单引号的SQL注入 |
0x00 前言
通常来说,在进行字符型的SQL注入时,都需要先将前面的引号等(以单引号为例)进行闭合才能执行我们构造的SQL语句,那么如果单引号被过滤了,是否还能够成功的SQL注入呢? 答案是可以,当你在判断登录时使用的是如下SQL语句: select user from user where user='$_POST[username]' and password='$_POST[password]';那么即使在过滤的时候将单引号过滤掉了,还是可以进行一定程度上的注入的,下面通过两道CTF题来进行介绍。 0x01 [BJDCTF 2020]简单注入进入题目后就是一个登录框,名字也提示了要注入: 稍微fuzz一下可以发现过滤了'、"、=、-、and、select等关键词,其中关键就是这个单引号,由hint已知这里是需要单引号进行闭合的,而单引号又被过滤了。 可以发现注释符#和反斜杠\并没有被过滤,既然注释符没有过滤,那么我们就可以注释掉最后一个单引号,这样就只剩下3个单引号需要处理。 而如果我们输入的用户名以反斜杠\结尾,例如POST:username=admin\&password=123456#,那么拼接进去后,\就可以将第2个单引号转义掉,如下: select * from users where username='admin\' and password='123456#';这样第1个单引号就会找第3个单引号进行闭合,后台接收到的username实际上是admin\' and password=这个整体,而这个用户名显然不存在,所以还是登录失败。 但是别忘了我们还有一个password变量可控,实际上我们已经解决了单引号的闭合问题了,下面的就是常规的思路,比如我们构造password为or 2>1# 那么拼接后的sql语句就为: select * from users where username='admin\' and password=' or 2>1#';很显然上面的语句会返回为真,通过这样的思路,我们就可以进行bool盲注: |
今日新闻 |
推荐新闻 |
专题文章 |
CopyRight 2018-2019 实验室设备网 版权所有 |