欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

云網(wǎng)在線支付漏洞初探(圖)

 更新時(shí)間:2007年01月16日 00:00:00   投稿:mdxy-dxy  
這篇文章主要介紹了云網(wǎng)在線支付漏洞初探

理解這個(gè)漏洞呢,首先要了解一下在線支付的流程,這里引用一下云網(wǎng)官方的流程圖:



正常的在線支付過程呢,是從第一步到第六步!
而這個(gè)漏洞所出現(xiàn)的地方就是在第二步,然后繞過了第三步和第四步、第五步,而直接把返回信息提交給了支付成功返回頁面!
我們?cè)趧?dòng)畫里也只是看到了!它只有一個(gè)提交頁面和網(wǎng)站上的一個(gè)支付成功頁面,根本沒有通過網(wǎng)關(guān)進(jìn)行支付操作,所以錢也就沒進(jìn)入到銀行里,這里也就不存在什么影響銀行安全什么了,純粹是騙人的了!
為什么會(huì)這樣呢!問題出在云網(wǎng)提供給商戶的支付接口文件上,讓我們來看看這兩個(gè)云網(wǎng)提供給商戶的接口文件: 
〈%
’*******************************************
’文件名:SendOrder.asp
’主要功能:該示范程序主要完成將商戶訂單信息提交至云網(wǎng)支付網(wǎng)關(guān)的功能
’版本:v1.6(Build2005-05-24)
’描述:假設(shè)商戶的訂單系統(tǒng)都已完成,本頁面主要是幫助商戶按照云網(wǎng)支付網(wǎng)關(guān)要求的格式將訂單信息提交至云網(wǎng)支付@網(wǎng)的支付接口,進(jìn)行支付操作
’版權(quán)所有:北京云網(wǎng)無限網(wǎng)絡(luò)技術(shù)有限公司
’*******************************************

’---訂單信息---
  Dim c_mid      ’商戶編號(hào),在申請(qǐng)商戶成功后即可獲得,可以在申請(qǐng)商戶成功的郵件中獲取該編號(hào)
  Dim c_order      ’商戶網(wǎng)站生成的訂單號(hào),不能重復(fù)
  Dim c_name      ’商戶訂單中的收貨人姓名
  Dim c_address    ’商戶訂單中的收貨人地址
  Dim c_tel      ’商戶訂單中的收貨人電話
  Dim c_post      ’商戶訂單中的收貨人郵編
  Dim c_email      ’商戶訂單中的收貨人Email
  Dim c_orderamount  ’商戶訂單總金額
  Dim c_ymd      ’商戶訂單的產(chǎn)生日期,格式為"yyyymmdd",如20050102
  Dim c_moneytype    ’支付幣種,0為人民幣
  Dim c_retflag    ’商戶訂單支付成功后是否需要返回商戶指定的文件,0:不用返回 1:需要返回
  Dim c_paygate    ’如果在商戶網(wǎng)站選擇銀行則設(shè)置該值,具體值可參見《云網(wǎng)支付@網(wǎng)技術(shù)接口手冊(cè)》附錄一;如果來云網(wǎng)支付@網(wǎng)選擇銀行此項(xiàng)為空值。
  Dim c_returl    ’如果c_retflag為1時(shí),該值代表支付成功后返回的文件的路徑
  Dim c_memo1      ’商戶需要在支付結(jié)果通知中轉(zhuǎn)發(fā)的商戶參數(shù)一
  Dim c_memo2      ’商戶需要在支付結(jié)果通知中轉(zhuǎn)發(fā)的商戶參數(shù)二
  Dim c_signstr    ’商戶對(duì)訂單信息進(jìn)行MD5簽名后的字符串
  Dim c_pass      ’支付密鑰,請(qǐng)登錄商戶管理后臺(tái),在帳戶信息-〉基本信息-〉安全信息中的支付密鑰項(xiàng)
  Dim notifytype    ’0普通通知方式/1服務(wù)器通知方式,空值為普通通知方式
  Dim c_language    ’對(duì)啟用了國(guó)際卡支付時(shí),可使用該值定義消費(fèi)者在銀行支付時(shí)的頁面語種,值為:0銀行頁面顯示為中文/1銀行頁面顯示為英文

  c_mid    = "000103"
  c_order    = "12345"
  c_name    = "張三"
  c_address  = "北京市朝陽區(qū)XX"
  c_tel    = "010-12345678"
  c_post    = "100001"
  c_email    = "zhangsan@test.com"
  c_orderamount  = "0.01"
  c_ymd    = "20050102"
  c_moneytype  = "0"
  c_retflag  = "1"
  c_paygate  = ""
  c_returl  = "http://www.xxx.com/xxx/xxx.asp"  ’該地址為商戶接收云網(wǎng)支付結(jié)果通知的頁面,請(qǐng)?zhí)峤煌暾募?br />  c_memo1    = "ABCDE"
  c_memo2    = "12345"
  c_pass    = "Test"
  notifytype  = "0"
  c_language  = "0"

  srcStr = c_mid & c_order & c_orderamount & c_ymd & c_moneytype & c_retflag & 

