decimal转为string sql_SQL注入详解|OWASP Top 10安全风险实践(二)

本文为一些列连载文章之一,不定期更新,计划目录如下:

OWASP介绍

SQL注入

命令注入

XML外部实体注入

XPATH注入

反射式、DOM及存储XSS

失效的身份认证和会话管理

不安全的直接对象引用

安全配置错误

敏感信息泄露

功能级访问控制缺失

跨站请求伪造

服务端请求伪造

文件上传漏洞

未验证的重定向和转发

不安全的反序列化

使用含有已知漏洞的组件

一、     注入

注入攻击漏洞,例如SQL,OS 以及 LDAP注入。这些攻击发生在当不可信的数据作为命令或 者查询语句的一部分,被发送给解释器的时候。攻击者发送的恶意数据可以欺骗解释器,以执行计划外的命令或者在未被恰当授权时访问数据。

  1. SQL注入

  • 漏洞利用演示

cbec574800499ded2e36db37cfe2fe7b.png
  • 漏洞危害说明

SQL注入攻击成功后,可导致用户数据库中存储的机密数据被窃取,更改,删除,或者上传木马文件,甚至执行系统命令以进一步获取服务器权限等。

  • 漏洞代码分析

处理用户登录的后台代码主要如下:(左右滑动查看代码)

