[HCTF 2018]WarmUp
一条源码审计,访问source.php后可查看源码。查看源码可发现后端将传进来的file参数进行修改,然后查看是否属于白名单,但通过后require的却还是原值。所以要做的就是绕过验证。
分析源码
1 | $_page = mb_substr( |
显然,构造一个hint.php?*
类似这样的payload即可绕过。
查看php文档中对include函数有如下解释
如果定义了路径——不管是绝对路径(在 Windows 下以盘符或者 \ 开头,在 Unix/Linux 下以 / 开头)还是当前目录的相对路径(以 . 或者 .. 开头)——include_path 都会被完全忽略。例如一个文件以 ../ 开头,则解析器会在当前目录的父目录下寻找该文件。
即当file=hint.php?/*
时,它会将这个文件名当作文件路径,然后忽略其。至此,便可构造file=hint.php?/../../../../../ffffllllaaaagggg
拿到payload
[V&N2020 公开赛]HappyCTFd
打开之后发现是ctfd靶场,发现里面只有一个admin用户,猜测flag就在admin账号里。结合题目给的提示,需要用到邮箱,大概率就是修改admin的密码到自己的邮箱里。
上网找最近的ctfd漏洞,发现漏洞CVE-2020-7245
根据文章内容,注册一个admin
账号,然后找回密码即可.
这样我们就获得了admin权限,然后发现challenge中的附件,下载得到flag
[GXYCTF2019]禁止套娃
这题挺好玩的
打开之后什么都没有,对目录进行fuzz,发现存在.git
泄露,使用工具下载到源文件.
1 | if (!preg_match('/data:\/\/|filter:\/\/|php:\/\/|phar:\/\//i', $_GET['exp'])) { |
阅读源代码可以发现,题目要求payload由一组无参数的嵌套函数组成
到这就卡住了,无奈自己php功底太差了.
查看别人wp,payload?exp=var_dump(readfile(array_rand(array_flip(scandir(chr(ceil(sinh(cosh(tan(floor(sqrt(floor(phpversion())))))))))))));
payload利用phpversion
函数获得一个字符串,并通过一个数学函数将其转化成46
,也就是\
的ASCII码,然后获取到目录结构.array_flip
将数组的键值互换,然后用array_rand
随机读取一个键,利用readfile读取其内容.
多重复几次就能get flag.
有一说一,php的函数真丰富hhhh
[强网杯 2019]高明的黑客
下载源码,发现大量源代码,猜测webshell藏在这些文件中
编写代码访问这些文件,由于文件数量很大,所以使用多线程编程
不懂多线程的小伙伴,可以移步这篇博客Java多线程编程
1 | import re |
找到webshell后,就是基本操作ls /
,cat /flag