[SVATTT CTF 2013] Vết tích tại hiện trường (Web200)

Anonymous đã upload thành công một script backdoor của bọn chúng lên server ngân hàng Trung Ương với mục đích sẽ quay lại kiếm lợi sau này. Nhưng để truy xuất file, bạn cần phải biết password của chúng đã qui ước với nhau từ trước. Chỉ mất khoảng 10 phút, Chiến đã bypass được. Thế còn các bạn thì sao? :)
Challenge: Link
Hint: hint.txt

Chúng ta có một vùng nhập séc rét, và file hint.txt có nội dung xinh xinh:

[php]—————————-snip snip————————————-
$password = $_GET[‘password’];
$checkcrc = dechex(crc32($password));

if (strpos($password, “Anonymous”) === false || $checkcrc !==”deadc0de”)
{
echo “<br><font color=’red’>”.”Bad password”.”</font><br>”;
die();
}

…………………..
$result = $db->query(“SELECT * FROM web200  where code=’$password'”);

—————————-snip snip————————————-[/php]

Nội dung chính

Ta thấy rằng, yêu cầu của bài này là tìm một password thỏa mãn 2 điều kiện:

  1. Có chứa Anonymous.
  2. CRC32(password) = deadc0de.

Sau đó, (có lẽ là) flag sẽ được lấy từ database qua câu query:

[sql]SELECT * FROM web200  where code=’$password'[/sql]

Như vậy, nhiệm vụ của chúng ta, ngoài việc tìm password thỏa mãn 2 điều kiện vừa nói ở trên, còn có thêm một yếu tố nữa, đó là bypass được câu query SQL cuối cùng.

Với 2 nhiệm vụ đầu, công việc khá đơn giản, do giá trị CRC32 có thể được chỉnh sửa tùy ý bằng cách thay đổi 4 byte trong password. Một vài tool trên mạng cho phép chúng ta làm điều này, thay vì tự code, ví dụ như:

Giờ nếu ta tạo password ban đầu là:

Anonymousabcd

và dùng tool trên, kết quả cho ra:

Anonymous[q>_

Đây là một password khá đẹp, nó có chứa Anonymous, và CRC32 của nó đúng bằng deadc0de. Tuy nhiên khi submit, ta nhận thông báo sau:

Anonymous: Nice try! But You are doing it wrong :)

Ok, đây là điều chúng ta đã dự đoán từ trước, do vẫn chưa giải quyết được phần SQL.

Tuy vậy, việc inject câu query này xem chừng khá đơn giản, chúng ta sẽ thử với một password khá gia giáo và truyền thống:

Anonymous' OR 1=1--aaaa

Submit sau khi đã đưa nó qua forcecrc32.py, thông báo trả về xấu hơn một chút:

Bad input :)!

Vậy là có dính phải các ký tự bị cấm rồi too_sad

Thử thêm chút nữa, ta thấy các ký tự bị cấm dường như là: <space>, <comment> blah blah… tuy nhiên các từ khóa and, or, dấu nháy đơn () và dấu chấm phẩy (;) thì không bị. Hơ, thế cũng là đủ rồi emo_popo_look_down

Password cuối cùng mà ta lựa chọn sẽ là:

Anonymous'or'1'='1';aaaa

Makeup một chút với CRC32, ta được password xịn:

Anonymous'or'1'='1';nx9Dxx92

Submit:

Anonymous: Not bad! Here is your flag

SVATTT_crc_0r_n0t_CRC

emo_popo_misdoubt

You may also like...

Leave a Reply

Your email address will not be published. Required fields are marked *