[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:
- Có chứa Anonymous.
- 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
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
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';nx9Dxx92
Submit:
Anonymous: Not bad! Here is your flag
SVATTT_crc_0r_n0t_CRC
Recent comments