1.14寒假作业
web:nssctf mydoor
打开环境,只有一片空白,源代码也什么都没有,题目的分类是涉及到php伪协议,之前写过一题也是为协议,当时是用base64的方式将源码给加密显现出来了,看一下当时得到命令试试看,是可以的
php://filter/read=处理方式(base64编码,rot13等等)/resource=要读取的文件;这是命令的解释。具体可以看https://www.jb51.net/article/267293.htm,解码看看
isset($_GET['N_S.S'])
:检查 GET
请求中是否存在名为 N_S.S
的参数。
eval($_GET['N_S.S'])
:如果存在,使用 eval
函数对该参数的值进行求值。
if(!isset($_GET['file']))
:检查 GET
请求中是否不存在名为 file
的参数。
header('Location:/index.php?file=');
:如果不存在,则使用 header
函数将用户重定向到 /index.php?file=
页面。
$file = $_GET['file'];
:如果 file
参数存在,则将其值存储在 $file
变量中。
preg_match('/\.\.|la|data|input|glob|global|var|dict|gopher|file|http|phar|localhost|\?|\*|\~|zip|7z|compress/is', $file)
:使用正则表达式检查 $file
的值是否包含某些敏感字符或模式。
include $file;
:如果 $file
的值不匹配上述正则表达式,则使用 include
函数将该文件包含进来。
对于一系列函数的禁用则主要是对为协议的命令的禁用,照我搜索到的资料,只有这个没被禁用
根据解码出来的函数,接下来输入的指令要包含N_S.S,且是要能抓取或者显现flag的。
去看了别人的wp才知道,要用这个N[S.S=phpinfo();
“/index.php” 是服务器上的文件路径,“?N [S.S=phpinfo ();” 是查询参数。为什么要把_换成[呢?php中提交的GET参数名称不能具有_ 必须使用[ 进行替换。phpinfo ()是php里的一个函数,表示输出。显示出来用CTRL+h搜索就可以了
misc:polar靶场爆破鬼才
打开是文件,水印和分析都看过了,010分析看文件尾部有类似zip格式的字符得知需要分离一下
用foremost分离一下,得到zip文件,可是还要密码,爆破一下
得到密码解压即可
pwn:polar靶场play
pe查壳,ida打开
看伪代码,读取我们输入的内容100个字节给buf
shift+F12没找到bin/sh等后门函数,估计是buf变量存在溢出,因为v1字节大小只有48,追踪buf,看内存地址
用一下别人的脚本并理解一下
比以往的脚本多了 shellcode = asm(shellcraft.sh())
:使用 shellcraft.sh()
生成一个用于获取 shell 的汇编代码,然后通过 asm
函数将其汇编成机器码。p.recvuntil("I think you must enjoy playing.\n")
:接收服务器发送的数据,直到遇到指定的字符串 "I think you must enjoy playing.\n"
。p.sendline(shellcode)
:将生成的 shellcode 发送到服务器。p.recvuntil('Name your favorite game?\n')
:再次接收数据,直到遇到指定字符串。
asm
函数的作用是将汇编语言代码转换为机器码(字节序列);recvuntil:持续接收数据,直到接收到指定的字符串(或字节序列)为止。
crypto:polar靶场夏多的梦
这题涉及到一个叫夏多密码的图形密码
每行的首个图像对应表中的1、2、3、4,他们分别代表将后面的图像旋转几度,1则表示0度,以此类推,旋转之后再对应的表中寻找即可,解密可得明文为ILOVECTF,md5加密。
reserve:polar靶场sign up
查壳,ida打开
找关键函数就是里面的check函数
这个代码比较好理解,第一个循环对0-6位,其实就是前七位的我们输入的数字加一并检查与key_num是否相等,不相等的话就令v4=0,第二个循环则是我们输入的前四位加2再与key_password对比,不相等则v3=0,若v4和v3都等于0就输出上面,估计就是验证不通过之类的
直接追踪就可以了
可以看到两个对应的是什么,再进行上面的逆运算可得账号:081057009,密码:pmmr
按照题目给的方式md5加密即可