YXcms(MVC)
YXcms 1.4.7
熟悉MVC架构
路由方式
通过一个 r 的文件指针进行路由
参数传递
in($_GET[])
......
public function test()
{
$param=in($_GET['a']);
var_dump($param);
}
......
$_GET 接收值,通过 in 进行过滤
in 函数
//数据过滤函数库
/*
功能:用来过滤字符串和字符串数组,防止被挂马和sql注入
参数$data,待过滤的字符串或字符串数组,
$force为true,忽略get_magic_quotes_gpc
*/
function in($data,$force=false){
if(is_string($data)){
$data=trim(htmlspecialchars($data));//防止被挂马,跨站攻击
if(($force==true)||(!get_magic_quotes_gpc())) {
$data = addslashes($data);//防止sql注入
}
return $data;
} else if(is_array($data)) {
foreach($data as $key=>$value){
$data[$key]=in($value,$force);
}
return $data;
} else {
return $data;
}
}
可以看到函数并不能防止 int 型注入,也没有对数组的键进行过滤
增删改查
查
# default/indexController.php
<?php
class indexController extends commonController
{
public function test()
{
$id = in($_GET['id']);
$result = model('user')->find("id={$id}");
var_dump($result);
}
......
增
public function test()
{
$data=['username'=>'ocean2','password'=>'ocean2'];
$result=model('user')->insert($data);
var_dump($result);
}
改
public function test()
{
$id = in($_GET['id']);
$data=['username'=>'nc000eee','password'=>'nce000ee'];
$result=model('user')->update("id={$id}",$data);
var_dump($result);
}
删
public function test()
{
$id = in($_GET['id']);
$result=model('user')->delete("id={$id}");
var_dump($result);
}
漏洞
数字注入
insert注入
后台任意文件删除
任意文件写入
XSS
前台留言处存在 xss
存入时会进行过滤
但是后台审核处会将其还原
…(img-lpIJx1y6-1617631219454)]
存入时会进行过滤
但是后台审核处会将其还原
[外链图片转存中…(img-6LOyjGnD-1617631219455)]
[外链图片转存中…(img-nZ2k7yOy-1617631219456)]