Writeup Grandprix 2016 - [Misc04] Banh Da Ke
White

Bùi Quang Thăng viết ngày 22/12/2016

Đề bài cho ta 2 file là create_folder_player.py và misc.py. Link đề bài: Misc04
Trong trang chủ grandprix, thì yêu cầu chúng ta chạt netcat theo link nc misc04.grandprix.whitehatvn.com 23403.
Tuy nhiên, do hiện tại server đã đóng, nên chũng ta sẽ tiến hành mô phỏng chương trình ở trên máy của mình. Đầu tiên, hãy đọc trong 2 file python đó chứa gì.
File create_folder_player.py:

import os
import random

flag = "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"
count = 0
length = len(flag)
print length

arr = random.sample(range(0,10000),length)
arr = sorted(arr)

for k in range(0,10000):
    try:
        os.mkdir(str(k))
    except:
        pass
    if k in arr:
        f=open("./"+str(k)+"/"+os.urandom(8).encode("hex")+"."+os.urandom(8).encode("hex"),"w").write(str(flag[count]))
        count +=1

Tuy không rành về python lắm, tuy nhiên ở đây chúng ta có thể thấy được từ chuỗi flag ban đầu, người ta sẽ lần lượt cắt mỗi kí tự từ flag và bỏ vào các thư mục có thứ tự từ 0 đến 10000.
Các bạn có thể thay chuỗi flag bằng 1 chuỗi của mình, sau đó chạy file này để thực hiện demo.
Tiếp theo, chúng ta cùng xem file thứ hai có gì:
File misc.py:

import os
import re
import sys
blaclist = "cat|nano|less|tail|vim|head|apt|install|wget|more|emacs|vi|subl|pico|bash|sh|rm|sed|nl|flag.hihi|`|%|\$|chmod|python"

myregrex = "\W*(?i)("+blaclist+")\W*"
cmd = ""
while(cmd != "exit"):
    sys.stdout.write("Input your command: \n")
    sys.stdout.flush()
    cmd = raw_input()
    check = re.findall(myregrex,cmd)
    if check!=[]:
        sys.stdout.write("rejected\n")
        sys.stdout.flush()
        continue
    try:
        #call()
        a ="XXXXXXXXXXXXX"
        a+=cmd
        os.system(a)
    except:
        sys.stdout.write("bad command\n")
        sys.stdout.flush()

Sau khi các bạn đã chạy file create_player_folder.py rồi, thì chúng ta chạy file này để tìm flag. Sau khi chạy file, ta phải nhập 1 câu command gì đấy để tìm ra chuỗi flag. Lướt qua một lượt trên blacklist, khi ta nhập những câu comment này thì chương trình sẽ in ra rejected. Những câu lệnh giúp ta mở file trong linux đều bị cấm. Như vậy làm thế nào để có thể tìm những mảnh của flag ?
Nếu các bạn làm quen nhiều với linux thì chắc hẳn câu lệnh grep dùng để tìm 1 chuối nào đó trong 1 thư mục hoặc 1 file chắc hăn là rất quen thuộc, và nó không nằm trong black list.
Mỗi mảnh của flag sẽ là 1 kí tự và nằm trong 10000 thư mục được đánh số từ 0 đến 10000. Như vậy ta sẽ phải thử 52 kí tự chữ từ a-z A-Z và 10 kí tự số 0-9 và kí tự gạch dưới.
Ta sẽ chạy command: grep -r "ki_tu".
Nếu tìm thấy kí tự đó trong 10000 folder đã tạo, thì chương trình sẽ hiển thị cho ta một dòng có dạng như sau: Số_thứ_tự_folder/mã_hex: kí_tự
Một kí tự có thể xuất hiện ở nhiều folder nên có thể thông báo ra nhiều dòng có dạng như trên.
Sau đó chúng ta tiến hành sắp xêp các số thứ tự folder tìm được từ thấp đến cao, tương ứng với mỗi số sẽ là 1 kí tự, cuối cùng ta sẽ có flag cần tìm là:
WhiteHat{ke3p_c4lm_4nD_try_h4rd}
Vẫn có nhiều cách để làm, ơ đây mình chỉ chia sẻ cách làm của mình mà thôi.
Cảm ơn các bạn đã dành thời gian để đọc. Thân ái!

Bình luận


White
{{ comment.user.name }}
Bỏ hay Hay
{{comment.like_count}}
Male avatar
{{ comment_error }}
Hủy
   

Hiển thị thử

Chỉnh sửa

White

Bùi Quang Thăng

2 bài viết.
0 người follow
Kipalog
{{userFollowed ? 'Following' : 'Follow'}}
Cùng một tác giả
White
5 0
Ở phiên bản rails 5, thì gem railsapi đã được tích hợp vào phần core của Rails, vì vậy chúng ta có thể khởi tạo API trong Rails 1 cách dễ dàng và n...
Bùi Quang Thăng viết 12 tháng trước
5 0
{{like_count}}

kipalog

{{ comment_count }}

bình luận

{{liked ? "Đã kipalog" : "Kipalog"}}


White
{{userFollowed ? 'Following' : 'Follow'}}
2 bài viết.
0 người follow

 Đầu mục bài viết

Vẫn còn nữa! x

Kipalog vẫn còn rất nhiều bài viết hay và chủ đề thú vị chờ bạn khám phá!