访问如下
应该是一个sql
注入,输入字符1a
判断注入是字符型还是数字型
被正常解析,代表这是一个字符型的注入
使用'
引号尝试闭合SQL语句
通过报错可以看出我们输入的1'
传入后,变为了'1''
,使用or '1'='1
进行闭合
这应该是当前表里面的所有内容,但是我们不知道当前的表明是什么,使用order by 3
最后判断字段数为2
尝试使用联合查询注入union select 1,2
这里使用preg_match
正则匹配输入的不能含有select|update|delete|drop|insert|where
。
这里我们还可以继续使用show
命令,尝试使用show
命令获取一些信息
由于SQL
语句中;
代表这个SQL语句的结束,我们可以使用select user();select version()
在一行执行两条sql语句
尝试获取当前数据库所有的数据库名inject=1';show databases;%23
虽然不知道当前所在的数据库,但是可以尝试获取当前数据库下面所有的表inject=1';show tables;%23
这里有两个表1919810931114514
、words
使用show columns from 表名
获取表中字段的名称
?inject=1';show columns from words%23
在查询1919810931114514
表的时候,我出现了一些问题,经过网上查找发现,mysql数字名称的表名需要使用```符号包裹起来才可以查看,创建的表的时候也是如此
尝试获取1919810931114514
表中的字段名
inject=1';show columns from \
1919810931114514`%23 ![](/i/l/?n=23&i=blog/2442110/202311/2442110-20231127190627143-779821082.png) 我们得知
flag就在当前数据库中的
1919810931114514表中的
flag`字段中,如何查看呢?这是个问题,经过网上查找,找到了这个题目的很多方法,这里总结两个实用的方法
- 另一个查询语句
handler
- 使用
PREPARE
定义SQL
语句,然后使用EXEC
执行定义的SQL
语句