[Hack the hacker] How I p*n a XX Adu* Video system — a Reality CTF Challenges

Thu Nguyen
Jan 21, 2018 · 9 min read

“Chiều chủ nhật buồn

Nằm trong căn gác đìu hiu

Ôi tiếng hát xanh xao của một buổi chiều

Trời mưa, trời mưa không dứt

Ô hay mình vẫn cô liêu

Lại ngày chủ nhật nữa, gấu thì chả có, ae bạn bè thì đi chơi vs gấu hết.

Image for post
Image for post

Feeling rảnh háng thì mình lại tìm thị phi … =))).

Thực ra là writeup này mình đã viết được gần 1 tháng bằng tiếng anh ròi, nhưng do vài vấn đề liên quan tới *tương lai nên mình đành viết lại và bóp méo đi vài chi tiết…

.

So we start!

.

Chúng ta tạm gọi target này là XX Adult Video (XX AV) gì đó như mấy blog “Tôi đã hack X như thế nào” mà thiên hạ giựt tít nhé.

Việc pwn được system của target này do tình cờ (hihi đã pwn được rồi thì cứ nói thế cho nó phải phép thôi =)) ) .

Đúng là tình cờ, đợt đó mình có chơi CTF của bên họ tổ chức.

Và theo bản năng của 1 thằng tò mò, thì trong 2 chal của họ mình đã escape out-of-the-box và get được shell với quyền normal user trên 2 con server đó.

Chuyện làm sao để escape được thì nó là 1 quá trình khác, do thời lượng có hạn nên mình xin phép ko đề cập ở đây.

Như một thói quen, thì mình check “ifconfig” và thấy được 2 chal trên đều nằm trong 1 mạng nội bộ có ip dạng “172.26.1.xx”, nó được connect vpn đến 1 mạng khác, có lẽ là để quản lý cho dễ chăng??

Check 1 vòng 2 con server thì đều ko có khả năng get được root,

Thôi thì lại vác xẻng ra đào bới server xem có thứ gì hay ho, biết đâu lại kiếm được 1 cái service nào đó bị lỗi chăng :v.

Yeah! Sau 1 thời gian đào bới, mình đã tìm ra 1 thứ rất lạ đều tồn tại trên cả 2 server:

Image for post
Image for post

Lúc đó thì mình ko biết nó là gì cả, chỉ biết nó được chạy với quyền root, và là custom service, mà đã là custom service thì chắc chắn phải có gì đó hay ho rồi!

Image for post
Image for post

Đảo thêm vòng nữa với việc tìm tên file như trên và mình đã thấy nó trong 1 server, được đặt tại path “/home/ubuntu/”.

Có lẽ sau khi deploy thì sysad đã quên xóa nó:

Image for post
Image for post

Đã có source rồi, bắt đầu cắm mắt vào đọc code, xem flow của code, tìm bug … (đây lại là 1 quá trình khác, mình ko đề cập chi tiết)

Và sau 2 tiếng ngồi lỳ trước màn hình, mình ko tìm thấy bug nào hay 1 flow nào của code có thể khai thác được cả!

Image for post
Image for post

WP Developer!

Đọc kỹ code thì thấy nó là 1 con dạng như agent được sử dụng trong việc quản lý các server con hay đại khái như thế! (Tại chức năng của nó hơi kỳ quặc nên mình ko dám khẳng định).

Lúc này mình ko focus vào phần source code của client nữa mà bắt đầu chuyển qua xem xét “how this agent interact with the mother server”!

Con agent này connect tới server và gửi dữ liệu thông qua SOAP, hoặc thứ gì đó giống như vậy!

Đại khái là khi đơn giản hóa nó trông như thế này:

Image for post
Image for post

Thêm vào đó: Việc truyền tải qua lại giữa agent và server được encrypt bằng 1 khóa nào đó định trước.

Nhưng mà ko quan tâm lắm, mình đang pwn con agent rồi mà!

Sau 1 vài tiếng suy nghĩ, mình quyết định focus vào con server kia, check các giao thức của nó.

Vì bất kể nó là gì, chỉ cần có input là có thể khai thác!

Image for post
Image for post

1 ngày và 1 đêm, cùng với 1 vài cốc cafe + bò húc…

Finally and Luckily, …

Mình đã tìm thấy 1 lỗi SQL Injection có thể khai thác ở con server kia!

.

.

Chưa kịp quẩy thì mình chợt nhận ra là việc query bị giới hạn dưới 50 char :(.

Có lẽ là query được truyền vào 1 stored procedure thành đối số, nên bị limit 50 char chăng???

Mình chỉ query được table name đại khái như này:

Image for post
Image for post

Còn khi query dài hơn sẽ bị lỗi do query bị cắt mất phần đuôi :(.

Image for post
Image for post

Ko tìm được cách bypass cái đó, mình đành nghĩ theo 1 hướng khác.

Lúc này mình nhớ ra, là MSSQL có thể exec được command, và nếu may mắn thì còn được exec với quyền system luôn =)).

Yeah! Với server này thì xp_cmdshell đã bị disabled!

( =))) Giả như mình check mà thấy nó được enable thì sẽ dừng lại ngay, vì đã có kẻ pwn system này trước mình. )

.

Tiếp theo mình đi tìm các query để enable xp_cmdshell,

Và rất may mắn và thần kỳ: tất cả các query để enable đều có chiều dài dưới 50 char!!!!

Image for post
Image for post

Để verify lại thì mình thử gửi ping request ra ngoài,

