vinhjaxt / CTF-writeups

My CTF writeups
17 stars 0 forks source link

SVATTT2019-Finals: hellovietnam và simplemessage #1

Open vinhjaxt opened 5 years ago

vinhjaxt commented 5 years ago

Xin chào mọi người, mình là Vịnh (@vinhjaxt), thuộc team KMA PeBois Sau đây mình xin đại diện team, viết writeup cho SVATTT2019-Finals mà đội mình tham gia.

HelloVietNam

Tác giả: anh @ducnt Source code: hellovietnam.zip

Định hình

if(!isset($_COOKIE['Test_cookie'])) { setcookie('Test_cookie', 'tsutsutsu', time() + (86400 30), "/", false, false, 1); } //If admin //setcookie('fl4g', 'xxxxxxxxxxxxxxxxx', time() + (86400 30), "/", false , false, 1);

if(isset($_GET['message']) && !empty($_GET['message'])) { if(strlen($_GET['message'])>220) { die('

Too Long :(
'); } $filename = './message/'.uniqid().'.txt'; file_put_contents($filename, $_GET['message']); echo "

Your Message '". $_GET['message'] . "'' is located here, wanna share it with me?"; }

?>



We implement many security solutions on this site, so no worries, you are safe by default even somebody hack you!


- Mình có 1 trang để share link gì đó với bot
![Screenshot at 2019-11-29 16-01-39](https://user-images.githubusercontent.com/8877695/69916913-4a72b180-1493-11ea-9b94-4ac825f5dfa6.png)
- Ngay lập tức, team mình biết ngay trang submit message có XSS và cần bypass CSP (khá dễ)
- Và nữa, mình có 1 trang phpinfo (serverinfo.php): Mình ngỡ ngỡ, what, xss cho phpinfo làm gì ta @@
## Để thực thi alert(1), team mình làm như sau
- Submit một message với nội dung `alert(1)` rồi lấy link của message đó (.txt)
- Submit một message với nội dung `<script src="link message.txt"></script>`
Rồi, vậy là popup hiện lên, lếy cookie và submit thôi, ez challenge :v:, nhưng mà đời không như là mơ, document.cookie rỗng? Do tác giả đã set httpOnly cho cookie (ơ wtf)
- Lại nghi vấn BTC setup hỏng, mình mail bằng miệng đến anh @ducnt, anh reply bằng miệng: `Anh chỉ có thể nói, đó là một phần của challenge`. Òa, thông não, OK anh, em đi về.
- Ban đầu, mình nghĩ, tác giả sử dụng phantomjs1.9.8 (vì mình đã submit và biết UA), có khi nào phantomjs bị gì đó leak đươc cookie, hì hục google... bất thành... no hope
- Sau đó anh @jang, phát hiện rất bất ngờ, phpinfo có in ra HTTP_COOKIE của mình, thôi xong, ez challenge rồi.
![Screenshot at 2019-11-29 16-02-28](https://user-images.githubusercontent.com/8877695/69916910-49da1b00-1493-11ea-8c24-52da5a46139d.png)

- Mình ngay lập tức dùnh fetch + regex để lấy cookie của mình trước, okie, thành công. Submit bot thôi,...chờ đợi,....chờ đợi,... không thấy gì cả,... (có thể do mình sử dụng fetch)
- Mình lại lõng tõng chạy lên hỏi anh @ducnt về con bot, anh bảo: ok anh xem lại
- Ngồi chờ,...
- Sau đó mình thử submit xhr + regex nữa,..
- Ngồi chờ,...
- Sau đó đúng lúc anh @ducnt xuống xem tình hình, bot lại hoạt động như mơ ước, có flag submit để may mắn trên được một đội :/
![Screenshot at 2019-11-29 16-01-57](https://user-images.githubusercontent.com/8877695/69916912-49da1b00-1493-11ea-9773-90d6a304ad33.png)
![Screenshot at 2019-11-29 16-01-19](https://user-images.githubusercontent.com/8877695/69916914-4a72b180-1493-11ea-9135-6aebef00f395.png)
- Ơ mà source code setcookie là `fl4g`, mà BOT lại có cookie là `FLAG` kìa =)))
Chính vì điều này mà mình sử dụng regex để bắt chuỗi fl4g không thành công, may mắn là mình chuyển qua bắt cả `HTTP_COOKIE` không thì @toang
- Có thể do mình nghĩ cookie là fl4g nên regex sai, cộng thêm với việc sử dụng fetch, và việc bot loop các request nên tưởng bot không hoạt động khiến làm phiền btc khá nhiều =)))
Sau khi kết thúc cuộc thi, mình nghe nói rằng anh @tsug0d muốn payload sử dụng jQuery để send ajax, cơ mà team mình vẫn sử dụng xhr thành công @@
![image](https://user-images.githubusercontent.com/8877695/69927800-f21bce00-14eb-11ea-903e-17c393c6d382.png)

## Lời cuối cùng
- Cảm ơn 2 tác giả anh [@ducnt](https://twitter.com/ducnt_) và anh [@tsug0d](https://github.com/tsug0d)
- Cảm ơn anh [@ducnt](https://twitter.com/ducnt_) đã support em khá nhiều
- Cảm ơn BTC đã rất nỗ lực, vất vả setup challenge và hệ thống