c_returl & c_paygate & c_memo1 & c_memo2 & notifytype & c_language & c_pass
  ’說明:如果您想指定支付方式(c_paygate)的值時(shí),需要先讓用戶選擇支付方式,然后再根據(jù)用戶選擇的結(jié)果在這里進(jìn)行MD5加密,也就是說,此時(shí),本頁面應(yīng)該拆分為兩個(gè)頁面,分為兩個(gè)步驟完成。
  
’---對(duì)訂單信息進(jìn)行MD5加密

  c_signstr  = MD5(srcStr)

%〉
〈table width="85%" border="0" align="center" cellpadding="0" cellspacing="0"〉
 〈tr〉
 〈td align="center"〉 
 〈form name="payForm1" action="https://www.cncard.net/purchase/getorder.asp" method="POST"〉
      〈input type="hidden" name="c_mid" value="〈%=c_mid%〉"〉
      〈input type="hidden" name="c_order" value="〈%=c_order%〉"〉
      〈input type="hidden" name="c_name" value="〈%=c_name%〉"〉
      〈input type="hidden" name="c_address" value="〈%=c_address%〉"〉
      〈input type="hidden" name="c_tel" value="〈%=c_tel%〉"〉
      〈input type="hidden" name="c_post" value="〈%=c_post%〉"〉
      〈input type="hidden" name="c_email" value="〈%=c_email%〉"〉
      〈input type="hidden" name="c_orderamount" value="〈%=c_orderamount%〉"〉
      〈input type="hidden" name="c_ymd" value="〈%=c_ymd%〉"〉
      〈input type="hidden" name="c_moneytype" value="〈%=c_moneytype%〉"〉
      〈input type="hidden" name="c_retflag" value="〈%=c_retflag%〉"〉
      〈input type="hidden" name="c_paygate" value="〈%=c_paygate%〉"〉
      〈input type="hidden" name="c_returl" value="〈%=c_returl%〉"〉
      〈input type="hidden" name="c_memo1" value="〈%=c_memo1%〉"〉
      〈input type="hidden" name="c_memo2" value="〈%=c_memo2%〉"〉
      〈input type="hidden" name="c_language" value="〈%=c_language%〉"〉
      〈input type="hidden" name="notifytype" value="〈%=notifytype%〉"〉
      〈input type="hidden" name="c_signstr" value="〈%=c_signstr%〉"〉
      〈input type="submit" name="submit" value="點(diǎn)擊 -〉 云網(wǎng)支付@網(wǎng)"〉
 〈/form〉
  〈/td〉
 〈/tr〉
〈/table〉

這個(gè)是向云網(wǎng)網(wǎng)關(guān)提交訂單信息的頁面中的一些關(guān)鍵的代碼!注意下他這個(gè)變量:c_signstr,
以及他的生成方式,是訂單的幾個(gè)信息連接后再md5加密后生成驗(yàn)證簽名的!而這個(gè)簽名是一個(gè)關(guān)鍵
但是從下面的提交表單可以看到,他們都是以明文的方式來提交的!當(dāng)然要用明文了,如果加密的話,在后面就該出問題了!

