Web攻击(xss与sql注入)靶场复现
Web攻击(xss与sql注入)靶场复现
0x00靶机的安装与使用
实验靶机采用的是owasp broken web apps靶机,这里直接给出下载链接
https://sourceforge.net/projects/owaspbwa/files/
我们进入网站直接选择download latest version即可
下载后解压可直接得到vmx虚拟机文件
描述中给出了虚拟机的用户与密码,我们登入虚拟机后输入ifconfig命令来查看IP地址
在浏览器输入对应的ip即可进入靶场
到这里我们就可以选择自己需要使用的应用了
0x01SQL注入
这里我们选择dvwa靶场来进行我们的实验
默认用户名和密码都是admin,登陆后我们可以自行复现相应的web漏洞,同时也可以自行选择网站的安全等级
首先,我们得明白sql注入的定义:
SQL注入即是指web应用程序对用户输入数据的合法性没有判断或过滤不严,攻击者可以在web应用程序中事先定义好的查询语句的结尾上添加额外的SQL语句,在管理员不知情的情况下实现非法操作,以此来实现欺骗数据库服务器执行非授权的任意查询,从而进一步得到相应的数据信息。
通常情况下,一般进行sql注入时,第一步是判断网站是否有sql注入,再进行注入。其中Sql注入有许多的类型,我们一个一个的来进行讨论与复现
- 基于错误的sql注入
我们用单引号来判断,如果输入单引号网站报错,我们则可以判断此网站存在注入漏洞,可以进行注入,这是因为单引号在sql中是保留字符,如果在字符串中有单引号需要成对出现。我们用单引号进行闭合后,存在sql注入漏洞的网站就会报错
我们在这里输入单引号,网站弹出以下页面
说明我们的输入并入了sql查询中,也确认了网站存在sql注入
通过靶机给出的源码,我们可以看到如果我们传入了一个单引号,这个单引号会与'$id'中左边的单引号进行闭合,那么原来右边的单引号就空出来了,没有与之配对的单引号,于是造成了错误
下面给出几个函数的作用
这里我们进行具体的注入,语句如下
- 1' and updatexml(1,concat(0x7c,(select database()),0x7c),1) --'
输入进行查询后,可以看到爆出来了数据库的名称
在上面的注入语句中进行简单的变形,将database改为version,可以查到版本号等等信息
- 1' and updatexml(1,concat(0x7c,(select version()),0x7c),1) --'
所以sql注入非常的强大,也是ctf中web中考察的重要内容
2.基于布尔的注入(布尔盲注)
查看现象,能报错,但没有报错信息,正确查询也显示不了查询内容就属于布尔盲注,只存在两种状态,对或错
这时候我们通过1=1以及1=2这些语句,观察返回的状态是否不一致来进行注入
3.联合注入(union注入)
注意:union查询当查询列数与数据库列数不一致时会出现错误,但这样反过来我们可以通过不断地测试来确定数据库中一共有多少字段
比如我们在靶机中键入下列语句
- 1' union select 1 --'
出现了报错
我们查看源码得知有两个字段
于是将上述语句改为
- 1' union select 1,2 --'
此时再进行查询就爆出来了相应的数据
于是,在一般的联合注入中,我们通过不断地尝试和猜解最终可以得知表的列数。
另外一种联合注入:
- ' union select version(),database() --'
查询得到
其实就是将第一个联合查询语句中的1和2替换为我们需要查询的信息,本质都是一样的。
另一种union方法
- ' union select schema_name,2 from information_schema.schemata --
与前面的原理基本相同,爆出来
需要注意的是,那个2是拿来凑数的,是为了防止列数不对发生错误才加上去的,我们查询的有效数据只有schema_name
4.基于时间的盲注
原理就是在sql语句中调用sleep函数来休眠,页面的加载会产生一定的等待时间,通过观察页面是否延迟加载(是不是一直转圈圈)来判断是否存在注入。但考虑到网速等各方面的影响,这种盲注方式判断不一定十分精确。
示例语句
- 1' and sleep(5) --'
如果存在注入的话,让页面休眠五秒(转五秒钟圈圈)
这边可以看到明显的延迟(注意左上角转圈)
最后其实是不会返回任何具体数据的
5.总结
以上是一些注入方式的总结以及靶场复现实例,受限于时间,只复现了部分注入方式,还有一部分没有讲到,等后面有时间慢慢补充吧,这里给出两篇优秀的关于sql注入的文章(感谢实验室康爷的推送)
1https://www.jianshu.com/p/5de47d05e333
2https://www.cnblogs.com/-chenxs/p/11614129.html
0x02XSS攻击
首先,我们还是要知道xss攻击的定义
XSS攻击通常指的是通过利用网页开发时留下的漏洞,通过巧妙的方法注入恶意指令代码到网页,使用户加载并执行攻击者恶意制造的网页程序。这些恶意网页程序通常是JavaScript,但实际上也可以包括Java、 VBScript、ActiveX、 Flash 或者甚至是普通的HTML。攻击成功后,攻击者可能得到包括但不限于更高的权限(如执行一些操作)、私密网页内容、会话和cookie等各种内容。
Xss是跨站脚本的意思,简单来说,xss攻击就是利用网站没有对用户提交的数据进行转义或过滤的漏洞,将恶意代码注入到网页导致其被执行。
关于复现环境,我们依然采用dvwa靶场
Xss攻击分为两类:反射型与存储型
反射型(又叫非持型),发生请求时,xss代码出现在url中,作为参数提交并由服务器响应并由浏览器执行,在这个过程中,并不会伤害到服务器本身,因为最终恶意代码是由浏览器执行的,受害者是用户使用的机器,下面开始复现反射型xss
- 反射型xss
这里给出了一个输入框,要输入的是信息,与sql注入不同的是,sql注入是进行查询,而xss则是通过键入恶意代码进行攻击
示例
- <script>alert('xss')</script>
将上面一行代码键入后,会出现一个弹窗
我们在前端弹窗进行检查,可以看到
在检查中标出的一行里,我们发现我们键入的恶意代码已经嵌入了前端页面,所以它会执行这段代码
当然我们不仅仅能让它弹出弹窗,还可以让前端返回相应的服务器信息,用以下代码
- <script>alert(document.cookie)</script>
观察到前端返回了安全等级和session id等等,其中session id可以用于在库中查询用户名和密码,也可以直接用于登录,功能十分的强大
将前端已经被植入恶意代码的url发送给其他人,这便是一部分钓鱼链接的原理
这样的评论框同理
这就是反射型xss的基本原理,恶意攻击是通过前端实现的,而不是服务器,其通过篡改前端植入恶意代码来进行攻击,多用于钓鱼链接
下面介绍存储型xss
2.存储型xss(持久型xss)
存储型xss主要是将xss代码发送到服务器端并保存,之后每当用户进入相应的页面,服务器会连带xss代码一起发送到前端,前端正常执行就发生了xss攻击,存储型xss攻击对服务器端展开了攻击,恶意性更高,这里我们依然以上次的代码演示
- <script>alert(document.cookie)</script>
结果是一样的
不同的是,我们发现每次加载这个网站都会弹出一次上面的信息,而反射型只对特定url有效,这就是两者的区别。因为存储型的xss代码已经存入了服务器,所以每次打开对应网站就会执行一次
以上便是对存储型xss的介绍与复现,其实xss还有很多种脚本,由于时间原因,这里只做基本演示,不再过多的赘述了
3.Xss脚本的构造
关于xss的脚本构造,由于篇幅过于长,加上作者懒,给大家推荐两篇博客吧
1https://www.cnblogs.com/hqutcy/p/5748256.html
2https://www.cnblogs.com/hqutcy/p/5750584.html
0x03总结
这次对sql注入和xss脚本攻击进行了一些复现,原理掌握更加清晰了,现在知道方式和怎么运用了,说不上吃透但也有85%吧,web的路还长,慢慢来吧。
最后,感谢阅读
本文来自博客园,作者:wysng,转载请注明原文链接:https://www.cnblogs.com/wysngblogs/p/15832277.html
本作品采用知识共享署名-相同方式共享 4.0 国际许可协议进行许可。