CTF(五)

 导言:

本文主要讲述在CTF竞赛中,web类题目easyphp。

靶场链接:攻防世界 (xctf.org.cn)

参考文章原文链接:Web安全攻防世界05 easyphp(江苏工匠杯)_攻防世界 easyphp-CSDN博客

一,观察页面。

<?php
highlight_file(__FILE__);
$key1 = 0;
$key2 = 0;// 获取GET参数a和b
$a = $_GET['a'];
$b = $_GET['b'];// 判断a是否设置,并且a的值是否大于6000000,长度是否小于等于3
if(isset($a) && intval($a) > 6000000 && strlen($a) <= 3){// 判断b是否设置,并且b的md5值的后6位是否等于8b184bif(isset($b) && '8b184b' === substr(md5($b),-6,6)){$key1 = 1;}else{die("Emmm...再想想");}}else{die("Emmm...");
}// 获取GET参数c,并转换为数组
$c=(array)json_decode(@$_GET['c']);
// 判断c是否为数组,并且c的m值是否不是数字,并且m值大于2022
if(is_array($c) && !is_numeric(@$c["m"]) && $c["m"] > 2022){// 判断c的n值是否为数组,并且n的长度是否为2,并且n的第一个值是否为数组if(is_array(@$c["n"]) && count($c["n"]) == 2 && is_array($c["n"][0])){// 在n数组中查找DGGJ,如果找不到则输出no...$d = array_search("DGGJ", $c["n"]);$d === false?die("no..."):NULL;// 遍历n数组,如果数组中存在DGGJ则输出no......foreach($c["n"] as $key=>$val){$val==="DGGJ"?die("no......"):NULL;}$key2 = 1;}else{die("no hack");}
}else{die("no");
}// 如果key1和key2都为1,则包含Hgfks.php文件,并输出You're right和flag
if($key1 && $key2){include "Hgfks.php";echo "You're right"."\n";echo $flag;
}

可以看到,这是一道php代码审计类题目,单纯地在考验php语法,并且每个变量输错了都有不同的提示。

二,解题思路。

根据php代码可知:

1,需要使用get方式传递两个参数,分别为a,b。

2,a的值大于6000000,长度小于等于3。

3,b的md5值的后6位等于8b184b。

4,需要使用get方式传递c数组,并且里面有m和n两个数值。

5,数组c为数组并且c中的m值不是数字或者字符串,并且值大于2022。

6,数组c中,n必须含有DGGJ,但n不能是DGGJ本身。

7, 数组c除了上述要求外,还需要是JSON 编码。

三,开始测试。

1,a。

a的值大于6000000,长度小于等于3。看似不可能,实际上可以使用科学计数法。例如:2e9,等于2000000000。 E表示的是10的次方,E后面的数字表示的是10的几次方,所以2E9等于2*10^9,也就是20亿

进行测试:

成功。

2,b。

b的md5值的后6位等于8b184b,这里使用一个php文件进行计算:

<?php
for($b=1;$b<=100000;$b++){ if(preg_match('/^8b184b/',substr(md5($b),-6,6))){ echo $b; echo "\n";}
}
?>

计算结果:

得到b的值为:53724。

一般情况下python脚本使用较多,下面是一个python解法:

import hashlibdef find_number(start, end, target_hash):for num in range(start, end + 1):md5_hash = hashlib.md5(str(num).encode()).hexdigest()if md5_hash[-6:] == target_hash:  return numprint("未找到匹配的数字")return Nonetarget_hash = '8b184b' 
start, end = 0, 10**5  
result = find_number(start, end, target_hash)
if result is not None:print(f" {result}")

测试:

通过。

3,c。

根据源码可知,c是含有m和n两个数值。

m的值应为“>2022的数字+字符”,这里使用"3000% ”

至于n,我们直接将其定义为空数值。

因为m和n是c的值,所以应写为:c={"m":"3000 ","n":[[0],0]}

四,构造payload,得到flag。

payload:

