学徒-OS命令注入-简单示例
# 实验室:OS命令注入,简单示例
# 题目
本实验室的 产品库存检查器 中存在操作系统命令注入 (opens new window)漏洞。
应用程序执行 包含用户提供的 productID 和 storeID 的 shell 命令,并在其响应中 返回该命令的原始输出。
要解决实验室问题,请执行whoami
命令以确定当前用户的名称。
- name: 实验室-学徒
desc: OS命令注入,简单示例 >>
avatar: https://fastly.statically.io/gh/clincat/blog-imgs@main/vuepress/static/imgs/docs/burpsuite-learn/public/lab-logo.png
link: https://portswigger.net/web-security/os-command-injection/lab-simple
bgColor: '#001350'
textColor: '#39d50c'
1
2
3
4
5
6
2
3
4
5
6
# 实操
根据题意,可得实验目标:
- 在 产品库存检查器 中,尝试利用 OS命令注入漏洞,并执行 whoami 命令。
点击 “Access the lab” 进入实验室。

实验室首页如下,可以看到很多的产品图像。
点击任意产品下方的 “View details” 以查看详细信息。

在产品详情页下方,可以看到一个 “Check stock” 的按钮,可以用来检查当前产品的库存情况。
启用浏览器代理,然后点击该按钮。

点击之后,成功查询了库存情况,当前产品剩余 43 件。

查看 BurpSuite 数据包情况,其中传递了两个参数 商品id(productId) 和 店铺id(storeId)。

尝试注入OS命令,应用程序正常返回了库存情况,说明未注入成功。
& echo test &
1

符号&
在 POST 传输中会造成一定影响,所以需要对其进行 URL 编码。
转到 “Decoder” 选项卡,对刚刚的 OS 命令进行编码操作。
# 编码前
& echo test &
# 编码后
%26%20%65%63%68%6f%20%74%65%73%74%20%26
1
2
3
4
5
2
3
4
5

将编码后的命令注入到productId
参数当中,返回了程序的绝对路径,以及错误信息 “未绑定$2变量” ,由此可以推断出目标命令格式:
# 命令运行格式
/home/peter-UVTHZp/stockreport.sh $productId $storeId
# 预期
/home/peter-UVTHZp/stockreport.sh 3 1
# 注入命令之后
/home/peter-UVTHZp/stockreport.sh 3& echo test & 1
1
2
3
4
5
6
7
8
2
3
4
5
6
7
8
第二个参数 storeId 被我们注入的命令给挤掉了,而程序执行必须要有两个参数,所以报错。

尝试删除第一个参数值,错误信息 “未绑定$1变量”,印证了上面的猜想。

改为注入第二个参数,应用程序返回了字符串 “test” ,注入的命令成功执行。

将echo
替换为whoami
,并进行 URL 编码。
# 编码前
& whoami &
# 编码后
%26%20%77%68%6f%61%6d%69%20%26
1
2
3
4
5
2
3
4
5

注入命令,whoami
成功执行,应用程序返回了当前用户的名称。

实验完成。

编辑 (opens new window)