sql注入

安全科普:SQLi Labs 指南 Part 1

我怕爱的太早我们不能终老 提交于 2020-04-10 09:39:49
安全科普:SQLi Labs 指南 Part 1 结构化查询语言,也叫做SQL,从根本上说是一种处理数据库的编程语言。对于初学者,数据库仅仅是在客户端和服务端进行数据存储。SQL通过结构化查询,关系,面向对象编程等等来管理数据库。编程极客们总是搞出许多这样类型的软件,像MySQL,MS SQL ,Oracle以及Postgresql。现在有一些程序能让我们有能力通过结构化查询来管理大型数据库。脚本小子们一定已经动手体验了类似SQL注入等这样的操作,虽然他们可能已经通过使用自动化工具例如SQL Map或者SQLNinja来实施攻击,但却还不知它真正的原理。在这篇简短的教程里,我将会尽力让你对SQL 注入是怎样工作的,攻击是怎样发生的以及什么是应用程序SQL漏洞有一个深入的理解。我们将要使用的实验室是SQLi Labs,它是一个可以从 https://github.com/Audi-1/sqli-labs 免费下载,以便我们研究学习以及编写安全的程序。所以这篇教程对于程序员和安全测试者都将是一次动手实践的机会。 来源: oschina 链接: https://my.oschina.net/u/2308739/blog/736296

CTF-攻防世界-supersqli(sql注入)

て烟熏妆下的殇ゞ 提交于 2020-04-07 17:33:45
题目 解题过程 试了一下单引号,发现存在注入,数据库类型是MariaDB 第一反应是工具跑一下>_<,跑出数据库名称:supersqli 继续跑表名,没跑出来,尝试了下执行sql,也木有任何返回。。。 看了一下当前用户是root,但不是dba,难道是木有权限。。。 再回到页面试了下,发现有过滤关键字,这应该就是工具没跑出表来的原因。 把绕过的方法挨个试了一遍,发现可以堆叠注入,查出两个表名来,但是不能select数据出来(因为关键字过滤了。。) 查询表中的字段,flag在1919810931114514这张表中 查询表中数据的方法我没想到,百度了一下,有两种:1.页面默认查的是words表,将1919810931114514的表名和words交换;2.利用mysql的预处理。 预处理语句输入如下: 1';use supersqli;set @sql=concat('s','elect * from `1919810931114514`');PREPARE pre FROM @sql;EXECUTE pre;--+ 这里很巧妙的用concat绕过了关键字的检查(这个思路厉害了,好好学习~^_^~) 知识点总结 1. MySQL表名为纯数字时(表名和保留字冲突时也是加反引号),要加反引号:show columns from `1919810931114514` 2. MySQL 官方将

如何防止sql注入

半城伤御伤魂 提交于 2020-04-07 17:13:35
举例: select admin from user where username='admin' or 'a'='a' and passwd=''or 'a'='a' 防止 SQL 注入, 使用预编译语句是预防 SQL 注入的最佳方式, 如 select admin from user where username=? And password=? 使用预编译的 SQL 语句语义不会发生改变, 在 SQL 语句中, 变量用问号? 表示。 像上面例子中, username 变量传递的'admin' or 'a'='a' 参数, 也只会当作 username 字符串来解释查询, 从根本上杜绝了 SQL 注入攻击的发生。 注意: 使用 mybaits 时 mapper 中#方式能够很大程度防止 sql 注入, $方式无法防止 sql 注入. 来源: https://www.cnblogs.com/WANGweiNote/p/12653517.html

SQL优化还凭经验?这个工具能帮你智能优化SQL

