linux目录权限探索
首先我是用docker,并且是郁师傅的docker环境https://github.com/NJUPT-coding-gay/NCTF2018/tree/master/Web/%E7%AD%BE%E5%88%B0%E9%A2%98
是最简单的签到题
dockerfile是这样的
FROM ubuntu:16.04 ENV DEBIAN_FRONTEND noninteractive RUN apt-get -y update && \ apt-get -y install php-curl php7.0-curl php-http-request2 php-picofeed apache2 php-mysql php mysql-client vim libapache2-mod-php && \ apt-get -y autoremove && \ rm -rf /var/lib/apt/lists/* COPY ./start.sh /start.sh RUN chmod +x /start.sh COPY ./index.php /var/www/html COPY ./secret.php /var/www/html RUN rm /var/www/html/index.html EXPOSE 80 CMD ["/start.sh"]
再html下传入一个小马,whoami,是www-data目录权限。这可能默认的ubuntu apache2下的用户权限
我们切入容器内部进入/var/www查看权限,默认权限为755
而html里的文件默认644权限
当不存在index.php文件时,进入网站根目录,因为html目录具有读取的权限因此可以遍历
当取消掉其他用户的查看权限后chmod o-r html
只有用户具有目录的执行权限,才能进入目录,查看其他文件。
百度到的基础只是如下
r(Read,读取):对文件而言,具有读取文件内容的权限;对目录来说,具有浏览目录的权限。 w(Write,写入):对文件而言,具有新增,修改,删除文件内容的权限;对目录来说,具有新建,删除,修改,移动目录内文件的权限。 x(eXecute,执行):对文件而言,具有执行文件的权限;对目录了来说该用户具有进入目录的权限。
因此当不想让用户能够遍历目录内的文件,但是又可以访问到的话,就设置权限为--x
当我不想让这个文件被读取的话,就把默认的4权限去掉
如果你不想让人家知道有这个文件的话,可以在.htaccess中配置重写,当访问到这样的文件时,重写到某个404的页面。
虽然2.php已经没有权限了,本身
2.php
<?php @eval($_GET['file']);echo 123;?>
当没有echo 123时,因为本身php文件无法直接看,因此页面什么都没有。当有输出123时,反而返回了
chmod o+r 2.php
因此如果文件输出不想被访问到,可以不给r权限。
但是不管给不给r或者x,命令依然会执行,只不过不能ls,但是依然能够执行到系统命令,并且cat /flag
因为默认创建的普通文件就是644权限,而目录是755权限,因此flag是可以被访问,并且只要目录被赋予了x的话,即便文件赋予0权限,依然可以执行命令,穿越目录访问到文件。
下面有别人更详细的总结。今天到此为止,睡觉。Windows下的web目录权限分配还不了解,可能是创建服务的用户的区别导致访问目录的默认用户的区别。
对于目录来说
1)只拥有读权限 可以ls 查看目录内容,不能切换进目录中去 也不能创建目录或文件
[support@node1 opt]$ ls log/
ls: cannot access log/www: Permission denied
www
[support@node1 opt]$ cd log/
-bash: cd: log/: Permission denied
[support@node1 opt]$ mkdir log/aa.txt
mkdir: cannot create directory ‘log/aa.txt’: Permission denied
2)只拥有写的权限 既不能ls 查看目录内容,也不能切换进目录中去 更不能创建目录或文件
[support@node1 opt]$ ls log/
ls: cannot open directory log/: Permission denied
[support@node1 opt]$ cd log/
-bash: cd: log/: Permission denied
[support@node1 opt]$ mkdir log/aa.txt
mkdir: cannot create directory ‘log/aa.txt’: Permission denied
3)只拥有执行权限 不能ls 查看目录内容,可以切换进目录中去 但是不能创建目录或文件
[support@node1 opt]$ ls log/
ls: cannot open directory log/: Permission denied
[support@node1 opt]$ cd log/
[support@node1 log]$ ls
ls: cannot open directory .: Permission denied
[support@node1 log]$ cd ..
[support@node1 opt]$ mkdir log/aa.txt
mkdir: cannot create directory ‘log/aa.txt’: Permission denied
4) 拥有读 写的权限 可以ls 查看目录内容,不能切换进目录中去 也不能创建目录或文件
[support@node1 opt]$ ls log/
ls: cannot access log/www: Permission denied
www
[support@node1 opt]$ cd log/
-bash: cd: log/: Permission denied
[support@node1 opt]$ mkdir log/aa.txt
mkdir: cannot create directory ‘log/aa.txt’: Permission denied
5)拥有写 执行的权限 不能ls 查看目录内容,可以切换进目录中去 也可以创建目录或文件
[support@node1 opt]$ ls log/
ls: cannot open directory log/: Permission denied
[support@node1 opt]$ cd log/
[support@node1 log]$ ls
ls: cannot open directory .: Permission denied
[support@node1 log]$ cd ..
[support@node1 opt]$ mkdir log/aa.txt
6)拥有读 执行的权限 可以ls 查看目录内容,可以切换进目录中去 但是不能创建目录或文件
[support@node1 opt]$ ls log/
aa.txt www
[support@node1 opt]$ cd log/
[support@node1 log]$ ls
aa.txt www
[support@node1 log]$ rm -rf aa.txt/
rm: cannot remove ‘aa.txt/’: Permission denied
对于文件来说
1)只拥有读权限 可以cat查看内容,不可以望文件中添加内容
[support@node1 log]$ cat test.log
[support@node1 log]$ echo 1111 > test.log
-bash: test.log: Permission denied
2)只拥有写的权限 不能cat查看文件内容,但是可以往文件中添加内容
[support@node1 log]$ cat test.log
cat: test.log: Permission denied
[support@node1 log]$ echo 1111 > test.log
3)只拥有执行权限 可以执行该文件
4) 拥有读 写的权限 可以cat查看文件内容,也可以往文件中添加内容
[support@node1 log]$ cat test.log
1111
[support@node1 log]$ echo > test.log
[support@node1 log]$ cat test.log
5)拥有写 执行的权限 不能cat查看文件内容,但是可以往文件中添加内容和执行该文件
[support@node1 log]$ echo 1111 > test.log
[support@node1 log]$ cat test.log
cat: test.log: Permission denied
6)拥有读 执行的权限 可以cat查看文件内容和执行该文件,但是不可以往文件中添加内容
[support@node1 log]$ cat test.log
1111
[support@node1 log]$ echo > test.log
-bash: test.log: Permission denied
总结 :
对于目录来说
单独拥有读权限就可以ls查看目录内容 但是不能cd 切换进目录中去
单独拥有写权限 什么也干不了 既不能ls 查看目录内容,也不能切换进目录中去 更不能创建目录或文件
单独拥有执行权限 可以cd切换进目录,但是不能ls 查看目录内容和创建文件或者目录
拥有读 执行的权限,可以ls查看目录内容 可以cd切换进目录中去
拥有写 执行的权限 可以cd切换进目录,可以创建文件或者目录
拥有读写的权限 可以ls 查看目录内容,不能切换进目录中去 也不能创建目录或文件
对于文件来说
单独拥有读权限就可以cat查看文件内容
单独拥有写权限 可以往文件中添加内容 只是不能查看添加的内容
单独拥有执行权限 如果文件是二进制文件可以执行该文件
拥有读 执行的权限,可以cat查看文件内容和执行该文件,但是不可以往文件中添加内容
拥有写 执行的权限 不能cat查看文件内容,但是可以往文件中添加内容和执行该文件
拥有读写的权限 可以cat查看文件内容,也可以往文件中添加内容
摘自https://www.cnblogs.com/pyng/p/9618395.html