sql注入

PHPCMS v9.6.0 wap模块 SQL注入

╄→尐↘猪︶ㄣ 提交于 2020-03-11 01:44:21
调试这个漏洞的时候踩了个坑,影响的版本是php5.4以后。 由于漏洞是由parse_str()函数引起的,但是这个函数在gpc开启的时候(也就是php5.4以下)会对单引号进行过滤\' 。 看这里:https://github.com/80vul/pasc2at 漏洞来源:https://www.seebug.org/vuldb/ssvid-92929 分析:这个漏洞要三步的过程,直接进入第三步。 根据给的poc: /phpv9.6.0/index.php?m=content&c=down&a_k=98f1bLd4Xl93HOb6nCHAem4rZNirba2Plthb5VFosbY8sc5Ge5RUOcXNmToG7KqSO4bFECOrCZKwNhkiCWbpToHPxCMsDVNT50f9b77GSaWC2sX-cwwyfhrIApZgubCyapauw4S9NTkNggs1YgGdCrk3cFXANkAC6v6UMN-be3zwZqfVLeOYdiw 可以看到应该是a_k参数出现问题,位于content目录下, down.php页面, parse_str($a_k); 以 &为 分隔符,解析变量并且注册变量,并且对url进行解码 (参考:http://php.net/manual/zh/function.parse-str.php) 我们的poc是{"aid":1,"src

(四)Mybatis 面试题

房东的猫 提交于 2020-03-10 13:52:51
Mybatis 86、Mybatis是什么? mybatis是一个持久层ORM框架。它内部封装了jdbc,使得开发更简洁,更高效。 Mybatis使开发者只需要关注sql语句本身,简化JDBC操作,不需要在关注加载驱动、创建连接、处理SQL语句等繁杂的过程。 MyBatis可以通过xml或注解完成ORM映射关系配置。 87、Mybatis和JDBC的关系? (标红) JDBC是Java提供的一个操作数据库的API; MyBatis是一个持久层ORM框架,底层是对JDBC的封装。 MyBatis对JDBC操作数据库做了一系列的优化: (1)mybatis使用已有的连接池管理,避免浪费资源,提高程序可靠性。 (2)mybatis提供插件自动生成DAO层代码,提高编码效率和准确性。 (3)mybatis 提供了一级和二级缓存,提高了程序性能。 (4)mybatis使用动态SQL语句,提高了SQL维护。(此优势是基于XML配置) (5)mybatis对数据库操作结果进行自动映射 88、什么是ORM?(标红) ORM的全称是Object Relational Mapping,即对象关系映射。 描述的是对象和表之间的映射。操作Java对象,通过映射关系,就可以自动操作数据库。 在ORM关系中,数据库表对应Java中的类,一条记录对应一个对象,一个属性对应一个列。 常见的ORM框架

JDBC之使用Statement,PreparedStatement,ResultSet