坚强是说给别人听的谎言 提交于 2020-04-06 12:54:03
前言 SQL优化是程序开发中经常遇到的问题,尤其是在程序规模不断扩大的时候。SQL的好坏不仅制约着程序的规模,影响着用户的体验,甚至威胁着信息的安全。 我们经常听到说哪家平台挂了,哪家网站被黑了,但我们不知道,其实这些平台挂了、被黑了的原因很多时候在于SQL不够健壮。SQL不够健壮易造成数据查询超时、SQL注入、信息泄漏等问题。 SQL优化归根到底是SQL语句的优化,索引的优化。由于很多数据库自带的分析工具不够强大便捷,很多时候要想写出好一点的SQL语句完全凭经验。这也是为什么有人说看一个程序员资历深不深就看他写的SQL好不好的原因。 凭经验做事不总是那么可靠的,况且也并不是人人都有那么多的经验。那如果不靠经验,那新手怎么办?答,使用SOAR! 什么是SOAR SOAR是SQL Optimizer And Rewriter的简称。SOAR是一个对SQL进行优化和改写的自动化工具,由小米人工智能与云平台的数据库团队开发与维护。现在在GitHub上有4000多星。 功能特点 SOAR有如下功能特点: 跨平台支持(支持Linux,、Mac、Windows环境) 目前只支持 MySQL 语法族协议的SQL优化 支持基于启发式算法的语句优化 支持复杂查询的多列索引优化(UPDATE, INSERT, DELETE, SELECT) 支持EXPLAIN信息丰富解读 支持SQL指纹、压缩和美化

web开发中防止SQL注入

