A. Web Services

  • 什麼是Web Service?
 “Web Services是一種軟體元件,它透過Web 通訊協定及資料格式的開放式標準(例如 HTTP、XML 及 SOAP等)來為其他的應用程式提供服務。”from資策會
 
  • Web Services的基礎架構
Web Services的基礎包括:XML、WSDL、SOAP、UDDI,
其底層運作架構模式步驟如下:
以XML格式為基準將資料轉變為Web Services的資料,
利用WSDL描述將服務的對象做一個描述,
使另一端可以特過這一個描述,解譯所得的資料。
以SOAP通訊底層,進行傳送的動作,
向UDDI進行搜尋或是註冊動作。
WSDL、SOAP與UDDI皆是用XML方法來描述
  • 什麼是UDDI?
UUDI是 Universal Description, Discovery and Integration的縮寫
一種有關於Web Services的目錄註冊服務
以XML為基礎
其主要的目的為提供Web Services的提供者,透過UDDI告知其他人提供者有提供Web Services
(目的就是要快速告知服務使用者他可以利用的Web Services有哪些。)
 
 
  • 什麼是 SOAP?
SOAP是Simple Object Access Protocol的縮寫
交換資料的一種協議規範
傳輸/接收訊息的格式
獨立的平台
以XML為基礎
目前版本是1.2
 
 
  • 什麼是 WSDL?
WSDL是Web Services Description Language的縮寫
用來描述Web服務
由XML寫成
關於如何與Web服務通訊和使用的服務描述,也就是描述與目錄中列出的Web服務進行交互時需要綁定的協議和信息格式。
當前的WSDL版本是2.0,是W3C的推薦標準,並將被W3C組織批准為正式標準。
 
 
  • SOAP 請求的架構
  • Host: 127.0.0.1
  • User-Agent: Mozilla/5.0 (Windows NT 6.3; WOW64; rv:43.0) Gecko/20100101 Firefox/43.0
  • Accept: */*
  • Accept-Language: zh-TW,zh;q=0.8,en-US;q=0.5,en;q=0.3
  • Accept-Encoding: gzip, deflate
  • Content-Type: text/xml
  • X-Requested-With: XMLHttpRequest
  • Content-Length: 40
  • Cookie: JSESSIONID=12DC4AD7BD308065A672AE0906F8C324
  • Connection: keep-alive
  • SOAPAction:
  • <?xml version="1.0" encoding="UTF-8"?>
  •   <SOAP-ENV:Body>
  •     <id xsi:type="xsd:string">101</id>
  •     </ns1:getCreditCard>
  •   </SOAP-ENV:Body>
  • </SOAP-ENV:Envelope>

 

  • WebGoat Write-ups
 
1. Create a SOAP Request
 
  • Stage 1 : How many operations are defined in the WSDL ?
  • 首先觀察WebGoat WSDL File裡的內容
  • 我們會發現SoapRequest裡有4個operation
  • 分別是 getCreditCard  getLoginCount  getFirstName  getLastName

 
  • 由圖可知,Stage 1 的答案就出來了
  • How many operations are defined in the WSDL: 4
 
 
  • Stage 2 : what is the type of the (id) parameter in the "getFirstNameRequest" method ?
 
  • 我們一樣從WebGoat WSDL File去尋找答案
  • 參數是被設成int type

 
  • what is the type of the (id) parameter in the "getFirstNameRequest" method:  int
 
 
  • Stege 3 : Intercept the request and invoke any method by sending a valid SOAP request for a valid account.
 
  • 在這關我們必須攔截封包,修改其內容以取得我們需要的資訊

 
 
  • 首先,我們需要準備封包攔截工具,在此使用Burp Suite
  • 準備好之後按下Press to generate an HTTP request
  • Burp就會攔截到請求

 
 
  • 對其修改內容,發送請求,取得我們需要的資訊
 

 
  • 回傳結果

 
  • 同理,修改operation以取得其他資訊
 

 
 

 

 

 
 

 
2. WSDL Scanning
第二題 要找出使用者的信用卡資訊
如同第一題
先看一下這題附的WSDL file
會看到裡面有一個operation是getCreditCard
利用這個operation 送出SOAP request

 
就可以成功得到信用卡資料了
 
3. Web Service SQL injection
這一題要利用SQL injection去獲得多個用戶的信用卡資訊
也是先看一下WSDL file 裡面也有一個 getCreditCard 的operation
在輸入使用者ID的欄位 可以嘗試SQL injection
所以我們把封包偽造成

 
這樣就可以成功獲得多人的信用卡資訊了
 
4. Web Service SAX injection
這一題我們要利用網頁提供的Text Field去修改其他人的密碼
我們得知SOAP request的xml會長成這樣

 
我們要想辦法在[password]的位置中 想辦法讓他吃到兩組pattern
  • <wsns1:changePassword>
  •       <id xsi:type='xsd:int'>101</id>
  •       <password xsi:type='xsd:string'>
  •       pwd1</password><id xsi:type='xsd:int'>102</id><password xsi:type='xsd:string'>pwd2
  •       </password>
  • </wsns1:changePassword>
把password改成這樣
會同時把id:101的密碼改成pwd1
id:102的密碼改成pwd2了