第一关-key又又找不到了

http://lab1.xseclab.com/xss1_30ac8668cd453e7e387c76b132b140bb/index.php

简单的 302 跳转,bp 抓包

第二关-快速口算

http://lab1.xseclab.com/xss2_0d557e6d2a4ac08b749b61473a075be1/index.php

两秒口算出结果,只能用脚本了

python脚本如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
import requests
s= requests.Session()
r=s.get('http://lab1.xseclab.com/xss2_0d557e6d2a4ac08b749b61473a075be1/index.php')
x=r.text.find('=<input')
si=r.text[228:x]
si=eval(si)
payload={
'v':si
}
r=s.post('http://lab1.xseclab.com/xss2_0d557e6d2a4ac08b749b61473a075be1/index.php',data=payload)
print(r.text)



#<html>
# <head>
# <meta http-equiv=Content-Type content="text/html;charset=utf-8">
# </head>
# <body>key is 123iohHKHJ%^&*(jkh </body>
#</html>

第三关-这个题目是空的

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

不懂啥意思。。。 试了一下提交 null 就正确了

第四关-怎么就是不弹出key呢?

http://lab1.xseclab.com/xss3_5dcdde90bbe55087eb3514405972b1a6/index.php

点击了也没反应,查看源代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
<html>
<head>
<meta http-equiv="content-type" content="text/html;charset=utf-8">
<script>

function alert(a){
return false;
}
document.write=function(){
return false;
}
function prompt(a){
return false;
}
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"+d);
}
</script>
</head>
<body>
<a href="javascript:a();">_点击之后怎么没反应呢?说好的弹窗呢?__</a>
</body>
</html>

发现代码中自定义了一个 alert 函数,覆盖了js代码的系统函数 alert()

代码完整复制到本地的html文件,然后把这个 alert() 函数删除了,在打开就行

第五关-逗比验证码第一期

http://lab1.xseclab.com/vcode1_bcfef7eacf7badc64aaf18844cdb1c46/index.php

用bp抓包分析了一下,发现验证码在验证正确后也不会失效,果真逗比

登陆密码是4位纯数字数,第一位不为 0 用 bp 爆破一下就出来了

第六关-逗比验证码第二期

http://lab1.xseclab.com/vcode2_a6e6bac0b47c8187b09deb20babc0e85/index.php

题目提示:验证便失效的验证码 ,不能用上一关的方法,还是用 bp 分析

发现不设置验证码就能绕过验证码,接着还是老办法用 bp 爆破

第七关-逗比的验证码第三期(SESSION)

http://lab1.xseclab.com/vcode3_9d1ea7ad52ad93c04a837e0808b17097/index.php

同样用上面的办法就能做出来,然后提示是 session ,看了一下 writeup

验证码发布的流程

  1. 显示表单
  2. 显示验证码(调用生成验证码的程序),将验证码加密后放进 session 或者 cookie
  3. 用户提交表单
  4. 核对验证码无误、数据合法后写入数据库完成
    用户如果再发布一条,正常情况下,会再次访问表单页面,验证码图片被动更新, session 和 cookie 也就跟着变了
    但是灌水机操作不一定非要使用表单页面,它可以直接模拟 post 向服务端程序发送数据,这样验证码程序没有被调用,当然 session 和 cookie 存储的加密验证码就是上次的值,也就没有更新,这样以后无限次的通过post直接发送的数据,而不考虑验证码,验证码形同虚设!
    所以,在核对验证码后先将 session 和 cookie 的值清空,然后做数据合法性判断,然后入库!这样,就能避免这种逗比的情况出现

所以爆破的时候只要把 cookie 给清了就能绕过验证码了

第八关-微笑一下就能过关了

http://lab1.xseclab.com/base13_ead1b12e47ec7cc5390303831b779d47/index.php

http://lab1.xseclab.com/base13_ead1b12e47ec7cc5390303831b779d47/index.php?view-source中源码泄露

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
<?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);
}
?>

需要绕过地方

if (preg_match ('/_/', $_SERVER['QUERY_STRING'])) $smile = 0

if (@file_exists ($_GET['^_^'])) $smile = 0

@file_get_contents ($_GET['^_^'])=== "(●'◡'●)")

if (preg_match ('/_/', $_SERVER['QUERY_STRING'])) $smile = 0 URL中不能带有 ‘_’ ,但是提交的变量是 ^ _ ^

绕过$_SERVER['QUERY_STRING']很简单 ,QUERY_STRING 会把. 、[等符号解析成_
,所以将提交的参数改为^.^^[^就行

if (@file_exists ($_GET['^_^'])) $smile = 0

@file_get_contents ($_GET['^_^'])=== "(●'◡'●)")

$_GET['^_^'] 不能是文件,但是却有个file_get_contents函数包含$_GET['^_^'] 且文件内容是(●'◡'●)

这个可以通过伪协议 data:// 绕过

最终 payload http://lab1.xseclab.com/base13_ead1b12e47ec7cc5390303831b779d47/index.php?^[^=data://text/plain;charset=unicode,(%E2%97%8F%27%E2%97%A1%27%E2%97%8F)

第九关-逗比的手机验证码

http://lab1.xseclab.com/vcode5_mobi_5773f3def9f77f439e058894cefc42a8/

这题点击获取验证码,然后带上验证码抓包 将电话号码改成 13388886667 就ok

第十关-基情燃烧的岁月

http://lab1.xseclab.com/vcode6_mobi_b46772933eb4c8b5175c67dbc44d8901/

点获取验证码

手机验证码是:验证码发到手机上了,你看不到..是3位纯数字,开头不为0

用bp爆破一下验证码

验证码是 142

你伤心的发现他/她正在跟你的前男/女友勾搭.....于是下决心看看前任除了跟你的(男/女)闺蜜勾搭,是不是还跟别的勾搭.. 前任的手机号码是:13399999999

在用bp爆破一下 13399999999 的验证码

1545472291438

验证码 290

登陆后得到 flag is {LKK8*(!@@sd}