目录
写在前面
1、 网站分析
2、 初步探测
3、 注入sql测试
4、获取查询长度
5、获取数据库相关信息
6、通过注入,我们拿到了数据库的初步信息
作为一个防御型小白帽
你一定要知道进攻套路
才能有相应的防御措施
声明:只做测试,发现对方的漏洞,并不进行破坏性操作
地址:http://www.xxx.com.tw/
这是一家中国TW地区的网站,看着满屏的繁体字,就不是很舒服
网站首页包括:关于我们、资料下载、联络方式等等。
这些对我们进行sql注入用处并不大
我们需要的是可以进行参数传入的页面,这样我们就可以在参数里做文章
找一下 有没有新闻列表相关的页面
页面列表详情等页面,一般都是根据不同的id 返回不同的页面
OK,我们发现了这个产品详情页面。
我们仔细观察网址结构:
http://www.xxx.com.tw/page.php?id=133
换一个id=132
返回了一个新的产品页面
说明页面是根据不同的id输入值,进行返回的
我们就找到注入口了
#语法错误探测
在网址后面添加 ' / % ! 等一些会引起查询错误的标点符号
目的就是造成后台运行错误
从而拿到数据库的报错信息
在报错信息中,获取网站的数据库版本、绝对路径等相关信息
在网址添加单引号,发现网站回复为空
说明:网站屏蔽了后台错误回显
这一点安全防护做的还可以
在id=133的页面,注入语句 and 1=2
id=133是正常查询,注入一个永远为false 的bool值 and 1=2
页面返回为空
在id=133的页面,注入永为true的bool语句 and 1=1
发现页面返回恢复正常
简单分析:注入1=2时,页面无返回值,注入1=1,返回值恢复正常。
说明我们注入的sql语句,被成功执行了。
漏洞暴露出来了!!!
成功判断地址可以注入之后
我们需要获取page.php?id=133调用的select语句内的字段数量
获取了字段数量我们才可以在后面进行union select我们自己的查询
union select 1,2,3,4,5...穷举法进行长度测试
当union的长度与page.php长度不一致时,自然会执行错误,自然就不会有返回值
当执行成功时,说明我们的注入长度猜测成功了
union select 1,2,3,4,5,6,7,8,9 需要9个字段进行union拼接
并且,我们还发现3 和 4是我们的两个注入点
#拼接注入连接
http://www.xxx.com.tw/page.php?id=133 union select 1,2,version(),current_user(),5,6,7,8,9
version() #获取数据库版本
current_user() #获取当前登录用户
database() #获取当前数据库
...
#通过将一些获取数据库信息的函数注入到查询语句中,从而获取目标数据库的信息。
数据库版本:mysql5.7.31
当前数据库:jiuyu_jiuyu
当前登录用户:jiuyu@localhost
小结:该网站并没有使用root用户来执行数据库查询,还算是比较安全
但是我们还是可以通过sql注入来获取数据库的相关表结构及数据。
未完待续(To Be Continued...)