[fptCTF] PWN1 + PWN2

Team IA
Team IA
Aug 28, 2017 · 4 min read

PWN1

Lần đầu tiên trong đời làm một bài pwn :v. Tới lúc làm xong mà hay tay vẫn run run chưa hiểu chuyện gì xảy ra cơ mà :))).

Cùng ngó qua cái đề bài:

nc 139.59.245.85 31328

Server sẽ nhận vào input và trả ra kết quả. Dù mình có nhập trên trời dưới biển gì vào thì cũng vẫn thua vì nó có PIKABAT, wtf =.=

Với dạng bài kiểu này mình nghĩ là sẽ đẩy vào một cái gì đó để server bắn ra lỗi. Vậy “cái gì đó” ở đây là gì?????

Hừm, theo kinh nghiệm học crypto lâu năm từ lớp #Mr.K4i thì cứ đẩy NULL vào xem nào.

Code gửi null
Kết quả trả về

Thật là vi diệu, bắn ra lỗi luôn :)). Hàm nhận input có dạng như thế này:

input = None; result = eval( 'battle("'+raw_input("I choose.... ")[:30]+'")')

Input của mình sẽ đi qua một hàm eval(), giới hạn cho nó là 30ký tự và nếu input có dạng “+COMMAND+”.thì server nó sẽ chạy luôn cái COMMAND , code thông minh phết =)).

Cùng xem chúng ta có gì khi thử truyền vào lệnh in ra nội dung file ĐANG CHẠY lên server

Truyền vào tham số open(__file__).read() để xem nội dung file
Kết quả trả về

Ngay lập tức nhìn thấy những gì chúng ta cần: flaaaa….aag = open(“flag”).read().

Giờ thì đi lấy điểm thôi chứ còn chần chừ gì nữa. Ez 100pts.

Code lấy flag
Flag

Nhận xét chút chút:

Cá nhân mình thì thấy bài này khá giống dạng những bài crypto mình đã từng được làm trước đây. Cũng có 1 cái hộp, mình sẽ đẩy lên liên tục các (bad) input để ép server trả ra 1 lỗi và chúng ta sẽ khai thác xung quanh cái lỗi đó.

Đoạn mà tốn thời gian và cũng là chìa khóa mở ra flag của bài này chính là khi mình nẩy ra ý tưởng concat chính cái file đang chạy trên server thông qua lệnh open(__file__) có sẵn của python.

FLAG:

SVATTT_P0k3mon_GOPP

– Chàng pháp sư trẻ tuổi Khadgar –

========================================

PWN2

nc 139.59.245.85 31328

Cũng gần tương tự bài PWN1, tuy nhiên, điều đáng lưu ý ở đây là chương trình này chỉ cho input tối đa là 15 ký tự vậy nên không thể dùng open(“flag”).read() được!

Tuy nhiên, ta nhớ lại một chút, cũng như bài trước, flag của chúng ta đã được open và lưu sẵn vào biến flaaaaaaaaaaaaaaaaaaaaaaaaaaaag

Vậy, việc chúng ta cần làm bây giờ là làm sao để đọc được giá trị các biến trong chương trình. Đến đây ta có thể nghĩ đến những hàm _builtin_ của python.

Link tham khảo:https://docs.python.org/2/library/functions.html

Sau khi tìm tòi một hồi thì tìm ra được một lệnh khá ổn để input vào (còn có nhiều lệnh khác có thể sử dụng)

str(vars())

FLAG:

SVATTT_built-in_always_on_you_know?

— j0kerZ —

Thank you for paying your time.

Team IA

cTf Team

)
Welcome to a place where words matter. On Medium, smart voices and original ideas take center stage - with no ads in sight. Watch
Follow all the topics you care about, and we’ll deliver the best stories for you to your homepage and inbox. Explore
Get unlimited access to the best stories on Medium — and support writers while you’re at it. Just $5/month. Upgrade