xjnuwp

新疆师范的师傅们办的比赛

web 100

zip协议突破文件上传

首先有个任意文件读取 结合base64

index.php

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<?php
@$file = $_GET["file"];
if(isset($file))
{
if (preg_match('/http|data|ftp|input|phar|%00/i', $file) || strlen($file)>=70)
{
echo "<p> error! </p>";
}
else
{
include($file);
}
}
else{
header("location:index.php?file=upload.php");
}

uoload.php

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
<?php
error_reporting(0);
if(!empty(@$_FILES["file"]))
{
echo @$_FILES["file"];
$allowedExts = array("gif", "jpeg", "jpg", "png");
@$temp = explode(".", $_FILES["file"]["name"]);
$extension = end($temp);
if (((@$_FILES["file"]["type"] == "image/gif") || (@$_FILES["file"]["type"] == "image/jpeg")
|| (@$_FILES["file"]["type"] == "image/jpg") || (@$_FILES["file"]["type"] == "image/pjpeg")
|| (@$_FILES["file"]["type"] == "image/x-png") || (@$_FILES["file"]["type"] == "image/png"))
&& (@$_FILES["file"]["size"] < 102400) && in_array($extension, $allowedExts))
{
move_uploaded_file($_FILES["file"]["tmp_name"], "upload/" . $_FILES["file"]["name"]);
echo "file upload successful!Save in: " . "upload/" . $_FILES["file"]["name"];
}
else
{
echo "upload failed!";
}
}
?>

本来搜下下之前有类似的题目 感觉应该很快就能做完去自习

原来的题 直接 1.php.jpg就行 apache顺序解析 但这里不行。。不着为啥

windows 下可以 1.php:.jpg 但这里也不行

只能用文件包含的方法 结果踩坑无数 做了两小时。。。

ccccc.php 压缩成 zip 再改后缀为 .jpg

然后利用它的文件读取结合zip协议 phar利用方法基本一样 不过这里可以看到过滤了

http://ctf.xjnu.edu.cn:666/index.php?file=zip://./upload/ccccc.jpg%23ccccc.php

zip用 %23 连 phar用/连接 phar://./upload/ccccc.jpg/ccccc.php (这道题不行)

有几个坑点

%23连接后面是最开始的php文件名 就是 ccccc.php 有的题会自动加php后缀 所以传的时候不用加

%23写成#不行

有可能要跳目录 这题就跳了 ./

有师傅说 小马里 get不行 得是post

做题中参考
http://blog.sina.com.cn/s/blog_14c1fefb00102xi2z.html
https://www.cnblogs.com/Oran9e/p/6120388.html
http://www.bendawang.site/2016/11/01/SWPU-2016-web-%E9%83%A8%E5%88%86%E6%80%9D%E8%B7%AF%E6%95%B4%E7%90%86/
https://blog.l1n3.net/writeup/swpu_ctf_2016_writeup/
https://www.jianshu.com/p/22cb60db11db

后来知道这题比较萌新 传个 jpg 直接包含就可以 file=upload/shell.jpg

web60

sql 过滤蛮多的 用的飘零师傅的 admin’-1-‘

给了字段 直接 password>%s 这种不能分辨大小写 而且最后一位要ascii+1

但脚本老有问题 最后用的 n1ctf上的改了改 判断两次 确定一位

拿到后是32位的 md5解了下不行 结果直接不解去登陆试了下ojbk了

web 30

.index.php.swo 服真狠 我就试到swn

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
<?php
$get = $_GET['ctf'];
if ($get == '!#?&@') {
echo '<p> class="alert">Go on!</p>';
} else {
exit();
}
if (isset($_GET['password'])) {
if (ereg("^[a-zA-Z0-9]+$", $_GET['password']) === FALSE) echo '<p class="alert">You password is error,must be test others</p>';
else if (strpos($_GET['password'], '--') !== FALSE){
$a = @$_GET['xjnu'];
$v1 = 0;
if (is_array($a)) {
is_numeric(@$a["bar1"]) ? die("No way!") : NULL;
if (@$a["bar1"]) {
($a["bar1"] > 2016) ? $v1 = 1 : NULL;
}
if (is_array(@$a["bar2"])) {
if (count($a["bar2"]) !== 3 or !is_array($a["bar2"][0])) die("No way!");
foreach ($a["bar2"] as $key => $val) {
if (preg_match('/2018/', $val)) {
die('No way!');
}
if ($val == 2018) {
die($flag);
}
}
}
}
}
else echo '<p class="alert">Invalid password</p>';

web 80

一开始有个脑洞 url端口号是2017 页面上有个什么卷土重来 和一个url url查了下没被注册应该没用

那么意思就是改端口号为 2018 。。这点卡了一会

edu的域名 不能 whois ping出ip就可以

https://www.whois.com/whois/218.195.132.22

然后ssrf+file

file过滤 FILE大写可以绕过

/etc/password gg burp fuzz了下 etc/passwd 居然可以的

不加FILE 直接 ../../../../../../../../../../etc/passwd 也可以

/var/www/html/index.php 咋都不行 问了下师傅估计路径错了

师傅给了个payload 不需要绝对路径 tql 膜

phar://index.php

最后

基本都是基础题 适合我这种菜鸡 最高打到了第10 现在12好像