攻防世界 web高手进阶区 10分题 weiphp
前言
继续ctf的旅程
开始攻防世界web高手进阶区的10分题
本文是weiphp的writeup
解题过程
进入界面
点击
进入一个登陆界面
没有注册
那肯定得找源码了
惯例源码+御剑
发现git泄露
那就githack
然后代码审计了
代码审计是累
在Base.php
中看到
public function post_data($url, $param, $type = 'json', $return_array = true, $useCert = [])
{$res = post_data($url, $param, $type, $return_array, $useCert);// 各种常见错误判断if (isset($res['curl_erron'])) {$this->error($res['curl_erron'] . ': ' . $res['curl_error']);}if ($return_array) {if (isset($res['errcode']) && $res['errcode'] != 0) {$this->error(error_msg($res));} elseif (isset($res['return_code']) && $res['return_code'] == 'FAIL' && isset($res['return_msg'])) {$this->error($res['return_msg']);} elseif (isset($res['result_code']) && $res['result_code'] == 'FAIL' && isset($res['err_code']) && isset($res['err_code_des'])) {$this->error($res['err_code'] . ': ' . $res['err_code_des']);}}return $res;
}
跟踪post_data
在common.php
中
function post_data($url, $param = [], $type = 'json', $return_array = true, $useCert = [])
{$has_json = false;if ($type == 'json' && is_array($param)) {$has_json = true;$param = json_encode($param, JSON_UNESCAPED_UNICODE);} elseif ($type == 'xml' && is_array($param)) {$param = ToXml($param);}add_debug_log($url, 'post_data');// 初始化curl$ch = curl_init();if ($type != 'file') {add_debug_log($param, 'post_data');// 设置超时curl_setopt($ch, CURLOPT_TIMEOUT, 30);} else {// 设置超时curl_setopt($ch, CURLOPT_TIMEOUT, 180);}curl_setopt($ch, CURLOPT_URL, $url);curl_setopt($ch, CURLOPT_POST, true);curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);// 设置headerif ($type == 'file') {$header[] = "content-type: multipart/form-data; charset=UTF-8";curl_setopt($ch, CURLOPT_HTTPHEADER, $header);} elseif ($type == 'xml') {curl_setopt($ch, CURLOPT_HEADER, false);} elseif ($has_json) {$header[] = "content-type: application/json; charset=UTF-8";curl_setopt($ch, CURLOPT_HTTPHEADER, $header);}// curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/4.0 (compatible; MSIE 5.01; Windows NT 5.0)');curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);curl_setopt($ch, CURLOPT_AUTOREFERER, 1);// dump($param);curl_setopt($ch, CURLOPT_POSTFIELDS, $param);// 要求结果为字符串且输出到屏幕上curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);// 使用证书:cert 与 key 分别属于两个.pem文件if (isset($useCert['certPath']) && isset($useCert['keyPath'])) {curl_setopt($ch, CURLOPT_SSLCERTTYPE, 'PEM');curl_setopt($ch, CURLOPT_SSLCERT, $useCert['certPath']);curl_setopt($ch, CURLOPT_SSLKEYTYPE, 'PEM');curl_setopt($ch, CURLOPT_SSLKEY, $useCert['keyPath']);}$res = curl_exec($ch);if ($type != 'file') {add_debug_log($res, 'post_data');}// echo $res;die;$flat = curl_errno($ch);$msg = '';if ($flat) {$msg = curl_error($ch);}// add_request_log($url, $param, $res, $flat, $msg);if ($flat) {return ['curl_erron' => $flat,'curl_error' => $msg];} else {if ($return_array && !empty($res)) {$res = $type == 'json' ? json_decode($res, true) : FromXml($res);}return $res;}
}
发现可以用来SSRF
传入诸如url=file:///etc/passwd
的参数,会导致simple_xml_load_string
出错
一番尝试后
得到flag
结语
看了看wp
发现这个cms有各种漏洞
被日穿了
- sqli
- 免登录文件上传
- 登录后文件上传
- 包含日志执行
可参考以下两篇wp
- 2019 XCTF FINALS weiphp5.0 漏洞挖掘
- 攻防世界 weiphp writeup
攻防世界 web高手进阶区 10分题 weiphp相关推荐
- 攻防世界 web高手进阶区 8分题 Web_python_block_chain
前言 继续ctf的旅程 开始攻防世界web高手进阶区的8分题 本文是Web_python_block_chain的writeup 解题过程 这是个区块链题 这..裂开了啊 没搞过区块链 从零开始学习 ...
- 攻防世界 web高手进阶区 9分题 favorite_number
前言 继续ctf的旅程 开始攻防世界web高手进阶区的9分题 本文是favorite_number的writeup 解题过程 进入界面 简单的代码审计 首先是个判断,既要数组强等于,又要首元素不等 然 ...
- 攻防世界 web高手进阶区 9分题 bilibili
前言 继续ctf的旅程 开始攻防世界web高手进阶区的9分题 本文是bilibili的writeup 解题过程 进来界面 这尼玛出题人是黑还是粉啊 笑死 看题目意思是买lv6 惯例源码+御剑 没发现什 ...
- 攻防世界 web高手进阶区 7分题Confusion1
前言 继续ctf的旅程 开始攻防世界web高手进阶区的7分题 本文是Confusion1的writeup 解题过程 进来的界面如下 (后来知道是php vs python的意思,也就是给提示跟pyth ...
- 攻防世界 Reverse高手进阶区 2分题 reverse-for-the-holy-grail-350
前言 继续ctf的旅程 攻防世界Reverse高手进阶区的2分题 本篇是reverse-for-the-holy-grail-350的writeup 发现攻防世界的题目分数是动态的 就仅以做题时的分数 ...
- 攻防世界 Crypto高手进阶区 3分题 wtc_rsa_bbq
前言 继续ctf的旅程 攻防世界Crypto高手进阶区的3分题 本篇是wtc_rsa_bbq的writeup 发现攻防世界的题目分数是动态的 就仅以做题时的分数为准了 解题过程 得到一个无后缀文件 扔 ...
- 攻防世界 Crypto高手进阶区 3分题 你猜猜
前言 继续ctf的旅程 攻防世界Crypto高手进阶区的3分题 本篇是你猜猜的writeup 发现攻防世界的题目分数是动态的 就仅以做题时的分数为准了 解题过程 得到一串16进制 504B03040A ...
- 攻防世界 Misc高手进阶区 7分题 Russian-zips
前言 继续ctf的旅程 攻防世界Misc高手进阶区的7分题 本篇是Russian-zips的writeup 发现攻防世界的题目分数是动态的 就仅以做题时的分数为准了 解题过程 得到一个压缩文件 解压要 ...
- 攻防世界 Misc高手进阶区 7分题 流量分析
前言 继续ctf的旅程 攻防世界Misc高手进阶区的7分题 本篇是流量分析的writeup 发现攻防世界的题目分数是动态的 就仅以做题时的分数为准了 解题过程 题目描述 得到一个流量包 根据题目描述 ...
最新文章
- 2017.04.15【NOIP2017提高组】模拟赛B组 T2:渡河
- 中国人工智能学会通讯——最优传输理论在机器学习中的应用 1.1 最优传输理论与 WGAN 模型...
- 动态规划算法-02矿工挖矿问题
- CSS :hover 选择器
- 入职必备两小时入门SVN(二)
- apache+tomcat小记
- zjoi 2008 树的统计——树链剖分
- Python遥感图像处理基础篇(三):arcpy遥感图像镶嵌批量处理_镶嵌至新栅格
- 【经典算法题-2】费式数列(Fibonacci数列)
- 【文本检测与识别-白皮书-3.1】第四节:算法模型 2
- 一台手机=半套房?VERTU唐卡手机拍出48.3万
- 【维生素C语言】第十一章 - 字符串函数与内存函数
- 每日算法_4月11日_02
- 内存函数-----Memcmp
- 【MATLAB】用地图表白:绘制Bonne投影下的世界地图
- 股票自选股基本函数大全-9
- 除了阿里云服务器,还有什么便宜的服务器值得推荐?
- web3.js查询和修改链上的合约数据
- adt linux 离线安装包,ADT离线安装
- ArcGis安装失败提示“需要Microsoft .NET Framework 3.5 sp1或等效环境”的解决方法