http://61.147.171.105:52428/?a=2e9&&b=53724&&c={"m":"3000 ","n":[[0],0]}

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

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

相关文章

玄机平台-应急响应-webshell查杀

首先xshell连接 然后进入/var/www/html目录中&#xff0c;将文件变成压缩包 cd /var/www/html tar -czvf web.tar.gz ./* 开启一个http.server服务&#xff0c;将文件下载到本地 python3 -m http.server 放在D盾中检测 基本可以确认木马文件就是这四个 /var/www/html/shell.p…

动态规划-子数组系列——乘积最大子数组

1.题目解析 题目来源&#xff1a;152.乘积最大子数组——力扣 测试用例 2.算法原理 1.状态表示 由于题目给的数组中可以包含负数&#xff0c;因此求最大乘积有两种情况&#xff1a; a.负数乘以最小数得出最大乘积 b.整数乘以最大数得出最大乘积 所以需要两个表分别求出最大最…

Leetcode 柱状图中最大的矩形

h 是右边界&#xff0c;连续多个高度递增的柱子&#xff0c;如果遇到下一个 h < 栈顶元素(是最大的元素&#xff0c;单调递增栈)&#xff0c;那么会不断出栈来更新计算最大面积。 并非是一次性计算出最大面积的&#xff0c;很重要的一点是while (!stack.isEmpty()这一部分的…

【Linux】多线程安全之道:互斥、加锁技术与底层原理

目录 1.线程的互斥 1.1.进程线程间的互斥相关背景概念 1.2.互斥量mutex的基本概念 所以多线程之间为什么要有互斥&#xff1f; 为什么抢票会抢到负数&#xff0c;无法获得正确结果&#xff1f; 为什么--操作不是原子性的呢&#xff1f; 解决方式&#xff1a; 2.三种加锁…

项目实战:构建 effet.js 人脸识别交互系统的实战之路

&#x1f4dd;个人主页&#x1f339;&#xff1a;Eternity._ &#x1f339;&#x1f339;期待您的关注 &#x1f339;&#x1f339; ❀构建 effet.js &#x1f4d2;1. 什么是effet.js&#x1f4dc;2. 为什么需要使用effet.js&#x1f4dd;3. effet.js的功能&#x1f4da;4. 使用…

HarmonyOS NEXT 应用开发实战(五、页面的生命周期及使用介绍)

HarmonyOS NEXT是华为推出的最新操作系统&#xff0c;arkUI是其提供的用户界面框架。arkUI的页面生命周期管理对于开发者来说非常重要&#xff0c;因为它涉及到页面的创建、显示、隐藏、销毁等各个阶段。以下是arkUI页面生命周期的介绍及使用举例。 页面的生命周期的作用 页面…

聊聊Go语言的异常处理机制

背景 最近因为遇到了一个panic问题&#xff0c;加上之前零零散散看了些关于程序异常处理相关的东西&#xff0c;对这块有点兴趣&#xff0c;于是整理了一下golang对于异常处理的机制。 名词介绍 Painc golang的内置方法&#xff0c;能够改变程序的控制流。 当函数调用了pan…

T113 内核中 adbd相关配置1

准备工作 1. 配置 系统&#xff1a;ubuntu24.04docker&#xff08;ubuntu18.04&#xff09; 软件vscode, sdk:Tina-linux&#xff08;BingPi-M2&#xff09; 2. 构建环境直接使用自带的 source ./build/envsetup.sh lunch 选择 6 编译开启16线程 make -j16boot编译 mboot 打包…

设计模式——装饰者模式(8)

一、定义 指在不改变现有对象结构的情况下&#xff0c;动态地给该对象增加一些职责&#xff08;即增加其额外功能&#xff09;的模式。我们先来看一个快餐店的例子。快餐店有炒面、炒饭这些快餐&#xff0c;可以额外附加鸡蛋、火腿、培根这些配菜&#xff0c;当然加配菜需要额…

【网络安全】简单P1:通过开发者工具解锁专业版和企业版功能

