Tải bản đầy đủ (.docx) (47 trang)

THỰC HÀNH (A5) SECURITY MISCONFIGURATION & (A10) SERVER-SIDE REQUEST FORGERY

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (14.72 MB, 47 trang )

<span class="text_page_counter">Trang 1</span><div class="page_container" data-page="1">

<b>TRƯỜNG ĐẠI HỌC SƯ PHẠM KỸ THUẬT TP. HỒ CHÍ MINHKHOA CƠNG NGHỆ THƠNG TIN</b>

<b>---oOo---BÀI TẬP THỰC HÀNH MÔN HỌCBẢO MẬT WEB</b>

<b>Bài: THỰC HÀNH (A5) SECURITY MISCONFIGURATION& (A10) SERVER-SIDE REQUEST FORGERY</b>

<b>GVHD: ThS. Lê Thị Minh ChâuMã môn học: WESE331479_23_2_02Sinh viên thực hiện: Bùi Thị Xuân Lương</b>

<b>MSSV: 21142316</b>

<i>Thành phố Hồ Chí Minh, tháng 03, năm 2024</i>

</div><span class="text_page_counter">Trang 2</span><div class="page_container" data-page="2">

<small>1</small> MỤC LỤC

A. (A5) Security Misconfiguration...2

a) XXE...2

b) Modern REST framework...7

c) Blind XXE assignment...11

B. (A10) Server-side Request Forgery...21

a) Cross-Site Request Forgeries...21

i. Basic Get CSRF Exercise...21

ii. Post a review on someone else’s behalf...26

iii. CSRF and content-type...31

iv. Login CSRF attack...36

b) Server-Side Request Forgery...41

i. Find and modify the request to display Jerry...41

ii. Change the request...43

</div><span class="text_page_counter">Trang 4</span><div class="page_container" data-page="4">

<small>3</small> ZAP sẽ bắt request được gửi tới.

Bước 3: Mở Manual Request Editor để chỉnh sửa và kiểm tra response trước khi gửi request đi.

</div><span class="text_page_counter">Trang 5</span><div class="page_container" data-page="5">

<b>Bước 4: Thực hiện sửa nội dung của request thành: <?xml version="1.0" ?><!</b>

<b>"file:///C:/"> ]><comment><text>&xxe;</text></comment>. Sau đó chọn</b>

nút “Send” để kiểm tra response của server.

</div><span class="text_page_counter">Trang 6</span><div class="page_container" data-page="6">

Response được trả về có giá trị của thuộc tính “lessonCompleted” là true.

Bước 5: Thực hiện nhập đoạn mã vừa được kiểm tra vào trong nội dung của request rồi thực hiện gửi đi.

</div><span class="text_page_counter">Trang 7</span><div class="page_container" data-page="7">

<small>6</small> Bài thực hành đã được hoàn thành.

</div><span class="text_page_counter">Trang 9</span><div class="page_container" data-page="9">

Bước 2: Mở Manual Request Editor để chỉnh sửa và kiểm tra response trước khi gửi request đi.

<b>Bước 4: Thực hiện sửa nội dung của request thành: <?xml version="1.0" ?><!</b>

<b>"file:///C:/"> ]><comment><text>&xxe;</text></comment>. Đồng thời</b>

chỉnh sửa Content-Type trên request header từ “application/json” thành “application/xml”. Sau đó chọn nút “Send” để kiểm tra response của server.

Response được trả về có giá trị của thuộc tính “lessonCompleted” là true.

</div><span class="text_page_counter">Trang 10</span><div class="page_container" data-page="10">

Bước 4: Thực hiện nhập đoạn mã vừa được kiểm tra vào trong nội dung của request rồi thực hiện gửi đi.

Bài thực hành đã được hoàn thành.

</div><span class="text_page_counter">Trang 11</span><div class="page_container" data-page="11">

<small>10</small>

</div><span class="text_page_counter">Trang 12</span><div class="page_container" data-page="12">

<i><b>c) Blind XXE assignment</b></i>

Bước 1: Tạo file attack.dtd với nội dung như dưới đây.

Bước 2: Đăng nhập vào WebWolf.

