安全矩阵

 找回密码
 立即注册
搜索
查看: 2588|回复: 0

CTF-AWD之代码审计例题(一)

[复制链接]

855

主题

862

帖子

2940

积分

金牌会员

Rank: 6Rank: 6

积分
2940
发表于 2021-12-9 15:02:47 | 显示全部楼层 |阅读模式
原文链接:CTF-AWD之代码审计例题(一)

本文使用了moxiaoxi师傅的CTF-AWD训练平台搭建的环境,思路及源码参考如下:
https://github.com/m0xiaoxi/AWD_CTF_Platform
本题源码领取方式见文末处
如有不正之处,请大佬们指正~
(〇)环境概览
样题使用chinaz源码改编   

  同时在服务器根目录下,采用动态flag,长度为32位

(一)eval预留后门
先用D盾过一遍,发现了eval后门




连接拿flag



(二)文件包含
Seay过一遍,发现在action.php中



第11行处,包含函数中存在变量,可能存在文件包含,跟进$page,查看filter函数
在common.php中,发现把“ . “ 过滤成空格,需要引入绝对路径



寻找文件写操作,在common.php中
       ​      
发现write_log函数可以满足需求,可以将shell写入log文件,全局搜索write_log,发现
       ​      
在loadFile函数中,当$filePath不存在时,将$filePath拼接写到log中
回来追全局变量,发现定义位置
       ​      
再看loadFile函数
       ​      
看echoContent,在index.php处调用
       ​      
最后构造EXP:



(三)preg_replace
在normaliz.php中,发现preg_replace函数可能控制参数



追一下action函数调用,发现同时能接受这三个参数的位置是在normaliz.php



但是发现这里后两个参数并不可控,参考WP得知,可以通过action.php文件包含,进行变量覆盖



只需要控制:

method=/a/e&mailreplacement=system('cat /flag')&source=a
构造EXP:



(四)eval代码执行
Seay同样扫描出了view.php中,eval处可能存在代码执行漏洞,在View类中



只要可以控制变量$strIf就可能造成任意代码执行。

查找调用view类的页面,发现md5.php中存在,同时使用action函数接收$post_data,存在变量覆盖



跟进echoContent方法,接受的$data



再分别查看parseHeadAndFoot方法,parseVal方法,可知$data传递方式,返回值是$content






接着来到parseIf方法,$content经过preg_match_all处理成$iar,再将构造的代码执行传入$strIf,最后进入61行的eval触发命令执行


构造时注意string中双引号的闭合,单引号的转义,并且使用or连接
编写EXP:




回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|安全矩阵

GMT+8, 2025-4-23 04:20 , Processed in 0.017224 second(s), 18 queries .

Powered by Discuz! X4.0

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表