02-SQL的基本修复

接上篇,自己编写的测试demo找到六处漏洞接下进行基本的修复

此处存在六处漏洞:

1)wecome.php页面谁都可以访问,没有进行登录判断(中)

2)在登录页面输入‘作为用户名,报错信息存在login.php的绝对路径,暴露了系统后台的敏感信息(低)

3)保存用户信息的数据表中,密码字段是明文保存不够安全(中)

4)登录页面可以进行sql注入,进而轻易实现登录(高)

5)login.php页面中使用了万能验证码(中)

6)登录功能可以被爆破,没有进而爆破防护(中)

一、使用python进行注入测试

# 利用python对PHP的登录页面进行Fuzz测试
import requests
def login_fuzz():
    # 先使用单引号进行试探
    url = 'http://192.168.74.133/security/login.php'
    data = {'username': "'", 'password': '123456', 'vscode':' 0000'}
    # resp为请求发出去得到请求的结果
    resp = requests.post(url=url,data=data)

    if 'waring' in resp.text:
        print('本登录功能存在SQL注入漏洞,可以一试')
        # 如果单引号存在利用嫌疑,则继续利用
        payload_list = ["x' or id=1#", "x' or uid=1#", "x' or userid=1#", "x' or userid=2","' or userid=1"]
        for username in payload_list:
            data={'username': username, 'password': '123456', 'vscode': ' 0000'}
            resp = requests.post(url=url,data=data)
            if "login-fail" not in resp.text:
                print(f'登录成功,payload为:{data}')
    else:
        print("通过试探,发现登录后台页面对单引号不敏感")



if __name__ == '__main__':
    login_fuzz()

二、任意访问授权页面

无论用户是否登录成功,均可以直接输入:http://192.168.74.133/secity/welcome.php访问,

所以在该页面需要进行登录判断,代码修该为:

1)在common.php中添加session_start(),让其他页面引入,便于直接使用session

2)在welcome.php页面中,源代码修改为:

 include "common.php" ;
    // common.php为公共页面
    // 修复该漏洞,在显示文本之前,先进行SESSION变量的验证
    if(!isset($_SESSION['islogin']) or $_SESSION['islogin'] != 'true'){
        die("你还没有登录,无法访问本页面");
    }
    echo '欢迎登录安全测试平台';

3)在login.php中,登录成功后添加以下代码,$_SESSION用来获取session值从而进行判断

if(mysqli_num_rows($result) == 1 ){
        echo "login-pass";
        // 失效的访问控制
        // url绕过

        // 登录成功后,记录session变量
        $_SESSION['username'] = $username;
        $_SESSION['islogin'] = 'true';
        echo " <script>location.href='welcome.php'</script> ";  
    }

三、修复login.php暴露文件路径

当在用户名输入单引号时,会引起后台报错,一方面说明后台没有对单引号进行转义处理,

导致单引号可以被注入到SQL语句中,进而导致SQL语句存在单独的一个引号,

SQL语句无法有效有效闭合,发生错误,同时,还将源代码的绝对路径暴露出来,只是敏感信息,

应该将其屏蔽,修复代码如下:

在执行SQL语句后添加or die ("sql语句执行错误")

 $result = mysqli_query($conn,$sql) or die("SQL语句执行错误");  // $result获取到的查询结果,称为结果

四、修改用户表密码为明文

1、md5

提示一:user表中password字段必须是32+位

提示二:在用户注册时,必须使用md5函数将密码加密保存

<?php
    // 使用PHP内置的md5函数
    // MD5函数用于加密字符串
    $source = "hel1o123";
    echo md5($source)
?>

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值