Preface
前几天一直专注于SQL注入,因为明天要考试了,所以今天赶紧复习一下基础漏洞,先从相对简单的命令执行开始复习
我们下面的实验,是在windows上执行的,其实大家在Linux上实验更好。
Main Body
0x00
命令执行是通过代码层 直接调用系统执行命令
例如 调用cmd 执行ping 操作
在Web程序中,因为业务所需,需要调用系统命令执行某些
功能然后反馈其结果
一般做法是通过web前端传递参数到后台服务器上
执行,但由于开发人员没有对输入进行严格的过滤
,导致攻击者可以构造一些额外的"带有非法目的"
的命令,欺骗后台服务器执行,造成破坏。
命令执行的危害
因为命令执行可以调用系统代码
也就等于能直接通过命令 来操作服务器
如果当前用户的权限为root 则该漏洞可以导致攻击者在服务器上
执行任意命令。
例如反弹shell,一句话,内网渗透,重启服务器,关机
Low
0x01
根据题目要求,让我们输入一个IP地址,我们用本机地址127.0.0.1来尝试一下,页面会给我们返回什么
发现它是对我们所给的ip地址,进行了ping命令,所以我们就想到,可不可以在输入ip的框输入其他命令,我们去试试
我们输入127.0.0.1&&whoami
我们发现成功将我们想要执行的命令,页面成功进行了返回
下面说一下关于命令的一些符号
&&
这个就是我们经常说的and,cmd1&&cmd2
意思为当cmd1执行成功以后才执行cmd2,否则不执行cmd2
&
这个相当于命令分隔符,cmd1&cmd2
意思是不管cmd1执行成功与否,都执行cmd2
|
这个在Linux术语叫做管道符,cmd1|cmd2
意思是将cmd1的输出作为cmd2的输出,且只执行cmd2
所以Low级别的,我们可以用上述任何方法都实现命令执行,我也可以用命令执行写一句话木马,然后通过菜刀来进行连接,从而获得webshell
Medium
0x02
看源代码,这关只过滤了&&
和;
,并没有对我们的&
和|
进行过滤,所以我们可以用后两个来进行,也可以用双写来绕过,比如
我们可以构造这样一个命令连接符
&;&
,它只会过滤其中的分号,然后剩余的其他字符,又连接成为了&&,同样达到了目的
127.0.0.1&;&whoami
High
0x03
由源代码知,它对我们的这些符号进行了过滤
但是细心的我们发现,它对于管道符|
后面加一个空格进行过滤,却没有对一个空格后面一个管道符' |'
和单独的管道符'|'
进行过滤,所以我们以此为突破口,可以进行注入
127.0.0.1 |whoami
127.0.0.1|whoami
使用上面任意一个payload,我们都可以达到命令执行的目的。
Impossible
0x04
我们发现impossible难度对于我们的输入有了严格限制,且增加了新的token,所以我们无法进行命令注入。