前言
在夏日炎炎的八月(南方),说忙也不是很忙(日常划水),就接了几个出题任务。出这个题目的初衷是当时有一个项目要做代码审计,就来了灵感,打算出一下代码审计的题目。没参加比赛,赛后看了下解题情况情况,是web中解题数量倒数第二的那个,看见很多师傅们都解决了题目,应该来说也是不难。看了下几位师傅们发的wp发现都是非预期解。
预期解
1. 下载源码,使用vscode对源码进行审计,发现部分页面存在sql注入漏洞,经过测试,无法获取有用数据
2. 在adm1n文件夹中admin_weixin.php发现存在任意文件写入漏洞,存在过滤但是可以绕过,过滤关键代码
foreach (array_keys($_POST) as $arg )
{
$$arg=preg_replace("/a|e|i|o|u|s|t/i","",$$arg);
}
下面还有一段补充代码
$str.="echo dwz ?>";
$str=preg_replace("/dfn/","define",$str);
3. 发现可以使用变量覆盖,使得dwz为flag
4. 访问网站adm1n管理员后台,使用弱口令admin/admin进行登入。进行登入,访问adm1n/admin_weixin.php
5. 在打开admin_weixin.php页面之前启动该包工具burp suite,点击提交后抓取数据包,将dwz参数之前的任意一个参数填入payload:");define("dwz",`nl%20/fl*`,"
6. 发送数据包,访问/data/admin/weixin.php即可获取flag
解题情况
截止12月17日24点官方已经停止收wp。今天去公司的路上看了下师傅们发在群里的wp,发现解决的大多都是使用非预期解https://github.com/ciweiin/seacms/issues/10。这个锅我背了,赶紧去翻了翻当时的出题记录,的确是非预期解。大意了,没有闪。师傅们太强了,膜拜师傅们(狗头保命)。给师傅们造成了不好的解题体验深感抱歉。
非预期
if($action=="set")
{
$weburl= $_POST['weburl'];
$token = $_POST['token'];
$open=fopen("../data/admin/ping.php","w" );
$str='<?php ';
$str.='$weburl = "';
$str.="$weburl";
$str.='"; ';
$str.='$token = "';
$str.="$token";
$str.='"; ';
$str.=" ?>";
fwrite($open,$str);
fclose($open);
ShowMsg("成功保存设置!","admin_ping.php");
exit;
}
-
admin_ping.php文件存在weburl参数和token参数,都是使用POST方式直接获取。
-
获取后添加php文件格式,最后未经过滤直接连接,然后写入到data文件夹下的admin/ping.php下
-
3. 传入flie_get_content()直接读取flag文件,或是使用一句话木马,在读取flag文件
制作过程
在网上找了一个入门级别的php框架,找了几个发现seacms比较适合,于是就开干了。先下载来安装一下,看一下目录,发现挺多的
drwxr-xr-x 37 staff staff 1184 8 19 18:23 .
drwxrwxr-x@ 4 staff staff 128 8 19 18:52 ..
drwxr-xr-x 83 staff staff 2656 8 19 18:45 adm1n
drwxr-xr-x 3 staff staff 96 8 19 18:23 article
drwxr-xr-x 3 staff staff 96 8 19 18:23 articlelist
-rwxr-xr-x 1 staff staff 2626 8 24 2019 ass.php
drwxr-xr-x 6 staff staff 192 8 19 18:23 comment
-rwxr-xr-x 1 staff staff 961 4 6 2019 comment.php
drwxr-xr-x 14 staff staff 448 8 19 18:23 data
-rwxr-xr-x 1 staff staff 353 12 11 2018 desktop.php
drwxr-xr-x 3 staff staff 96 8 19 18:23 detail
-rwxr-xr-x 1 staff staff 3037 1 25 2019 diy.php
-rwxr-xr-x 1 staff staff 4016 2 7 2020 err.php
-rwxr-xr-x 1 staff staff 257 12 11 2018 exit.php
-rwxr-xr-x 1 staff staff 16958 11 30 2019 favicon.ico
-rwxr-xr-x 1 staff staff 10100 9 12 2019 gbook.php
-rwxr-xr-x 1 staff staff 1522 4 14 2019 i.php
drwxr-xr-x 33 staff staff 1056 8 19 18:23 include
-rwxr-xr-x 1 staff staff 2131 12 20 2018 index.php
drwxr-xr-x 11 staff staff 352 8 19 18:23 js
drwxr-xr-x 3 staff staff 96 8 19 18:23 list
-rwxr-xr-x 1 staff staff 6002 12 1 2019 login.php
-rwxr-xr-x 1 staff staff 36859 12 2 2019 member.php
drwxr-xr-x 3 staff staff 96 8 19 18:23 news
drwxr-xr-x 15 staff staff 480 8 19 18:23 pic
-rwxr-xr-x 1 staff staff 9089 6 24 2019 reg.php
-rwxr-xr-x 1 staff staff 4458 4 20 2019 s.php
-rwxr-xr-x 1 staff staff 16839 8 24 2019 search.php
-rwxr-xr-x 1 staff staff 7701 8 24 2019 so.php
-rwxr-xr-x 1 staff staff 6613 4 20 2019 tag.php
drwxr-xr-x 3 staff staff 96 8 19 18:23 templets
drwxr-xr-x 3 staff staff 96 8 19 18:23 topic
drwxr-xr-x 3 staff staff 96 8 19 18:23 topiclist
drwxr-xr-x 6 staff staff 192 8 19 18:23 uploads
drwxr-xr-x 3 staff staff 96 8 19 18:23 video
drwxr-xr-x 3 staff staff 96 8 19 18:23 weixin
-rwxr-xr-x 1 staff staff 8697 4 14 2019 zyapi.php
随后找一下网上相关的漏洞,发现whojoe师傅这篇文章分析的挺好的,
https://www.freebuf.com/vuls/241106.html,就以这篇文章为基础对文章中提到的漏洞进行修补。
-
对sql注入对处理是使用低权账号,限制账号访问数据表的权限。
-
对于命令执行的修补,在admin_ip处使用正则匹配,非ip格式直接退出。
-
在admin_notify处添加过滤规则
-
在admin_weixin 添加了部分可绕过的过滤规则
总结
出题时,得注意所有的漏洞情况,出了预期解就有点尴尬了。打铁还得自身硬,只有好好学习才能跟得上师傅们前进的脚步。目前一直在学习java代码审计,感兴趣的师傅们可以一起学习。
参考连接
https://www.freebuf.com/vuls/241106.html
https://github.com/ciweiin/seacms/issues/10
本文始发于微信公众号(NOVASEC):纵横杯-大家一起来审代码出题笔记
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论