13-24

rce1

打开提示就过滤了一

09、${IFS}也是可以的还有很多

pyload:127.0.0.1;cat<fllllaaag.php

GET-POST

打开给到源码

提示用GET请求一下那就传

又让post请求用POST请求传递一下jljcxy吧,令jljcxy=flag

得到flag,没什么考点会一个get和post请求就行

被黑掉的网站

打开还真给我唬住了

瞎点一处也没得到有用的信息,想扫一下目录看看

先去看看index,.php.bak是什么

就去看看另一个shell.php

明白了应该是根究index.php.bak.里的密码去试试

签到题

打开一个这段话

觉是cookie的东西改一下看看,给了一串字符

解码看到是一个目录

访问之后得到源代码

str_replace('../', '', $file) 尝试过滤目录遍历字符,但这种过滤方式并不完善,可以通过构造特殊的 payload 绕过。路径遍历 + PHP 伪协议 ,

构造paylpad读取flag: ?file=php://filter/convert.base64-encode/resource=....//....//....//....//....//....//flag

不知道退几层到根目录可以多写几个../回退

签到

打开又是一个提交题感觉像命令执行

看了一下这个提交按钮是灰色的

得到flag

session文件包含

打开看到是一个提交框

做这一题要先知道session是什么,是服务器保存用户数据的机制,和cookie有点相似之处但cookie是存在客户端上而session是存放在服务器上

一般session的文件路径保存在服务器的本地目录

系统

默认保存路径

session 文件命名

Linux(PHP-FPM/Apache)

/var/lib/php/sessions/

sess_会话ID

Windows

C:\Windows\Tmp\

sess_会话ID

随便起个名进去

发现两个弹窗都点一下

url变了

点第二个书单的时候发现

尝试构造pyload:读取源代码

解码一下

又了上传一个木马名

响应包里有我们需要的session的id值

利用session包含 目录在/tmp/sess_会话id值访问一下,弹出来,就包含成功

命令执行成功

两种一种是蚁剑连得到flag

有就是命令执行

pyload: cmd=system('cat /flaggggg');

在源代码中

Don't touch me

看看源代码

访问得到flag

不过这里可以把按钮修复好跟前面那个一样删除disabled="disabled"

其他的一样

robots

打开给一个机器人.txt的提示

标题的ronots不就是机器人的意思吗

访问得到flag

php very nice

打开看到源码,一个很简单的反序列化

就定义了一个魔术方法

得到flag文件

得到flag

ezupload

打开是一个选择文件进行上传,应该就是文件上传了

前端也没有什么东西,应该就是一个简单的文件上传写一个木马上传

写一个一句话木马

GIF89a 加个这个头

<?php eval($_POST['cmd']); ?>

上传不上去后应该有限制,那就修改后缀在bp里改

接下来用蚁剑连一下就行

成功连接

得到flag

cookie欺骗

标题都已经提示了,打开也已经告诉

那就修改cookie的user为admin

干正则

打开给出源代码

<?php
  error_reporting(0);   //报错不显示
if (empty($_GET['id'])) {  //判断传入的id是否为空
  show_source(__FILE__);    //高亮显示代码
  die();
} else {
  include 'flag.php';  //包含了一个flag文件
  $a = "www.baidu.com";
  $result = "";
  $id = $_GET['id'];
  @parse_str($id);
  echo $a[0];  //打印出来a的数组
  if ($a[0] == 'www.polarctf.com') {  //如果a[0]==www.polarctf.com
     $ip = $_GET['cmd'];         //进行获取cmd
    if (preg_match('/flag\.php/', $ip)) { //过滤flag
      die("don't show flag!!!");
    }
    $result .= shell_exec('ping -c 2 ' . $a[0] . $ip);
    if ($result) {
      echo "<pre>{$result}</pre>";
    }
  } else {
    exit('其实很简单!');
  }
}

知识点:parse_str(x,y)解析 URL‑query 字符串,把参数拆解成变量; 第二个参数传入数组,解析出来的数据存入数组里。

代码审计一下:

1.输入检查 :若 $_GET['id'] 为空,会显示当前文件源代码;否则,包含 flag.php 文件.

2.变量覆盖 :使用 @parse_str($id) 函数,该函数会将字符串解析为变量,可能存在变量覆盖漏洞。

3.条件判断 :要求 $a[0] 等于 www.polarctf.com ,并且 $_GET['cmd'] 不能包含 flag.php 。

4.命令执行 :使用 shell_exec 函数执行 ping -c 2 命令,存在命令注入风险。

思路缕清楚:

依靠 parse_str() 无第二个参数的变量覆盖漏洞,改写 $a使其满足 $a[0] == 'www.polarctf.com' 。

用 *绕过 preg_match 对 flag.php 的关键字拦截;操控 cmd 参数拼接进 shell_exec,实现命令注入读取 flag

pyload:?id=a[0]=www.polarctf.com&cmd=;cat fl*