discuz漏洞重现--利用xss脱裤(重点学习exp)
in 漏洞分析 with 0 comment

discuz漏洞重现--利用xss脱裤(重点学习exp)

in 漏洞分析 with 0 comment

为什么想写这篇文章,是因为这个洞很典型的讲解了如何通过xss全自动实现管理员的操作
难得的是作者贴出了exp,非常典型的利用xss操作的exp
而且作者利用的方法还可以用来应对cookie中设置了http-only的情况。
接下来我们进入正题,首先来看一下漏洞出现的地方
/source/function/function_discuzcode.php中的parseaudio()函数,这个函数的作用是用来对富文本进行处理的
QQ20170520-165247@2x.png
我们可以看到我们输入的url没有经过什么过滤就输出到了一个敏感的地方src属性中
在这个属性中是可以执行js的,我们来看看哪个地方调用了这个函数,在同一个文件中,往上看
QQ20170520-12140@2x.png
在这个地方利用preg_replace调用了这个函数,那么我们怎么利用呢
首先我们看这个正则表达式,其实就是匹配这样的链接:
[audio]http://www.baidu.comg/2.wav[/audio]
但是它并没有检测链接的合法性,如果我们这样输入:
[audio]javascript:alert(document.cookie)//.wav[/audio]
不就能执行我们的js了吗,看看效果
QQ20170520-121932@2x.png
QQ20170520-122001@2x.png
这样就窃取到cookie了
好的,这个xss漏洞原理讲完了,接下来看看exp
QQ20170520-122133@2x.png
接下来
QQ20170520-122259@2x.png
调用了request_get(),接着看request_get()
QQ20170520-122331@2x.png
其中又调用了xhr_act().这是一个关键函数
QQ20170520-122411@2x.png
接着往下看
QQ20170520-122500@2x.png
最后一点是
QQ20170520-122539@2x.png
在xhr_act()这个函数中又调用了两个函数
一个是request_post(),这个函数的作用是模拟管理员进行数据备份的操作的
也就是发送一个特定的http请求,我们看看这个函数
QQ20170520-122630@2x.png
这里有的同学可能说data那一大串是什么鬼东西,我抓了一下备份操作的数据包给大家看一下就能明白
QQ20170520-122725@2x.png
就是完全是模拟了一个post请求,这个函数就完了,备份是备份了,但是数据库备份到哪里了呢?
我们怎么知道这个路径呢,get_database_sql_url()函数就是来获取这个路径的,我们看一下这个函数
QQ20170520-122825@2x.png
我们再看一下调用这个函数的时候参数都是什么
QQ20170520-122908@2x.png
这里可能有人可能会问为什么是upload/admincp.php?action=db&operation=import这个地址
我们备份完成后,访问这个地址的结果是这样的
QQ20170520-122957@2x.png
这个地址就是告诉我们sql文件在哪里的,这就能知道为什么可以通过正则在源码中匹配sql文件的地址了
最后get_database_content()函数就是一个发送get请求的,去下载这个sql文件
QQ20170520-123041@2x.png
到这里exp就讲完了,最后我们看看是怎么利用这个漏洞的
QQ20170520-123113@2x.png
发帖的时候在xss代码中利用document.write直接将自己的js代码写进页面
提一句这种方法也可以应对cookie中设置http-only,比如在phpwind中,csrf_token就设置了http-only
但是在页面的源代码中有csrf_token,我们可以通过这种方式在页面中获取就行了

Comments are closed.