publicbooleancheck_Sql_Login(String ipaddr) throws Exception {        getConnection();        String name = loginuser.getName();        String passwd_page = loginuser.getPassword();        boolean flag = false; // 默认返回值是false        Md5Util md5 = new Md5Util();        String passwd =md5.getMD5(passwd_page.getBytes());         // 拼凑的SQL语句,存在注入风险        String sql = "selectname from user where name=" + "'" + name + "'" + " andpassword=" + "'" + passwd + "'";        System.out.println("登录页面,拼凑SQL语句: " + sql);         try {             java.sql.Statement st = conn.createStatement();             rs =st.executeQuery(sql);             if (rs.next()) {                 flag = true;             } else {                 flag = false;             }             st.close();             System.out.println("登录页面查询结果" + "db.java.check_Sql_Login():" + flag);        } catch (Exceptione) {             e.printStackTrace();        } finally {             out.close();             conn.close();        }    return flag;    }

如果用户名tmp已经存在,输入tmp‘#即可。

如果用户名不存在,继续构建条件为true的语句,如xxx’ or 1=1or ‘1’=’1。

调试输出分别如下:

登录页面,拼凑SQL语句1: select name from user where name='tmp'#' andpassword='d41d8cd98f00b204e9800998ecf8427e'

登录页面查询结果db.java.check_Sql_Login(): true

登录页面,拼凑SQL语句1: select name from user where name='xxxxx' or1=1 or '1'='1' and password='d41d8cd98f00b204e9800998ecf8427e'

登录页面查询结果db.java.check_Sql_Login(): true

  • 漏洞代码修复

防止SQL注入可使用:(左右滑动查看代码)

     a.推荐使用预编译语句,通过prepared Statements类的set方法对参数进行检测;  

publicbooleancheck_Presql_Login() throws Exception {        getConnection();        String name = loginuser.getName();        String passwd = loginuser.getPassword();        boolean flag = false;         //定义执行的SQL代码        //区分data和code        String sql = "select* from user where name=" + "?" + " andpassword=" + "?";        pst = conn.prepareStatement(sql);        pst.setString(1,name);        Md5Util md5 = new Md5Util();        passwd = md5.getMD5(passwd.getBytes());        pst.setString(2,passwd);        System.out.println("登录页面,预编译SQL语句: " + sql);        rs = pst.executeQuery();        if (rs.next()) {            flag = true;        } else {            flag = false;        }rs.close();System.out.println("登录页面查询结果" + "db.java.check_Presql_Login():" + flag);return flag;}

     b.使用ESAPI提供的方法;(左右滑动查看代码)

publicbooleancheck_EsapiSql_Login() throws Exception {        getConnection();        String name = loginuser.getName();        String passwd = loginuser.getPassword();        boolean flag = false; // 默认返回值是false        Md5Util md5 = new Md5Util();        passwd = md5.getMD5(passwd.getBytes());                Codec mysqlCodec = newMySQLCodec(MySQLCodec.MYSQL_MODE);        String esapi_name = ESAPI.encoder().encodeForSQL(mysqlCodec,name);        String esapi_passwd = ESAPI.encoder().encodeForSQL(mysqlCodec,passwd);         // 拼凑的SQL语句,存在注入风险        String sql = "selectname from user where name=" + "'" +esapi_name + "'" + " andpassword=" + "'" + esapi_passwd+ "'";         try {            java.sql.Statement st = conn.createStatement();            rs =st.executeQuery(sql);            if (rs.next()) {                 flag = true;            } else {                 flag = false;            }            st.close();            System.out.println("登录页面查询结果" + "db.java.check_Sql_Login():"                     + flag);        } catch (Exceptione) {            e.printStackTrace();        } finally {            out.close();            conn.close();        }        return flag;    }

c.自定义过滤方法;  

1) 自定义过滤方法(左右滑动查看代码)

 protectedstaticboolean sqlValidate(String str) {        str = str.toLowerCase();//统一转为小写        String badStr = "'|and|exec|execute|insert|select|delete|update|count|drop|*|%|chr|mid|master|truncate|" +                "char|declare|sitename|netuser|xp_cmdshell|;|or|-|+|,|like'|and|exec|execute|insert|create|drop|" +                "table|from|grant|use|group_concat|column_name|" +                "information_schema.columns|table_schema|union|where|select|delete|update|order|by|count|*|" +                "chr|mid|master|truncate|char|declare|or|;|-|--|+|,|like|//|/|%|#";//过滤掉的sql关键字,可以手动添加                       String[] badStrs = badStr_miss.split("\\|");        for (int i = 0; i< badStrs.length; i++) {            if(str.indexOf(badStrs[i]) >= 0) {               System.out.println("发现非法字符:"+badStrs[i]);                returntrue;            }        }        returnfalse;}

2)对用户输入进行过滤  (左右滑动查看代码)

publicboolean check_ValidSql_Login() throws Exception {        getConnection();        String name = loginuser.getName();        String passwd = loginuser.getPassword();        boolean flag = false; // 默认返回值是false        Md5Util md5 = new Md5Util();        passwd = md5.getMD5(passwd.getBytes());         // 拼凑的SQL语句,存在注入风险        String sql = "selectname from user where name=" + "'" + name + "'" + " andpassword=" + "'" + passwd + "'";                if (sqlValidate(name)){             System.out.println("登录页面,拼凑SQL语句: " + sql);        } else {             try {                 java.sql.Statement st = conn.createStatement();                 rs = st.executeQuery(sql);                 if (rs.next()) {                     flag = true;                 } else {                     flag = false;                 }                 st.close();                 System.out.println("登录页面查询结果" + "db.java.check_Sql_Login():" + flag);             } catch (Exceptione) {                 e.printStackTrace();             } finally {                 out.close();                 conn.close();             }        }        return flag;}

作者:王爱华 新钛云服安全架构师

二十年IT行业安全咨询、安全技术和安全管理经验,拥有安全行业CISSP、CISA认证,曾任浦东中软、络安、盛大网络、平安付、沪江网等公司安全咨询顾问、安全经理、高级安全研究员、安全架构师职位。处理过互联网公司各类安全问题,包括信息基础架构安全,应用架构和代码安全,应用运维安全,数据安全和灾难恢复等。
熟悉ISO17799、等级保护、PCI-DSS、SOX等信息安全标准规范,具有支付牌照、等级保护、PCI认证的申请、实施和年审经验。熟悉Shell、Python、Java等语言,曾负责搭建metron开源大数据平台,单独开发OWASP TOP 10安全演示平台和企业信息安全管理平台等。

了解新钛云服

新钛云服正式获批工信部ISP/IDC(含互联网资源协作)牌照

深耕专业,矗立鳌头,新钛云服获千万Pre-A轮融资

原电讯盈科中国区副总裁加入新钛云服「附专访」

新钛云服,打造最专业的Cloud MSP+,做企业业务和云之间的桥梁

新钛云服一周年,完成两轮融资,服务五十多家客户

上海某仓储物流电子商务公司混合云解决方案

新钛云服出品的部分精品技术干货

OWASP Top 10安全风险实践(一)

七个用于Docker和Kubernetes防护的安全工具

运维人的终身成长,从清单管理开始|万字长文!

99%运维不知道,系统文件md5变了,竟然是因为......

OpenStack与ZStack深度对比:架构、部署、计算存储与网络、运维监控等

什么是云原生?

IT混合云战略:是什么、为什么,如何构建?

ac567d145ac46372374ef675300e46fa.png

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/271509.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

各类排序算法实现(亲测)

排序算法通常分为外部排序和内部排序&#xff0c;通常所说的八类排序属于内部排序&#xff1b; 外部排序在此不说明&#xff0c;主要给出八类排序的简单思想和实现&#xff1a; 1.插入排序 1.1 直接插入排序&#xff1a; 每次将一个新数&#xff0c;插入到已经排列好的有序…

计算机基础:声音的相关知识笔记

1、声音的相关概念 模拟声音信号&#xff1a;声波在时间和幅度上都是连续的模拟信号。 1.1 声音的组成 幅度&#xff1a;声波的振幅。计量单位是分贝&#xff08;dB&#xff09; 频率&#xff1a;声波每秒变化的次数&#xff0c;用Hz表示。人耳能听到的声音信号的频率范围20Hz~…

ansi编码_Java 字符编码

点击上方蓝字关注我们&#xff01;作者介绍王云静&#xff0c;Java 开发工程师&#xff0c;2018 年 7 月加入去哪儿网&#xff0c;目前在目的地 - 呼叫中心。曾获得过 ACM 亚洲区域赛铜牌。-----基本概念字符集字符(Character)是各种文字和符号的总称&#xff0c;包括各国家文字…

外卖和快递行业数据_下周一起,整治全面启动!锁定全市外卖、快递行业!

为加强我市外卖、快递行业电动自行车交通安全管理&#xff0c;降压预防事故&#xff0c;营造良好的通行秩序&#xff0c;下周一起(12月21日)深圳交警将开展电动自行车交通安全月暨外卖、快递行业集中整治行动。⭕圈重点⭕下周一起(12月21日)正式开展外卖、快递行业集中整治行动…

计算机基础:图形、图像相关知识笔记

1、图形、图像的基础知识 图形&#xff1a;由称为矢量的数学对象所定义的直线和曲线等组成。 图像&#xff1a;也称为栅格图像&#xff0c;由点阵图或位图图像、用像素来代表图像。每一个像素都被分配一个特点的位置和颜色值。 图形和图像之间在一定条件下可以互相转换&#xf…

计算机应用用什么样的笔记本,制图用什么笔记本好

以前人们常说的绘画都是在纸上&#xff0c;然而科技时代的到来也让绘画的方式有了改变&#xff0c;而且现实中还在发展电子商务&#xff0c;因此大家都开始使用计算机制图&#xff0c;不同的计算机制图的方式不一样&#xff0c;专业使用电脑制图的人都会对电脑比较挑剔。它们还…

【代码笔记】iOS-下拉选项cell

一&#xff0c;效果图。 二&#xff0c;工程图。 三&#xff0c;代码。 RootViewController.h #import <UIKit/UIKit.h> //加入头文件 #import "ComboBoxView.h"interface RootViewController : UIViewController {ComboBoxView *_comboBox; }end RootV…

宽量程电压电流 stm32_万用表你只会量电压电流?史上最全万用表手册,这么做你不会烧表...

一&#xff0c;万用表使用前的准备。二&#xff0c;万用表各个档位的含义。三&#xff0c;万用表测量电压。四&#xff0c;万用表测量电流。五&#xff0c;万用表测量电阻。六&#xff0c;万用表测量二极管。七&#xff0c;万用表测量电容。八&#xff0c;万用表一般的维护保养…

24个笔画顺序表_小学一年级语文26个汉语拼音字母要点+田字格儿歌,赶紧给孩子看...

126个汉语拼音字母要点汉语拼音字母表-声母表汉语中每个音节起始处的辅音可以构成声母。汉语拼音方案《声母表》规定的声母符号一共有23个。b [玻] p [坡] m [摸] f [佛]d [得] t [特] n [讷] l [勒]g [哥] k [科] h [喝] j [基] q [欺] x [希]z [资] c[雌] s [思] r [日] zh[知…

多媒体基础:动画和视频知识笔记

1、动画和视频的概念 动画&#xff1a;将静态的图像、图形等按照一定的时间顺序显示而形成的连续的动态画面。传统意义来说动画是在连续多格的胶片上拍摄的一系列画面&#xff0c;比将胶片以一定的速度放映&#xff0c;从而产生动态的视觉技术。 视频&#xff1a;活动的、连续的…

mongoDB的安装(一)

0、安装环境说明&#xff1a; linux系统&#xff1a;centos6.5 mongoDB版本&#xff1a;mongodb-linux-x86_64-rhel62-3.2.7.tgz 1、下载 mongoDB的下载&#xff1a;https://www.mongodb.com/download-center#community&#xff0c;注意选择版本 2、解压 tar -zxvf mongodb-lin…

计算机管理任务计划程序损坏,win7弹出任务计划程序窗口显示该任务映像损坏或已篡改0x80041321错误代码怎么办...

最近有win7 64位专业版系统用户到本站反馈说碰到这样一个问题&#xff0c;就是电脑突然弹出一个任务计划程序窗口&#xff0c;显示该任务映像损坏或已篡改0x80041321错误代码&#xff0c;遇到这样的问题该如何处理呢&#xff0c;本文就给大家讲解一下win7弹出任务计划程序窗口显…

Visual paradigm社区版下载及中文菜单的设置

免费的官网社区版链接为&#xff1a; https://www.visual-paradigm.com/download/community.jsp 设置中文菜单 安装之后&#xff0c;由于如果想设置中文菜单的话&#xff0c;可能会遇到麻烦&#xff0c;因为菜单太多 如下图&#xff0c;所示步骤&#xff1a; Window-->…

python画函数图像要用到的模块_教你如何绘制数学函数图像——numpy和matplotlib的简单应用...

numpy和matplotlib的简单应用 一、numpy库 1.什么是numpy NumPy系统是Python的一种开源的数值计算扩展。这种工具可用来存储和处理大型矩阵&#xff0c;比Python自身的嵌套列表&#xff08;nested list structure)结构要高效的多&#xff08;该结构也可以用来表示矩阵&#xff…

台式电脑如何使用无线网,wifi怎么连接?

随着网络的发展&#xff0c;现在无线路由器已经深入到寻常百姓家了&#xff0c;无线信号满街都是&#xff0c;但是作为台式电脑&#xff0c;却不具备wifi自动连接这个功能。那么&#xff0c;台式电脑怎么用wifi呢&#xff1f;下面小编就教大家wifi如何连接。1、电脑必须安装一块…

软件测试的缺陷管理系统有哪些,简述:一款优秀的缺陷管理系统有哪些功能特点!...

原标题&#xff1a;简述&#xff1a;一款优秀的缺陷管理系统有哪些功能特点&#xff01;什么是缺陷管理系统&#xff1f;缺陷管理系统指的是在软件生命周期中识别、管理、沟通任何缺陷的过程(从缺陷的识别&#xff0c;到缺陷的解决关闭)&#xff0c;确保缺陷被跟踪管理而不丢失…

JVM——类加载机制

虚拟机把描述类的数据从Class文件加载到内存&#xff0c;并对数据进行校验、转换解析和初始化&#xff0c;最终形成可以被虚拟机直接使用的Java类型&#xff0c;这就是虚拟机的类加载机制。 在Java语言中&#xff0c;类型的加载、连接和初始化过程都是在程序运行期间完成的&…

操作系统基础知识笔记

一、操作系统相关概念 计算机软件&#xff1a;系统软件和应用软件。 计算机系统资源&#xff1a;硬件资源、软件资源。 硬件资源&#xff1a;中央处理器、存储器、输入、输出等物理设备。 软件资源&#xff1a;以文件形式保存到存储器上的程序和数据信息。 定义&#xff1a;有效…

python一般学多久可以考试_为何Python适合初学者 一般Python要学习多久

为何Python适合初学者?一般Python要学习多久?很多人都觉得&#xff0c;Python是一门很好学的语言&#xff0c;非常适合入门。但更多人都是不清楚具体原因的。那么&#xff0c;我们不如一起来看看Python为何更适合初学者&#xff0c;为何更适合学习吧。另外&#xff0c;这门伟…

操作系统基础:进程知识笔记(一)

进程介绍 进程管理也称为处理机管理。进程主要是为了解决多道程序批处理系统和分时系统中针对多个并发执行的程序&#xff0c;用来描述系统中执行时动态变化过程。进程属于自愿分配和独立运行的基本单位。 1、进程的概念知识 1.1 程序顺序执行的特征 程序顺序执行的特征&#x…