type
status
date
slug
summary
tags
category
icon
password
@ZZHow(ZZHow1024)
SQL Injection(SQL注入)类
含义:把SQL命令插入到Web表单递交或输入域名或页面请求的查询字符串,欺骗服务器执行恶意的SQL命令。
思路:判断是否存在注入,注入命令查询数据
实操:
1、启动靶机,观察题目界面
- 发现是一个文本框,提示说Give me your flag, I will tell you if the flag is right.。
- 怀疑可能是SQL注入,是的,标题已经说了是“EasySQL”,就是SQL注入了。
2、随便尝试提交一下
- 观察到URL后什么也没多
- 是POST方法。(用Burp Suite抓包发现有一个query=1的参数
- 没其他有用的信息了。
3、在填入的内容结尾加上’(单引号),判断是不是SQL,且是否可以注入
- 文本框内输入 1’
- 点击提交
- 什么都没有了,有可能这是一个数字型的注入,加 ‘ 就无法正常查询了
- 构建恒”真“语句,判断注入类型
- 1 or 0=0
- 返回 Nonono.
- 1’ or ‘0’=’0
- 返回 Nonono.
- 看来“恒真语句”被Ban了!
4、新方法,“堆叠注入”
- 查看数据库名:
- 1';show databases;#
- 目前还不确定1是字符型还是数字型,先加 ’ 试试
- 返回空白,再试试不加 ’
- 查看数据库名:
- 1;show databases;#
OK,出来了,实锤是数字行了,那之后的语句就不要再加 ‘ 了
- 查看表名:
- 1;show tables;#
- 查看Flag表的详细信息:1';desc Flag;#
- OMG,又被Ban了
- 但是Flag大概率就在叫“Flag”的这个表里了
5、想办法查看flag
参考大佬的wp:
“这道题目需要我们去对后端语句进行猜测,有点矛盾的地方在于其描述的功能和实际的功能似乎并不相符,通过输入非零数字得到的回显1和输入其余字符得不到回显来判断出内部的查询语句可能存在有||,也就是select 输入的数据||内置的一个列名 from 表名,进一步进行猜测即为select post进去的数据||flag from Flag(含有数据的表名,通过堆叠注入可知),需要注意的是,此时的||起到的作用是or的作用”
- 推测内部的查询语句:
- select 文本框内的数据||flag from Flag
- 所以只要查询到Flag里的全部内容即可
- 解法一
- 想办法构建select * from Flag,但是直接写*没有反应
- 借助1构建select *,1 from Flag
- 等价于select *,1||flag from Flag
- 文本框中的内容:
- *,1
- 解法二
- 想办法去掉输入的内容,构建select flag from Flag
- set sql_mode=pipes_as_concat可以将||的作用由or变为拼接字符串
- 文本框中的内容:
- 1;set sql_mode=pipes_as_concat;select 1
6、解题成功!
- 获得Flag!