[CSAW CTF 2013] keygenme (Re400)

keygenme – 400 Points

Solved by 100 teams.

nc 128.238.66.219 14549
keygenme32.elf

File dự phòng:

Nội dung chính

Đây là note thì đúng hơn là một writeup

Ở bài này chúng ta được yêu cầu nhập 3 tham số: username token1 token2. Trong đó từ username target sẽ tính ra 2 giá trị rồi thực hiện so sánh với token1 và token2. Cũng lưu ý rằng trước khi so sánh thì token1 và token2 sẽ được đụng chạm một chút, tuy nhiên nó khá đơn giản nên vấn đề sẽ chỉ là hiểu được quá trình xử lý username mà thôi.

Thật đáng tiếc, phần quan trọng nhất lại cũng chính là phần khó chịu nhất, khi mà lực lượng team mỏng, thời gian thì hạn chế, nên sau vài giây phút cố gắng đọc hiểu (để chứng tỏ rằng ta đây cũng thuộc hàng cứng), kết quả trả về gần như là null. Chuyển hướng, với mục tiêu là có được kết quả xử lý từ app thay vì tự code:

  • Một thằng tìm cách patch emo_popo_sure
  • Thằng còn lại tìm cách khác emo_popo_shame

Thành công khá muộn của bài này ghi đậm dấu ấn sắc nét mang đầy tính hổ báo cáo mèo của 2 con cú đêm đang hừng hực khí thế leo top. Chiến lược được vạch ra và triển khai nhanh chóng, đó là… sử dụng gdb làm trung gian. Hết, đơn giản vậy thôi emo_popo_pudency

Diễn giải ra thì: Connect đến server, nhận username > Chạy bằng gdb > đặt BP > Run > Đọc giá trị thanh ghi > Xác định token1, token2 > Đưa lên server > Lặp vài lần > Nhận flag.

Code minh họa:

File script cho gdb:

Kết quả:

flag = r3vers1ng_emul4t3d_cpuz_a1n7_h4rd!

Leave a Reply

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