HITCON 2017 babyfirst-revenge-v2(命令执行绕过五)
题目地址:https://github.com/otakekumi/CTF-Challenge/blob/master/PHP/chall_2/index.php发现和上一题大体相似,但是发现有一个不一样,长度从5变成了4,没办法利用>>二次写入了。但是我们如果就这样是没法儿按照字典序直接写入ls -t>g到文件的。 因为这一串无论怎么分割写入都无法遵从字
题目地址:https://github.com/otakekumi/CTF-Challenge/blob/master/PHP/chall_2/index.php
发现和上一题大体相似,但是发现有一个不一样,长度从5变成了4,没办法利用>>
二次写入了。
但是我们如果就这样是没法儿按照字典序直接写入ls -t>g
到文件的。 因为这一串无论怎么分割写入都无法遵从字典序或是字典序的逆序。
然后就不会了,想了n久还是不会,最后只有去看wp了。
首先介绍几个命令:
dir:虽然基本上和 ls 一样,但有两个好处,一是开头字母是d ,这使得它在 alphabetical 序中靠前,二是按列输出,不换行。
*
:相当于$(dir *)
,所以说如果文件名如果是命令的话就会返回执行的结果,之后的作为参数传入.rev:可以反转文件每一行的内容。
所以这样如果dir
在最前面的话,就可以把当前目录的文件都返回.
>dir
>sl
>g\>
>ht-
之后将*
的结果写入文件中,紧接着写入rev
文件.
>*>v
>rev
最后执行rev v>u
,这个命令需要通过*
命令的其它形式实现.
*v>u
这个命令就是$(dir *v)>u,dir *v返回的就是结尾为v的文件.
这个地方其实是一个很巧妙的方式,因为*v
恰好是可以匹配到rev
和v
的,如果文件名换成其它字母会因为排序错误或者没有作为rev
的参数而逆序失败.
之后的步骤就没有什么多大的区别了.
基本上就前面的写文件操作不一样。
exp执行,getshell!
开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!
更多推荐
所有评论(0)