xss跨站达到原理,危害和特点
他和语言没有太大关系,它大部分都是属于一个前端的漏洞,搭建一个简易的php网站存在xss跨站漏洞
访问这个网站,x=1,就输出1,
如果我们把x=<script>alert(1)</script> ,这是javascript代码,这个可以被浏览器识别和执行。
出现一个弹窗,弹窗的内容是1,而上传那一串是代码,浏览器会把那个代码执行,执行结果alert就是弹窗,1是控制弹窗的值,所以这里看到的就是弹窗一个效果,这就是一个简易的跨站漏洞。
原理就非常简单了就是一个可以控制一个变量,和可以输出出来的环境,就是代码或文件对数据进行显示或者调试出现的安全问题,我们在访问网站的时候会显示出来内容,如果这个内容收你控制的话,就可以让他显示其他内容,其他内容如果是javascript 所控制的,这个页面中给就会执行javascript的代码,javascript就是js代码,js代码是可以做一些常规的,比如用js去获取一些浏览器的信息,所访问网站的信息。
本质就是产生在前端,js代码上的漏洞,他这里执行的通常都是javascript代码,就是就是代码,js代码能干吗,他就能干嘛。一般常见的输出型函数会和他有关系,凡是输出的函数,他输出一个变量或者你能控制的值,这个地方就是产生跨站的漏洞的地方。危害就会收到javascript的代码语句影响,也就是说这个代码想实现什么攻击,通过js代码实现。浏览器内核版本也会决定这个漏洞的情况,刚刚火狐可以执行,
但是切换到ie浏览器就不可以了。
这就是跨站漏洞鸡肋的地方,跨漏洞有很多前提条件,最简单就是浏览器版本是否符合,会决定是否能执行,js代码是脚本,有一些浏览器本身有安全策略,会阻止一些js脚本执行,如果对方浏览器有检测的话,即使有漏洞也没办法执行。
他的原理就是一些输出类型函数,刚好有我们可以更改的变量,我们修改为js代码,如浏览器去执行一些命案操作。
xss跨站漏分类,反射(非储存)性,储存(持续)性,dom性
打开pikachu的靶场,演示一些反射性
在那个白框里面输出什么就会返回一个值,我们在白框里面输入js代码,就会被浏览器所识别和执行,
他这里有长度限制,打不了了,可以在
我输出地址发现,上面的网址会发生相应的变化,我们就可以把js代码输入到网址上来,
把这里的长度限制改成210,也可以。输入代码<script>alert(1)</script>,点执行,就显示出来了。
这种类型称之为反射性。
我们再看一些储存性
我们在里面属于1和2,就会出现在留言列表里面,<script>alert(1)</script>
输入这个代码执行,就会出现弹窗属于一的值,然后就会出现一种情况,刷新一下网址
两个的区别就是一个一直在攻击,一个没有,储存性我们为什么叫储存或者就是持续,就是这个攻击会一直下去,
造成持续的原因,因为他那个是留言板这个东西,我们在之后去访问可以看到之前的留言,我们把跨站语句写成留言,下一个访问的也会看到留言,也会执行,这种情况就称之为储存性,因为这个留言相当于写到了数据库里,攻击就一直持续到数据被删除结束。反射性是这里有漏洞,不去鼓噪就无法触发这个漏洞,会正常的访问,我们可以复制之前攻击的网址,在去访问也会直接攻击。两者的第一个区别就是攻击数据不会储存到对方的数据库里面去,储存性危害大一点,他会一直攻击。
dom性
打开测试靶场演示一下
查看一下网址有没有变化,
点一下出来的语句,是从dom树取出来的,查看网页源码,
带你那个有哪些费尽心思,就会触发鼠标事件onclick,指向domxxs,就回到上面来dom形式上上了,执行这个javascript代码。dom跨站的操作就在htm代码里面实现的这种atm,java式的代码,服务的和客户端看到的代码结果是一样的,而php的给客户端看到的是执行后的结果代码。
这个代码在htm里面,操作的网址本身的源代码,前端语言java,来实点一下出现别的东西的,这就是一个dom的跨站。
总结一下过程
反射型
比如可定义的是x,就把x=xiaodi,然后发出数据包x=xiaoid,到对方的x.php的文件上去,然后x.php给一个回显。
储存型
比如可定义的是x,就把x=xiaodi,然后发出数据包x=xiaoid,对方会先把它储存到数据库某一个表里面,然后在返回给x.php,之后回显出去
dom型
比如可定义的是x,就把x=xiaodi,然后发出数据包x=xiaoid,然后直接给了本地浏览器前端代码,在通过其他的给x.php,然后在回显出来。
dom型呢就是说数据给的是前端的代码,不是给的php代码,脚本代码,操作就是给到前端去了,直接给htm代码去处理了,没有给php去处理,
我们看一下那关的源码,test是传参数给他的,输入个1,test=1
test有值之后,就会执行下面的$html代码,就会去调用donxss这个函数,
var声明变量,text就是接收数据的,然后就到下面的函数,getelementbyid(dom)就是操作dom,后面给了个地址就等于xss,那个a href相当于点了那个地址就执行前面的参数,
在这个靶场里面,点这个是不会再发送数据包的,所以点了之后就直接在前端代码执行了,根本没有去到x.php里面去。
dom型可以在浏览器访问代码中分析出来有没有,而反射型和储存型除了你测试之外,不可能看到源代码。
dom型大部分都属于反射型的一种。
大家现在都知道,是一种输出型的漏洞,哪有什么是我们可以输入的时候,留言板是一个最经典的,还有购物的时候需要我们填写很多信息。我们打开一个在线购买的网址,网址的后台就是用来看到购买人的信息,什么时候发货,什么时间下单的,这些信息是我们个人填写的,对方在看你订单的信息的时候,是不是就相当于把你的信息在页面中展示,这时候写个跨站代码,对方就会执行跨站代码,以前最习惯的跨站攻击就是搞这种上去
。而我们的攻击的时候乱写个订单信息和攻击代码,然后网站后台去查看订单信息的一可垃圾信息可能没当回事,但在他查看订单信息的一刹那,跨站攻击就已经执行成功了,可以获取后台的网站,或者后台的管理者账号密码。
用这个留言板作为测试网站
直接在留言板哪里写个跨站语句<script>alert(1)</script>,点击留言,发现这个浏览器有过滤,跨站语句没有执行。
所以我们换一个可以绕过的语句,
之后在管理员界面点开查看留言,就会出现跨站执行
而那个留言的语句上面还看着是正常的留言,但已经在网页源码里面已经执行了。
如果我们把语句换成恶意攻击语句,直接就会盗取shell的,这里演示一下,就要提一下xxs跨站平台,专门来利用跨站漏洞的外网的一个平台,大部分都是免费的,自己也可以搭建一个,如果用对方的平台,那攻击出来的结果也都会储存到它的那边去.
我们打开一个xxs跨站网站用一下,进入之后可以自由选择攻击的东西,也可以选择默认选择,这里就选择的默认选择,我想获取cookie
选择默认之后给的代码
这些代码都可以直接使用,因为刚刚的网站有过滤,我们选择的是最下面的那串代码,而输入这个在对方查看管理员账户密码的时候就会执行,但是网站可能有拦截,所xss跨站网站上面没有回显出来。
老师进入了自己写网站代码的虚拟机,然后在源码上加了跨站代码,登陆后台地址
查看网站源码的时候看到跨站代码执行成功了 平台里面就有了信息。
但是cookie并没有回显出来,可能是网站上有过滤,测试一下,这个无所谓了,假如说我们已经获取到可cookie之后我们该如何突破呢,
这里把cookie修改成获取的cookie,上面地址改为后台地址,发送出去就是对方的后台地址,这个老师下节课演示,现在只是演示一个攻击的过程。
老师打开了另一个网站,这个网站上面有跨站漏洞
随便点开一个图片,这里演示一下怎么发现网站有跨站的漏洞,
在网站后面加一个单引号 ,在去访问
它报了个错误,而这个错误有显示,这就是可以显示出来的地方,符合跨站漏洞,
我们在网站后面加上跨站语句再去访问一下,夸张语句执行成功了。这就可以当作跨站写入的地方。
这里换一个xxs跨站平台方法,获取到跨站语句,然后注入在那个后面直接访问呢,但是在火狐浏览器里面跨站平台没有得到回显,查看数据包也正常,(估计之前的网站有过滤所以没有读取成功,当然也有可能是代码选取的问题,多试几次)
这时候复制地址到谷歌浏览器上来,刷新一下查看数据包发送状态早支持,再去打开跨站平台就有正常的回显啦
cookie是用户的凭据:通过凭据可以判定对方的身份信息
有一些网站会保存账户密码就是保存到凭据,而我们盗取的也就是这个凭据,如果自己没有登陆网站后台,对方获取到了cookie不管理员的cookie。因为没有登陆过后台管理的cookie和登陆的cookie不一样,这个cookie就没有什么用。
我们攻击成功的条件,第一个是对方有漏洞,对方浏览器版本不拦截,盗取的cookie对方有登陆过后台管理,上面的过滤绕过,如果对方管理员不去触发漏洞地址也不行。
刚刚上面演示的那个漏洞是不建议实战中使用的,建议不要浪费时间,根本没办法让对方管理员访问这个地址。他不和订单界面那种,管理员必须去看。
cookie和session
cookie是储存在本地上的,储存时间较长,是一些小中型网站,;例如在一个网站里面的界面过了一会儿不管他,再去访问还是原来的状态,
session,这种称为会话,是储存在服务器上的,存活时间较短,是大型网站,安全的网站都会用,例如在支付宝的时候,过了一分钟没操作,或者切屏回来让我们重新输入账号免密这就是一个典型的session型的网站。
session更安全为什么都不用session型呢,因为他是储存在服务器,虽然一次只1kb左右很小,但是网站的资源有很多,每次登陆都有一个文件,这样下去太多了就不行了,也比session要麻烦一些。
session也是有可能获取的,比如是五分钟失效,如果对方没有在操作,就很简单,获取到了,但是就五分钟刚获取到就没有了。