因为是倒着做的,导致一些payload可以通杀,不利于萌新学习。希望各位给出一些其他的方法。

<>37

同39

<>38

日志包含可过,在UA中写入一句话,然后直接包含日志文件/var/log/nginx/access.log
data伪协议可过,
payload:data:text/plain;base64,PD9waHAgc3lzdGVtKCdjYXQgZmxhZy5waHAnKTs/Pg==
按照出题人的想法肯定是让我们包含flag.php然后就会直接输出flag

<>39

限制了后缀,我们可以试试伪协议,因为不能带有flag,所以filter协议和php://input也不好用了。
最后试了试data协议,发现成功了。

payload c=data:text/plain,<?php system('cat f*')?>
这样就相当于执行了php语句<?php system('cat f*')?>.php
因为前面的php语句已经闭合了,所以后面的.php会被当成html页面直接显示在页面上,起不到什么作用。

<>40

具体做法可以参考下GXYCTF的禁止套娃

仔细看下题会发现过滤的不是英文括号,而是中文括号。
所以基本的命令都可以用,但是很难受的是引号没了,美元符号没了。
1、利用session
一开始我想的是利用session_id(),首先修改下cookie中的PHPSESSID 内容为ls

然后输入 c=session_start();system(session_id());发现可以执行。

接着直接改成 c=session_start();highlight_file(session_id());
然后PHPSESSID的值修改为flag.php就出问题了。
经过测试发现,受php版本影响 5.5
-7.1.9均可以执行,因为session_id规定为0-9,a-z,A-Z,-中的字符。在5.5以下及7.1以上均无法写入除此之外的内容。但是符合要求的字符还是可以的。
因此可以另寻他法了,如果有师傅用sessionid做出来,希望评论下面指正我上面的说法。
2、读文件+数组改造
先把payload写下 highlight_file(next(array_reverse(scandir(pos(localeconv())))));
需要用到的函数
localeconv():返回一包含本地数字及货币格式信息的数组。其中数组中的第一个为点号(.)
pos():返回数组中的当前元素的值。
array_reverse():数组逆序
scandir():获取目录下的文件
next(): 函数将内部指针指向数组中的下一个元素,并输出。
首先通过 pos(localeconv())得到点号,因为scandir(’.’)表示得到当前目录下的文件,所以
scandir(pos(localeconv()))就能得到flag.php了。具体内容如下

我们的目的很明确,得到倒数第二个元素。直接将数组逆序在将指针调整到下一个就好了。

技术
©2019-2020 Toolsou All rights reserved,
css中上下左右居中的几种实现方法[CISCN 2019 初赛]Love Mathc/c++语言实现登陆界面Unity3D 人称设置(第一人称视角、第三人称视角)Fastadmin框架自定义搜索操作流程2021最新Python自动化软件测试笔试题(含答案)黑客帝国装逼的代码雨mysql数据库设置字符集配置修改my.ini文件(windows)python之panda模块1Python学习笔记:基础+进阶10道练习题