web安全学习笔记(15)

记一下第25-26课的内容。弱口令爆破的四种模式与判断成功失败的三种方案;爆破中的验证码拦截+错误次数+IP限制+密码加密绕过 + IP获取的原理以及绕过CDN获取客户真实IP

一、弱口令的分类

1.常规弱口令:如123456,666666,888888等

2.默认弱口令:如防火墙、路由器出厂时的默认密码。

例,天融信防火墙的默认密码:

又例如,深信服防火墙默认密码Sangfor888

二、使用burp进行弱口令爆破

打开我们的靶场,找到admin登录页面后台登录

1.随便在后台输入登录信息,抓一个登录数据包,并选择"发送到Intruder"

2.通过文件加载字典,进行爆破

然后选择攻击类型为sniper,在密码处添加payload位置,设置好后,点击开始攻击:

通常而言,爆破成功所返回的"长度"字段的值要么会很大,要么会很小,会和正常返回的值不一样,不过此处登录成功和登录失败都有715的长度,这里的原因是,登录成功里面,url是非空的,登录失败里面,url是空的,然而登录成功的msg字段为"登录成功",登录失败的msg字段为"用户名或密码错误",正好抵消了字段长度差,因此具体情况要具体分析。

另外,我们在已知这里登录成功会出现"code":1字段的情况下,我们可以在攻击的结果页面,点击"设置",找到"检索-提取",选择"从相应包中获取以下项目",点击"添加",并拉选"1"的相应位置,点击"确认"。

然后我们回到结果页面,就会有相应的显示:

除了sniper类型的攻击外,burp共支持四种类型的攻击,如下图所示:

①Sniper,单向模式,就是我们刚才演示的,爆破用户名或密码

②Battering ram,可以同时爆破用户名和密码(或者其他多个变量),通常用于寻找用户名和密码相同的账户,这时就要将用户名的变量位置和密码的变量位置都添加payload位置

③Pitchfork,这里要导入多个字典。攻击同时遍历所有payload集,因此它使用每个集中的第一个payload,然后使用每个集中的第二个payload,依此类推。对于哪一个变量使用哪一个字典,遵循"从上至下,从左至右"的原则。而对于字典的设置,在payload->payload集中进行设置

④Clusterbomb,集束炸弹,类似于交集,取第一个字典中的第i个元素,与第二个字典的所有元素进行遍历。

然而在实际应用中,我们往往面临各种各样的问题,下面对几个常见的问题进行讲解:

三、实践中的问题

1.验证码校验无法爆破

我们打开有验证码登录的靶场:

随便输入用户名密码,输入对应的验证码,在burp中开启拦截,点击登录

如果我们不去请求验证码接口,验证码就不会改变,所以我们先把它send to Intruder,然后直接丢弃这个数据包。这时候页面会提示有未知错误:

如何验证网页是否存在验证码漏洞呢?我们可以在intruder里面,连续两次提交,如果都提示"用户名或密码错误",说明存在验证码漏洞,如果第一次提示"用户名或密码错误",但第二次提交就提示"验证码错误",说明这里的验证码不能这么办他。

至此总结验证码校验的绕过思路:

①在提交信息之后是否及时销毁掉了SESSION中的验证码,如果没有销毁,那么我们就可以无限调用。

②通过验证码识别软件或者某些burp插件去绕过。

③关于点触验证码(给一张图片让你依次点击文字)和滑动验证码的知识暂时不讲。

2.密码错误次数限制

实现过程:

①使用数据库进行验证,这个就很难进行爆破

②使用SESSION,就可以删除SESSION进行爆破

3.密码进行了某种加密

例如该网站的内容,我们随便输入用户名密码然后登陆,直接在网页中找到数据包,发现用户名和密码都被加密。

下面讲述尝试查看其如何加密的三种方法

在网页中找到用户名的位置,右键检查,发现其位置,并得知其name属性为username,id属性为u01。

然后进行查找,先查找其id在网页中出现的地方,发现并没有给我们提供有用的信息:

于是我们查找username,发现有相关内容,其加密可能是在此处进行的:

