NSS题目练习8

SWPUCTF 2022 新生赛numgame

打开发现不能直接更改数值,会变成负数,快捷键不能用,输入view-source查看源代码,发现js文件

点开后发现最下面有个酷似flag的东西

提交后是错的,看着像是base64,解码后得到另外一个文件

访问后得到一个新的界面,有个正则匹配,过滤了n,c,\m

补充

call_user_func(): 把第一个参数作为回调函数(作为参数传递给另一个函数,并在被调用函数执行完毕后被调用)调用

双冒号运算符:在PHP中双冒号(::)操作符是一种范围解析操作符,又作用域限定操作符。它是对类中的方法的静态引用,可以访问静态、const和类中重写的属性与方法

http://t.csdnimg.cn/8k5pe

构造payload并访问,发现提示

更改后再次访问,查看源代码得到flag

SWPUCTF 2022 新生赛funny_php

第一个if既要小于3又要大于999999999,可以用数组绕过或科学计数法绕过

看到输出:D说明成功绕过

第二个if是一个正则匹配,NSSCTF被替换

出现wow说明成功绕过

接下来是一个md5弱比较

数组绕过md5,发现后面有字符串检测,应该使用科学计数法绕过

得到flag

NSSRound#8 BasicMyDoor

进来是一个空白界面,看到file想到伪协议

php://filter用于读取源码

查看后得到一串base64编码

解码后得到php源代码,需要传参N_S.S进行命令执行

补充:

PHP需要将所有参数转换为有效的变量名,因此在解析查询字符串时,它会做两件事:

1.删除空白符

2.将某些字符转换为下划线(包括空格)

利用PHP的字符串解析特性Bypass - FreeBuf网络安全行业门户

所以这里N_S.S就会被解析为N_S_S,接下来就可以访问phpinfo界面(查看php各种信息)

得到flag

SWPUCTF 2022 新生赛funny_web

先随便提交一个,发现提示,得知用户名是NSS

再次出现提示,是招新群某位的QQ号,这里不知道,就去搜索了一下别人的wp,得到密码2122693401

得到php代码

大致意思是关闭报错,包含文件flag.php,get传参传入num,然后是一个弱比较,后面还有一个inval()函数需要截断即可输出flag

补充:

include():找不到被包含的文件只会产生警告,脚本继续执行,并且include()函数并不在意被包含的文件是什么类型,只要有php代码,都会被解析出来

inval():获取变量整数值,用于强制类型转换,传入的参数不是整数就会返回1,当某个字符被过滤时,可以通过8进制或16进制绕过

http://t.csdnimg.cn/bdoPf

得到flag

BJDCTF 2020ZJCTF,不过如此

大致意思是关闭报错,get传入两个参数,text内容为I have a dream,可以使用data伪协议提交数据,后面提示读取next.php文件,可以用file伪协议读取

补充:

file_get_contents()函数用于读取文件中的内容,并将其作为字符串返回

text/plain,则以文本类型展示

PHP函数指南- file_get_contents()-php教程-PHP中文网

构造payload:?text=data://text/plain,I have a dream&file=php://filter/read=convert.base64-encode/resource=next.php

得到一串base64编码

解码后获得另外一个php代码

大致意思是使用GET方式传入一个值,该值会传入complex函数,然后complex函数中return语句返回的值用preg_replace进行了处理,需要绕过preg_replace

补充:

在PHP中,使用$_SESSION\[\]可以存储特定用户的Session信息。并且每个用户的Session信息都是不同的

http://t.csdnimg.cn/dVFCh

preg_replace的第一个re参数就是我们输入的匹配模式 ,我们使用GET传参来输入

preg_replace的第二个参数用于替换的字符串, \\1表示匹配出第一个分组的正则(即$re,也就是我们使用GET传入的),把输入的值转为小写,然后用于替换

preg_replace的第一个参数是要进行所有的字符串,这个str也是我们可以使用GET传参控制的

preg_replace 使用了 /e 模式,导致了代码可以被执行,/e 修正符使 preg_replace() 将 replacement 参数当作 PHP 代码

深入研究preg_replace与代码执行 - 先知社区

r e 和 re和 re和str就是get的键值对,由于是eval(strtolower("\\1")) 本身strtolower是需要接受一个string,而这里转义数字,表示正则表达式 \1 实际上指定的是第一个子匹配项,也就是一旦匹配到,会进入strtolower() 先执行匹配到的内容(替换"\1"的位置),然后再变成小写,这里就可以命令执行,但是替换进来的不是字符串么?($str值) 是,如果普通地传进来确实是字符串,但是如果用可变变量就不一定了。因为这里是双引号,双引号能够对其包裹地内容进行转义等等操作,之所以是\S*,是因为可以快速匹配

最后传入构造好的payload

next.php?\S*=${getFlag()}&cmd=system('cat /flag');

得到flag

相关推荐
LinXunFeng2 天前
Obsidian - 使用 Share Note 分享笔记并自部署
前端·笔记·github
通信小呆呆6 天前
当算法有了“五感”:多模态数据融合如何向人体感官协同学习?
人工智能·学习·算法·机器学习·机器人
H__Rick6 天前
自动对焦学习-3
人工智能·学习·计算机视觉
Daisy Lee6 天前
量化学习-第1章-什么是量化金融
学习·金融·datawhale
Alsn866 天前
等待学习-学习目录:Docker 容器安全攻防
学习·安全·docker
YM52e6 天前
买菜计算器小应用 - HarmonyOS ArkUI 开发实战-PC版本
学习·华为·harmonyos·鸿蒙·鸿蒙系统
小雨下雨的雨6 天前
HarmonyOS ArkUI训练营入门-组件掌握系列-Animation 动画效果实现-PC版本
学习·华为·harmonyos·鸿蒙
闪闪发亮的小星星6 天前
高斯光以及高斯光公式解释
笔记
cqbzcsq6 天前
CellFlow虚拟细胞论文阅读
论文阅读·人工智能·笔记·学习·生物信息
YangYang9YangYan6 天前
2026初入职场学习数据分析的价值
学习·数据挖掘·数据分析