Ví dụ: https://www.hackthis.co.uk/levels/coding/1
Đọc yêu cầu của đề nào: Các từ bị xếp lộn xộn. Nhiệm vụ là sắp xếp lại các từ theo thứ tự alphabet. Sau đó submit kết quả với cùng định dạng. Thời gian để hoàn thành là 5 giây.
Phân tích: với thời gian 5 giây thì với thao tác thủ công ta không thể nào hoàn thành kịp nhiệm vụ này. Vì vậy ta cần phải giải bài này bằng code.
Các bước: Lấy danh sách các từ bị sắp xếp lộn xộn => sắp xếp chúng lại theo thứ tự => Submit kết quả
Bài này sử dụng http request. Với python ta có thể sử dụng thư viện có sẵn như requests (http://docs.python-requests.org/en/latest/) nhưng mình đã code 1 hàm sẵn rất đơn giản và tiện dụng (http://pastebin.com/e7CueNfU)
Cách sử dụng:
Bạn cần 3 param (url, post_data, cookie) nếu sử dụng get thì post_data = "", nếu không cần cookie thì gán cookie = ""
OK. Lấy cookie, url
Sử dụng add-on livehttpheader ta được thông tin request như sau:
OK.
Giao thức là GET
url = https://www.hackthis.co.uk/levels/coding/1
Cookie = _ga=GA1.3.1205173578.1433484176; member=1; km_ai=x2PU%2FQmuZkE0OR%2F2qGxqE6N7Jqo%3D; km_uq=; km_lv=x; autologin=o-%01%98%7F%09%D3%EBW%22w%FBGc%B5%8C%5C%EC%1E%24%B4n%E7%25%93%E7%02%8F%AC%BB%E2V4%BE%C0%9C%A6%E7%A7%16%7BFc+%8B%C4%D1h%A3%B5%F5s%D9jUs%08J_Z%A1%A1%C1o; PHPSESSID=j0k3ihv246vdijl3om5f7f8a87
OK. Đưa vào hàm requests lấy dữ liệu về thôi.
Run:
Đoạn bôi trắng là đoạn ta cần quan tâm.
Làm sao để lấy được các từ ra?
Suy nghĩ đơn giản thôi nào. Biến res của ta chỉ là string thôi nên ta chỉ việc phân tích chuỗi là có thể lấy được các từ ra.
Ta có thể sử dụng tới Regular expression operations (https://docs.python.org/2/library/re.html) nhưng RE có thể gây tốn thời gian. Vì form này có format như nhau sau mỗi lần request nên ta chỉ cần sử dụng các hàm xử lý chuỗi đơn giản nhằm tránh mất thời gian.
Trước các từ cần quan tâm là chuỗi "<textarea>" và sau các từ cần quan tâm ta có "</textarea>" mà trong chuỗi res ta chỉ có duy nhất 1 chuỗi "<textarea>" trong đó. OK simple rồi. Lấy chuỗi từ sau "<textarea>" và trước "</textarea>" là được chuỗi các từ cần tìm.
Run:
OK. Việc tiếp theo là tách chuỗi này thành các từ riêng lẻ.
Giữa các từ được phân cách bằng chuỗi ", " vì vậy ta có thể sử dụng hàm split để tách ra.
Run:
OK. Vậy ta được 1 list các từ.
Tiếp theo là sắp xếp các từ. Vì đây là list nên ta có thể sử dụng hàm sorted (https://docs.python.org/2/library/functions.html#sorted)
Như vậy ta thấy list words trên chưa được sắp xếp nhưng list answer dưới đã được sắp xếp theo alphabet.
Nhiệm vụ bây giờ là biến list thành string theo đúng format ban đầu (cách mỗi từ là chuỗi ", ") và submit.
Để biến chuỗi thành đúng format ban đầu ta dùng hàm join.
OK. Ta có chuỗi answer đúng format và đã được sắp xếp.
Nhiệm vụ bây giờ là submit.
Ta coi http request bằng livehttpheader:
Giao thức: POST
Url: https://www.hackthis.co.uk/levels/coding/1
Cookie: như cũ
Post_data: answer = chuỗi_các_từ_đã_được_sắp_xếp
OK. tiếp tục :D
OK. Level Completed
Còn một số dạng nữa khi nào rảnh mình sẽ cập nhật
Bạn nào chưa hiểu thì có thể comment hoặc liên hệ facebook mình:
https://www.facebook.com/xxvicon
Thứ Sáu, 10 tháng 7, 2015
Chủ Nhật, 28 tháng 6, 2015
OnePiece at UIT & ATTT
Từ phải qua: Trần Anh Khoa, Lê Huy Hoàng, Tạ Đình Sung, Nguyễn Thành Nguyên

Trước khi bắt đầu cuộc thi
Kết quả :D
Cờ và cúp vô địch
OnePiece và pwn_the_world (trái), CLAY (Phải)
OnePiece và BTC Cuộc thi
Chúc mừng các đội và cảm ơn UIT đã tạo ra 1 cuộc thi vô cùng hay cho mình và các bạn sinh viên.
Thứ Sáu, 29 tháng 5, 2015
[Malware Analysis] BOTNET-NEW
Tình hình là tập tành phân tích Malware nên xin anh Phạm Việt Hòa (Levis) share cho vài mẫu Malware đơn giản.
Anh share cho mẫu trong tool ddos của 1 người post trên forum CEH.
Link: http://www.mediafire.com/download/dx8di7t24515w46/BOTNET-NEW.exe
OK. Download về tiến hành dịch ngược xem thế nào :D
Quăng vào IDA thì nhận được thông tin sau:
Như ta thấy trong Form1
Có 1 string khá lạ lùng là apha: tại sao lại có những ký tự loằng ngoằng mì tôm thế kia? Mục đích là gì?
Ta tiến hành xem xét tiếp các hàm trong Form1.
Hàm buttonAttack_Click_1 không có gì khả nghi. Chỉ là cho WebBrowser dùng bot tấn công vitim.
Tới hàm buttonBrowser_Click ta thấy có đoạn liên quan tới chuỗi apha ở trên:
Gmail ?
LOADBOT để ddos thôi tại sao có gmail ở đây?
Tiếp luôn.
Sau khi value được gán thì nó được đưa vào class mtp và gửi đi.
Ta coi tiếp hàm Send() của mtp:
Đã rõ. Như ở trên ta thấy danh sách bot được đưa vào chuỗi text. chuỗi text được đưa vào mtp gửi đi qua email ở trên.
Như vậy, chủ con malware này tung tool này để người ta đem bot đi ddos người khác nhưng hắn lại được cái list bot đó và có thể điều khiển đám bot đó đi tấn công người khác.
Sau khi phân tích xong thì thử google tìm ra cái link này:
http://forum.ceh.vn/Tool-load-bot-cua-KymLjnk-ko-biet-share-co-bi-gi-ko-thread-7156-post-26848.ceh#pid26848
Trong đó đã có một vài thím phân tích con này trước rồi :D
Cảm ơn anh Việt Hòa đã giúp đỡ em.
Anh share cho mẫu trong tool ddos của 1 người post trên forum CEH.
Link: http://www.mediafire.com/download/dx8di7t24515w46/BOTNET-NEW.exe
OK. Download về tiến hành dịch ngược xem thế nào :D
Quăng vào IDA thì nhận được thông tin sau:
.NET :D Thật là tuyệt vời. .NET thì dễ xem source rồi
Quăng vào ILSpy tiến hành xem source code thôi :D
Có 1 string khá lạ lùng là apha: tại sao lại có những ký tự loằng ngoằng mì tôm thế kia? Mục đích là gì?
Ta tiến hành xem xét tiếp các hàm trong Form1.
Hàm buttonAttack_Click_1 không có gì khả nghi. Chỉ là cho WebBrowser dùng bot tấn công vitim.
Tới hàm buttonBrowser_Click ta thấy có đoạn liên quan tới chuỗi apha ở trên:
string value = string.Concat(new string[]Vậy value sẽ được gán là gì?
{
this.apha[9].ToString(),
this.apha[44].ToString(),
this.apha[9].ToString(),
this.apha[44].ToString(),
this.apha[9].ToString(),
this.apha[34].ToString(),
this.apha[34].ToString(),
this.apha[39].ToString(),
this.apha[36].ToString(),
this.apha[33].ToString(),
this.apha[23].ToString(),
this.apha[26].ToString(),
this.apha[9].ToString(),
this.apha[2].ToString(),
this.apha[29].ToString(),
this.apha[43].ToString(),
this.apha[8].ToString(),
this.apha[24].ToString(),
this.apha[26].ToString()
});
Gmail ?
LOADBOT để ddos thôi tại sao có gmail ở đây?
Tiếp luôn.
Sau khi value được gán thì nó được đưa vào class mtp và gửi đi.
Ta coi tiếp hàm Send() của mtp:
Đã rõ. Như ở trên ta thấy danh sách bot được đưa vào chuỗi text. chuỗi text được đưa vào mtp gửi đi qua email ở trên.
Như vậy, chủ con malware này tung tool này để người ta đem bot đi ddos người khác nhưng hắn lại được cái list bot đó và có thể điều khiển đám bot đó đi tấn công người khác.
Sau khi phân tích xong thì thử google tìm ra cái link này:
http://forum.ceh.vn/Tool-load-bot-cua-KymLjnk-ko-biet-share-co-bi-gi-ko-thread-7156-post-26848.ceh#pid26848
Trong đó đã có một vài thím phân tích con này trước rồi :D
Cảm ơn anh Việt Hòa đã giúp đỡ em.
Thứ Tư, 6 tháng 5, 2015
[Writeup] Camsctf - Helix
Đề cho
Helix - 20
Hmmm, I wonder who Lord Helix is and what he wants with you.
Hint: TweakPNG may not be your friend sometimes.
Một số bạn coi writeup của camsctf trên: https://github.com/dannyqiu/camsctf-in-s-ane nhưng thật sự có một số writeup khá khó hiểu. Bài Helix chỉ có 20 điểm. Dễ nhưng số lượng team giải được là rất ít.
Sau đây là writeup cách mình giải:
Download về đưa vào TweakPNG kiểm tra các chunk
Dùng notepad đếm số zTXt chunk:
12136 chunks. Coi hết chắc đuối.
Kiểm tra sơ qua ta thấy hầu như các chunk giống hệt nhau. => Ta tiến hành loại bỏ các chunk giống nhau.
Đưa ảnh vào HxD:
Đoạn bôi đen là 1 chunk zTXT có key là Helix
Tiến hành Replace: Ctrl R (Search -> Replace)
Chú ý copy hex để replace chứ copy binary thì sẽ lỗi. Chọn All thay vì Forward để replace toàn bộ. Sau đó chọn Replace all.
Kết quả:
12136 chunks mà đã bỏ đi 12134 chunks. Ta còn lại 2 chunks.
OK save rồi qua TweakPNG reopen lại:
OK. Mở thử 2 chunk này thì phát hiện ở chunk thứ 2 có đoạn:
Flag là:
{5p3nc3r_no0o0_st0p}
Thứ Ba, 5 tháng 5, 2015
[Writeup] UITCTF 2014 - Magic Hat
Vừa có thím quăng cho cái file magic_hat.rar kêu giải bài này. Chưa biết format flag nhưng cũng thử xem qua phát đã.
Giải nén ra ta được 1 file ảnh PNG
Vì là file PNG nên cứ đưa vào TweakPNG xem các chunk đã :D (Có thể sử dụng fotoforensic.com cũng được)
http://fotoforensics.com/analysis.php?id=5f14471a586479fdbcd66d42f842476831ab5aca.797660
Tham khảo về chunk của PNG tại đây: http://www.libpng.org/pub/png/spec/1.2/PNG-Chunks.html
Khá nhiều chunk nhưng đa phần toàn chunk liên quan tới ảnh. Để ý cái chunk iTXt ta thấy có 1 đoạn base64 (vì có = ở cuối. Xem thêm ở đây để hiểu vì sao có dấu = trong base64 http://en.wikipedia.org/wiki/Base64 )
Ố ồ. Gzip decode thôi :D http://i-tools.org/gzip
Giải nén ra ta được 1 file ảnh PNG
Vì là file PNG nên cứ đưa vào TweakPNG xem các chunk đã :D (Có thể sử dụng fotoforensic.com cũng được)
http://fotoforensics.com/analysis.php?id=5f14471a586479fdbcd66d42f842476831ab5aca.797660
Tham khảo về chunk của PNG tại đây: http://www.libpng.org/pub/png/spec/1.2/PNG-Chunks.html
Khá nhiều chunk nhưng đa phần toàn chunk liên quan tới ảnh. Để ý cái chunk iTXt ta thấy có 1 đoạn base64 (vì có = ở cuối. Xem thêm ở đây để hiểu vì sao có dấu = trong base64 http://en.wikipedia.org/wiki/Base64 )
eJwL9QxxDnGrzjVJz0yOh5CuZalFleUZqUWpirUAsEsLdQ==Đưa vào hackbar trên firefox decode base64 thử thì được như sau:
Nhìn rối chả biết đằng nào mà lần.
Thôi thì ghi vào file rồi binwalk thử.
Ố ồ. Gzip decode thôi :D http://i-tools.org/gzip
UITCTF{m4gic_m4gic_Everywhere!}
Chủ Nhật, 3 tháng 5, 2015
[Writeup] VolgaCTF 2015 - Captcha
captchaBài này thuộc catelogy stego (steganography) và ppc (Professional programming and coding)
We've got a rather strange png file. Very strange png. Something isn't right about it...
png
Sau khi download về ngó phát thấy ảnh có 256x256 pixel mà dung lượng lên tới 1.54MB thì chắc chắn có ẩn tình bên trong file.
Quăng vào HxD ta thấy:
Các ảnh PNG nối tiếp nhau trong cùng 1 file.
Coi ở đây để biết thêm về signature của PNG: http://www.garykessler.net/library/file_sigs.html
PNG signature bắt đầu bằng: 82 89 50 4E 47 0D 0A 1A 0A và kết thúc bằng 49 45 4E 44 AE 42 60 82
OK vậy ta tiến thành cắt các ảnh PNG ra từng file riêng biệt. (có thể sử dụng foremost hoặc binwalk với option -e cũng được)
Theo như hình ta thấy cắt bằng tay thì không khả thi vì có tới 1892 ảnh PNG.
=> Code 1 script nho nhỏ cắt ra. Dựa vào signature ta sẽ cắt được toàn bộ 1892 ảnh :D
Source Code: http://pastebin.com/jsaX1rS8
Theo quan sát 1892 ảnh. Có ảnh cuối cùng có kí tự =
Ta có thể đoán ngay là base64.
Vậy phải lấy từng kí tự trong ảnh ra.
Ý tưởng tiếp theo là dựa vào số bytes nhưng bị thọt vì có 2 kí tự khác nhau nhưng cùng số byte.
Tiếp theo nữa mình thử 2 ảnh cùng kí tự thấy data y hệt nhau.
Vậy dùng MD5 tốt rồi.
Bước tiếp theo code 1 đoạn python lấy danh sách các md5 và tên file tương ứng sau khi unique (k biết ghi tiếng Việt cho từ này sao).
Mình đã cho tất cả các ảnh cắt được vào thư mục Captcha cho tiện lấy file.
Source code: http://pastebin.com/9iev2PXT
Ta được kết quả: http://pastebin.com/Zm9QR5Gj
Vậy ta chỉ cần kiểm tra 65 ảnh và ghi lại các kí tự tương ứng với md5 của ảnh đó
Sau đó với vài thao tác với notepad mình đã tạo được 1 dict của python với key là md5 và value là kí tự. (bước này có thể sử dụng tesaract để tự nhận diện)
Chú ý: kí tự I và l (i hoa và L thường) rất giống nhau.
và
Tiếp theo lấy toàn bộ kí tự theo thứ tự của các ảnh.
Code: http://pastebin.com/hHtzXUeD
Ta được kết quả là 1 base64:
iVBORw0KGgoAAAANSUhEUgAAARAAAACDCAIAAADK7dMbAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAUfSURBVHhe7dhtYtowEEVR1sWCWA+rYTNdTOqRhTSjD6NHEmjSe37Z8kgaGV6T9PQBYBmBAQQEBhAQGEBAYAABgQEEBAYQEBhAQGAAAYEBBAQGEBAYQEBgAAGBAQQEBhAQGEBAYAABgQEEBAYQEBhAQGAAAYEBBAQGEBAYQEBgAAGBAQQEBhAQGEBAYAABgQEEBAYQEBhAQGAAAYEBBAQGEBAYQEBgAAGBAQQEBhAQGEBAYAABgQEEQmD+XM+n0+l8/ZPvB6zkcss3/53b5TQ4/fSdjMvf7zd9iOk7mw9j7/vzb3w9MOU9piZ6lqRvetf+2JKnJz6lJsDvO30nBOb7NV+ALzjaemAGn283JDe09qVpjr3u6YlPITDvNvxCut+JvuBoPyIwP8T4MATmdYZfyDcGpv37Zdjf5WbD5be0O3t0t8/xIw++OmGjsvym7ajlJq71lou3svP1tg/vlX3/SR0+X691s5V9Xc1msv6ITXTt28x8O1xkbyDfNLuOTBsert8049YfNjOzFW+rrG5qSu3Gyn1ZLdyq3FpW87CVY8uBGe1VX062N507tKf5Mkz2s7oVxmqZreTf5gNu/aPefD/p0p67zkKNa8GPhymzfdsJviZf+/UnbGapKOVhkdTNfmPj9+Gw60Ra576+2yqsU5dZaKaMzoVN3WS7HGw6WbE/3Dbi6/oC1Vpgmm3vuu3D8Wbd+cMuHsCV2eWolzE3cdLb+NXHvtqa7Wm6bcbdpOm+7km9mq0/5SaUS7dlUu5jA21Zb6l+1IG7dGPJ0oncNuNd3apW0K/YTxts/LCXQ8s/YUZH6Mbisf1je+LcOx6tOhDL7C6sMucmTnobdxBHm+YTe9rMdbfuMu7rntSr2fpzNiOdvly0zdT72EBb1pvXN33eX/+gmaYyOdw1bup3nWy61wyG4jbbSH3sO3zWd/wNk2/q43TmMu6b7k84NC6z0QendxMPeusXiRuOa7pxN2m6r93l21ozW//IPtstHlt297GBtqw3qXed57vScr5xE8PjFW7upky3i8mmhXWYRx8ebiuQ2upJgWmb6YbiscvjcGwbLV3bzcIJBntvxu8vcBMnvXXNpctmw1DjWFnuIJWUombfWDWpGax/xKa7HfPA/c515jfaJx3vZM3UijI59JjWce9+uz9fLm6eeqJU37+lw00zq8mjVhEKmjbsVmhq5CWByY3v0v8mlVOVB4fnqCvZVXU4yTQt1PrQuls0j4XHiTuBuT+sw7N/7rfR8h9um/p5xj0m6x/Yuw6F7iDhe1PGQ5MTsSKeJC/TfIibQTPSifZNS5916fGm7qCbunSp9i3Hx8d9PPSpwOCd7NMPsfjJvuCrvOClgXnNkbDqV+XlNwYm7db8qP9K8ads9fCAT0/8xx2f65N5ectLO9j0BYFJu3/66ysEBgCBAQQEBhAQGEBAYAABgQEEBAYQEBhAQGAAAYEBBAQGEBAYQEBgAAGBAQQEBhAQGEBAYAABgQEEBAYQEBhAQGAAAYEBBAQGEBAYQEBgAAGBAQQEBhAQGEBAYAABgQEEBAYQEBhAQGAAAYEBBAQGEBAYQEBgAAGBAQQEBhAQGEBAYAABgQEEBAYQEBhAQGAAAYEBBAQGEBAYQEBgAAGBAQQEBhAQGEBAYAABgQEEBAYQEBhAQGAAAYEBBAQGEBAYQEBgAAGBAQQEBhAQGEBAYAABgQEEBAYQEBhAQGAAAYEBBAQGEBAYQEBgAAGBAQQEBlj28fEX4wPz1G62YicAAAAASUVORK5CYII=Tiến hành decode và ghi vào file thôi :D
Đưa file flag vào HxD ta thấy nó là file PNG (dựa vào signature ta đã biết ở trên)
Vậy đổi tên file flag thành flag.png ta được flag :D
Submit và ăn 150 điểm thôi :D
Thứ Bảy, 25 tháng 4, 2015
[WriteUp] WhiteHat Contest 9 - Steg200
Steg200
Link challenge: https://wargame.whitehat.vn/Challenges/DetailContest/94
http://material.wargame.whitehat.vn/contests/9/steg200_f2f6d2f2773301a5246507e25225349d.jpg
Đề cho ta mỗi cái hình:
Sau khi thử bằng binwalk, http://fotoforensics.com/, tweakpng thì ta không phát hiện được điều gì đặc biệt
Tìm thử ảnh gốc nó để so sánh xem khác nhau không?
Let search
Kích thước ảnh là 900 × 582
Google hình ảnh ta có:
Nhìn sơ thì không khác nhau là mấy.
OK vậy code thử:
Nếu chỗ nào khác nhau ta gán màu đen (0,0,0) và giống nhau ta gán màu trắng (255,255,255) ở hệ màu RGB
from PIL import Imageimg = Image.open("SilentRuinsGrayscale.jpg")img2 = Image.open("steg200_f2f6d2f2773301a5246507e25225349d.jpg")pix = img.load()pix2 = img2.load()for i in xrange(img.size[0]):for j in xrange(img.size[1]):if pix[i,j]!=pix2[i,j]:pix2[i,j]=(0,0,0)else:pix2[i,j]=(255,255,255)img2.save("result.jpg")
Lại là QR code... Ám ảnh
Cắt ra fix lại decode ta được:

Flag:
WhiteHat{2fda0b6199b0465b61fde1f43c6a721038c7f3a0}
Đăng ký:
Bài đăng (Atom)








