泪湿孤枕 提交于 2020-04-05 23:04:52
web开发中防止SQL注入 一、SQL注入简介 SQL注入是比较常见的网络攻击方式之一,它不是利用操作系统的BUG来实现攻击,而是针对程序员编写时的疏忽,通过SQL语句,实现无账号登录,甚至篡改数据库。 二、SQL注入攻击的总体思路 1.寻找到SQL注入的位置 2.判断服务器类型和后台数据库类型 3.针对不同的服务器和数据库特点进行SQL注入攻击 三、SQL注入攻击实例 比如在一个登录界面,要求输入用户名和密码: 可以这样输入实现免帐号登录: 用户名: ‘or 1 = 1 – 密 码: 点登陆,如若没有做特殊处理,那么这个非法用户就很得意的登陆进去了.(当然现在的有些语言的数据库API已经处理了这些问题) 这是为什么呢? 下面我们分析一下: 从理论上说,后台认证程序中会有如下的SQL语句: String sql = "select * from user_table where username= ' "+userName+" ' and password=' "+password+" '"; 当输入了上面的用户名和密码,上面的SQL语句变成: SELECT * FROM user_table WHERE username= '’or 1 = 1 -- and password='’ """ 分析SQL语句: 条件后面username=”or 1=1 用户名等于 ” 或1=1

防SQL注入

亡梦爱人 提交于 2020-04-05 22:51:46
在一个登录界面,有时候会有人恶意进行SQL攻击,比如输入用户名,密码的时候在用户名里面输入“1 or 1=1 ' -- ”,密码随意输入。 所以一般在程序里面要防止这种攻击,采取的方式为: //过滤特征字符 private const string StrKeyWord = @"select|insert|delete|from|count(|drop table|update|truncate|asc(|mid(|char(|xp_cmdshell|exec|master|net local group administrators|net user|or|and"; private const string StrRegex = @"-|;|,|/|(|)|[|]|{|}|%|@|*|'|!"; ///<summary> ///检查字符串中是否包含Sql注入关键字 /// <param name="_key">被检查的字符串</param> /// <returns>如果包含注入true;否则返回false</returns> ///</summary> private bool CheckKeyWord(string _key) { string[] pattenString = StrKeyWord.Split('|'); string[] pattenRegex =

防SQL注入

谁都会走 提交于 2020-04-05 22:25:25
View Code 1 /// <summary> 2 /// 防注入 3 /// </summary> 4 /// <param name="content">提交的内容</param> 5 /// <returns></returns> 6 public static string PreventScriptIncludeSQL(this string content) 7 { 8 int i = 0; 9 string sqlchar = "insertinto|deletefrom|altertable|update|createtable|createview|dropview|createindex|dropindex|createprocedure|dropprocedure|createtrigger|droptrigger|createschema|dropschema|createdomain|alterdomain|dropdomain|select@|declare@|print@|char(";10 string[] sqlchars = sqlchar.Split('|');11 for (i = 0; i < sqlchars.Length; i++)12 {13 content = content.Replace(" ", "").ToLower()

SQL防注入

空扰寡人 提交于 2020-04-05 22:06:01
'替换登陆名中的单引号和双引号 Dim UserID, UserPWD As String UserID = txtUid.Text UserPWD = txtPwd.Text UserID = Replace(UserID, Chr(39), "'") UserID = Replace(UserID, Chr(34), """) UserPWD = Replace(UserPWD, Chr(39), "'") UserPWD = Replace(UserPWD, Chr(34), """) ' NB联盟防注入函数 ReqNum / ReqStr '--------------------------------------------------------------- Function ReqNum ( StrName ) ReqNum = Request ( StrName ) if Not isNumeric ( ReqNum ) then Response.Write "参数必须为数字型!" Response.End End if End Function Function ReqStr ( StrName ) ReqStr = Replace ( Request(StrName), "'", "''" ) End Function 以上面三句SQL语句

JDBC1:Statement和PreparedStatement

帅比萌擦擦* 提交于 2020-04-04 22:33:43
JDBC 1.什么是ORM ORM:在Java对象和关系数据库之间建立某种映射,就可以实现直接存取Java对象,JavaBean 2.什么是JDBC JDBC:Java Data Base Connectivity 是一个接口,可以执行SQL语句的JavaAPI 3.为什么要用JDBC 1. 数据库中的数据是给谁用的 ? 数据是给程序用的,而我们写的就是Java的程序,所以要用Java程序去连接数据库来访问数据 2.世面上有很多数据库 ,本来我们是需要根据不同的数据库学习不同的API,sun公司为了简化这个操作,提升程序员的幸福感,就定义了一套规范,就是JDBC API(接口)。对我们来说,使用不同的数据库时,只要用数据库厂商提供的数据库驱动程序即可。 4. 怎么做呢 步骤: (1)导入MySQL的驱动包 (2)装载数据库驱动程序 (3)获取到与数据库的连接 (4)获取可以执行的SQL语句的对象 (5)执行SQL语句 (6)获取结果集--不是必须有,看需求 (7)关闭连接 4.1 第一种 使用Statement作为执行SQL语句的对象: @Test public void getConnection1(){ // Connection connection=null; Statement statement=null; ResultSet resultSet=null; try{

T- SQL性能优化详解 http://www.cnblogs.com/weixing/p/3357519.html

让人想犯罪 __ 提交于 2020-04-03 21:48:14
T- SQL性能优化详解 http://www.cnblogs.com/weixing/p/3357519.html 故事开篇:你和你的团队经过不懈努力,终于使网站成功上线,刚开始时,注册用户较少,网站性能表现不错,但随着注册用户的增多,访问速度开始变慢,一些用户开始发来邮件表示抗议,事情变得越来越糟,为了留住用户,你开始着手调查访问变慢的原因。   经过紧张的调查,你发现问题出在数据库上,当应用程序尝试访问/更新数据时,数据库执行得相当慢,再次深入调查数据库后,你发现数据库表增长得很大,有些表甚至有上千万行数据,测试团队开始在生产数据库上测试,发现订单提交过程需要花5分钟时间,但在网站上线前的测试中,提交一次订单只需要2/3秒。   类似这种故事在世界各个角落每天都会上演,几乎每个开发人员在其开发生涯中都会遇到这种事情,我也曾多次遇到这种情况,因此我希望将我解决这种问题的经验和大家分享。   如果你正身处这种项目,逃避不是办法,只有勇敢地去面对现实。首先,我认为你的应用程序中一定没有写数据访问程序,我将在这个系列的文章中介绍如何编写最佳的数据访问程序,以及如何优化现有的数据访问程序。    范围   在正式开始之前,有必要澄清一下本系列文章的写作边界,我想谈的是“事务性(OLTP)SQL Server数据库中的数据访问性能优化”,但文中介绍的这些技巧也可以用于其它数据库平台。