下面我們來看訂單成功后獲取銀行返回的成功信息的頁面代碼: 
〈%
’*******************************************
’文件名:GetPayNotIFy.asp
’主要功能:該示范程序主要完成接收云網(wǎng)支付網(wǎng)關(guān)支付通知信息,驗(yàn)證信息有效性,判斷支付結(jié)果功能
’版本:v1.6(Build2005-05-24)
’說明:
’  1.本頁面請(qǐng)不要使用諸如response.redirect等頁面轉(zhuǎn)向的語句
’  2.請(qǐng)直接將訂單處理結(jié)果以HTML代碼的形式輸出在本頁,云網(wǎng)支付網(wǎng)關(guān)會(huì)采用技術(shù)手段獲取您的輸出結(jié)果
’  3.本頁面如果含有圖片、樣式或鏈接,請(qǐng)將路徑或地址包括域名,
’版權(quán)所有:北京云網(wǎng)無限網(wǎng)絡(luò)技術(shù)有限公司
’*******************************************

’---獲取云網(wǎng)支付網(wǎng)關(guān)向商戶發(fā)送的支付通知信息(以下簡(jiǎn)稱為通知信息)
c_mid      = request("c_mid")      ’商戶編號(hào),在申請(qǐng)商戶成功后即可獲得,可以在申請(qǐng)商戶成功的郵件中獲取該編號(hào)
c_order      = request("c_order")    ’商戶提供的訂單號(hào)
c_orderamount  = request("c_orderamount")  ’商戶提供的訂單總金額,以元為單位,小數(shù)點(diǎn)后保留兩位,如:13.05
c_ymd      = request("c_ymd")      ’商戶傳輸過來的訂單產(chǎn)生日期,格式為"yyyymmdd",如20050102
c_transnum    = request("c_transnum")    ’云網(wǎng)支付網(wǎng)關(guān)提供的該筆訂單的交易流水號(hào),供日后查詢、核對(duì)使用;
c_succmark    = request("c_succmark")    ’交易成功標(biāo)志,Y-成功 N-失敗      
c_moneytype    = request("c_moneytype")  ’支付幣種,0為人民幣
c_cause      = request("c_cause")    ’如果訂單支付失敗,則該值代表失敗原因    
c_memo1      = request("c_memo1")    ’商戶提供的需要在支付結(jié)果通知中轉(zhuǎn)發(fā)的商戶參數(shù)一
c_memo2      = request("c_memo2")    ’商戶提供的需要在支付結(jié)果通知中轉(zhuǎn)發(fā)的商戶參數(shù)二
c_signstr    = request("c_signstr")    ’云網(wǎng)支付網(wǎng)關(guān)對(duì)已上信息進(jìn)行MD5加密后的字符串

’---校驗(yàn)信息完整性---
IF c_mid="" or c_order="" or c_orderamount="" or c_ymd="" or c_moneytype="" or

 c_transnum="" or c_succmark="" or c_signstr="" THEN
