sql注入攻击

mysql 与 python 交互

匿名 (未验证) 提交于 2019-12-02 22:06:11
from pymysql import connect #导入pymysql包 class MysqlHttp: def __init__(self,host,port,user,password,db,charset): #host:sql服务器所在的机器ip,mysql端口为3306,登录mysql的用户名及密码,db:数据库名charset:编码 utf8 self.host=host self.port=port self.user=user self.password=password self.db=db self.charset=charset def open(self): #创建链接对象 self.conn=connect(host=self.host,port=self.port,user=self.user,password=self.password,db=self.db,charset=self.charset) #创建游标对象 self.cur=self.conn.cursor() def close(self): #关闭游标对象 self.cur.close() #关闭链接 self.conn.close() def cud(self,sql,params=[]): #增删改 self.open() #开启链接 self.cur.execute(sql

sql 注入风险

匿名 (未验证) 提交于 2019-12-02 22:02:20
Ŀ¼ 参考百度 准备材料 #创建一个用户表 create table userinfo(id int primary key auto_increment,name char(12) unique not null,pwd int not null); #写入一个用户信息用于下面实验 insert into userinfo(name,pwd) values('凯歌318',666); #表结构 mysql> select * from userinfo; +------+-----------+------+ | id | name | pwd | +------+-----------+------+ | 1 | 凯歌318 | 666 | +------+-----------+------+ 1 row in set (0.00 sec) 1.永远不要信任用户的输入。对用户的输入进行校验,能够通过正则表达式,或限制长度;对单引号和 双"-"进行转换等。检查输入的数据是否具有所期望的数据格式,严格限制变量的类型,例如使用regexp包进行一些匹配处理, 或者使用strconv包对字符串转化成其他基本类型的数据进行判断。 2.永远不要使用动态拼装sql,能够使用参数化的sql或者直接使用存储过程进行数据查询存取。 3.永远不要使用管理员权限的数据库连接

[原创]Sharding-Sphere之Proxy初探

匿名 (未验证) 提交于 2019-12-02 21:59:42
大家好,拓海( https://github.com/tuohai666 )今天为大家分享Sharding-Sphere推出的重磅产品:Sharding-Proxy!在之前闪亮登场的Sharding-Sphere 3.0.0.M1中,首次发布了Sharding-Proxy,这个新产品到底表现如何呢?这次希望通过几个优化实践,让大家管中窥豹,从几个细节的点能够想象出Sharding-Proxy的全貌。更详细的MySQL协议、IO模型、Netty等议题,以后有机会再和大家专题分享。 Sharding-Proxy简介 Sharding-Proxy概览 Sharding-Proxy是Sharding-Sphere的第二个产品。它定位为透明化的数据库代理端,提供封装了数据库二进制协议的服务端版本,用于完成对异构语言的支持。目前先提供MySQL版本,它可以使用任何兼容MySQL协议的访问客户端(如:MySQL Command Client, MySQL Workbench等)操作数据,对DBA更加友好。 对应用程序完全透明,可直接当做MySQL使用。 适用于任何兼容MySQL协议的客户端。 与其他两个产品(Sharding-JDBC、Sharding-Sidecar)对比: Sharding-JDBC Sharding-Proxy Sharding-Sidecar 数据库 任意 MySQL

【网络安全】SQL注入、XML注入、JSON注入和CRLF注入科普文

瘦欲@ 提交于 2019-12-02 19:45:25
目录 SQL注入 一些寻找SQL漏洞的方法 防御SQL注入 SQL注入相关的优秀博客 XML注入 什么是XML注入 预防XML注入 JSON注入 什么是JSON注入 JSON注入的防御 CRLF注入 CRLF介绍 CRLF漏洞检测 CRLF漏洞预防 SQL注入 所谓SQL注入,是将恶意SQL命令通过某种方式提交到服务器后台,并欺骗服务器执行这些恶意的SQL命令的一种攻击方式。 —— [ 百度百科 ] 造成SQL注入漏洞原因有两个:一个是没有对输入的数据进行过滤(过滤输入),还有一个是没有对发送到数据库的数据进行转义(转义输出)。 一些寻找SQL漏洞的方法 http://host/test.php?id=100 and 1=1 //返回成功 http://host/test.php?id=100 and 1=2 //返回失败 http://host/test.php?name=rainman ‘ and ‘1’=‘1 //返回成功 http://host/test.php?name=rainman ‘ and ‘1’=‘2 //返回失败 http://host/test.php?name=rainman ‘ and ‘1’=‘2 )) //使用括号进行语句闭合 //在具有模糊搜索的地方 1)先搜索('),如果出错,说明90%存在这个漏洞。 2)然后搜索(%),如果正常返回,说明95

Python如何防止sql注入

人走茶凉 提交于 2019-12-02 12:34:07
前言 web漏洞之首莫过于sql了,不管使用哪种语言进行web后端开发,只要使用了关系型数据库,可能都会遇到sql注入攻击问题。那么在Python web开发的过程中sql注入是怎么出现的呢,又是怎么去解决这个问题的? 当然,我这里并不想讨论其他语言是如何避免sql注入的,网上关于PHP防注入的各种方法都有,Python的方法其实类似,这里我就举例来说说。 起因 漏洞产生的原因最常见的就是字符串拼接了,当然,sql注入并不只是拼接一种情况,还有像宽字节注入,特殊字符转义等等很多种,这里就说说最常见的字符串拼接,这也是初级程序员最容易犯的错误。 首先咱们定义一个类来处理mysql的操作 这个类有问题吗? 答案是:有! 这个类是有缺陷的,很容易造成sql注入,下面就说说为何会产生sql注入。 为了验证问题的真实性,这里就写一个方法来调用上面的那个类里面的方法,如果出现错误会直接抛出异常。 这个方法非常简单,一个最常见的select查询语句,也使用了最简单的字符串拼接组成sql语句,很明显传入的参数 testUrl 可控,要想进行注入测试,只需要在testUrl的值后面加上单引号即可进行sql注入测试,这个不多说,肯定是存在注入漏洞的,脚本跑一遍,看啥结果 (1064, "You have an error in your SQL syntax; check the manual

超详细SQLMap使用攻略及技巧

笑着哭i 提交于 2019-12-02 11:12:57
超详细SQLMap使用攻略及技巧 sqlmap是一个开源的渗透测试工具,可以用来进行自动化检测,利用SQL注入漏洞,获取数据库服务器的权限。它具有功能强大的检测引擎,针对各种不同类型数据库的渗透测试的功能选项,包括获取数据库中存储的数据,访问操作系统文件甚至可以通过外带数据连接的方式执行操作系统命令。 sqlmap目前最新版本为1.1.8-8,相关资源如下: 官方网站: http://sqlmap.org/ , 下载地址: https://github.com/sqlmapproject/sqlmap/zipball/master 演示视频: https://asciinema.org/a/46601 教程: http://www.youtube.com/user/inquisb/videos 1.1 sqlmap简介 sqlmap支持MySQL, Oracle,PostgreSQL, Microsoft SQL Server, Microsoft Access, IBM DB2, SQLite, Firebird,Sybase和SAP MaxDB等数据库的各种安全漏洞检测。 sqlmap支持五种不同的注入模式: l 基于布尔的盲注,即可以根据返回页面判断条件真假的注入; l 基于时间的盲注,即不能根据页面返回内容判断任何信息,用条件语句查看时间延迟语句是否执行

SQL注入汇总(手注,盲注,报错注入,宽字节,二次编码,http头部){10.22、23 第二十四 二十五天}

Deadly 提交于 2019-12-02 06:46:11
首先什么是SQL注入:   所谓SQL注入,就是通过把SQL命令插入到Web表单提交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的SQL命令。 SQL注入有什么危害?   危害:数据泄露、脱库、篡改网站、破坏数据库、植入后门、getshell(获取网站权限) 为什么会有SQL注入漏洞?   后端代码在执行的过程将用户输入的数据也当做代码来执行,违背一个原则:代码和数据相分离(本质问题)   前段传递的数据可以随意控制,参数可控;后端对前段传递过来的数据没有过滤或者过滤不严谨,最终导致SQL注入(注入的原因) 首先本人现在只学了四五种SQL注入方式,仅作为学习参看,如有错误多多见谅=。= SQL注入本人认为只要能找到注入点就简单了,大不了各种方式往上面试喽,虽然时间成本很大。 所以所只要在有跟数据库进行交互的地方就有可能出现SQL漏洞,在这些地方找注入点就很重要啦。 SQL注入常用的数据库函数及常量 常用的数据库函数以及常量 @@tmpdir 临时目录 @@datadir @@basedir 数据库所在的位置 @@version 版本 @@hostname 当前数据库名字 user() version() 版本 database() 获取数据库 concat() group_concat() concat_wa() substr():oracle,mysql,mssq

PHP代码审计:SQL注入漏洞

霸气de小男生 提交于 2019-12-02 06:38:34
当你的才华 还撑不起你的野心时 那你就应该静下心来学习 代码审计学习线上实验,都是CE一边实操,一边整理的笔记,方便以后翻看时,可快速查阅。 目录 SQL注入漏洞审计 一、宽字节注入 宽字节注入原理 宽字节注入实例 宽字节注入防御 SQL注入漏洞审计 简介: SQL注入攻击指的是通过构建特殊的输入作为参数传入Web应用程序,而这些输入大都是SQL语法里的一些组合,通过执行SQL语句进而执行攻击者所要的操作,其主要原因是程序没有细致地过滤用户输入的数据,致使非法数据侵入系统。 SQL注入的产生,是因为代码或者编码的不完善。代码的不完善往往是因为程序编写过程中没有考虑到代码的健壮性及安全性。而编码的不完善问题,只要通过规范使用几种函数就可以有效避免。介于代码和编码是两种不同层面的问题,我们将SQL注入也分为两大类: 普通SQL注入:最为常见的sql注入,由于未对用户输入进行过滤或过滤不严而产生的漏洞,分为整数型和字符型注入,通常直接通过union联合查询就可以进行数据库查询。 编码SQL注入:为了防御SQL注入,某些应用会对用户输入进行编码,但编码处理的函数本身也存在一些问题,导致可以通过输入一些编码函数不兼容的特殊字符,将输出字符变为危险数据,最常见的就是Mysql宽字节注入。 我们这里主要对宽字节注入进入叙述,后面再补充普通SQL注入的了解,如需要学习SQL注入方面知识

SQL调优集合

与世无争的帅哥 提交于 2019-12-02 05:50:27
一.创建索引 1.要尽量避免全表扫描,首先应考虑在 where 及 order by 涉及的列上建立索引 2.(1)在经常需要进行检索的字段上创建索引,比如要按照表字段username进行检索,那么就应该在姓名字段上创建索引,如果经常要按照员工部门和员工岗位级别进行检索,那么就应该在员工部门和员工岗位级别这两个字段上创建索引。 (2)创建索引给检索带来的性能提升往往是巨大的,因此在发现检索速度过慢的时候应该首先想到的就是创建索引。 (3)一个表的索引数最好不要超过6个,若太多则应考虑一些不常使用到的列上建的索引是否有 必要。索引并不是越多越好,索引固然可以提高相应的 select 的效率,但同时也降低了 insert 及 update 的效率,因为 insert 或 update 时有可能会重建索引,所以怎样建索引需要慎重考虑,视具体情况而定。 二.避免在索引上使用计算在where字句中,如果索引列是计算或者函数的一部分,DBMS的优化器将不会使用索引而使用全表查询,函数 属于计算的一种,同时在in和exists中通常情况下使用EXISTS,因为in不走索引 效率低 : select * from user where countname*22>11000(countname是索引列) 1 效率高: select * from user where countname>11000

sql注入原理,利用与防护

怎甘沉沦 提交于 2019-12-01 23:34:59
一、sql注入原理 注入攻击的本质就是把用户输入的数据当作代码来执行。所以注入攻击有两个必要条件 1.用户能够控制的输入。 2.原本程序要执行的代码,拼接了用户输入的数据。 二、sql注入分类 按照请求方法可以分为:GET请求、POST请求 按照参数类型可以分为:数字型、字符型 按照数据返回结果分为:回显、报错、盲注 盲注又分为:布尔盲注、延时盲注 三、sql注入测试方法 一般测试语句: or 1=1 --+ 'or 1=1 --+ "or 1=1 --+ )or 1=1 --+ ')or 1=1 --+ ")or 1=1--+ "))or 1=1 --+ ps: # url编码后为 %23 ,可以用 --+ 替换 常用测试函数: 函数名 作用 version() 数据库版本 user() 数据库用户名 database() 数据库名 @@datadir() 数据库路径 @@version_compile_os 操作系统版本 测试流程: 这里是在本地搭建的一个 sqli 的靶场,用来自己做练习,感觉还不错。 文章最后附带的有链接,小伙伴们可以自行下载。 1.检测sql注入类型 直接在url处添加 单引号 发现网站报错、说明sql语句出错,就可能存在注入 2.闭合sql语句   一般有两种方法:   a.使用 # 号,把本行 # 号后面的内容注释调,这样就可以避免sql语句出错