[Write-Up] – Webhacking.kr, Root-me

I. Webhacking.kr
  1. Chall old-45
    • Link: https://webhacking.kr/challenge/web-22/
    • Ban đầu thì có một form login và bài này cho cả source code
    • View source thì ta được đoạn mã
    • Có thể thấy đầu vào đều được lọc bởi hàm addslashes, hàm nãy sẽ thêm \ vào trước các kí tự như là '," hay \ mục đích là để làm sạch đầu vào. Sau đó còn sử dụng thêm hàm preg_match tương tự như một black list.
    • Ý tưởng ban đầu vì xác thực cả id và pw trên cùng 1 câu lệnh sql nên có thể gán id=admin' or 1=1--
    • Qua rất nhiều cách thử để có thể bypass được dấu nháy đơn nhưng đều không thành công, qua một thời gian tìm kiếm và mình tìm được blog này và ý tưởng bây giờ là tìm một kí tự khi urlencode thì kết thúc là \ và mình đã tìm được kí tự %aa\
    • Ý tưởng bây giờ sẽ là id=%aa' or id=admin--, sau một hồi loay hoay thì mình tìm được ra payload đúng để khai thác là id=%aa' or id like 0x61646d696e--+, vì dấu bằng bị chặn và không dùng được nháy đơn nên phải mã hóa ascii-hex admin.
  2. Chall 0ld-49
    • Link: https://webhacking.kr/challenge/web-24/
    • Tương tự như bài trên view-source ta được
    • Bài này có vẻ dễ hơn bài trước vì chỉ lọc qua một loạt black list, ý tưởng là sẽ gán một lv không tồn tại và thêm điều kiện id bằng admin như sau lv=0 or id='admin'
    • Vì or và khoảng trắng bị lọc nên mình đã thử bypass or bằng || và khoảng trắng bằng %0a, còn phần admin vẫn encode ascii-hex và được payload lv=0%0a||%0aid=0x61646d696e
II. Root-me
  1. SQL injection blind
    • Link: https://www.root-me.org/en/Challenges/Web-Server/SQL-injection-blind
    • Giống như chall 45 nó có một form login
    • Thử view-source cơ mà không có gì, theo thường lệ thử payload đơn giản admin'--
    • Thực sự có thể inject nhwung mục tiêu là lấy đc password, tiếp theo thử với câu lệnh union thông thường admin' union select null,null--
    • Vì tiêu đề là SQLi Blind nên mình không cố gắng để bypass nó mà chuyển sang hướng khác, sau cùng mình thử admin' and (SELECT CASE WHEN (1=1) THEN 'b' ELSE 'a' END) = 'b'--
    • Web trả về lỗi từ đó xác định được CSDL của nó dùng SQLite3, thay đổi payload một chút admin' and (SELECT CASE WHEN (tbl_name='users') THEN 'b' ELSE 'a' END FROM sqlite_master) = 'b'--
    • Vậy là xác định được tên table là users, vì request gửi đi kiểu username=admin&password=1 nên mình không kiểm tra lại và lấy luôn nó làm tên cột và kiểm tra độ dài password: admin' and (SELECT CASE WHEN (length(password)>8) THEN 'b' ELSE 'a' END FROM users WHERE username='admin') = 'b'--
    • Kiểm tra đến đây thì bị lỗi nên xác định được password có 8 kí tự, sau đó thì mình dùng burp suite để brute-force với payload: admin' and (SELECT CASE WHEN (substr(password,1,1)='a') THEN 'b' ELSE 'a' END FROM users WHERE username='admin') = 'b'--
    • Done, password: e2azO93i

Tham khảo:

  • Em Quốc Anh

Published by Nhat Truong

Hi

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s

%d bloggers like this: