sql注入

day29_JDBC

百般思念 提交于 2020-02-14 08:58:41
JDBC 概念 Java DataBase Connectivity Java 数据库连接, Java语言操作数据库。 JDBC本质 :其实是官方(sun公司)定义的一套操作所有关系型数据库的规则,即接口。各个数据库厂商去实现这套接口,提供数据库驱动jar包。我们可以使用这套接口(JDBC)编程,真正执行的代码是驱动jar包中的实现类。 JDBC 规范定义接口 ,具体的实现由各大数据库厂商来实现。JDBC 是 Java 访问数据库的标准规范,真正怎么操作数据库还需要具体的实现类,也就是数据库驱动。每个数据库厂商根据自家数据库的通信格式编写好自己数据库的驱动。所以我们只需要会调用 JDBC 接口中的方法即可,数据库驱动由数据库厂商提供。 JDBC 的好处: 程序员如果要开发访问数据库的程序,只需要会调用 JDBC 接口中的方法即可,不用关注类是如何实现的。 使用同一套 Java 代码,进行少量的修改就可以访问其他 JDBC 支持的数据库 使用 JDBC 开发使用到的包: JDBC 的核心 API JDBC 访问数据库的步骤 1:注册和加载驱动 导入驱动 Jar 包 2:获取连接使用DriverManager类中的getConnection方法,获取连接对象 3:Connection连接对象 获取 Statement/getConnection 执行SQL 对象 4

Statement与PreparedStatement的区别

有些话、适合烂在心里 提交于 2020-02-13 23:26:01
Statement与PreparedStatement的区别 PreparedStatement预编译SQL语句,性能好。 PreparedStatement无序拼接SQL语句,编程更简单. PreparedStatement可以防止SQL注入,安全性好。 Statement由方法createStatement()创建,该对象用于发送简单的静态的SQL语句。 PreparedStatement由方法preparedStatement()创建,该对象用于发送带有一个 或多个输入参数的SQL语句。该方法继承了Statement的所有方法。并进行了扩展。 SQL语句使用“?”作为数据占位符,使用setXxx()方法设置数据。 setXxx()方法的第一个参数谁要设置参数的序数位置,第二个参数时设置给该参数的值。 //Statement的用法 int id=111; String sql="selsect * from user where id="+id; Statement st=connection.CreateStatement(); ResultSet rs=st.executeQuery(sql); //PreparedStatement的用法 //PreparedStatement可替换变量(在SQL语句中可以包含?) String sql="select * from

Statement与PreparedStatement的区别

别等时光非礼了梦想. 提交于 2020-02-13 17:06:49
PreparedStatement预编译SQL语句,性能好。 PreparedStatement无序拼接SQL语句,编程更简单. PreparedStatement可以防止SQL注入,安全性好。 Statement由方法createStatement()创建,该对象用于发送简单的静态的SQL语句。 PreparedStatement由方法preparedStatement()创建,该对象用于发送带有一个 或多个输入参数的SQL语句。该方法继承了Statement的所有方法。并进行了扩展。 SQL语句使用“?”作为数据占位符,使用setXxx()方法设置数据。 setXxx()方法的第一个参数谁要设置参数的序数位置,第二个参数时设置给该参数的值。 //Statement的用法 int id=111; String sql="selsect * from user where id="+id; Statement st=connection.CreateStatement(); ResultSet rs=st.executeQuery(sql); //PreparedStatement的用法 //PreparedStatement可替换变量(在SQL语句中可以包含?) String sql="select * from user where id=?";

BugkuCTF web sql注入2

╄→尐↘猪︶ㄣ 提交于 2020-02-13 11:37:39
页面post方式提交表单; 所有按钮都不好用; f12检查看到action到login.php,访问一下,username和password都需要填写; 输入用户名直接提交提示用户名和密码都需要填写; 后台扫描没有结果; 经过一些列输入测试,判断admin就是用户名,但是密码不知道; 初步判断为post提交sql注入,'单引号验证一下 admin' -- # 判断应该就是这道题目就是考察的sql注入了(虽然题目也告诉了是sql注入题…) 结果存在waf;题目提示都被过滤了,用字典排查一下都过滤了哪些字符,果然过滤了很多 剩下可以使用的字符也就是题目给的那几个字符了 !,!=,=,+,-,^,% 这里就是用 - 来进行注入 预备知识 :mysql在一些运算符进行运算的时候会先观察左右两端的数据类型是否相同;不同的话就会进行数据强制的转换。 先查询表中所有数据 然后使用 select * from t where name=0 时,会将name的值转成数值型(将前面数值部分截断出来),admin会变成0,而1admin就会变成1. 然后来看 - :使用 select * from t where name='admin'-0-''; 意思是 字符串-0-字符串 会强制转换成 0-0-0 ,所以结果就是 0 主要手段就是通过burp抓包修改uname值进行布尔报错注入

SQL注入

拈花ヽ惹草 提交于 2020-02-13 00:09:09
(参考 https://www.cnblogs.com/shenbuer/p/7875419.html ) SQL注入 :   SQL注入是利用程序需要接收来自客户端用户输入的变量或URL传递的参数且这些参数是组成SQL语句的一部分而欺骗server。   简单来说就是在一些需要接收外界输入语句作为参数的SQL命令中,因为用户偶然或恶意设计导致server被欺骗而运行本不符合要求的指令。 产生原因:   在我们编写的WEB应用中对数据库查询的语句处理存在安全漏洞,忽略了对输入格式的要求及检查,导致有人利用这种漏洞设计 输入信息的格式 以达到这些嵌入的指令被误认为是正常的SQL指令在数据库中执行,从而达到对数据库的查看修改,甚至破坏数据库等严重操作    比如:我们设计的web应用中有这么一句话,是用来验证用户名及密码从而使用数据库的:   String sql = "select * from user_table where username = ' " + userName + " ' and password = ' " + password + " ' ";   正常情况我们需要输入正确的username及password 比如填入root 123456 语句变成:      select * from user_table where username = ' root

sql注入介绍

不羁的心 提交于 2020-02-12 23:42:54
1.什么是sql注入 sql注入是一种将sql代码添加到输入参数中,传递到sql服务器解析并执行的一种攻击手法。 2.正常行为,比如拿到id获取文章的内容(案例) 3. 在浏览器中人为加入参数 or 1=1(永远为真);这就产生了意想之外的行为,人为的获取了整张表的内容,达到了攻击的目的。 输入参数未经过滤,直接拼接到sql语句上,直接解析执行。 来源: https://www.cnblogs.com/yangzailu/p/11381180.html

JDBC2(SQL注入问题、PreparedStatement对象、IDEA连接数据库、Java代码实现事务、数据库连接池)

隐身守侯 提交于 2020-02-12 23:03:04
JDBC SQL注入 概述:是指web应用程序对用户输入数据的合法性没有判断或过滤不严,攻击者可以在web应用程序中事先定义好的查询语句的结尾上 添加额外的SQL语句 ,在管理员不知情的情况下实现非法操作,以此来实现欺骗数据库服务器执行非授权的任意查询,从而进一步得到相应的数据信息,导致数据泄露。 SQL语句通过 or 被拼接: import java . sql . Connection ; import java . sql . ResultSet ; import java . sql . SQLException ; import java . sql . Statement ; public class SQL 注入 { // 模拟登录业务 public static void login ( String username , String password ) { Connection conn = null ; Statement st = null ; ResultSet rs = null ; try { conn = jdbcUtils . getConnection ( ) ; st = conn . createStatement ( ) ; String sql = "select * from users where `NAME`='" +

登陆页面的Sql注入

半腔热情 提交于 2020-02-12 21:54:43
自己手工注入的知识比较薄弱,这里就记录一下注入过程 题目: 1 .登陆页面,使用sql万能密码可以登陆账号,但是flag不会自己跳出来,出题人是想让我们手工注入 常用万能密码: 'or'='or' admin admin'-- admin' or 4=4-- admin' or '1'='1'-- admin888 "or "a"="a admin' or 2=2# a' having 1=1# a' having 1=1-- admin' or '2'='2 ')or('a'='a or 4=4-- c a'or' 4=4-- "or 4=4-- 'or'a'='a "or"="a'='a 'or''=' 'or'='or' 1 or '1'='1'=1 1 or '1'='1' or 4=4 'OR 4=4%00 "or 4=4%00 'xor admin' UNION Select 1,1,1 FROM admin Where ''=' 1 -1%cf' union select 1,1,1 as password,1,1,1 %23 1 17..admin' or 'a'='a 密码随便 'or'='or' 'or 4=4/* something ' OR '1'='1 1'or'1'='1 admin' OR 4=4/* 1'or'1'='1 例子: select

CTFHub SQL注入 整数型注入

大城市里の小女人 提交于 2020-02-12 21:10:14
CTFHub SQL注入 整数型注入 强烈推荐这个网站 CTFhub https://www.ctfhub.com/ 分各个类别,题目由易到难 这题还是很基础的,有各种提示 打开是源码,?id=处存在注入 /?id=1 or 1=1 然后就是爆数据库名,information_schema三步 以下是详细步骤: ?id=1 or 1=1 union select 1,database() 得到数据库名为sqli 2. ?id=1 or 1=1 union select 1,group_concat(table_name)from information_schema.tables where table_schema='sqli' 回显得到表名 3、 ?id = 1 or 1 = 1 union select 1 , group_concat ( column_name ) from information_schema . columns where table_name = '143232859127690' 得到字段名flag 4. ?id = 1 or 1 = 1 union select 1 , group_concat ( flag ) from sqli . 143232859127690 得到flag 来源: CSDN 作者: wind lin 链接: https:

总结-SQL注入

余生颓废 提交于 2020-02-12 20:48:47
SQL 注入 : 输入用户名和密码的时候带有 SQL 语句的关键字 , 会导致 SQL 注入 ; 用户是一个专业程序员 , 输入用户名和密码的时候 , 这些信息中包含了 SQL 语句的关键字 , 并且这些关键字参与了编译过程 , 导致原 SQL 语句含义被扭曲 ; SQL 注入是存在的一种安全隐患 怎么解决 SQL 注入问题 ( 导致 SQL 的根本原因是什么 )? 原因是先进行字符串拼接再进行的编译导 , 正好将用户提供的含有 SQL 语句关键字的字符串编译进去 , 从而导致了 SQL 语句的原意 , 致 SQL 注入 ; 解决办法 : ( 第一版 ) -- 先体统 SQL 语句架构 , 对 SQL 语句框架进行预先编译 , 再给 SQL 语句框架进行赋值 , 这样即使用户提供的信息中含有 SQL 语句的关键字 , 但是这些关键字并不会参与编译 , 不起作用 , 解决 SQL 注入问题 . ( 第二版 ) -- java.sql.PreparedStatement ( 预编译的数据库操作对象 ) PreparedStatement 的父接口 :Statement 执行原理 : 先提供 SQL 语句框架 , 再使用预编译的数据库操作对象进行 SQL 语句的预先编译 , 再给 SQL 语句框架传值 , 传值的时候用户输入的信息中即使有 SQL 语句的关键字也不会参与编译 ,