靶场练习之hackinglab(鹰眼)-脚本题

1、寻找key

    访问给出的链接:http://lab1.xseclab.com/xss1_30ac8668cd453e7e387c76b132b140bb/index.php,进入页面,有提示语在这里找到key,也是一个访问链接:http://lab1.xseclab.com/xss1_30ac8668cd453e7e387c76b132b140bb/search_key.php,访问新链接之后进入一个页面提示此处没有key,我们可以看到浏览器上面的uri已经不是search_key.php页,说明存在跳转。

    使用burpsuite对http://lab1.xseclab.com/xss1_30ac8668cd453e7e387c76b132b140bb/search_key.php的访问进行拦截。

2、快速口算

    该题目是一个答案的提交题目,有限定时间,既然有限定时间,那就存在对时间修改的可能。访问给出的答题链接:http://lab1.xseclab.com/xss2_0d557e6d2a4ac08b749b61473a075be1/index.php,随便输入答案点击提交,并使用burpsuite进行拦截。

    从拦截请求中未找到任何与时间有关的信息,而且每次访问http://lab1.xseclab.com/xss2_0d557e6d2a4ac08b749b61473a075be1/index.php时给出的答案都是不一样的,使用python写个自动化请求的demo试一试。

#!/usr/bin/env python
# -*- coding:utf-8 -*-
import httplib
import urllib

headers0 = {"Cookie": "PHPSESSID=975db232b65e274a92798918807e4676"}
conn = httplib.HTTPConnection("lab1.xseclab.com")
conn.request("GET", "http://lab1.xseclab.com/xss2_0d557e6d2a4ac08b749b61473a075be1/index.php", '', headers0)
response = conn.getresponse()
data = response.read()
for line in data.split('\n'):
    if line.find('=<input type=') > 0:
        pattern = line.split('=')[0]
conn.close()

headers1 = {"Cookie": "PHPSESSID=975db232b65e274a92798918807e4676",
           "Referer": "http://lab1.xseclab.com/xss2_0d557e6d2a4ac08b749b61473a075be1/index.php",
           "Origin": "http://lab1.xseclab.com",
           "Content-Type": "application/x-www-form-urlencoded"}
