This page looks best with JavaScript enabled

Emdee five for life writeup HACK THE BOX

 ·  ☕ 3 min read  ·  🤖 ch1nhpd

Xin chào, hôm nay chúng ta cùng đến với một Challenge về mảng Web trên Hackthebox nhé!

Ready!!

Đây là giao diện của trang web khi mình bắt đầu truy cập.

img1

Qua đây cộng với phần mô tả của challenge thì chúng ta có thể biết việc của mình là phải encript chuỗi r4q6q5pBOCNyWXcqV0EHbằng thuật toán MD5.

Mình đã thử encript sau đó submit nhưng kết quả nhận được là to slow!.

img2

Vì vậy phải có một cách khác nhanh hơn chính là viết script để tự động hóa việc submit. Các bạn sẽ có rất nhiều cách để viết scritp và ở đây mình dùng python:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
import requests
import hashlib

url = 'http://142.93.44.199:31032'
r = requests.session()

rp = r.get(url).text
x = rp.split("<h3 align='center'>")[1]
string = x.split('<')[0]

h = hashlib.md5(string.encode('utf-8')).hexdigest()
data={'hash': h}

response=r.post(url = url, data = data)
print(response.text)

Phân tích code

  • Đầu tiên mình tạo một request tới trang web kia.Và đây là kết quả của biến rp (Sau khi code chạy xong dòng 7)
     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    12
    
    <html>
    <head>
    <title>emdee five for life</title>
    </head>
    <body style="background-color:powderblue;">
    <h1 align='center'>MD5 encrypt this string</h1><h3 align='center'>zguJrmZCRFfHNNnR5clq</h3><center><form action="" method="post">
    <input type="text" name="hash" placeholder="MD5" align='center'></input>
    </br>
    <input type="submit" value="Submit"></input>
    </form></center>
    </body>
    </html>
  • Việc tiếp theo là phải cắt được đoạn string (trong trường hợp này là: zguJrmZCRFfHNNnR5clq ) để mã hóa rồi submit.
  • Có rất nhiều cách để có thể cắt được chuỗi đó. Và ở đây mình dùng thấy chỉ có một <h3 align='center'> nên nếu mình dùng hàm split thì sẽ cắt được đoạn html thành hai hai phần.

    Kết quả của hàm split trong trường hợp này một cái mảng gồm hai phần tử (bên trái và bên phải của <h3 align='center'>)

  • Khi đó ta thấy chuỗi cần lấy ra nằm ở ngay đầu phần tử thứ [1] của mảng. Tiếp tục căt phần tử ấy theo < thì ta được chuỗi đó nằm ở vị trí [0] của mảng lần này. (Dòng 9)
  • Sau đó ta thực hiện mã hóa chuỗi bằng thuật toán MD5 (Dòng 11)
  • Để gửi được đi thì ta phải chuẩn hóa nó theo dạng cấu trúc như dòng thứ 12. Chữ hash là giá trị của biến name của thẻ input trong đoạn html của biến rp.
  • Cuối cùng là post lên để nhận flag.

Note

Có thể bạn chạy code lần đầu sẽ không thấy flag. Nguyên nhân là do dán MD5 vào vẫn chậm hơn yêu cầu bài toán. Bạn có thể khắc phục bằng cách tối ưu đoạn code hoặc sử dụng ngôn ngữ khác với những thuật toán nhanh hơn. Còn không thì chạy lại vài lần và đây là kết quả:

img3

Tổng kết

  1. Sử dụng hàm split để cắt chuỗi.
  2. Sử dụng thư viện requests để kết nối, gửi nhận dữ liệu.
  3. Sử dụng thư viện hashlib để mã hóa thông tin.
    Ngoài ra có thể mã hóa MD5 ở đây
Share on

Phạm Đăng Chính
WRITTEN BY
ch1nhpd
Developer, Pentester