Tìm CVE không khó :D

Ta Sung
tradahacking
Published in
4 min readAug 15, 2017

Sau khi fail CV ở một tổ chức nước ngoài X, chán quá nên lượn lượn tìm xem profile của một đàn anh như nồi <3 để so sánh xem vì sao mình fail, thì mình thấy thiếu mấy thứ, trong đó có vài cái CVE =)) . Thực ra là mình cũng muốn tìm CVE lâu rồi, nhưng trước giờ cứ lôi source ra rồi cất vô lại, thôi giờ quyết tâm kiếm 1 cái để ghi vô CV cho đẹp nè.Đầu tiên là việc chọn target, vì đây là lần đầu nên mình cần tìm 1 cái target dễ một tí, và mình đã chọn perl và mình nghĩ nó dễ với các lý do:

  1. Nó là opensource nên mình có thể build lại được.
  2. Perl chạy trên linux mà mình quen viết exploit trên linux nên sau này viết exploit sẽ dễ dàng hơn.
  3. Search các CVE về perl thì vẫn còn ít, một ví dụ dễ thấy là perl-hackerone =))

Sau khi tìm được target mình tiếp tục xác định tìm bug gì trong thằng này.
Đầu tiên mình thấy perl nó là 1 interpreter nên cái mình nghĩ đến đầu tiên là những bug syntax của thằng này. Sau khi la liếm nghe ngóng mấy ông anh trong channel #pwnable của VNSecurity nói nhiều về fuzzing và audit code nên mình quyết định chạy fuzz, và trong khi fuzz mình sẽ ngồi audit code tìm bug tiếp. Mà trên mạng hiện tại có cả đống fuzzer nên mình cần phải tìm 1 cái fuzzer phù hợp với target là fuzz interpreter của mình.

Search với từ khoá fuzzing interpreter thì kết quả đầu tiên trả về là cái link này. Vô link xem thì thấy tác giả dùng 2 tool là honggfuzzradamsa để tìm được 1 đống bug đó. Mình tiếp tục vào link của 2 tác giả honggfuzz và radamsa thì hiểu được là thằng radamsa sẽ được dùng để tạo ra testcase còn thằng honggfuzz sẽ dùng các testcase đó làm cơ sở rồi từ đó phát triến ra các testcase khác. Okie hiểu vậy thôi, down về quất là biết ngay…

  1. Đầu tiên mình vào honggfuzz làm theo readme và build nó.
  2. git clone thằng perl về rồi build lại nó với honggfuzz, bắt chước cái bài viết này để build thằng perl với honggfuzz thay vì afl.
  3. git clone https://github.com/aoh/radamsa down thằng radamsa về rồi build nó lại.
  4. Tạo corpus cho honggfuzz bằng radamsa. Ở đây mình sẽ chọn input cho radamsa chính là mấy cái testcase của thằng perl, đây là 1 bước quan trọng mình sẽ giải thích lý do ở phần dưới. Ở đây mình sẽ tạo 3000 testcase từ input là folder perltestcase bằng lệnh: $radamsa -o corpus/testcase%n.pl -n 3000 -r /perltestcase
  5. Chạy honggfuzz: honggfuzz -f corpus -- ./perl-fuzz -D ___FILE___

Như mình đã nói ở bước 4, nó quan trọng vì nếu đưa vào các input tào lao thì fuzzer sẽ mất rất nhiều thời gian tìm đường đi và có khi chả tìm thấy đường. Ở cách làm của mình thì mình chọn mấy cái testcase của thằng perl để làm input cho radamsa tạo ra các corpus. Vì testcase là cái thằng có chức năng để test mấy cái hàm của chương trình nên nó có thể cover nhiều đường đi của chương trình nhất. Và cái sướng nhất là nó có sẵn mình không phải đi tìm =)).

Sau khi kiếm được input rồi, mình cũng cần phải test lại mấy cái testcase này xem có chạy được với cái perl mà mình build ra không, vì mấy thằng testcase này nó hay include/import mấy thằng khác vô nên nhiều khi nó fail từ khi kiểm tra mấy cái include/import có hay không. Ở đây mình sẽ dùng lệnh find ./input -exec ./perl-fuzz {} \; để kiểm tra các testcase trong input có chạy được hay không.

Nếu nó chạy được thì sẽ ra kết quả như hình 1 bên dưới:

hình 1

Nếu nó thiếu các file import/include như hình 2 bên dưới là không tìm thấy file test.pl:

hình 2

Lúc này ta cần tìm và bổ sung thêm file include/import hoặc có thể sửa testcase để chương trình có thể chạy tiếp mà không break nếu lỗi như vậy.

Sau khi mọi thứ đã đâu vào đấy, thì mình up hết lên VPS xong chạy lệnh: nohup honggfuzz -f corpus -- ./perl-fuzz -D ___FILE___ >/dev/null & , và giờ chỉ cần ngồi đợi honggfuzz tìm bug cho mình.
Lúc này các bạn có thể làm gì cũng được còn mình thì ngồi audit code để hiểu cách thằng perl này hoạt động để sau này viết exploit nếu có thể.

Vì bài này mình muốn nói về fuzzing nên phần audit code mình sẽ viết về bug này vào một ngày đẹp trời nào đó :))

Sau khi fuzz khoảng 1 tuần và đây kết quả 😀

hình 3

Yeah, sau khi đọc bài này có thể các bạn sẽ blame sao mấy cái bước thực hiện không chi tiết gì hết :|. OKie fire! vì mình thích nó như vậy =))

Gudluck bros!

--

--