</div><span class="text_page_counter">Trang 13</span><div class="page_container" data-page="13">

<small>12</small> Bước 3: Tải file attack.dtd lên trang WebWolf.

</div><span class="text_page_counter">Trang 14</span><div class="page_container" data-page="14">

Bước 4: Mở file attack.dtd có chứa mã độc trong một tab mới để lấy đường dẫn.

</div><span class="text_page_counter">Trang 15</span><div class="page_container" data-page="15">

<small>14</small> Bước 5: Chọn “Submit”.

ZAP sẽ bắt request vừa được gửi đi.

</div><span class="text_page_counter">Trang 16</span><div class="page_container" data-page="16">

Bước 6: Mở Manual Request Editor để chỉnh sửa và kiểm tra response trước khi gửi request đi.

</div><span class="text_page_counter">Trang 18</span><div class="page_container" data-page="18">

Response được trả về có giá trị của thuộc tính “lessonCompleted” là false. Nguyên nhân là vì ta đoạn nội dung ta nhập vào chưa phải là output cuối cùng của bài thực hành, mà chỉ giúp lấy ra được kết quả.

</div><span class="text_page_counter">Trang 19</span><div class="page_container" data-page="19">

Bước 8: Thực hiện nhập đoạn mã vừa được kiểm tra vào trong nội dung của request rồi thực hiện gửi đi.

Bên WebGoat sẽ xuất hiện một comment mới.

</div><span class="text_page_counter">Trang 20</span><div class="page_container" data-page="20">

Bước 9: Nhập đoạn văn bản “WebGoat 8.0 rocks... (kVTKslATxB)” vào ô comment và chọn “Submit”.

Bài thực hành đã hoàn thành.

</div><span class="text_page_counter">Trang 21</span><div class="page_container" data-page="21">

<small>20</small>

</div><span class="text_page_counter">Trang 22</span><div class="page_container" data-page="22">

<b>B. (A10) Server-side Request Forgery</b>

<i><b>a) Cross-Site Request Forgeries</b></i>

<i>i. Basic Get CSRF Exercise</i>

Bước 1: Tạo một đoạn mã HTML như dưới đây.

Bước 2: Tải file này lên WebWolf.

</div><span class="text_page_counter">Trang 23</span><div class="page_container" data-page="23">

<small>22</small> Bước 3: Thực hiện mở file lên.

</div><span class="text_page_counter">Trang 24</span><div class="page_container" data-page="24">

Bước 4: Chọn “Submit Query” và đăng nhập lại vào WebGoat.

Bước 5: Quay lại trang trước và chọn “Submit Query”.

</div><span class="text_page_counter">Trang 25</span><div class="page_container" data-page="25">

<small>24</small> Ta sẽ lấy được giá trị của flag.

Bước 6: Nhập flag vào WebGoat và chọn “Submit”.

</div><span class="text_page_counter">Trang 26</span><div class="page_container" data-page="26">

<small>25</small>

</div><span class="text_page_counter">Trang 27</span><div class="page_container" data-page="27">

<i>ii. Post a review on someone else’s behalf</i>

webgoat/lessons/csrf/ForgedReviews.java để tham khảo source code mà WebGoat cung cấp cho bài thực hành này. Tại đây ta thấy được một đoạn mã là “weakAntiCSRF”. Ta sẽ sử dụng đoạn mã này để thực hiện CSRF.

</div><span class="text_page_counter">Trang 28</span><div class="page_container" data-page="28">

Bước 2: Tạo một đoạn mã HTML như dưới đây. Đoạn mã này sẽ tạo một trang giả mạo trang review. Ta sẽ đưa giá trị “weakAntiCSRF” vào tag input với tên tag là “validateReq”.

Bước 3: Đăng nhập vào WebWolf và vào trang Files để tải file HTML ở trên lên.

</div><span class="text_page_counter">Trang 29</span><div class="page_container" data-page="29">

Bước 4: Sau khi tải file lên thì ta sẽ mở file ở trong một tab mới.

</div><span class="text_page_counter">Trang 31</span><div class="page_container" data-page="31">

<small>30</small>