Lại may mắn nữa, =))) Mình đã nhận được ping request đến từ server này bằng 1 con server nằm ngoài mạng:

Image for post
Image for post

F*ck yeah!!!!!

Nếu tiếp tục, mình sẽ gặp trường hợp blind RCE.

Và ko đơn giản chút nào: Limit 20 char, no execution results!!!!!

Hmm, vậy khá giống 1 chall CTF trong thực tế!

Mình đã chơi CTF được 3 tháng, nó đủ cho mình nhận thấy challenge này hoàn toàn “solvable”!

.

.

Skipping stuck time

Image for post
Image for post

.

.

Trước đó, với vài hệ thống của khách, mình cũng gặp trường hợp gần giống như vậy:

Khi đó mình sử dụng “echo <hex content> > file” để tại ra file dưới dạng hex.

Và sau đó kết hợp với “certutil -decodehex file_in file_out” để decode file hex kia thành 1 file binary mới.

Certutil thì là built-in function của windows rồi, nên ta ko cần phải lo về chuyện nó có thực thi đc hay ko!

Vậy bây giờ ta có 1 scenario như thế này:

SQL Injection -> RCE -> append each hex byte of exe to a temp file -> write the commands “certutil -decodehex file_in file_out” to a bat file (write each two char using “echo|set /p='<2 char here>’>>file” -> use that bat file to decode hex to exe file -> run exe!

Tiếp theo là phải suy nghĩ tới việc run file exe!

Rất có thể server có con AV nào đó, nếu như ném malware lên thì chắc chắn bị tóm ngay. (Chủ yếu là mình muốn report đường đường chính chính nên ko vi phạm điều khoản thôi =)) )

Vậy mình quyết định sử dụng “nc.exe” do khi check lại thì đa số AV trên mạng đều không detect nó là malicous file và cũng nhẹ nữa!

Nghĩ lại 1 chút, file “nc.exe” nặng vài chục kB, mỗi lần mình chỉ send được vài byte, như vậy sẽ tốn rất nhiều tgian, và lại cũng ko chính xác nữa.

Có 1 giải pháp thay thế, là mình sử dụng powershell để download netcat về cho đỡ!

Image for post
Image for post

Sau vài giờ vướng bởi những thứ logic linh tinh,…

Cuối cùng mình đã kéo nc.exe về thành công và chạy nó!!!!!

Image for post
Image for post
Image for post
Image for post

Yeah!

Vậy là đúng như mình dự đoán, khi setup server thì sysad đã để MSSQL chạy với quyền system =))).

Chuyện tới đây có thể kết thúc được rồi…

But …

.

.

Image for post
Image for post

We need to go deeper!!

Đây là con server có vài trăm agent đang bị control bởi nó, và mình đang cầm quyền SYSTEM của con server này…

Hmm…

Image for post
Image for post

.

Quay lại code của con agent:

Image for post
Image for post

Ở đây file updatesensor được call vào lúc 12h bởi cronjob.

Image for post
Image for post

Còn đây là 1 phần quan trọng của file updatesensor sẽ được thực thi!

Như vậy, vào lúc 12h đêm, con agent này sẽ connect đến server để check xem có ver mới hay ko.

Nếu như có ver mới thì ngay lập tức nó sẽ down ver mới về, kill agent process và chạy agent mới.

Và hiện tại mình đang cầm quyền system của server này!

Như vậy, giả sử như mình chỉ cần sửa file version từ server, thay vài dòng code bên trong file agent và đến lúc 12h tất cả các agent sẽ được thay thế bằng agent mới mà mình đã inject code vào!

=> Mass ROOT REMOTE CODE EXECUTION!

Nghĩa là tất cả các server đang sử dụng agent này sẽ bị pwn!!!

Sau khi mình check lại thì có tất cả 230 con agent khác sẽ bị pwn nếu như kịch bản này xảy ra:

Image for post
Image for post

!!!

Và ngay lập tức mình đã tìm cách liên lạc với nhà sản xuất để họ fix bug này.

Do đợt đó vướng 1 “event lớn” bên họ nên việc fix bị delay mất vài ngày!

Image for post
Image for post

Và vài tuần sau đó:

Và cũng vài ngày sau đó :(

Image for post
Image for post

Tưởng có tiền tiêu tết rồi …

Hơi buồn 1 chút, nhưng cũng thấy nhẹ lòng vì đỡ 1 khoản cho bố mẹ ở quê.

.

.

Ngoài lề 1 chút…

Vừa rồi có join giải “ma-tét” để kiếm tí tiền ăn tết chơi mà khó quá :(.

Report BTC fix bug, loanh quanh thế nào bug cũ ko fix mà lại chòi ra thêm cái bug nữa :(

Image for post
Image for post

Và cuối cùng BTC quyết định drop chal luôn,…

Image for post
Image for post

Hazz, mà thôi chuyện qua rồi thì coi như xong đi.

.

.

Chủ nhật buồn lại càng buồn thêm, Hazzz.

“Bâng khuâng mình ta lạc trôi giữa đời
Ta lạc trôi giữa trời !!!!

Image for post
Image for post

nightst0rm

NightSt0rm is a group of IT security researchers…

Medium is an open platform where 170 million readers come to find insightful and dynamic thinking. Here, expert and undiscovered voices alike dive into the heart of any topic and bring new ideas to the surface. Learn more

Follow the writers, publications, and topics that matter to you, and you’ll see them on your homepage and in your inbox. Explore

If you have a story to tell, knowledge to share, or a perspective to offer — welcome home. It’s easy and free to post your thinking on any topic. Write on Medium

Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store