ISCC 2018——write up
WEB
Web1-比较数字大小
直接修改input 标签里的maxlength 为999突破长度限制,使得能输入大于999 的数,然后随便输一个数字就行了
或者post修改值
Web2-Web01
strcmp 漏洞,传入为数组时会出错,导致返回为0,所以传入password[]=1
,得到flag
Web3-为什么这么简单啊
简单?不存在,坑你没商量。看看它说了啥吧
第二关需要从 http://edu.xss.tv 进入,并且只有我公司的IP地址才可以进入第二关,公司IP为:110.110.110.110
我开心的改了XXF,然后去访问给出的网址,然后进入了一个练习平台。So?Then?flag在SQL 注入的数据库里?抱着尝试的姿态做了一下,emmm,哪有关于flag 的东西???
嗯,当你访问给出的网址的时候你就输了,其实这个网址就是混淆视听的,完全不需要访问,它其实是Referer 来的,所以在第一关伪造XXF头,添加Referer值就能进入第二关
第二关需要提供一个密码,在哪呢?看源码,发现一个password.js,看下写了什么,在最后得到一串乱码,提交检查不对,拿去base64 解密得到
<script>alert("password:xinyiji.com")</scripta>
提交xinyiji.com
得到flag
Web4-本地的诱惑
签到题,直接源码得flag
Web5-你能跨过去吗?
这题莫名奇妙,提示关键点在XSS,结果做题全靠解密。。。
将页面里那个一看就不正常的url 解密一下,得到
callback=+/v+ +ADwAcwBjAHIAaQBwAHQAPgBhAGwAZQByAHQAKAAiAGsAZQB5ADoALwAlAG4AcwBmAG8AYwB1AHMAWABTAFMAdABlAHMAdAAlAC8AIgApADwALwBzAGMAcgBpAHAAdAA+AC0-
我们知道+/v++ 是代表utf-7 编码,这种编码会使其他的字元被编码成utf-16,然后转换为被修改的Base64,这些区块的开头会以+ 符号标示,结尾则是以任何不在Base64 里的字元标示,所以我们将
ADwAcwBjAHIAaQBwAHQAPgBhAGwAZQByAHQAKAAiAGsAZQB5ADoALwAlAG4AcwBmAG8AYwB1AHMAWABTAFMAdABlAHMAdAAlAC8AIgApADwALwBzAGMAcgBpAHAAdAA
进行Base64 解密,得到一个含有不可见字符的字符串,将不可见字符去掉,得到
<script>alert("key:/%nsfocusXSStest%/")</script>
将key 的值填入页面的输入框得到flag
Web6-一切都是套路
文件备份泄露,常见的备份格式怼就是了,尝试得出index.php.txt
,访问得到源码
1 |
<?php include "flag.php"; if ($_SERVER["REQUEST_METHOD"] != "POST") |
代码审计一波,可以发现存在变量覆盖问题。
重点在于对输入值的处理,都有$$k,但是对$v 的处理不同
- GET 输入的$k 会变成新变量\$\$k,\$v 也是,那么如果我们传入的是_200=flag,那么就会变成\$_200=\$flag,从而将flag 的值赋给了\$_200,而最后顺利的话又会输出\$_200
- POST 传入的值也是$$k,而键值却只有一个$,假如输入flag=flag,那么最后就是$flag = flag,放到if 语句中也刚好满足条件
- 由上所述就可以得到payload,GET 传入
_200=flag
,使得$_200 得到flag 的值,POST 传值随便传flag=123456
,最后满足if 语句,输出\$_200 就是输出flag
Web7-你能绕过吗?
一开始以为是注入,结果毫无反应,后来发现还有个参数f=article,将其改成页面里出现过的contents,毫无反应+1
……
猜测f 应该是filename,指定包好的内容,那么有没有可能存在文件包含的漏洞呢?利用伪协议尝试读取源码
php://filter/read=convert.base64-encode/resource=index
报错error……联想题目提示过滤不严谨,说明应该是过滤什么东西,既然是伪协议,那么最先过滤的应该就是php,尝试大写,成功了。。。。。。幸福来得太快就像龙卷风
Web8-Web02
必须由本地访问,则修改包头,一开始以为是XFF,用X-Forwarded-For Header 添加了127.0.0.1,结果不对,那就把所有判断ip 的头都尝试一遍
1 |
X-Forwarded-For: 127.0.0.1 |
尝试Client-IP 的时候正确了
Web9-请ping我的ip 看你能Ping通吗?
是不是和我一样打开cmd 去ping 了一下网站ip,发现p用没有,然后束手无策?
脑洞,只有这一句话,我没这么大的脑洞,直接问的学弟
当你能猜出可以GET传参一个参数ip过去的时候,你的脑洞已经突破天际
迈出第一步后就简单无比,命令执行而已,过滤了|
,那就用%0a
Payload:
1 |
index.php?ip=118.190.152.202%0als |
比赛还没结束,运维突然修改了flag.txt 所在目录,新的目录为/home/flag.txt
Web10-Please give me username and password!
GET传参username和password,得到回显,注释提示index.php.txt(话说前面那个源码泄露没做出来的,看到这个题应该都能回去做了),访问得到源码
1 |
<?php |
审计一下,条件不多
- 传入参数username && password
- username == $flag
- password是数字,且小于4位,又要大于999
绕过后面两个条件慢慢下手,可以看到比较username 和$flag 是通过strcasecmp 来比较的,它和strcmp 的区别在于区分大小写,那么存不存在漏洞呢?当然是存在的,这种比较函数总是会存在数组的漏洞(滑稽:PHP 天下第一),和strcmp 的漏洞一样,构造数组即可
username[]=1
那么password 呢?这里不能像第一题一样改长度,但是我们还有科学记数法!1000 的科学记数法怎么表示?
password=1e3
Web11-SQL注入的艺术
个人信息栏,有GET 传参,应该是注入点了
发现页面编码是gb2312,可能是宽字节注入,检验一下id=1%df'--+
,返回正常页面,确定是宽字节注入
接下来就是常规的SQL 语句了
1 |
id=1%df' or 1=1 order by 8--+ |
Web12-Php是世界上最好的语言
直接看代码,MD5常见漏洞:将所有0e 开头的MD5值都当作0,随便输一个满足条件的值,跳转到下一个页面,又是代码,变量覆盖$$a
,传入a=flag,就可以得到flag值
Web13-试试看
一个吾王的照片,就没了,查看网络,发现在调用index.php 时还调用了show.php?img=1.jpg
于是访问show.php,默认传参是1.jpg,那么能不能传入其他值?尝试后发现
1 |
img=*.jpg,返回图片出错无法显示 |
index.php 明显是和show.php 在同一目录,这都找不到,可以看出是后台做了处理,可能是过滤了关键字php,使用大写,php5等尝试都失败了
既然文件包含包含本地文件失败,那么尝试能不能读源码,又用到了伪协议
img=php://filter/read=convert.base64-encode/resource=show.php
还是File not find
和大佬py一波,被告知是传入参数必须要有jpg,那么改payload为img=php://filter/read=convert.base64-encode/resource=show.php|jpg
成功返回页面源码
1 |
<?php |
对源码进行分析,关键的几个点在
- img必须有jpg但又不能有resource=.*jpg
- 正则检查了php://filter.resource=([^|])\,并把结果填充到$matches 里去,说明我们可以使用php://filter伪协议,并且resource的值不含|,那么我们就可以用| 来分隔php 和jpg,因为正则匹配到| 就不会继续匹配后面的jpg 了,使得\$img=show.php,从而可以读到源码
- 开头包含了config.php,也读了一下源码,发现就是自定义了一个get_contents($img) 函数,用来确定返回是图片还是html
最后的flag 在上一级目录的flag.php里,最后的payload
img=php://filter/read=convert.base64-encode/resource=../flag.php|jpg
贴一下大佬的payload:
curl http://118.190.152.202:8006/show.php?img=./jpg/../show.php
curl http://118.190.152.202:8006/show.php?img=./jpg/../../flag.php
Web14-Sqli
第一关,注入点在username,直接sqlmap跑
1 |
python sqlmap.py -r "POST\Iscc.txt" -p username --dbs --batch --level 5 |
sqlmap梭哈之后得到admin 的password,拿去md5解密,登录,进入第二个注入
第二个注入就很简单了,flag 在news表,别查错了就行
1 |
id=1 or 1=1 order by 6 |
Web15-Collide
源码
1 |
<?php |
分析一下源码,可以知道如下信息
- 一个不知道的$key,但是从cookie中可以知道它的长度是46
- 从cookie中知道md5(\$key.guest) 的值,也就是知道enc(\$username) 符合条件的值
- 获得flag 的条件,满足enc(\$username) == md5(\$key.guest),同时\$username 要含有admin
有经验的选手一看就知道是hash长度扩展攻击,我们知道一个长度已知,数值未知的值\$key,同时知道$key连接上一个已知的值(guest)的md5 值(78cfc57d983b4a17e55828c001a3e781),需要满足\$key 加上另一个可控的值(\$username) 的MD5 等于一个已知的值。
hash长度扩展攻击可以直接用工具hashpump,安装和使用可以看pcat 师傅的文章
我们直接上手
1 |
$key 是密文,长度46,后面加上guest,签名是78cfc57d983b4a17e55828c001a3e781 |
使用hashpump 加上数据admin
1 |
# hashpump |
得到
1 |
5f585093a7fe86971766c3d25c43d0eb |
第一个是新的签名,把它赋给verify,第二是post 的值,把\x 改成%,提交即可得到flag
Web17-Only admin can see flag
右键F12得提示index.txt,访问得到源码
1 |
<?php |
和实验吧的第一题差不多,cbc字节反转攻击,大家也可以去看pcat师傅的wp,原理也不多BB,我前面有一篇博客也讲了这个东西
如果我们提交的是username=Admin&&password=mntn
那么序列话并分组后就是
1 |
a:2:{s:8:"userna |
可见,我们要改的A 在第二块,偏移量为9,那么脚本(直接用的pcat师傅的)如下
1 |
# -*- coding:utf8 -*- |
提交得到base64_decode('"FIo6FPqKsWAno/eQZlkURW1lIjtzOjU6ImFkbWluIjtzOjg6InBhc3N3b3JkIjtzOjQ6Im1udG4iO30="') can't unserialize
用脚本获取新的iv
1 |
# -*- coding:utf8 -*- |
得到新的iv,和新的cipher 一起提交即可得到flag
MISC
杂项贼菜,没几个会做的
Misc1-What is that?
明显是修改图片高度,如果你问为什么?你可以用工具tweakpng去校验图片的CRC校验码,发现会报错,说明当前图片的高度是不符合现在的校验码的,将图片高度修改到1000,得到flag
Misc2-数字密文
很简单的flag。
只给了一串数字,首先想到的是进制转换,2个一组转成10进制对应的ascci玛,结果不对,转成16进制就对了
Misc3-秘密电报
培根密码,自行百度
Misc4-重重谍影
Base64解密多次,到最后会出错,将最后一次正常的解密拿去aes解密,得到一串繁体字,查阅资料得知是土豆文,一种诡异的对应密文。
直接抛到解密网站去解密与佛论禅
Misc5-有趣的ISCC
一个logo图,扔到winhex一看,发现在最后有东西,另存为txt,打开
1 |
\u0066\u006c\u0061\u0067\u007b\u0069\u0073\u0063\u0063\u0020\u0069\u0073\u0020\u0066\u0075\u006e\u007d |
拿去转成ASCII码,再转字符即可,最后flag格式只要括号里的
Misc6-Where is the FLAG?
不会,学弟做的
本题和实验吧的有一题类似,需要用到工具
winhex 打开可以看到有Adobe Fireworks
字样,应该就是使用这个软件处理过。
使用Adobe Fireworks 打开后,果然有惊喜,一个在图层下面的二维码,发现扫不了,应该是处理过的,将其分割,8取4拼一下(这个让我想起之前做的一个ctf,也是拼,结果怎么拼都扫不起。。。)
Misc7-凯撒十三世
凯撒密码,并且偏移是13,给个凯撒密码的通用脚本
1 |
#-*- coding: utf8 -*- |
得到roqtp697t95j3
,一看就不是flag,结合提示键盘
,所以可能是键盘密码: 即密文在键盘上的下一行所对应的字符是相应明文,比如r=>f
,低头看键盘得flag
Misc9-暴力xx不可取
zip伪加密,zip文件由三个部分组成:压缩源文件数据取+压缩源文件目录区+压缩源文件目录结束标志;
简单来说,数据区就是被压缩文件的数据,目录区中的每一条记录对应数据区中的一条数据,结束标志重要。要准确了解zip各部分的准确定义可以看这里:http://blog.csdn.net/ETF6996/article/details/51946250判断有没有加密可以看文件后缀有没有一个*号,zip伪加密主要是在目录区中的 全局方式位标记的值为奇数(根据这个标记位来判断有无加密更改成09 00 就会提示有密码)
实例操作:找到一个未加密文件,winhex打开,找到目录区开头504b1020,然后修改全局方式位标记为09 00,保存,再用WinRAR打开,发现有一个后缀的*号,需要密码。
在本题中,修改14 00 07 09
为14 00 08 09
即可
打开flag.txt 得到一串字符,提交错误,说明有加密,最后发现是rot13,解密即是正确的flag
ISCC 2018——write up的更多相关文章
- ISCC 2018(数字密文)
做过iscc 2018之后有了很多的感触,也有更多的了解自己的不足之处,整理了一下web的wp, 为了保证各位小伙伴的阅读质量,我将会把wp以每一道题一个博文的形式写出来,希望能够帮助到你们 其中的步 ...
- ISCC 2018 (Please give me username and password)
做过iscc 2018之后有了很多的感触,也有更多的了解自己的不足之处,整理了一下web的wp, 为了保证各位小伙伴的阅读质量,我将会把wp以每一道题一个博文的形式写出来,希望能够帮助到你们 其中的步 ...
- ISCC 2018 Writeup
题解部分:Misc(除misc500).Web(除Only Admin.Only admin can see flag.有种你来绕.试试看).Reverse.Pwn.Mobile Misc( Auth ...
- ISCC 2018线上赛 writeup
今天有机会去ISCC2018参加了比赛,个人的感受是比赛题目整体难度不高,就是脑洞特别大,flag形式不明确,拿到flag后也要猜测flag格式,贼坑 废话不多说,以下是本人的解题思路 MISC 0x ...
- 2018. The Debut Album
http://acm.timus.ru/problem.aspx?space=1&num=2018 真心爱过,怎么能彻底忘掉 题目大意: 长度为n的串,由1和2组成,连续的1不能超过a个,连续 ...
- Math.abs(~2018),掌握规律即可!
Math.abs(~2018) 某前端群的入门问题长姿势了,一个简单的入门问题却引发了我的思考,深深的体会到自己在学习前端技术的同时忽略遗忘了一些计算机的基础知识. 对于 JS Math对象没什么可说 ...
- 肖秀荣8套卷2018pdf下载|2018肖秀荣冲刺8套卷pdf下载电子版
肖秀荣8套卷2018pdf下载|2018肖秀荣冲刺8套卷pdf下载电子版 下载链接: https://u253469.ctfile.com/fs/253469-229815828
- 2018年的UX设计师薪酬预测,你能拿多少?
以下内容由Mockplus团队翻译整理,仅供学习交流,Mockplus是更快更简单的原型设计工具. 一个经验丰富的设计师完全可以根据地区和专业来可以预期薪酬之间的差距,其中悬殊最高可达80K. 本 ...
- Hello 2018, Bye 2017
2017年过去了,过去一年经历了太多,改变了好多好多,可以说人生进入了另一个阶段,有可能是成熟吧. 回顾2017 去年换了新工作,离开了将近工作了8年的公司,不带走一丝云彩,为其任劳任怨,最后没有任何 ...
随机推荐
- webpack+babel+react操作小结
最近学习了一下Webpack,个人感觉还是非常实用的,现在总结一下自己的学习笔记. 什么是 Webpack Webpack 是一个模块打包器.它将根据模块的依赖关系进行静态分析,然后将这些模块按照指定 ...
- PAT 1055 The World's Richest
#include <cstdio> #include <cstdlib> #include <cstring> #include <vector> #i ...
- 多线程篇四:ThreadLocal实现线程范围内变量共享
1.static实现线程范围内变量共享 package com.test.shareData; import java.util.Random; /** * 多线程范围内的数据共享 * @author ...
- win7上装红米4手机驱动提示空间不足
首先说:小米的垃圾支持.我在支持页面上看着 miuiV4或V5版本,再看我手机上9.5的版本.就感觉有些不妙. 下载下来后,点击安装程序,提示我安装空间不足......我F盘可用空间140G,不够你造 ...
- 【起航计划ObjC 002】印第安老斑鸠ObjC的幻想 ---- Ubuntu下安装并使用MAC虚拟机
本文介绍如何在Ubuntu下安装Mac OS X Mavericks系统.具体如下: 1)安装前准备工作 下载Mac OS X Mavericks系统,地址:http://pan.baidu.com/ ...
- PHP:数字转Excel列头
转自我的个人博客:阔野飞花 http://www.rexcao.net/archives/169 前段时间升级一个项目的Excel导出功能,这次的列数大概有60多条,在处理过程中发现一个问题,原先做好 ...
- django搭建简单开发项目流程(一)
1 搭建环境 sudo apt-get install python3-pip 安装pip3 sudo pip3 install virtualenv 安装虚拟环境 virtualenv -p pyt ...
- js alert 封装 layui
方式一: var aaa = function(){ function _alert(aa){ layer.msg(aa, { time: 2000, //2s后自动关闭 alert("最高 ...
- 最新DNS汇集
最近几日DNS大规模抽风,网络环境是一天比一天恶劣,于是收集了一些良心的DNS服务器地址,以备不时之需. 国内服务器: 1.OpenerDNS:42.120.21.30 2.114DNS:114.11 ...
- bootstrap table 怎么实现前两列固定冻结?
$("#Table").bootstrapTable('destroy').bootstrapTable({ pagination: true,//分页 minimumCountC ...