2019-03-16 第一次SKCTF小组组内练习赛Writeup

第一次打比较正式的比赛,也看到了自己有多么菜。

Web

easy_parse

考察prase_str()变量覆盖漏洞

2019-03-16 第一次SKCTF小组组内练习赛Writeup_第1张图片

打开链接只看到“an easy web”,可以在网页源代码的注释部分找到一部分源码:

2019-03-16 第一次SKCTF小组组内练习赛Writeup_第2张图片

parse_str函数的作用就是解析字符串并注册成变量。使用这个函数在注册变量之前不会验证当前变量是否存在,所以会直接覆盖掉已有变量,造成变量覆盖漏洞。

构造payload: ?a=boom=givemeflag,拿到flag。

2019-03-16 第一次SKCTF小组组内练习赛Writeup_第3张图片

web_1

考察PHP类型转换将超过精度的浮点数转换为整数

2019-03-16 第一次SKCTF小组组内练习赛Writeup_第4张图片

打开之后可以看到一些源码。

2019-03-16 第一次SKCTF小组组内练习赛Writeup_第5张图片
补充:
对于“==”的类型转换,PHP首先读取这个浮点数,然后进行类型转换。
当给定的数的精度超过了double类型的精度(小数点后15)位时,就会四舍五入取整。
这不是PHP的问题,是double所存储的精度的问题。

这时候只要让id等于0.999999999999999999……就可以成功绕过。

payload: ?id=0.999999999999999999999999999999

成功得到flag。

2019-03-16 第一次SKCTF小组组内练习赛Writeup_第6张图片

爆破

考察使用Burp Suite暴力破解

2019-03-16 第一次SKCTF小组组内练习赛Writeup_第7张图片

题目名称提示了“爆破”,那肯定是要暴力破解了。

打开之后发现一段正则表达式:

2019-03-16 第一次SKCTF小组组内练习赛Writeup_第8张图片

所以可以推测出pass的值应该为skctf?????,问号部分为从00000到99999的五位整数。

同时在网页源代码里发现如下提示:

2019-03-16 第一次SKCTF小组组内练习赛Writeup_第9张图片

访问一下那个页面,随便写个数字上去,抓包,Ctrl+I,爆破位置设置在五位数字上:

2019-03-16 第一次SKCTF小组组内练习赛Writeup_第10张图片

Payload设置如下:

2019-03-16 第一次SKCTF小组组内练习赛Writeup_第11张图片

开始爆破,发现在payload为77777时回显有变化,所以知道正确的值应该是77777,将这个数字替换掉之前随便写的数字,得到flag。

2019-03-16 第一次SKCTF小组组内练习赛Writeup_第12张图片

这道题跟Bugku的“输入密码查看flag”的做法几乎一模一样,只是需要自己判断格式和在网页源代码中寻找需要爆破的页面。可以参考一下:https://www.jianshu.com/p/51a2b325b5ea

login

一道比较特殊的SQL注入题

2019-03-16 第一次SKCTF小组组内练习赛Writeup_第13张图片

打开之后就一个登录页面,但是在响应头里发现了一些Base64加密的字符串:

2019-03-16 第一次SKCTF小组组内练习赛Writeup_第14张图片

将它们解码可以得到一段源码:

$sql="SELECT username,password FROM admin WHERE username='".$username."'";
if (!empty($row) && $row['password']===md5($password)){
}

很显然是SQL注入题。大概意思就是可以通过构造一个不存在的用户名来登录,但是需要有这个用户名对应的密码的MD5值,可以用union select来实现。

随便构造一个不存在的用户和不存在的密码,POST方式提交即可。

payload:username=admin123' union select 1,'25d55ad283aa400af464c76d713c07ad'%23&password=12345678

显示"login success!"之后就能看到flag了。

blog

考察用脚本爆破MD5截断验证、vim异常退出产生.swp文件泄露、extract变量覆盖

2019-03-16 第一次SKCTF小组组内练习赛Writeup_第15张图片

打开之后是一个很普通的博客页面,进入LINK下的“勿进”页面:

2019-03-16 第一次SKCTF小组组内练习赛Writeup_第16张图片

可以看到一段源码,是熟悉的MD5截断验证:

2019-03-16 第一次SKCTF小组组内练习赛Writeup_第17张图片

而且刷新之后MD5的值不会发生变化。

直接使用脚本爆破,爆破使用的脚本如下:

import hashlib
for i in range (1000000):
    a=str(i)
    md5=hashlib.md5(a.encode('utf-8')).hexdigest()
    if md5[0:5]=='6a35b':
        break
print (a)