</div><span class="text_page_counter">Trang 32</span><div class="page_container" data-page="32">

<i>iii. CSRF and content-type</i>

Bước 1: Ta sẽ chuẩn bị một đoạn mã HTML như dưới đây.

Bước 2: Đăng nhập vào WebWolf và vào trang Files để tiến hành tải tệp lên. Ta sẽ đưa tệp .htmll vừa được tạo ở trên lên WebWolf.

</div><span class="text_page_counter">Trang 33</span><div class="page_container" data-page="33">

<small>32</small>

</div><span class="text_page_counter">Trang 34</span><div class="page_container" data-page="34">

Bước 3: Sau khi tải file lên, ta sẽ mở file ở một tab mới.

Bước 4: Ta quay lại WebGoat và nhập các thông tin vào form và nhấp “Send Message”. Lúc này, ta nhận thấy rằng mình khơng thể gửi form.

</div><span class="text_page_counter">Trang 37</span><div class="page_container" data-page="37">

<i>iv. Login CSRF attack</i>

Bước 1: Ta sẽ tiếng hành tạo một tài khoản mới với tên là “csrf-” + tên username chính. Ví dụ: username hiện tại trong bài này là “xuanluong” => tạo tài khoản mới với username là “csrf-xuanluong”.

</div><span class="text_page_counter">Trang 38</span><div class="page_container" data-page="38">

Bước 2: Chuẩn bị một đoạn mã HTML như dưới đây. Username và password được lấy giá trị từ tài khoản ta vừa tạo.

Bước 3: Ta mở tệp .html này tại một tab mới. Ta sẽ thấy được giao diện như hình dưới đây.

</div><span class="text_page_counter">Trang 39</span><div class="page_container" data-page="39">

Bước 4: Ta nhấn vào “Sign in”. Sau đó ta sẽ thấy rằng mình đã được đăng nhập vào WebGoat bằng tài khoản mà ta vừa mới tạo.

Bước 5: Ta quay trở lại trang WebGoat đang được đăng nhập bằng tài khoản chính. Sau đó, ta nhấn vào nút “Solved!”.

</div><span class="text_page_counter">Trang 40</span><div class="page_container" data-page="40">

<small>39</small> Bài thực hành đã được hoàn thành.

</div><span class="text_page_counter">Trang 41</span><div class="page_container" data-page="41">

<small>40</small>

</div><span class="text_page_counter">Trang 42</span><div class="page_container" data-page="42">

<i><b>b) Server-Side Request Forgery</b></i>

<i>i. Find and modify the request to display Jerry</i>

Bước 1: Ta chuột phải vào nút “Steal the Cheese” và mở Inspect cảu nút ra.

Bước 2: Ta sẽ tìm phần tử có chứa đường dẫn đến file “tom.png”.

</div><span class="text_page_counter">Trang 43</span><div class="page_container" data-page="43">

Bước 3: Ta sẽ thay tên file từ “tom” sang “jerry” để hiển thị hình ảnh của chuột Jerry.

Bước 4: Ta nhấn nút “Steal the Cheese”. Lúc này, ta sẽ thấy hình ảnh của chú chuột Jerry được hiển thị. Bài thực hành đã được hoàn thành.

</div><span class="text_page_counter">Trang 44</span><div class="page_container" data-page="44">

<i>ii. Change the request</i>

Bước 1: Ta chuột phải vào nút “try this” và mở Inspect của nút ra.

</div><span class="text_page_counter">Trang 45</span><div class="page_container" data-page="45">

Bước 2: Ta sẽ tìm phần tử có chứa đường dẫn đến file “cat.png”.

Bước 3: Ta sẽ thay thế đường dẫn của hình ảnh thành đường link mà WebGoat đã cung cấp.

</div><span class="text_page_counter">Trang 46</span><div class="page_container" data-page="46">

Bước 4: Ta nhấn nút “try this”. Ta sẽ thấy được có thơng số cấu hình của giao tiếp với IP là 116.110.41.129. Bài thực hành đã được hoàn thành.

</div><span class="text_page_counter">Trang 47</span><div class="page_container" data-page="47">

<small>46</small>

</div>

×