未经许可,不得转载。 文章目录 前言发现过程前言 在探索一个SaaS平台的过程中,我发现了一个漏洞,使得我能够在无需订阅的情况下解锁高级(专业/企业)功能。 发现过程 我使用一个没有任何高级功能的基本用户账户进行常规登录。在浏览平台时,我注意到某些按钮和功能上带有…

基于微信小程序的购物系统【附源码、文档】

博主介绍&#xff1a;✌IT徐师兄、7年大厂程序员经历。全网粉丝15W、csdn博客专家、掘金/华为云//InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精彩专栏推荐订阅&#x1f447;&#x1f3…

web前端--html 5---qq注册

<!DOCTYPE html> <html lang"en"> <head> <meta charset"UTF-8"> <meta name"viewport" content"widthdevice-width, initial-scale1.0"> <title>qq注册</title> <link rel"impo…

[Linux#66][TCP->IP] 面向字节流 | TCP异常 | filesocket | 网络层IP

目录 1. 面向字节流 思考&#xff1a;对于UDP协议来说&#xff0c;是否也存在“粘包问题”呢&#xff1f; 2.TCP 异常情况 3.知识 1.UDP实现可靠传输(经典面试题) 2. 网络抓包 | 爬虫 3.打通文件和 socket 的关系 4.网络层&#xff1a;IP 前置知识 1. 面向字节流 udp…

java逻辑运算符 C语言结构体定义

1. public static void main(String[] args) {System.out.println(true&true);//&两者均为true才trueSystem.out.println(false|false);// | 两边都是false才是falseSystem.out.println(true^false);//^ 相同为false&#xff0c;不同为trueSystem.out.println(!false)…

git 安装

文章目录 一、ubuntu 安装 git二、centos 安装 git三、检查安装 git 一、ubuntu 安装 git sudo apt-get install get -y二、centos 安装 git sudo s install git -y三、检查安装 git git --version出现此标志git版本号&#xff0c;表示git安装完成。

《Effective C++》 笔记

让自己习惯C&#xff0c;Accustoming Yourself to C 1. 视C为一个语言联邦&#xff0c;View Cas a federation of languages. 将 C视为一个由相关语言组成的联邦而非单一语言。在其某个次语言&#xff08;sublanguage&#xff09;中&#xff0c;各种守则与通例都倾向简单、直观…

【win11】终端/命令提示符/powershell美化

文章目录 1.设置字体1.1. 打开win11的终端/命令提示符/powershell其中之一1.2. 打开终端设置&#xff0c;修改所有终端默认字体为新宋体 2. 修改powershell背景色为蓝色 win11的默认终端/命令提示符/powershell主题风格让人感觉与win10撕裂太大&#xff0c;尤其是字体、背景色&…

Excel:vba实现筛选出有批注的单元格

实现的效果&#xff1a;代码&#xff1a; Sub test() Dim cell As RangeRange("F3:I10000").ClearlastRow Cells(Rows.Count, "f").End(xlUp).Row MsgBox lastrow For Each cell In Range("a1:a21")If Not cell.Comment Is Nothing ThenMsgBox…

从DexMV、VideoDex、MimicPlay到SeeDo:从人类视频中学习:机器人的主流训练方法之一

前言 在此文《UMI——斯坦福刷盘机器人&#xff1a;从手持夹持器到动作预测Diffusion Policy(含代码解读)》的1.1节开头有提到 机器人收集训练数据一般有多种方式&#xff0c;比如来自人类视频的视觉演示 有的工作致力于从视频数据——例如YouTube视频中进行策略学习 即最常见…

推荐一款非常优秀的3D建模软件:PTC Creo

PTC Creo是美国PTC公司最新研发出来的一款超级强大的3D建模辅助类大型软件&#xff0c;这款软件是针对产品设计以及开发的软件&#xff0c;它具有一系列3D CAD、CAM、CAE等开发工具和套件&#xff0c;而且可用性极高。从概念设计一直到制造出产品&#xff0c;本软件都可以完成任…