运行一下得到value的值为487697,构造payload: ?value=487697

进入下一个页面:

2019-03-16 第一次SKCTF小组组内练习赛Writeup_第18张图片

很明显是vim异常退出的知识点。

既然是登录页面,那么应该是login.php,.swp的文件名应该是.login.php.swp,果然有这个文件:

2019-03-16 第一次SKCTF小组组内练习赛Writeup_第19张图片

下载之后访问,可以看到一部分源码:

  }else{        
ob_end_flush();         
header('Location: ./admin.php');        
 $_SESSION['isadmin'] = 1;    
 if($username === 'admin' && md5($password) === $md5)
{     
extract($_POST); 
if(isset($_POST['username'])&&isset($_POST['password']))
{ 
$md5 = 'fac6d830e795e0ccbd36da173ddc3ac0'; 

试着去破解了一下这串MD5,没得到结果,看来不是爆破MD5。

注意到“extract($_POST)”,说明这里应该有变量覆盖漏洞。

extract() 该函数使用数组键名作为变量名,使用数组键值作为变量值。针对数组中的每个元素,将在当前符号表中创建对应的一个变量。

所以可以直接构造一个任意的密码,并传入一个md5参数,用这个密码的MD5值覆盖掉之前的MD5。

payload: username=admin&password=123456&md5=e10adc3949ba59abbe56e057f20f883e

成功登录:

2019-03-16 第一次SKCTF小组组内练习赛Writeup_第20张图片

flag在This is admin page这篇文章里:

2019-03-16 第一次SKCTF小组组内练习赛Writeup_第21张图片

RE

真正的签到题!

用IDA打开就能看到flag

2019-03-16 第一次SKCTF小组组内练习赛Writeup_第22张图片
2019-03-16 第一次SKCTF小组组内练习赛Writeup_第23张图片

(悄悄吐槽一句那个“假的签到题”对我等逆向小白真的是十分不友好……)

Crypto

签到题

考察十六进制转文本

2019-03-16 第一次SKCTF小组组内练习赛Writeup_第24张图片

开头有0x,推测这是十六进制的字符串。去掉开头的0x,将其余部分转换为字符串即可。

2019-03-16 第一次SKCTF小组组内练习赛Writeup_第25张图片

紧急报文

考察ADFGX密码的解密

2019-03-16 第一次SKCTF小组组内练习赛Writeup_第26张图片

在实验吧做过一道相同加密方式的题目,所以很容易知道这是ADFGX密码,对照着密文表一个个解出来就行。

附网上搬来的密文表:

阅读顺序是先竖后横

2019-03-16 第一次SKCTF小组组内练习赛Writeup_第27张图片

对照之后就可以解出flag:buedoctf

rsa

很基础的RSA题目,用CTF-RSA-tool解密

2019-03-16 第一次SKCTF小组组内练习赛Writeup_第28张图片

将密文存为一个文本文档,用CTF-RSA-tool解密就可以得到flag。

(比赛过程中我的CTF-RSA-tool居然崩了,好在最后关头被我救回来了,否则这么多分就没了啊orz)

misc

Excel

Excel解密题,其实用WinHex就能找到flag

2019-03-16 第一次SKCTF小组组内练习赛Writeup_第29张图片

这道题我其实纠结了很久,又是写脚本又是暴力破解,都没成功,最后机缘巧合之下发现居然在WinHex里直接搜索flag就能找到flag。

2019-03-16 第一次SKCTF小组组内练习赛Writeup_第30张图片

这道题成功地让我感到自己的智商受到了侮辱……

morse

最基本的音频隐写题,考察摩斯密码的解密

2019-03-16 第一次SKCTF小组组内练习赛Writeup_第31张图片

题目名称提示了“Morse”,文件又是音频,那肯定是音频中藏有摩斯密码。

用Audition打开可以很容易地发现一个声道里有摩斯密码:

2019-03-16 第一次SKCTF小组组内练习赛Writeup_第32张图片

解密这些摩斯密码就能得到flag。

easy_stego

最基本的图片隐写,考察查看图片详细信息

2019-03-16 第一次SKCTF小组组内练习赛Writeup_第33张图片

把图片下载下来,在图片详细信息中的标记里就能找到flag。

2019-03-16 第一次SKCTF小组组内练习赛Writeup_第34张图片

unzip

大概是考察UNIX时间戳和一小部分暴力破解吧

2019-03-16 第一次SKCTF小组组内练习赛Writeup_第35张图片

这道题没放hint之前一直不知道该怎么做,后来放了一个hint:"时间戳",于是百度了一下:

时间戳(timestamp),一个能表示一份数据在某个特定时间之前已经存在的、 完整的、 可验证的数据,通常是一个字符序列,唯一地标识某一刻的时间。

可以看到.zip文件的创建时间,但是不知道秒数,这时候可以先生成一个时间戳,再使用工具爆破秒数。

先利用创建时间生成一个秒数为0的时间戳,再使用ziprello爆破:

2019-03-16 第一次SKCTF小组组内练习赛Writeup_第36张图片

因为只有60个可能的密码,所以秒破:

2019-03-16 第一次SKCTF小组组内练习赛Writeup_第37张图片

用这个密码解压压缩包,在压缩包内的flag.txt文件里可以找到flag。

bwm

考察图片隐写中的盲水印

2019-03-16 第一次SKCTF小组组内练习赛Writeup_第38张图片

有两张图片,这种情况下要么是将两张图片进行异或运算,然后在异或得到的图片里找flag,要么是盲水印,而这道题是盲水印。

用BlindWaterMark工具可以获得盲水印的图片:

2019-03-16 第一次SKCTF小组组内练习赛Writeup_第39张图片

flag就在图上。

下面是有思路但是没做出来的

Web

Simple_JWT

考察JWT的伪造

2019-03-16 第一次SKCTF小组组内练习赛Writeup_第40张图片

一个JWT实际上就是一个字符串,它由三部分组成:头部、载荷与签名。JWT中常用的签名算法是 HS256。签名是用前两部分通过HS256加密算法得出来的。

其实这道题就是伪造JWT来绕过,但是我下到的两个破解JWT加密的工具全都不能用,就没做出来。问了问其他大佬也是这样,以后慢慢搞吧。

其实正确的解法应该是:先抓包找到JWT,然后使用这个网站:https://jwt.io/来在线调试JWT,用解密工具解出加密第三段的秘钥,最后伪造成admin登录。

报菜名

这道题的原意应该是写Python爬虫来爬取页面上的数字信息,然后自动计算、自动提交

2019-03-16 第一次SKCTF小组组内练习赛Writeup_第41张图片

因为页面含有中文,会报编码错误,一直没找到好的解决方法,就没解出来。

赛后问了做出这道题的那个大佬才知道其实这道题有BUG,页面不会自动刷新,只有手动刷新才会更改页面上的数据,所以直接计算就可以。

先把网页上的数据保存到Word文档中,再去掉汉字和:,最后放到EXCEL里用sum函数计算总和,将计算的结果填入页面上的输入框,点击“提交”,就能得到flag。

2019-03-16 第一次SKCTF小组组内练习赛Writeup_第42张图片
2019-03-16 第一次SKCTF小组组内练习赛Writeup_第43张图片
2019-03-16 第一次SKCTF小组组内练习赛Writeup_第44张图片

blind_sqli

考察基于布尔的时间盲注

2019-03-16 第一次SKCTF小组组内练习赛Writeup_第45张图片

虽然看了hint知道是基于布尔的时间盲注,但因为SQL注入这里目前我只会用sqlmap,所以就没做出来。

后来看官方wp说可以用sqlmap做,但我用sqlmap却找不到注入点,求大佬指教。

misc

凉宫春日的消失

考察LSB隐写之查看图片低位数据

2019-03-16 第一次SKCTF小组组内练习赛Writeup_第46张图片

以前也做过这一类的图片隐写,但这次可能是因为从上午九点跟大佬们一起没吃午饭没睡午觉打到下午,脑子彻底糊了,就没做出来。

用stegsolve的Data Extract功能,分别查看R、B、G三个通道的最低位,可以发现flag的三个部分,拼起来就得到flag。

2019-03-16 第一次SKCTF小组组内练习赛Writeup_第47张图片
2019-03-16 第一次SKCTF小组组内练习赛Writeup_第48张图片
2019-03-16 第一次SKCTF小组组内练习赛Writeup_第49张图片

Crypto

^

似乎是考察异或运算的知识?

2019-03-16 第一次SKCTF小组组内练习赛Writeup_第50张图片

看到这个符号我就大概猜出来是异或了,但是我本来以为是以中间的异或运算符为界,两边互相异或,放出hint“异或一个字符”之后也不明白,最后看了官方wp发现是与0x7异或,这是为什么???求大佬解答。

其他的题目(其实就是web2和phar这两道题,一个是用var_dump()在本地查看变量值,这个知识点明白但是不知道怎么运用进去的;一个是phar反序列化,这个以前根本就没见过……)看了官方wp也没搞得很明白,以后慢慢学吧。

你可能感兴趣的:(2019-03-16 第一次SKCTF小组组内练习赛Writeup)