[fptCTF] PWN1 + PWN2
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:
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.
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
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.
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 31328Cũ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.htmlSau 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.

