signed

QiShunwang

“诚信为本、客户至上”

【渗透测试实战】具体案例——讲讲SQL注入攻击是怎么回事?

2021/4/26 16:08:11   来源:

目录

写在前面

1、 网站分析

2、 初步探测

3、 注入sql测试

4、获取查询长度

5、获取数据库相关信息

6、通过注入,我们拿到了数据库的初步信息


写在前面

作为一个防御型小白帽

你一定要知道进攻套路

才能有相应的防御措施

声明:只做测试,发现对方的漏洞,并不进行破坏性操作

 


 

1、 网站分析

地址:http://www.xxx.com.tw/

这是一家中国TW地区的网站,看着满屏的繁体字,就不是很舒服

网站首页包括:关于我们、资料下载、联络方式等等。

这些对我们进行sql注入用处并不大

我们需要的是可以进行参数传入的页面,这样我们就可以在参数里做文章

 

 

找一下 有没有新闻列表相关的页面

页面列表详情等页面,一般都是根据不同的id 返回不同的页面

OK,我们发现了这个产品详情页面。

我们仔细观察网址结构:

http://www.xxx.com.tw/page.php?id=133

 

换一个id=132

返回了一个新的产品页面

说明页面是根据不同的id输入值,进行返回的

我们就找到注入口了

 

 

2、 初步探测

#语法错误探测在网址后面添加 ' / % ! 等一些会引起查询错误的标点符号目的就是造成后台运行错误从而拿到数据库的报错信息在报错信息中,获取网站的数据库版本、绝对路径等相关信息

 

在网址添加单引号,发现网站回复为空

说明:网站屏蔽了后台错误回显

这一点安全防护做的还可以

 

3、 注入sql测试

在id=133的页面,注入语句 and 1=2

id=133是正常查询,注入一个永远为false 的bool值 and 1=2

页面返回为空

在id=133的页面,注入永为true的bool语句 and 1=1

发现页面返回恢复正常

简单分析:注入1=2时,页面无返回值,注入1=1,返回值恢复正常。

说明我们注入的sql语句,被成功执行了。

 

漏洞暴露出来了!!!

 

4、获取查询长度

成功判断地址可以注入之后

我们需要获取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是我们的两个注入点

 

 

5、获取数据库相关信息

#拼接注入连接http://www.xxx.com.tw/page.php?id=133 union select 1,2,version(),current_user(),5,6,7,8,9version()       #获取数据库版本current_user()  #获取当前登录用户database()      #获取当前数据库...#通过将一些获取数据库信息的函数注入到查询语句中,从而获取目标数据库的信息。

 

 

 

 

6、通过注入,我们拿到了数据库的初步信息

数据库版本:mysql5.7.31

当前数据库:jiuyu_jiuyu

当前登录用户:jiuyu@localhost

 

小结:该网站并没有使用root用户来执行数据库查询,还算是比较安全

但是我们还是可以通过sql注入来获取数据库的相关表结构及数据。

 

未完待续(To Be Continued...)