萝らか妹 提交于 2020-03-09 11:17:21
1. 创建一个获取 Connection 对象和关闭资源的工具类   在对数据库进行CRUD(①查询数据、②数据插入、③数据修改、④数据删除)操作的时候,每一个操作都需要获取Connection对象,所以我们就可以把 获取 Connection对象的过程 抽离 到一个 工具类 当中,下面是具体代码。 public final class JdbcUtil { private JdbcUtil() { } private static String url = "jdbc:oracle:thin:@127.0.0.1:1521:ORCL"; private static String user = "scott"; private static String password = "tiger"; // 通过静态代码块加载驱动类 static { try { Class.forName("oracle.jdbc.driver.OracleDriver"); } catch (ClassNotFoundException e) { throw new ExceptionInInitializerError("加载驱动类出错!!"); } } // 获取连接对象 public static Connection getConnection() throws Exception {

sql注入fuzz字典---

做~自己de王妃 提交于 2020-03-09 08:16:15
看到网上有字典,但是不是很全面,花了几个小时整理了一下自己收集的字典,分享给大家 length + handler like select sleep database delete having or as -~ BENCHMARK limit left select insert right # --+ INFORMATION -- ; ! % + xor <> ( > < ) . ^ = AND BY CAST COLUMN COUNT CREATE END case '1'='1 when admin' " length + length REVERSE ascii select database left right union " & && || oorr / // //* */* /**/ anandd GROUP HAVING IF INTO JOIN LEAVE LEFT LEVEL sleep LIKE NAMES NEXT NULL OF ON | infromation_schema user OR ORDER ORD SCHEMA SELECT SET TABLE THEN UNION UPDATE USER USING VALUE VALUES WHEN WHERE ADD AND prepare set update delete drop inset

基于约束条件的SQL攻击

隐身守侯 提交于 2020-03-09 07:24:37
一、背景 今天看了一篇 基于约束条件的SQL攻击 的文章,感觉非常不错,但亲自实践后又发现了很多问题,虽然利用起来有一定要求,不过作者的思想还是很值得学习的。原文中的主旨思想是利用数据库对空格符的特殊处理方式来达到水平越权的目的。以下内容以MySQL为例,其它数据库可能也存在这个问题(文章作者实验了MySQL和SQLite),我也在MySQL上复现了这个问题。 二、知识点 数据库字符串比较 :在数据库对字符串进行比较时,如果两个字符串的长度不一样,则会将较短的字符串末尾填充空格,使两个字符串的长度一致,比如,字符串A:[String]和字符串B:[String2]进行比较时,由于String2比String多了一个字符串,这时MySQL会将字符串A填充为[String ],即在原来字符串后面加了一个空格,使两个字符串长度一致。看如下两条查询语句: select * from users where username='Dumb' select * from users where username='Dumb ' 它们的查询结果是一致的,即第二条查询语句中Dumb后面的空格并没有对查询有任何影响。因为在MySQL把查询语句里的username和数据库里的username值进行比较时,它们就是一个字符串的比较操作,符合上述特征。 INSERT截断 :这是数据库的另一个特性

一种获取用户信息的sql攻击

无人久伴 提交于 2020-03-09 05:50:05
本文不是写SQL注入攻击,除了SQL注入攻击之外,还有一种SQL数据库的漏洞。写本文的目的主要是让开发者在构建网站时,能意思到这个安全问题。这个漏洞并不是太常见,我将为展示这种攻击手法,希望大家能引以为鉴,及时做好相应的防御措施。 在注册新用户时候,开发者可能会按照以下的逻辑来运行。 首先检查用户名密码: "SELECT * FROM users WHERE username='用户名'" 如果用户名在数据库中不存在,执行以下SQL语句 INSERT INTO users(username, password) VALUES ('用户名','密码')" 以下是验证用户的登录信息: "SELECT username FROM users WHERE username='用户名' AND password='密码' "; 按理说这并不存在安全问题。应该是不会出错了。 但是,事实并不是想的那样。攻击者仍然可以用任意用户的身份登录系统。 在进行攻击之前,首先要说一下几个注意点。 在SQL的执行过程中,字符串末尾的空格会被删除掉。比如,一个字符串“riyudeshui” ,其实等同于“ruyudeshui ” ,大部分的情况下是成立的。比如我们使用如下两个SQL语句进行查询: SELECT * FROM users WHERE username='ruyudeshui'; SELECT *

字符约束条件的SQL注入攻击

﹥>﹥吖頭↗ 提交于 2020-03-09 05:44:55
引言 目前值得高兴的是,开发者在建立网站时,已经开始关注安全问题了——几乎每个开发者都知道SQL注入漏洞了。在本文中,我将为读者介绍另一种与SQL数据库相关的漏洞,虽然它的危害性与SQL注入不相上下,但目前却很少为人所知。接下来,我将为读者详细展示这种攻击手法,以及相应的防御策略。 背景知识 最近,我遇到了一段有趣的代码,它尝试尽一切可能来保护数据库的访问安全,例如每当新用户进行注册时,将运行以下代码: <?php // Checking whether a user with the same username exists $username = mysql_real_escape_string($_GET[ 'username']); $ password = mysql_real_escape_string($_GET[ 'password']); $query = " SELECT * FROM users WHERE username= '$username'"; $res = mysql_query($query, $ database); if($res) { if(mysql_num_rows($res) > 0) { // User exists, exit gracefully . . } else { // If not, only then insert

防SQL注入完善登录

≡放荡痞女 提交于 2020-03-08 20:48:09
1、举上篇例子:我们的数据库语句是select count(1) from [dbo].[User] where UserId={user} and Pwd=’{pwd}’;当密码部分输入 ’ or 1=1–的时候,我们的{pwd}被 ’ or 1=1–取代,那么语句就变成select count(1) from [dbo].[User] where UserId={user} and Pwd=’’ or 1=1–’,将账号1001带入后则可以成功登录 2、我们判断的是查询结果大于1则登入成功,原sql通过账号密码匹配可以查询到1001账号的数据,但通过修改SQL语句也能查询到结果,1=1能查询到所有的数据,所以结果一定大于0,也就实现了不知道密码也能成功登录系统,这就是SQL注入 3、下面我们学习如何在程序中使用代码来防止SQL注入,通过SqlParameter参数化,将特殊符号转化为普通字符串即可 4、验证结果,密码输入’ or 1=1–登录失败 来源: CSDN 作者: Marilyn22 链接: https://blog.csdn.net/weixin_42862139/article/details/104737791

最全 Mybatis 使用笔记

我与影子孤独终老i 提交于 2020-03-08 14:32:21
说明:本篇文章中有部分内容参考自下面相关链接上的内容,小伙伴可自行参考.本文在其基础上进行整理并扩充部分内容. 我们从最开始的 jdbc 开始说起. public class JdbcUtil { // 单机 MySQL 支持的最大连接数是 16384 private static final String DRIVER_CLASS = "com.mysql.jdbc.Driver"; private static final String URL = "jdbc:mysql://localhost:3306/guns"; private static final String USER_NAME = "root"; private static final String PASSWORD = "123456"; //最大空闲链接 private static final int MAX_IDLE = 10000; //最的等待时间 private static final long MAX_WAIT = 30000; //最大活动链接 private static final int MAX_ACTIVE = 1000; //初始化时链接池的数量 private static final int INITIAL_SIZE = 1000; private static final

详解SQL注入原理

无人久伴 提交于 2020-03-07 13:37:19
看到有好多人在问:什么是SQL注入?我尝试google后发现,网上只有怎么SQL注入,并没有解释什么是SQL注入。在此我给大家解释一下。 在说明什么是SQL注入前先提下什么是静态页面,什么是动态页面。静态页面是一种实际存在的网页,无需经过服务器的处理,就可以直接加载读取的页面。静态页面一旦制作出来,除非修改源码,否则是无法对页面内的内容进行更改的。而动态页面与静态页面正好相反。动态页面并不是一个实际存在的网页,它的所有数据不是存储于页面上,而是存储于数据库中。只有当用户请求网页的时候,服务器才会从数据库读取数据,从而返回一个网页。所以不同的用户得到的网页内容也可能不同。举个例子,蓝莓's Blog首页就是一个典型的动态页面,不同的浏览器登陆时页面右上角提示内容也会不同,如果你是通过搜索引擎找到我的Blog的,右上角也会显示你所来自于的那个搜索引擎,如果你是直接访问本站,他会提示“您直接访问了本站! 莫非您记住了我的域名.厉害~我倍感荣幸啊 嘿嘿”,在举一个例子,比如你登陆QQ安全中兴,登陆后网页最上边会显示你的帐号,和你的称昵,这个也是一个动态页面。这点是静态页面无法办到的。而这里我们所要讲到的SQL注入就是利用动态页面的这种特性来入侵的。 其实当你打开一个动态页面的时候,就是在向服务器提交信息,服务器会根据你提交的信息,对数据库进行查询,从而返回适合你的信息。我们可以举个例子