目录
写在开头
在上一篇对LampSecurity:CTF7进行打靶的时候,获得ssh的登录凭据是通过拿到apache的shell权限后登录mysql数据库,在数据库中找到了登录凭据。靶机地址、打靶过程详见:
红队打靶:LampSecurity:CTF7打靶思路详解(vulnhub)
如果读者对这个靶机不敢兴趣,单纯想学习sql注入的知识,也可以继续往后看学习使用sqlmap进行POST注入和基于报错的insert型的手工注入。只不过可能读者就得自己寻找案例进行复现了。
上一篇博客中我们登录管理后台是通过8080端口的登录界面,利用SQL注入的万能密码登录成功。我们并没有对80端口进行渗透研究。同时80端口也存在一个注册和登录页面,这些地方也是有可能存在漏洞的。我们可以注册一个账号,然后研究后续的操作页面是否存在漏洞。

于是我试了试,发现一个确实有一个页面存在SQL注入,可以通过对一些文本框进行POST型的SQL注入,直接把数据库中储存的ssh凭据注入出来。注册一个账号之后,点击Resources——>Training——>Register即可

如下图就是存在SQL注入漏洞的界面:

漏洞发现
首先肯定要考虑,打靶过程中,漏洞是如何发现的。这里就是试出来的,看见输入框我们就可以输入单引号' ,看看回显会不会报错,如果出现有关sql的报错,那就说明我们输入的单引号参与了SQL的拼接,很有可能出现注入漏洞。如下图:

我们在每个输入框都输入单引号(Email行要求必须符合email格式),点击Register,看看有没有报错,根据报错信息寻找出现sql注入的位置,如下图:

还真报错了,看来确实存在SQL注入漏洞。根据这个报错信息我们还可以确认这是MySQL数据库,同时对应的SQL语句是insert型,另外基本每个文本框都可以进行注入。接下来我们开始手工测试。
手工insert型的报错注入
虽然sqlmap很强大,但工具终究知识工具,我们还是要深入理解漏洞的原理,才可以更深入的使用工具,不仅仅当脚本小子。于是我们就这个案例进行手工注入,研究insert语句相关的单引号闭合构造和基于报错的注入方式。首先我们先根据报错信息,看这个insert的语句:
insert into payment set firstname=' 这里是我们填写First Name的位置 ',lastname = 'aaa';
问题就在于我们如何将这里是我们填写First Name的位置改写为我们的payload,构造合理的闭合。如果我们在First Name的位置填写如下的字符串,即可构成闭合:
a' or 此处填写我们想执行的语句 or '
那么刚才的insert语句就会变为:

本文详细介绍了通过手工和sqlmap工具进行SQL注入的过程,以LampSecurity:CTF7靶机为例,展示了如何发现并利用POST注入漏洞获取数据库信息,包括手工构造闭合、基于报错的insert型注入以及使用sqlmap自动化注入的步骤。文章强调理解SQL注入原理的重要性,并提供了漏洞发现和利用的实战经验。
最低0.47元/天 解锁文章
770

被折叠的 条评论
为什么被折叠?