response.write "支付信息有誤"
response.end
END IF

  ’---將獲得的通知信息拼成字符串,作為準(zhǔn)備進(jìn)行MD5加密的源串,需要注意的是,在拼串時(shí),先后順序不能改變
    Dim c_pass  ’商戶的支付密鑰,登錄商戶管理后臺(tái)(https://www.cncard.net/admin/),在管理首頁可找到該值
    c_pass = "Test"
    
    srcStr = c_mid & c_order & c_orderamount & c_ymd & c_transnum & c_succmark 

& c_moneytype & c_memo1 & c_memo2 & c_pass

  ’---對(duì)支付通知信息進(jìn)行MD5加密
    r_signstr  = MD5(srcStr)

  ’---校驗(yàn)商戶網(wǎng)站對(duì)通知信息的MD5加密的結(jié)果和云網(wǎng)支付網(wǎng)關(guān)提供的MD5加密結(jié)果是否一致
    IF r_signstr〈〉c_signstr THEN
      response.write "簽名驗(yàn)證失敗"
      response.end
    END IF

  ’---校驗(yàn)商戶編號(hào)
    Dim MerchantID  ’商戶自己的編號(hào)
    IF MerchantID〈〉c_mid THEN
      response.write "提交的商戶編號(hào)有誤"
      response.end
    END IF

  ’---校驗(yàn)商戶訂單系統(tǒng)中是否有通知信息返回的訂單信息
    Dim conn  ’商戶系統(tǒng)的數(shù)據(jù)鏈接
    sql="select top 1 數(shù)據(jù)列 from 商戶的訂單表 where 商戶訂單號(hào)="& c_order
    set rs=server.CreateObject("adodb.recordset")
    rs.open sql,conn
    IF rs.eof THEN
      response.write "未找到該訂單信息"
      response.end
    END IF

  ’---校驗(yàn)商戶訂單系統(tǒng)中記錄的訂單金額和云網(wǎng)支付網(wǎng)關(guān)通知信息中的金額是否一致
    Dim r_orderamount  ’商戶自己系統(tǒng)記錄的訂單金額
    r_orderamount=rs("訂單金額")  ’商戶從自己訂單系統(tǒng)獲取該值
    IF ccur(r_orderamount)〈〉ccur(c_orderamount) THEN
      response.write "支付金額有誤"
      response.end
    END IF

  ’---校驗(yàn)商戶訂單系統(tǒng)中記錄的訂單生成日期和云網(wǎng)支付網(wǎng)關(guān)通知信息中的訂單生成日期是否一致
    Dim r_ymd  ’商戶自己系統(tǒng)記錄的訂單生成日期
    r_ymd=rs("訂單生成日期")  ’商戶從自己訂單系統(tǒng)獲取該值
    IF r_ymd〈〉c_ymd THEN
      response.write "訂單時(shí)間有誤"
      response.end
    END IF

  ’---校驗(yàn)商戶系統(tǒng)中記錄的需要在支付結(jié)果通知中轉(zhuǎn)發(fā)的參數(shù)和云網(wǎng)支付網(wǎng)關(guān)通知信息中提供的參數(shù)是否一致
    Dim r_memo1  ’商戶自己系統(tǒng)記錄的需要在支付結(jié)果通知中轉(zhuǎn)發(fā)的參數(shù)一
    r_memo1 = rs("轉(zhuǎn)發(fā)參數(shù)一")
    Dim r_memo2  ’商戶自己系統(tǒng)記錄的需要在支付結(jié)果通知中轉(zhuǎn)發(fā)的參二
    r_memo2 = rs("轉(zhuǎn)發(fā)參數(shù)二")
    IF r_memo1〈〉c_memo1 or r_memo2〈〉c_memo2 THEN
      response.write "參數(shù)提交有誤"
      response.end
    END IF

  ’---校驗(yàn)返回的支付結(jié)果的格式是否正確
    IF c_succmark〈〉"Y" and c_succmark〈〉"N" THEN
      response.write "參數(shù)提交有誤"
      response.end
    END IF

  ’---根據(jù)返回的支付結(jié)果,商戶進(jìn)行自己的發(fā)貨等操作
    IF c_succmark="Y" THEN
      ’根據(jù)商戶自己商務(wù)規(guī)則,進(jìn)行發(fā)貨等系列操作
    END IF
%〉

我們可以看到他的驗(yàn)證簽名的方式,是將銀行反饋過來的信息鏈接后和在提交頁面提交的信息,
先看簽名是如何驗(yàn)證的: 
  ’---將獲得的通知信息拼成字符串,作為準(zhǔn)備進(jìn)行MD5加密的源串,需要注意的是,在拼串時(shí),先后順序不能改變
    Dim c_pass  ’商戶的支付密鑰,登錄商戶管理后臺(tái)(https://www.cncard.net/admin/),在管理首頁可找到該值
    c_pass = "Test"
    
    srcStr = c_mid & c_order & c_orderamount & c_ymd & c_transnum 

& c_succmark & c_moneytype & c_memo1 & c_memo2 & c_pass

  ’---對(duì)支付通知信息進(jìn)行MD5加密
    r_signstr  = MD5(srcStr)

  ’---校驗(yàn)商戶網(wǎng)站對(duì)通知信息的MD5加密的結(jié)果和云網(wǎng)支付網(wǎng)關(guān)提供的MD5加密結(jié)果是否一致
    IF r_signstr〈〉c_signstr THEN
      response.write "簽名驗(yàn)證失敗"
      response.end
    END IF
是通過提交的這些信息加密后來驗(yàn)證的,而商戶的支付密鑰,我們可以在提交頁面獲取到!而這里他程序需要添加上去的!
我們就不需要了,我們需要的只是讓r_signstr等于c_signstr 就可以搞定它了!欺騙方法我就不說了!
至于其他的欺騙,不存在加密了,全部明文的了!很容易就過去了! 
ps:這個(gè)作者當(dāng)時(shí)還發(fā)了一個(gè)別的也是在線支付漏洞的動(dòng)畫,我看都沒有看就刪了.你信這個(gè)動(dòng)畫嗎?反正我是不信!

相關(guān)文章

最新評(píng)論