nss刷题(3)

1、[SWPUCTF 2021 新生赛]include

根据提示传入一个file后显示了关于flag的代码

这是一个文件包含,考虑php伪协议,构造payload:

?file=php://filter/read=convert.base64-encode/resource=flag.php

2、[SWPUCTF 2021 新生赛]Do_you_know_http

页面提示特定的browser,用bp抓包后改包。

得到了只能在本地访问但ip为183.224.81.121,添加X-Forwarded-for:字段,并将ip改为1本地ip:127.0.0.1

页面任然提示相同信息,但是发现有了一个新的跳转页面,尝试访问

得到flag

3、[HCTF 2018]Warmup

在body部分中,发现了一个source.php文件,尝试访问,

strpos(string,find,start)函数:

返回字符串在另一字符串中第一次出现的位置,如果没有找到字符串则返回 FALSE。注意: 字符串位置是从 0 开始,不是从 1 开始。

参数 描述
string 必需。规定要搜索的字符串。
find 必需。规定要查找的字符串。
start 可选。规定在何处开始搜索。

mb_substr(str,start,length,encoding) 函数:

返回字符串的一部分,对于substr() 函数,它只针对英文字符, 而mb_substr()对于中文也适用。

参数 描述
str 必需。从该 string 中提取子字符串。
start 必需。规定在字符串的何处开始。 * 正数 - 在字符串的指定位置开始 * 负数 - 在从字符串结尾的指定位置开始 * 0 - 在字符串中的第一个字符处开始
length 可选。规定要返回的字符串长度。默认是直到字符串的结尾。 * 正数 - 从 start 参数所在的位置返回 * 负数 - 从字符串末端返回
encoding 可选。字符编码。如果省略,则使用内部字符编码。

in_array(search,array,type)函数:

搜索数组中是否存在指定的值,找到值则返回 TRUE,否则返回 FALSE。

参数 描述
search 必需。规定要在数组搜索的值。
array 必需。规定要搜索的数组。
type 可选。如果设置该参数为 true,则检查搜索的数据与数组的值的类型是否相同。

开始代码审计:

上段函数定义了一个名为emmm的类,在该类中有一个静态方法checkFile用于检查要包含的文件是否在白名单中,白名单是一个关联数组whitelist,其中包含了允许包含的文件的键值对。在代码中,允许包含的文件有"source"=\>"source.php"和"hint"=\>"hint.php"。检查传入的page参数是否为字符串类型,如果不是或者未设置,将输出"you can't see it"并返回false。

page参数进行一系列处理:首先使用mb_strpos函数找到page中第一个问号的位置,然后使用mb_substr函数将问号之前的部分作为$_page进行处理。

_page进行URL解码,并重复之前的处理步骤,如果_page在白名单中存在,返回true。

如果上述条件都不满足,则输出"you can't see it"并返回false。检查_REQUEST\['file'\]是否存在且为字符串类型,并调用emmm::checkFile方法进行检查。如果返回值为true,则通过include语句包含_REQUEST['file']指定的文件并终止程序执行,否则输出一个图片标签。

开始解题:访问一下hint.php的文件,

提示说flag位于ffffllllaaaagggg中,但是ffffllllaaaagggg不在白名单范围内,想要访问ffffllllaaaagggg,就必须让最后一段的if语句的三条检测都为true。checkFile函数会检查用户传入的参数(page)是否匹配白名单列表whitelist。所以要包含白名单中的文件(source.php或hint.php)。并且checkFile函数是通过传入的参数 $page 来进行的文件检查,而不是直接从 URL 中获取参数。所以我们需要以参数形式传递文件名【?file=source.php】,将参数传给file,而不是直接访问文件路径【/source.php】。代码会截取第一个问号前的字符串并检查其是否在白名单中。

所以要让第一个问号?前的内容在白名单中,在问号?后面加上我们想访问的ffffllllaaaagggg就可以绕过。构造payload:

?file=source.php?ffffllllaaaagggg

没有查到,用../返回不断上级目录并不断尝试。

相关推荐
Digitally几秒前
如何轻松将视频从安卓设备传输到电脑?
android·电脑·音视频
Dola_Pan10 分钟前
Android四大组件通讯指南:Kotlin版组件茶话会
android·开发语言·kotlin
hopetomorrow1 小时前
学习路之PHP--webman安装及使用
android·学习·php
aningxiaoxixi1 小时前
android 之 Tombstone
android
移动开发者1号1 小时前
应用启动性能优化与黑白屏处理方案
android·kotlin
移动开发者1号1 小时前
Android处理大图防OOM
android·kotlin
张风捷特烈1 小时前
每日一题 Flutter#4 | 说说组件 build 函数的作用
android·flutter·面试
Harrison_zhu4 小时前
在Android13上添加系统服务的好用例子
android
CV资深专家9 小时前
在 Android 框架中,接口的可见性规则
android
daifgFuture13 小时前
Android 3D球形水平圆形旋转,旋转动态更换图片
android·3d