七月十五日模拟赛结题报告

七月十五日模拟赛结题报告

web

1. 读文件

  • 打开链接,页面提示 “你能读到flag文件吗 “,由此猜测,这个题目是要我们读到一个名字为“flag.xxx”的文件。
  • 此页面再无其他提示消息了,此时右键查看页面源代码。源码里有个”a”标签,后面有个链接,点击访问后,出现如下带代码view-source:http://10.7.93.5:27364/a/down.php?p=./1.txt而且页面上的显示很简单就是有一句hello,其他啥都没有。
  • 看URL栏上面,发现有一个很奇怪的点,他为什么在1.txt前面加了一个”./“,很奇怪,于是把他删掉,结果还是这个页面。本来想着可能后台有两个一样的网页文件,于是再加一个”./“,结果还是一样。由此猜测,这个”./“被过滤了,而且是替换过滤,就是把”./“替换成了”“,以空白来代替”./”。
  • 因为要我们访问flag文件,先尝试着直接在”p=“后面加上flag.php,结果页面提示WAF(就是入侵防御系统)说明flag这个词被检测了。所以题目就是要我i们在flag文件名称被过滤的条件下访问flag文件。
  • 综合上面两点,我们可以用他自己的”./”过滤来破解flag文件名过滤。具体操作:
    • 在flag中插入”./“来绕过过滤,于是先在”p=“后面加上fl./ag.php这次页面不再警告WAF,说明我们的猜测是对的,但是页面提示文件不存在。
    • 文件不存在,那就返回上级目录下找找,返回上级目录是使用”../”,但是此时”./“,也被过滤了。由此我们想到用双写绕过,即输入...//检测时,把中间的./给删掉,剩下的东西就是我所需要的”../”了,最后在”p=“后输入...//fl./ag/.php,就出现了flag。

2.NaNNaNNaNNaN-Batman

  • 此题是一个代码审计题,代码如如下

    function $() {
    var e = document.getElementById('c').value;
    if (e.length == 16) {
      if (e.match(/^be0f23/) != null) {
        if (e.match(/233ac/) != null) {
          if (e.match(/e98aa$/) != null) {
            if (e.match(/c7be9/) != null) {
              var t = ['fl', 's_a', 'i', 'e}'];
              var n = ['a', '_h0l', 'n'];
              var r = ['g{', 'e', '_0'];
              var i = ['it\'', '_', 'n'];
              var s = [t, n, r, i];
              for (var o = 0; o < 13; ++o) {
                document.write(s[o % 4][0]);
                s[o % 4].splice(0, 1);
              }
            }
          }
        }
      }
    }
    }
    document.write('<input id="c"><button onclick=$()>Ok</button>');
    delete _;
  • 直接看代码,内容就是输入了一串满足一系列的条件的字符串后,会输出正确的flag,那我们就直接看他是怎么输出的。s数组把t n r i四个数组包含在里面,在一个循环中,依次输出每个数组的头一个元素。输出完毕后,调用splice函数把第一个元素给删掉。明白原理后,手工推导一下这个过程,就可以把flag推出来了。(其实目测一下代码,可以猜到就是从上往下,从左往右依次读入字符,组合后输出了)

3.Forbidden

  • 打开链接,F12查看器查看源码,发现注释里有东西,可是是乱码。

  • 打开网络选项,刷新页面,得到了数据包(相当于小的抓包了),双击数据包,右侧会出现

    1532589828437

  • 在响应选项里面,可以查看服务器发回来的消息,拉到最下面,看到了注释。这一题就是按照响应的注释在http请求头上修改或添加使其满足一定的条件,一步一步得到提示,往下走。

    • 先是让我们在本机访问。在请求头上添加X-Forwarded-For:localhost ”X-Forwarded-For“属性就是用来向服务器报告自己的ip地址,通过添加这个属性,设置值为localhost,满足第一道检测。
    • 第二道检测,让我们通过题目中所给的域名访问,就是要我们访问题中所给的域名,这里把host修改为要求的域名与端口号(两个值中间用:隔开)host就是用来表示这个数据包要被发向哪里,目的地是哪里。
    • 第三道检测,让我们从百度页面跳转到这里。我们添加referer属性,值写为www.baidu.com,referer属性在http中的作用就是告诉我要访问的服务器,我这个数据包是从哪里过来的。比方说我在百度的页面点击新浪的链接,这时候新浪的服务器姐可以查看我的数据包的referer属性的值来知晓我是从百度跳过来的。
    • 第四道检测,让我们用IE4来访问,这种关于访问者自己本身的消息,都是放在user-agent里面的,在报头的user-agent属性的值里面添加一个MSIE 4.0就可以骗过检测啦。
    • 第五道检测,让我们电脑上必须安装.net 8.0 ,关于用户本身的消息,还是直接在user agent 后面加上 .NET CLR 8.0 就好了。
    • 第六道,本站只允许德国用户访问。直接修改Accept-Language:de-DE,de;
    • 第七道,要求用ajax访问页面添加下面属性值就好X-requested-with: XMLHttpReques
    • 第八层:检验登陆状态;登陆状态嘛,肯定是关于cookie啦。在响应的cookie之里面,发现有一个login=4e7a51334d6a63314e6a553d,login后面那一串代码表示什么,肯定是某种加密方式。观察可得,里面只有数字和不超过f的字母,这样我们可以猜测,他使用了16进制加密。我们把这个字符串放到hackbar里面,选择Hex Decode,发现解出来的字符串最后有两个等号,应该是base64加密,那我们再解一次,发现结果为又是一串只有数字和不大于f的字母组成的字符串,那我们再来一次Hex Decode ,结出来的结果为false。终于出现了,我们发现他的反馈结果是login=false,那我们只要按照他的加密方式,把true先hex,在base64,在hex加密,再把结果传过去,就好了。在HTTP头文件里,掌管登陆的为Cookie值,那我们把true的值放到这位大佬的后面,在后面加上login=true加密之后的值,发送后就可以得到flag了。

4.urldecode

  • 打开页面,出现了一个?me=,敏感的察觉到可能是get传值,源码里面也没有什么可以利用的信息,那我们就在URL后面加上?me=1。
  • 页面再次显示you must be XMAN,那我就把?me=XMAN吧,输入后页面变成了great,就没啥了,一头雾水。
  • 思考思考,题中肯定是要我们在?me=后面输入XMAN,但是直接输入XMAN,好像没啥效果。再想想,我们把XMAN进行一下URLDecode,把它变成URL编码放进去,结果浏览器自动解码了,又变成XMAN。
  • 这时候,想到二次URL 编码,浏览器也只能解一次码,那我就加两次,把两次URL编码后的XMAN传入?me=后面,出现flag。

猜你喜欢

转载自blog.csdn.net/qq_41281571/article/details/81223796
今日推荐