NSSCTF-Web题目11

目录

[鹤城杯 2021EasyP](#[鹤城杯 2021]EasyP)

1、题目

2、知识点

3、思路

[SWPUCTF 2022 新生赛numgame](#[SWPUCTF 2022 新生赛]numgame)

1、题目

2、知识点

3、思路


鹤城杯 2021EasyP

1、题目
2、知识点

php代码审计

3、思路

打开题目,出现一段代码,我们对代码进行审计

这里出现了很多不懂的函数,下面进行解释

$_SERVER()是一个包含了文件头、路径等信息的数组

例如url:http://127.0.0.1/dir/test.php?id=1

$_SERVER'PHP_SELF':获取当前执行url的文件

执行结果:/dir/test.php

$_SERVER'REQUEST_URI':获取当前执行url的文件还有参数

执行结果:/dir/test.php?id=1
basename()函数:

简而言之就是取url中最后一个文件

例如上面的例子,执行结果:/test.php

basename 函数有这样一个特性:在使用默认语言环境设置时,basename() 会删除文件名开头的非 ASCII 字符。

了解了这些函数,接下来就审计一下代码

1、

if (isset($_POST'guess')) {

guess = (string) _POST'guess';

if (guess === secret) {

message = 'Congratulations! The flag is: ' . flag;

} else {

$message = 'Wrong. Try Again';

}

}

这一段代码就是通过POST方式上传guess变量,且跟secret变量的值强比较,但是secret变量的值我们不知道,所以这一个也没法突破
2、

if (preg_match('/utils\.php\/*/i', _SERVER'PHP_SELF')) {

exit("hacker :)");

}

if (preg_match('/show_source/', $_SERVER'REQUEST_URI')){

exit("hacker :)");

对上传的url进行正则比较,不能有utils.php、show_source,/i的作用是大小写都可以
3、

if (isset($_GET'show_source')) {

highlight_file(basename($_SERVER'PHP_SELF'));

exit();

上传一个show_source变量
PHP参数解析特性

PHP会自动将参数转换为有效的变量名:

1.删除空白符

2.将特殊字符**[+ .**转化成下划线_

利用这个特性,就可以绕过对show_source的过滤

所以我们构造payload:

http://node4.anna.nssctf.cn:28798/index.php/utils.php/哈哈?show[source=1

basename(http://node4.anna.nssctf.cn:28798/index.php/utils.php/哈哈?show\[source=1)

结果为:/哈哈

这样就绕过了对utils\.php的检测

?show[source=1 执行结果为:show_source=1

注:这里需要加上index.php,这里不懂为什么需要加上index,可能是题目的设计

得到flag:NSSCTF{3f08c921-26a9-459f-b947-8a0254cbdfdb}


SWPUCTF 2022 新生赛numgame

1、题目
2、知识点

php代码审计

3、思路

打开题目

根据题目提示,发现到不了题目结果,右键打不开源码,用开发者模式打开会自动关闭网页

先打开开发者模式中的控制台,再访问url就可以看到源码

得到源码

翻看源码

发现NSSCTF{TnNTY1RmLnBocA==},以为是flag,结果不是,看着像base64编码,进行解码

Base64解码 Base64编码 UTF8 GB2312 UTF16 GBK 二进制 十六进制 解密 - The X 在线工具 (the-x.cn)

解码得到:NsScTf.php

访问这个页面,得到源代码

审计代码:

需要我们用get上传一个p参数,然后调用call_user_func()

call_user_func()

上面定义了一个nss类,类中有一个ctf函数,意思就是p参数的值就是ctf函数,然后

call_user_func(ctf)执行这个ctf函数

那么怎么使用类中的函数呢,php中使用双冒号::

在php中双冒号(::)操作符是一种范围解析操作符,又作用域限定操作符。它是对类中的方法的静态引用,可以访问静态、const和类中重写的属性与方法
if (preg_match("/n|c/m",$_GET['p'], $matches))

源代码中还对n和c进行了过滤,但是发现没有对大小写进行检测,所以我们可以大写来绕过检测

构造payload:

/NsScTf.php/?p=NSS2::Ctf

没有回显内容,右键查看源码

得到flag:NSSCTF{061771ca-0a8e-443f-8e5d-9782103ab52e}


这篇文章就先写到这里,哪里不足的或者哪里不懂的欢迎指正

相关推荐
CHNE_TAO_EMSM1 小时前
Android studio 打开文件时自动下载源码
前端·javascript·android studio
一孤程2 小时前
Airtest自动化测试第五篇:小程序与Web测试——跨平台自动化全覆盖
前端·自动化测试·小程序·自动化·测试·airtest
IT_陈寒2 小时前
SpringBoot自动配置不是你以为的那样的智能
前端·人工智能·后端
yume_sibai3 小时前
大屏数据可视化 - 边框红绿呼吸灯实现详解
前端·信息可视化·typescript
Hyyy3 小时前
很多Desktop都在上的Computer Use是什么
前端·llm
慢功夫3 小时前
开篇:VS Code 为什么不是一个普通 React App
前端·visual studio code
你挚爱的强哥3 小时前
Vue2 实现 1.5s 十连击监听(连续点击若干次),封装通用可复用点击检测工具,不用 data!Vue 封装通用连击监听方法,支持自定义时长与点击次数
前端·javascript·vue.js
huashengzsj4 小时前
Shopify个人建站如何搭建独立站:从零开始的完整指南
前端·网络·人工智能
程序猿小泓4 小时前
从 Claude Code 学 Agent Harness:一个前端工程师的 AI Agent 学习笔记
前端·人工智能·学习
柒和远方5 小时前
从审计日志到可下载证据包:事务型 Outbox、租约 fencing 与保留水位
前端·后端·架构