前言

继续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相关推荐

  1. 攻防世界 web高手进阶区 8分题 Web_python_block_chain

    前言 继续ctf的旅程 开始攻防世界web高手进阶区的8分题 本文是Web_python_block_chain的writeup 解题过程 这是个区块链题 这..裂开了啊 没搞过区块链 从零开始学习 ...

  2. 攻防世界 web高手进阶区 9分题 favorite_number

    前言 继续ctf的旅程 开始攻防世界web高手进阶区的9分题 本文是favorite_number的writeup 解题过程 进入界面 简单的代码审计 首先是个判断,既要数组强等于,又要首元素不等 然 ...

  3. 攻防世界 web高手进阶区 9分题 bilibili

    前言 继续ctf的旅程 开始攻防世界web高手进阶区的9分题 本文是bilibili的writeup 解题过程 进来界面 这尼玛出题人是黑还是粉啊 笑死 看题目意思是买lv6 惯例源码+御剑 没发现什 ...

  4. 攻防世界 web高手进阶区 7分题Confusion1

    前言 继续ctf的旅程 开始攻防世界web高手进阶区的7分题 本文是Confusion1的writeup 解题过程 进来的界面如下 (后来知道是php vs python的意思,也就是给提示跟pyth ...

  5. 攻防世界 Reverse高手进阶区 2分题 reverse-for-the-holy-grail-350

    前言 继续ctf的旅程 攻防世界Reverse高手进阶区的2分题 本篇是reverse-for-the-holy-grail-350的writeup 发现攻防世界的题目分数是动态的 就仅以做题时的分数 ...

  6. 攻防世界 Crypto高手进阶区 3分题 wtc_rsa_bbq

    前言 继续ctf的旅程 攻防世界Crypto高手进阶区的3分题 本篇是wtc_rsa_bbq的writeup 发现攻防世界的题目分数是动态的 就仅以做题时的分数为准了 解题过程 得到一个无后缀文件 扔 ...

  7. 攻防世界 Crypto高手进阶区 3分题 你猜猜

    前言 继续ctf的旅程 攻防世界Crypto高手进阶区的3分题 本篇是你猜猜的writeup 发现攻防世界的题目分数是动态的 就仅以做题时的分数为准了 解题过程 得到一串16进制 504B03040A ...

  8. 攻防世界 Misc高手进阶区 7分题 Russian-zips

    前言 继续ctf的旅程 攻防世界Misc高手进阶区的7分题 本篇是Russian-zips的writeup 发现攻防世界的题目分数是动态的 就仅以做题时的分数为准了 解题过程 得到一个压缩文件 解压要 ...

  9. 攻防世界 Misc高手进阶区 7分题 流量分析

    前言 继续ctf的旅程 攻防世界Misc高手进阶区的7分题 本篇是流量分析的writeup 发现攻防世界的题目分数是动态的 就仅以做题时的分数为准了 解题过程 题目描述 得到一个流量包 根据题目描述 ...

最新文章

  1. 2017.04.15【NOIP2017提高组】模拟赛B组 T2:渡河
  2. 中国人工智能学会通讯——最优传输理论在机器学习中的应用 1.1 最优传输理论与 WGAN 模型...
  3. 动态规划算法-02矿工挖矿问题
  4. CSS :hover 选择器
  5. 入职必备两小时入门SVN(二)
  6. apache+tomcat小记
  7. zjoi 2008 树的统计——树链剖分
  8. Python遥感图像处理基础篇(三):arcpy遥感图像镶嵌批量处理_镶嵌至新栅格
  9. 【经典算法题-2】费式数列(Fibonacci数列)
  10. 【文本检测与识别-白皮书-3.1】第四节:算法模型 2
  11. 一台手机=半套房?VERTU唐卡手机拍出48.3万
  12. 【维生素C语言】第十一章 - 字符串函数与内存函数
  13. 每日算法_4月11日_02
  14. 内存函数-----Memcmp
  15. 【MATLAB】用地图表白:绘制Bonne投影下的世界地图
  16. 股票自选股基本函数大全-9
  17. 除了阿里云服务器,还有什么便宜的服务器值得推荐?
  18. web3.js查询和修改链上的合约数据
  19. adt linux 离线安装包,ADT离线安装
  20. ArcGis安装失败提示“需要Microsoft .NET Framework 3.5 sp1或等效环境”的解决方法

热门文章

  1. 补码加减运算及判断溢出方法
  2. Introduction to SPM statistics
  3. Linux中的Seq
  4. 关于Bootstrap的一些使用
  5. 化工厂化纤工厂公用工厂调研报告,化工厂监管工业物联网数据采集上云方案
  6. NAT与NAT穿透(二)
  7. 金蝶K3案例教程仓存管理后台配置
  8. 找工作:java开发三年工作经验
  9. 互联网公司技术总监工作内容
  10. Spring声明式事务管理的配置详解