javascript 复制代码
    <!--
    if (document.loginForm.username.value == '') {
        document.loginForm.username.focus();
    } else {
        document.loginForm.password.focus();
    }
    //-->
    var publicKeyString = 'MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDSUmOXyQmYYSnZacp0btvAZCOvCNPtzixAp7eJmzmAG4mgy/VgrY/s1BDLh9qTNHIRWXepUtwMrf1kYul/A45qE/2oxIbeeq4238YDWQ7ModOVXR9ytEHsT0jpCFvoYfYXYZnnoWRrLIBylQeXzqxbLDxxBxGCs4AjoRKh5S7nNQIDAQAB';

    function rsa_encrypt(data) {
        var encrypt = new JSEncrypt();
        encrypt.setPublicKey(publicKeyString);
        return encrypt.encrypt(data);
    }

    function submitForm() {
        time(document.getElementById("myform"));
        var theForm = document.forms[0];
        if (theForm.username.value != '' && theForm.password.value != '') {
        	if(theForm.username.value == 'sysadmin') {
                theForm.username.value = 'admin'
            }
            theForm.password.value = rsa_encrypt(theForm.password.value);
            theForm.username.value = rsa_encrypt(theForm.username.value);
            
            theForm.submit();
        }
    }

    // 提醒后连续三次登录失败锁定账号后,出现按钮登录倒计时
    var wait = -2;

    function time(object) { //如果没有缓存或者是登录锁定前,不进行按钮禁用
        if (wait == 0 || (true)) {
            object.removeAttribute("disabled");
        } else {
            object.setAttribute("disabled", true);
            wait--;
            if (wait == 0) {
                object.value = "登录";
            } else {
                object.value = "请在" + wait + "秒后重新尝试";
            }
            setTimeout(function () {
                time(object)
            }, 1000);
        }
    }

通过查看代码,我们可以判断出这里使用了rsa加密,并且可以找到其公钥publicKeyString = 'MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDSUmOXyQmYYSnZacp0btvAZCOvCNPtzixAp7eJmzmAG4mgy/VgrY/s1BDLh9qTNHIRWXepUtwMrf1kYul/A45qE/2oxIbeeq4238YDWQ7ModOVXR9ytEHsT0jpCFvoYfYXYZnnoWRrLIBylQeXzqxbLDxxBxGCs4AjoRKh5S7nNQIDAQAB'

这样,我们就可以通过他的代码,对我们的输入进行加密,然后放到数据包里面,实现爆破。

或者也可以在burp里面实现简单的编码,要记得将最下面的框去掉勾选,此外我们可以多次编码,只需要多次add即可:

四、PHP中获取IP的原理以及绕过CDN获取客户真实IP

php 复制代码
function getClientIP(){
    //getenv()函数定义:取得系统的环境变量
    if (getenv("HTTP_CLIENT_IP")) {
        $ip = getenv("HTTP_CLIENT_IP");
    } elseif (getenv("HTTP_X_FORWARDED_FOR")) {
        $ip = getenv("HTTP_X_FORWARDED_FOR");
    } elseif (getenv("REMOTE_ADDR")) {
        $ip = getenv("REMOTE_ADDR");
    } else {
        $ip = "Unknow";
    }
    if ($ip == '::1'){
        //本地
        $ip = '127.0.0.1';
    }
    return $ip;
}

绕过CDN寻找网站真实IP的方法汇总_如何查找到网站真实ip-CSDN博客

相关推荐
非概念1 分钟前
stm32学习笔记----51单片机和stm32单片机的区别
笔记·stm32·单片机·学习·51单片机
无敌最俊朗@1 小时前
stm32学习之路——八种GPIO口工作模式
c语言·stm32·单片机·学习
EterNity_TiMe_2 小时前
【论文复现】STM32设计的物联网智能鱼缸
stm32·单片机·嵌入式硬件·物联网·学习·性能优化
Wh1teR0se2 小时前
[ACTF2020 新生赛]Upload 1--详细解析
web安全·网络安全
L_cl2 小时前
Python学习从0到1 day28 Python 高阶技巧 ⑤ 多线程
学习
前端SkyRain2 小时前
后端Node学习项目-用户管理-增删改查
后端·学习·node.js
青椒大仙KI112 小时前
24/11/13 算法笔记<强化学习> DQN算法
笔记·算法
提笔惊蚂蚁2 小时前
结构化(经典)软件开发方法: 需求分析阶段+设计阶段
后端·学习·需求分析
DDDiccc2 小时前
JAVA学习日记(十五) 数据结构
数据结构·学习