第三界山东网络技术大赛初赛在上周末进行了,让我在周末这一神圣又光荣的日子被迫离开了被窝,开始了做题的苦逼生活。

一共三道ctf题,一道web,一道杂项,一道apk逆向,不过很遗憾当时就做出一道web,做完比赛回顾的时候才发现其实这三道题都不算难题,只是思路没有想到(吐槽一下,CTF的思路越来越变态了,希望决赛不会有暴打出题人的冲动🙃)

第一题 万能密码

第一题难度不大,题目描述也很明白就是万能密码,当时我还在想会不会有什么过滤字符之类的加大难度,事实上是我多虑了,他的确是简单的万能密码,如同dvwa中的low级别的万能密码一样,源码中sql查询语句应该是

1
SELECT * FROM `users` WHERE user='$user' AND password='$pass';

所以我们只需要构成一个完整的值永远为真的sql查询语句就可以了:

1
SELECT * FROM `users` WHERE user='admin' or 1=1#

这样就可构成布尔值永远为真的sql查询语句,无论用户名和密码是任何字符,都可以登录。其实这种万能密码的语句还有很多,只要可以构成闭合和布尔值永为真。

第二题 一张图片

这一道题是一个图片隐写题,当时做了一半没有了思路,昨天晚上和同学商讨后有了新思路,最终做出来了,接下来我记录一下这个题的思路;

首先碰到图片隐写题,先用Stegsolve.jar查看图片是否存在隐藏信息,没有发现的话使用kali上自带的binwalk工具查看图片中是否包含其他文件,这个思路 同样适用于其他隐写题,这一道隐写题,使用工具Stegsolve.jar可以看到一个不完整的二维码,我们可以通过更改图片的高度和宽度使二维码完全显示出来,然后扫描二维码得到一长串十六进制字符,转换为字符串之后是一串乱码,所以尝试用十六进制编辑器将十六进制字符转换为文件,并根据文件头部标识,确定文件为pyc文件,使用pyc在线解密工具,得到python源码,并进行解密。

第三题 病毒文件

做这道题之前我没有接触过安卓逆向,也没有反编译工具,所以就没做这道题,但是后来听到他们大佬讨论说这题简单我就做了一下,题目要求是拿到这个病毒软件发送数据的服务器的IP地址,首先我们将apk文件使用工具转换为jar文件,再使用jd-gui-1.6.6-min.jar这个小工具,查看java源码,因为之前没接触过安卓逆向和java就一个代码查看的,最后找到的一个很简单的代码,是十进制转换ascll码,再解密base64;

最后得出一个ip地址,由于是初赛结束后做的这个题没办法进行验证,所以也不确定是不是最后的flag,但根据初赛的题目难度,应该是这个flag。

总结:

这次初赛发现自己的不足,平常学习中积累的知识,无法完全做到活学活用使得这次初赛简单的题目却无法得到应有的成绩,做CTF题与真实的渗透环境还是有所不同,对知识的综合运用以及思维的发散有很高的要求,所以更需要在平时学习中对每一个基础知识都能熟练运用而不是一知半解。