PicoCTF
Last updated
Was this helpful?
Last updated
Was this helpful?
** Web Gauntlet 2
type: sqli
vào link chall thì ta thấy như sau, có thể đoán được mình phải bypass login ở đây.
nhìn vào filter thì thấy như sau
có 2 cách có thể cmt trong sqllite là /**/ và -- đều đã bị cho vào black list, nhìn vào filter này thì có vẻ nohope, mình thử login như một user bình thường thì thấy được query như sau.
SELECT username, password FROM users WHERE username='a' AND password='â'
ở trường hợp bình thường thì mình có thể tạo chuỗi admin đồng thời cmt đống phía sau thì có thể bypass được login, nhưng ở đây đã bị filter hết các cách cmt trong sqlite.
mình nghĩ tới hướng ném tất cả những thứ dư thừa vào trong một hàm thì có thể thay thế cmt luôn.
kiểu đại loại như
SELECT username, password FROM users WHERE username='admin'||substr(' AND password=',0,0)||''
trong sqlite toán tử ||
dùng để nối chuỗi, như trường hợp trên ta đã loại bỏ được phần AND password=
mà không cần dùng tới cmt.
nhưng admin thì có trong black list nên ta sẽ tiếp tục sử dụng nối chuỗi ở đây.
vậy payload cuối cùng của bài như sau:
username: admi'||'n'||substr(
password: ,0,0)||'
check filter.php thì sẽ có flag + source code.
** Web Gauntlet 3
cũng tương tự như chall trước nhưng bây giờ bị limit ký tự ngắn hơn: len(username+pass)<25 nên việc sử dụng substr là không khả thi, mình chuyển sang doc của sqlitte để tìm kiếm một hàm thích hợp.
có vẻ hàm này là thích hợp nhất, mình thử test local với hàm này như sau
tức là nó sẽ trả về đối số đầu tiên không phải null.
vậy payload cuối của mình như sau.
username:admi'||(nullif('n',
password: ))||'
query trong db: SELECT username, password FROM users WHERE username='admi'||(nullif('n',' AND password='))||''
** X marks the spot
type: xpath injection
với hint được cho là xpath, mình search gg về bug này
thử với payload injection bình thường để bypass login thì thấy
chỉ có dòng màu xanh hiện ra -> bypass login không phải vấn đề
vậy chỉ còn lại extract password.
mình tiếp tục search blind xpath injetion.
sau khi đọc khá nhiều blog về dạng này mình nhận thấy chắc chắn phải biết cấu trúc của xml bên trong mới thực hiện query blind được, nhưng thử các cách thì đều không thể tìm được cấu trúc của xml nên mình chuyển hướng.
search gg: xpath search the entire document for a string
sử dụng //* để tìm kiếm flag trong toàn bộ document.
xác nhận blind thành công, tới đây có thể viết script để brute phần còn lại của flag.
** bitHug
type: ssrf
đề cung câp source nên ta sẽ đọc qua một lượt để tìm chỗ có thể focus vào
ở đây mình focus vào các file api, server được viết bằng type script
đầu tiên ở file auth-api.ts
nếu request được gửi từ local thì user đó sẽ được auto xác nhận là admin
đồng thời flag nằm ở repo của admin => ssrf.
ở fikle git-api.ts
tạo một web hook với điều kiện không được point to local
thực hiện push git bất kỳ sẽ trigger webhook, đây là chỗ mà ta sẽ ssrf. vì app sử dụng fetch để request tới webhook nên ta có thể sử dụng redirect ở đây -> có thể bypass được điều kiện ở add webhook
thực hiện đăng nhập và tạo mới repo với file README.md
ở table user ta thấy
đây là cách để add một user bất kỳ vào repo của mình
=> goal là ssrf add mình vào repo của admin
exploit:
clone reop của mình về
thực hiện add user như hướng dẫn. ở lệnh push cuối cùng, đồng thời bật wireshark để bắt request
ta thấy đây là post request để add user vào repo
copy payload và encode base64 như sau
copy gói tin ở dạng escape string
payload bắt đầu từ \x30\x30
ở chức năng tạo web hook
post request ta thấy mình có thể control bao gồm, url,payload ở dạng base64, và content type.
ở redirect status có 2 dạng chính là 302 và 307
302 chỉ chuyển hướng tới target với get request, còn 307 thì chuyển đồng thời cả method và data nếu có.
vậy ta tạo một file thực hiện 307 redirect như sau
mở ngrok để tunner connect ra internet
body là bs64 đã gen trước đó, content type giống với lúc push git
push bất kì để trigger web hook
ta thấy có request tới và được redirect ngay
xác nhận add user thành công bằng cách access /_/n3mo
**Super Serial
request tới robots.txt ta thấy 1 endpoint mới là admin.phps
nhưng request tới endpoint đó thì thấy 404
thử access vào index.phps
follow theo thì ta sẽ lấy đủ source
cookie.php
authentication
đọc code ta thấy, file này require cookie.php
mà ở trong cookie.php
unserialize bất kỳ cookie login nào nếu được set
class access_log có phướng thức tostring để unserialize
final payload