month 1 for cnas writeup
签到 50
题目链接
解答
这是一个简单的题目,进入页面可以在相应头中找到flag。
02 100
题目链接
解答
这里的提示是 爬虫什么的,最讨厌了! 所以应该是在说robots.txt文件
另外如果不能想到这个,对于我这种脚本小子。拿到题就是用御剑扫起来。
这里我们可以看到一个图片 Disallow: /2333.png
下载之,这里应该是一个隐身之类的,这里就不用bindwalk跑图片了,直接丢进WinHex下,搜索flag
存在flag.pyc文件,
应该是一个解压包,把.png改成.zip,解压得到flag.pyc
pyc在线反编译,得到python代码
1 | #!/usr/bin/env python |
加个输出 print flag
跑一下,得到flag
ping 100
题目链接
解答
拿到题目应该可以看得出来这是一个命令执行的题目。
这里在提交框填什么都会重定向到05.php?ip=127.0.0.1
关键在重定向后的这个数据包,这里我们就可以命令执行了
这里不能直接利用cat flag.php
这里我们利用 \${IFS} 绕过 得到flag
原本以为是过滤了空格
后面甜哥告诉我是编码的问题 这里不需要利用 \${IFS} 绕过 也可以读取flag的
1 | cat%20flag.php |
06 100
题目链接
http://47.100.121.220:28006/06.php
解答
1 | <?php |
这里我们可以看出这是一个文件包含的题目,在服务器应该存在一个flag.php文件
试图访问/flag.php是存在的,状态为200。
这样我们就可以利用文件包含来读flag.php的代码了
这里直接包含是不行的,要利用php的伪协议 php://filter 来读取
php伪协议可以参考我的博客
直接用
1 | file=php://filter/read=convert.base64-encode/resource=./flag.php |
就可以得到base64加密的flag.php源码了,直接解密,得到flag
07 100
题目链接
解答
打开链接 直接得到源码
1 | <?php |
对源码进行分析,可以知道这是一个反序列化的题目,关键的判断在如下代码部分
1 | $o->flag = $flag; |
从代码的理解我们需要做到对象里的flag成员变量的值等于guess的成员变量的值
即
1 | $o->flag === $o->guess |
这里我们可以写一个1.php的序列化文件,使我们的类和对象符合题目中的条件,
再利用serialize()函数 序列化得到payload,再把payload赋值给k,由此得到flag
1 | <?php |
得到paylad
1 | O:1:"A":2:{s:4:"flag";N;s:5:"guess";R:2;} |
赋值给k,得到flag