ISCC CTF小计(更新中)
上周经班上同学说起,才知道最近有个信息安全竞赛,题目比较基础,就尝试着做了一下,做的不多
MISC
What is that?
下载附件,得到一张图片
看到手指指向的地方想到flag可能就在图片下面,根据经验,应该是修改图片宽度隐藏了flag
用winhex打开图片
这里就要了解一些png图片结构的一些知识了
推荐阅读分析PNG图像结构
找到表示图片长度宽度的十六进制码
00 00 02 72 是图片的宽度
00 00 01 F4 是图片的长度
明显图片长宽并不标准,我们将长度修改为00 00 02 72,保存 得到flag
数字密文
题目给了一串数字69742773206561737921
观察发现每一位都是在0到9之间,想到了十进制编码,百度搜了一下,看见了这篇文章实验吧的一道题
CTF—密码学入门第六题 古典密码
于是把密文改成了
EJIA=IO用十进制解码发现是乱的,在想会不会是十六进制,用十六进制解码成功得到flag
秘密电报
压缩包解压得到
秘密电报:
知识就是力量 ABAAAABABBABAAAABABAAABAAABAAABAABAAAABAAAABA
知识就是力量不是培根说的吗?培根密码无误
放到在线解密网站得到flag
重重谍影
打开网页
题目提示:刹那便是永恒。南无阿弥陀佛。想到了土豆文
再看看页面上的应该是base64码
多次解密得到一串不是base64的值(注意解码中的坑每次解码都需要将末尾的%3D,也就是“=”的url编码去掉),得到一串密文
U2FsdGVkX183BPnBd50ynIRM3o8YLmwHaoi8b8QvfVdFHCEwG9iwp4hJHznrl7d4%0AB5r
KClEyYVtx6uZFIKtCXo71fR9Mcf6b0EzejhZ4pnhnJOl+zrZVlV0T9NUA+u1z%0AiN+jkp
b6ERH86j7t45v4Mpe+j1gCpvaQgoKC0Oaa5kc
刚开始不知道是什么,问了一下做出来的同学,才知道是AES加密,把%0A换成换行符,找一个在线AES解码的平台得到密文:
答案就是后面这句但已加密 缽娑遠呐者若奢顛悉呐集梵提梵蒙夢怯倒耶哆般究有栗
是土豆文没错
与佛论禅
有趣的ISCC
又是一张图片
试了很多办法都没用,后面用winhex打开,发现文件尾部有一串Unicode编码
\u0066\u006c\u0061\u0067\u007b\u0069\u0073\u0063\u0063\u0020\u0069\u0073\u0020\u0066\u0075\u006e\u007d
Unicode解码得到
\u0066\u006c\u0061\u0067\u007b\u0069\u0073\u0063\u0063\u0020\u0069\u0073\u0020\u0066\u0075\u006e\u007d
再转一次得到flag:flag{iscc is fun}
凯撒十三世
提示:凯撒十三世在学会使用键盘后
密文:ebdgc697g95w3
猜测是凯撒密码加键盘密码
打开在线凯撒密码网站 移位数应该是13
刚开始以为是解密,解了半天什么都没有,结果是加密。。。加密得到 roqtp697t95j3
键盘密码:
我们注意到大键盘区所有的字母上面都有其对应的数字,这个位置几乎在所有的键盘都是相同的。所以我们可以利用这一点应用单表替换的方法进行加密:
1 2 3 4 5 6 7 8 9 0
Q W E R T Y U I O P
A S D F G H J K L
Z X C V B N M
我们根据上表可以得出,Q是1下面的第一个,A是1下面的第二个……以此类推,每一个字母都会有其对应的数字:
1 | A 12 |
第一个数字代表横向(X坐标)的位置,第二个数字代表纵向(Y坐标)的位置。
得到flag:yougotme
web
比较数字大小
进去发现有一个输入框,随便输入一点
那输入数字吧 ,发现只能输入3位,提交
查看html代码发现
1 | <html> |
数字太小了!
输入框限制了数字位数,修改
1 | <input type="text" maxlength="10" name="v"/> |
再输入一个较大的数,得到flag:key is 768HKyu678567&*&K
web01
此道为代码审计题
1 | <?php |
题目要求是get传参password,这里涉及到strcmp函数的漏洞
1 | int strcmp ( string $str1 , string $str2 ) |
参数 str1第一个字符串。str2第二个字符串。如果 str1 小于 str2 返回 < 0; 如果 str1 大于 str2 返回 > 0;如果两者相等,返回 0
该漏洞是用于php5.3之前的版本
该函数要求是上传字符串进行比较,当我们传入非法参数时,如数组,在php5.3之前函数会报错,return 0!刚好和两个字符串相等返回0的结果一样
于是我们在url中输入?password[]=1,利用数组是非法参数报错,得到flag: ISCC{iscc_ef3w5r5tw_5rg5y6s3t3}
本地的诱惑
提示:小明扫描了他心爱的小红的电脑,发现开放了一个8013端口,但是当小明去访问的时候却发现只允许从本地访问,可他心爱的小红不敢让这个诡异的小明触碰她的电脑,可小明真的想知道小红电脑的8013端口到底隐藏着什么秘密(key)?
只允许本地访问,那我们就用bp抓包伪造ip
推荐文章网络安全之IP伪造
添加X-Forwarded-For请求头,修改IP地址为127.0.0.1
得到flag
后面才发现。。。直接F12,flag就在html代码中。。。
1 | <html> |
你能跨过去吗?
提示:xss
题目:http://www.test.com/NodeMore.jsp?id=672613&page=2&pageCounter=32&undefined&callback=%2b/v%2b%20%2bADwAcwBjAHIAaQBwAHQAPgBhAGwAZQByAHQAKAAiAGsAZQB5ADoALwAlAG4AcwBmAG8AYwB1AHMAWABTAFMAdABlAHMAdAAlAC8AIgApADwALwBzAGMAcgBpAHAAdAA%2bAC0-&_=1302746925413
发现和实验吧的xss题有点类似
对网址进行转义,发现其中有段base64编码
1 | http://www.test.com/NodeMore.jsp?id=672613&page=2&pageCounter=32&undefined&callback=+/v+ +ADwAcwBjAHIAaQBwAHQAPgBhAGwAZQByAHQAKAAiAGsAZQB5ADoALwAlAG4AcwBmAG8AYwB1AHMAWABTAFMAdABlAHMAdAAlAC8AIgApADwALwBzAGMAcgBpAHAAdAA+AC0-&_=1302746925413 |
看到类似“+/v+ +ADwAcwBjAHIAaQBwA”想到了UTF-7编码
xssee 在线解码得到
1 | http://www.test.com/NodeMore.jsp?id=672613&page=2&pageCounter=32&undefined&callback=+/v+ <script>alert("key:/%nsfocusXSStest%/")</script>-&_=1302746925413 |
将/%nsfocusXSStest%/输入提交框,弹出弹框:恭喜你!flag{Hell0World}
一切都是套路
提示:好像有个文件忘记删了&flag is here
应该是备份文件泄露
找到文件泄露地址
http://118.190.152.202:8009/index.php.txt
得到PHP代码
1 | <?php |
又是代码审计
看到$$想到了变量覆盖漏洞,这类漏洞也常常和foreach联系在一起
post:flag=flag
get:?_200=flag
post传入变量使得flag变量的值为flag,绕过比较
get传参将flag变量的值赋值给_200,最后打印出来
得到flag:flag ISCC{taolu2333333….}
你能绕过吗?
刚开始以为是SQL注入,一直再瞎搞,后面经过朋友提示知道里是文件包含,PHP伪协议
推荐文章PHP伪协议
php://filter 是一种元封装器, 设计用于数据流打开时的筛选过滤应用。 这对于一体式(all-in-one)的文件函数非常有用,类似 readfile()、 file() 和 file_get_contents(), 在数据流内容读取之前没有机会应用其他过滤器。
php://filter 参数
名称 | 描述 |
---|---|
resource=<要过滤的数据流> | 这个参数是必须的。它指定了你要筛选过滤的数据流。 |
read=<读链的筛选列表> | 该参数可选。可以设定一个或多个过滤器名称,以管道符(_ |
write=<写链的筛选列表> | 该参数可选。可以设定一个或多个过滤器名称,以管道符(_ |
<;两个链的筛选列表> | 任何没有以 read= 或 write= 作前缀 的筛选器列表会视情况应用于读或写链。 |
利用PHP://filter过滤器读取index.php的代码,刚开始测试点是id,发现应该不是这里,再测试了f: | |
http://118.190.152.202:8008/index.php?f=php://filter/read=convert.base64-encode/resource=index.php&id=4 | |
报错。。。 | |
后面发现过滤了php字符 | |
修改:http://118.190.152.202:8008/index.php?f=Php://filter/read=convert.base64-encode/resource=index&id=4 (至于为什么要将index后面的.php删掉不太清楚) | |
后面看了代码 |
1 | <!DOCTYPE html> |
代码中过滤了php字符,并且会在f参数后加上.php,明白了
web2
提示:错误!你的IP不是本机ip!
应该还是IP伪造
试了最常见的几个伪造ip响应头文件都不行 X-Forwarded-For
X-Client-IP
X-Real-IP
CDN-Src-IP …
后面试了一下Client-IP ,成了
Please give me username and password!
页面显示:Please give me username or password!
那我们就get传参username和password先试一下
http://118.190.152.202:8017/?username=1&password=1000
查看代码发现
1 | Username is not right<!--index.php.txt--><p>Password too long</p> |
打开index.php.txt发现PHP代码
1 | <?php |
1 | if (0 == strcasecmp($flag,$_GET['username'])){ |
这一段要求flag变量值要与username参数值相同,我们可以利用strcasecmp函数传入非法参数报错返回0绕过
1 | if (is_numeric($_GET['password'])){ |
这一段是要求password的长度要小于4,但是值却要大于999,这里我们可以用科学计数法绕过
构造http://118.190.152.202:8017/index.php/?username[]=1&password=9E9
得到flag:flag{ISCC2018_Very_GOOD!}
php是世界上最好的语言
又是一道代码审计的题
1 | <html> |
要求的是post传入username和password两个参数,password参数的md5值要等于0
推荐文章PHP处理0e开头md5哈希字符串缺陷/bug
输入框输入username=1,password=QNKCDZO得到
1 | NULL <?php |
这里又是$$变量覆盖漏洞使用全局数组变量GLOBALS打印出所有变量值
http://118.190.152.202:8005/no_md5.php?a=GLOBALS
SQL注入的艺术
找到个人信息处应该是宽字节注入,http://118.190.152.202:8015/index.php?id=1%27%df
利用SQLmap得到flag