params = urllib.urlencode({'v': eval(pattern)})  # type: str
conn = httplib.HTTPConnection("lab1.xseclab.com")
conn.request("POST", "http://lab1.xseclab.com/xss2_0d557e6d2a4ac08b749b61473a075be1/index.php", params, headers1)
response = conn.getresponse()
data = response.read()
print(data)
conn.close()

    执行看到返回结果:key is 123iohHKHJ%^&*(jkh

3、这个题目是空的

    这个题真的有点脑筋急转弯的意思,跟安全渗透感觉没啥关系,答主之前也试了好多种方法,后来才开始注意题目信息:什么才是空的呢?答主是做c语言的,空意味着NULL,题目要求小写,输入null即通过。

4、怎么就是不弹出key呢

    访问链接:http://lab1.xseclab.com/xss3_5dcdde90bbe55087eb3514405972b1a6/index.php,通过F12查看浏览器源代码,发现点击提示语应该执行javascript:a() js函数,函数中应该执行alert弹框一堆信息,此时却没有执行。于是把js核心函数复制出来,在浏览器的console窗口直接执行如下代码:

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(d);

     结果打印出来:slakfjteslkjsdflkslakfjteslkjsdflkslakfjteslkjsdflkslakfjteslkjsdflkslakfjteslkjsdflkslakfjteslkjsdflkslakfjteslkjsdflkslakfjteslkjsdflkslakfjteslkjsdflkslakfjteslkjsdflk,取前14个字节即可。

5、逗比验证码第一期

    访问链接:http://lab1.xseclab.com/vcode1_bcfef7eacf7badc64aaf18844cdb1c46/index.php,使用burpsuite进行拦截发现,是一个用户名和密码的登录框,其中用户名为admin,密码为4个数字,首位不为0,验证码每次访问index.php链接时是固定的。随机输入密码点击登录使用burpsuite进行拦截。

   我们发现返回的结果是pwd error是固定的,所以我们写一个python小程序生成密码库pwd.txt。

f = file('/Users/xuyong/Desktop/pwd.txt', "w+")
for i in range(1, 10, 1):
    for j in range(0, 10, 1):
        for t in range(0, 10, 1):
            for k in range(0, 10, 1):
                pwd = "{0}{1}{2}{3}\n".format(i, j, t, k)
                f.write(pwd)
f.close()

然后在burpsuite的intruder模块,将pwd的值设置为payload,选择payload,将pwd.txt加载进去,然后进行attack。此时根据attack结果的长度进行排序,轻易就筛查出来正确的密码。

    根据响应包的长度变化,找到正确的请求,可以看到结果:key is LJLJL789sdf#@sd

6、逗比验证码-动态的验证码

    该题目中和上面的第5题是相仿的,就是每次提交之后验证码都会失效,也就是验证码不固定,每次都要刷新,这非常不利于暴力破解,一般的手段是要加入验证码的自动识别库来识别验证码。

    题目中取了个巧,如果提交的请求中验证码不填写的话,就不会验证验证码了,因此解题思路跟第五题一致,将请求发送至intruder模块,然后将password设定为payload,选择之前生成的密码库进行attack。

    最后attack出来的密码为:key is LJLJL789ss33fasvxcvsdf#@sd

7、逗逼的验证码第三期

    和第6题一样的解法,最后爆破的答案是:key is LJLJLfuckvcodesdf#@sd

8、微笑一下就能过关了

    访问链接:http://lab1.xseclab.com/base13_ead1b12e47ec7cc5390303831b779d47/index.php,并使用burpsuite进行截图:

    发现源代码出有个跳转,我们在浏览器页面点击源代码进入index.php的源码目录。

    在源码中我们可以猜测,程序执行了die($flag)应该就会显示答案。执行到这一步需要满足请求包中包括^_^参数,且参数值不能包括http等字段,基本排除了包含远程文件的可能,参数值还不能本地存在,也派出了包含本地文件的可能。而且从^_^参数中获取的字符串还得跟(●'◡'●)相等。

    于是我们构造出来POST请求链接:/base13_ead1b12e47ec7cc5390303831b779d47/index.php?^%5f^=php://input ,其中^_^要换成^%5f^,因为url中对字段名有要求,这种做法是将请求中的post数据传递给了^_^字段值,因此我们只需要在post的内容中传递出来(●'◡'●)符号即可。

    在发送请求的时候需要将Content-Type修改为 text/plain等,因为php://input不能针对form表单类型的数据使用。答主使用了burpsuite,在post内容体上一开始复制不出来(●'◡'●)符号,通过复制到文件中使用vim查看二进制后发现该值为13个字节:\x28\xe2\x97\x8f\x27\xe2\x97\xa1\x27\xe2\x97\x8f\x29 。于是随便输入13个字符然后选择hex进行逐字节修改即可。

9、逗比的手机验证码

    该题目根据提示分别访问获取验证码链接:http://lab1.xseclab.com/vcode5_mobi_5773f3def9f77f439e058894cefc42a8/vcode.php,以及登陆链接:http://lab1.xseclab.com/vcode5_mobi_5773f3def9f77f439e058894cefc42a8/login.php,并使用burpsuite进行拦截:

    发送第一个请求拿到最新的验证码,然后将第二个请求中的vcode设置为最新的验证码,修改用户名为13388886667,重新发送请求即可。

    结果为:key is LJLJLGod!@@sd

10、基情燃烧的岁月

    分别访问获取验证码链接:http://lab1.xseclab.com/vcode6_mobi_b46772933eb4c8b5175c67dbc44d8901/vcode.php和登陆链接:http://lab1.xseclab.com/vcode6_mobi_b46772933eb4c8b5175c67dbc44d8901/login.php,并使用burpsuite截图:

    我们发送第一个截图中的请求,没有得到具体的验证码,却拿到了验证码的提醒(开头不为0的纯数字,可以做个字典出来)。然后将第二个请求发送到intruder模块,设置vcode的值为positions,然后在payloads中载入我们的字典进行attack。

    我们找到了异常的请求,并且得到了真是的手机号码为:13399999999

    现在我们重新发送一下第一个请求获取一下新的验证码,然后把第二个请求的用户名修改成正确的手机号码,发送到intruder重新进行爆破。

    最后的结果为:LKK8*(!@@sd

11、验证码识别

    参考之前写的《如何利用burpsuite的intruder和Macro进行带验证码的密码爆破》。

12、XSS基础关

    该题目是基础的xss渗透题,访问链接http://lab1.xseclab.com/realxss1_f123c17dd9c363334670101779193998/index.php,页面有输入框,随机输入hello,页面显示welcome hello,说明输入的内容在页面显示出来了,应该是基础的DOM型XSS。

    现在输入hello<script>alert('hello')</script>,页面弹框hello,随后给出提示

 

    根据提示修改为:hello<script>alert(HackingLab)</script>,然后提交,弹框success。

    页面显示:key is: myxssteststart!

    Welcome hello

13、XSS基础2:简单绕过

    访问链接http://lab1.xseclab.com/realxss2_bcedaba7e8618cdfb51178765060fc7d/index.php,页面显示输入框,输入hello提交页面显示welcome hello,说明输入内容显示在了页面中,是基础的DOM型XSS。

    按照之前的方式输入:hello<script>alert(HackingLab)</script>,提交显示有XSS检测过滤,应该是只针对script进行了过滤。

    现在换一种XSS注入方式,输入:hello<img src=0 οnerrοr="alert(HackingLab)" />然后提交,显示:key is: xss2test2you

14、XSS基础3:检测与构造

    访问链接:http://lab1.xseclab.com/realxss3_9b28b0ff93d0b0099f5ac7f8bad3f368/index.php,有输入框,在输入框中输入hello,也现在的输入框中会显示输入的hello,应该是基础的反射型XSS。

    按照前边两种步骤分别进行尝试,都提醒了XSS检测过滤。只是针对alert的过滤不太严格,好像只是检测alert出现的位置是输入内容的开头,只要不是开头都会命中检测规则。现在可以构造出来 alert' οnclick=alert(HackingLab) />型的输入,让alert在输入的头部出现,依次来绕过针对alert的检测。

    最后通过点击下方输入框,弹框显示结果:key is: xss3test2youOK_striptag

15、Principle很重要的XSS

    这道题试了好几种方法,都没有找到答案。后来参考了一下网上的题解,与14体基本上的方式是一致的。针对alert的过滤也会判断是不是输入字符串的开头,如果在开头位置出现,后面的alert就不再做过滤。

    构造输入内容:alert'οnmοuseοut='alert(HackingLab),其中像onclick等方法都是在过滤规则里面的,恰巧onmouseout(鼠标从区域中移走)和onmouseover(鼠标进入区域事件)方法是可用的,且'与onmouseout之间不能有空格,有空格也会被过滤规则识别出来。

    输入之后页面显示:key is: xss4isnoteasy

 

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 6
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值