标签:
0x00
作为一个仰慕黑客技术已久的小白能有一个合法hack以及测试自己能力水平的地方一直是我梦寐以求的(特别是像我这种不怎么会搭环境的超级小白--),所以一听到ISCC2016的比赛消息,就屁颠屁颠的、迫不及待的去参赛了。
0x01
ISCC比赛分为信息安全知识、basic、web、pwn、reverse、mobile、misc,我首先做的是信息安全知识题(why?因为是选择题,可以百度啊)。
然后打算做web题,第一道web题是php的代码审计,开始一看到登陆框就一个劲的构造sql代码试图绕过登陆验证,结果弄了很久都没成功绕过,然后在伤心绝望之际看到下面有个查看源码......(经验不足真是悲剧,现在想想这种题就应该先仔细观察页面,收集信息的qwq)。
下面是源码
<html> <head> Masel‘s secure site </head> <body> <a href="setup-db.php">閲嶇疆鏁版嵁搴?</a> <?php include("auth.php"); $servername = $host; $username = $dbuser; $password = $dbpass; $database = $dbname; error_reporting(0); if($_POST["user"] && $_POST["pass"]) { $conn = mysqli_connect($servername, $username, $password, $database); if ($conn->connect_error) { die("Connection failed: " . mysqli_error($conn)); } $user = $_POST["user"]; $pass = $_POST["pass"]; $sql = "select user from user where pw=‘$pass‘"; //echo $sql; $query = mysqli_query($conn,$sql); if (!$query) { printf("Error: %s\n", mysqli_error($conn)); exit(); } $row = mysqli_fetch_array($query); //echo $row["pw"]; if ($row[user]){ if ($row[user] == "flag" && $user=="flag") { echo "<p>Logged in! Flag: ****************** </p>"; } else{ echo "<p>Password is right, but it‘s not for the flag </p>"; } } else { echo("<p>Wrong password!</p>"); } } ?>
根据$sql构造payload: ‘ or user=‘flag即可弹出flag。第一次独立做出web题的我当时还有点小激动,到处跟朋友炫耀,还发了说说--,现在觉得真的是too young too simple.
0x02
接着想继续往下写web题,但是看了后面的题,连题目都看不懂了qwq,于是转换目标去做basic题了。
basic题基本上都是与编码、加密相关的东西,一眼扫过去,看出了几题的解题思路。
第一题,仿射加密,查查百度逆向算出公式然后代数字就得到了flag,逆函数为:m=(19c+4)mod26。
第二题一看就是base64编码的东西,但是直接复制到firebug里面并不能直接解出flag,要把每行的换行符去掉才能丢进firebug里面解密,解四五次就得到了flag(刚开始被坑了,没注意到后面的换行符,然后一直想其他的加密算法,结果试了一圈经典加密都没得到flag,还是后来快结束的时候回去扫不会的题时才开窍试着把换行符去掉......然后就没有然后了)。
第三题一看就知道去看源码,源码爆出了加密后的flag,这加密看着好眼熟但是不知道是什么加密,于是祭出了搜索神器——度娘,搜到的结果只有第一条有参考价值,但是当时并不懂什么叫字母变换(小白真心苦qwq),然后继续搜索字母变换,搜出了凯撒加密,于是在网上找了个穷举凯撒加密位移的代码跑出了一组明文,但是还是不知道哪个是flag,于是就搁置在那了。后来一起做题的小伙伴搜出了误发的writeup百度快照,然后后面的一串flag就都出来了......
心灵鸡汤那题爆出的wp并没有,所以自己又开始埋头苦干。一开始弹出了个窗口,输入iscc并没什么东西,于是丢到od里面单步跟踪发现了加密的flag: DEath IS JUST A PaRT oF lIFE,sOMeTHInG wE‘RE aLL dESTInED TO dO.还是看不懂是什么加密类型,于是把自己知道的都试了一边,无果就搁置了。后来经学长提醒是培根加密,百度一下,根据大小写代换成01,然后对照密码表就得出了flag,用的是第一个密码表。
其他的,加密文件那题用7z直接打开就能看到密文文件,然后拖出来,丢到百度一搜就得到flag了。jj那题把用jsfuck解码得到一个链接,下载文件后是一串JJEncode的代码(看wp知道的),然后下载解码器解码就好。解码器地址:https://github.com/jacobsoo/Decoder-JJEncode
0x03
做完basic后转头来做web。
double kill那题知道是两个漏洞联合起来拿flag,但是只知道一个是文件头解析绕过,另一个就不知道是什么,不过知道跟include有关,然后执行上传上去的图片文件就能拿到flag。比赛结束后经过学长指点,只需要在url里提交上传文件的相对路径就行,还有上传的图片里的php代码需要用<script language=php>...</script>这种类型(另一种asp的短标签需要开启支持,一般来说都是不行的,所以我就没试)。
ping那题就是利用dos代码来爆目录。开始我并不知道有.txt的源码文件,就自己一个劲乱试,误打误撞的符合了他的正则然后就爆出了路径。路径下有一个假的md5编码的flag,刚开始不知道就重复试了好多次都不对,最后搁置QWQ。又是经过学长指点,开始dir下一个目录,然后再dir一下就得到了flag的文件路径,根据源码直接在url上提交相对路径就能爆出flag(话说都是include,为什么前面的题不知道丢到url里啊......)
web500的题一看分值就已经放弃了一半,然后再看题目就完全放弃了——完全没有思路。赛后根据学长指点,需要用到代理,然后通过注册admin覆盖之前的记录,再连接木马就能得到flag。先是直接登陆admin,在报错页面的源码中有代理服务器的ip:121.42.171.222(刚开始也没注意,得到flag后再问学长才发现的:(),然后再代理一次就能正常显示登陆页面和注册页面了,注册页面的用户名需要绕过,payload: admin/*‘ ‘*/。然后审计robots的两个页面,将木马的源码粘贴到本地,然后删除session就能得到key:360,之后用firebug的post提交360=flag就得到了flag(理论上也可以本地搭建页面进行post提交,不过我嫌麻烦就没试......拖走o(>﹏<)o)。
0x04
misc的第一题通过wireshark分析发现有传图片然后搜索flag就看到了。mp3的隐写题,当时我搜到了相关的隐写软件MP3Stego,但是想着应该不会那么简单就没去试。结果它真的就那么简单......用mp3stego解压mp3文件的密码在mp3的hex里,用记事本打开搜索iscc就找到了,解压得到一个文件后在base64解密一下就能拿到flag。
0x05
通过这次ctf比赛,真的学到了不少东西,不过这篇文章是赛后大概半个月照着学长给的wp写的,所以不一定能重现当时的解题情景,就将就着看吧。总的来说,因为是第一次真心的投入ctf比赛,经验上着实缺乏,很多地方本来都差一步就拿到flag了,但就是差了那么点经验。还有比赛中真实的体验到自己的实战经验不足,今后需要多多“做”了。不过也有好的地方,比如坚持比完了(赛期一个月);坚持自己做,即使是拿到了误发的wp我也没有直接照搬,而是实在没办法了才去看看。
标签:
原文地址:http://www.cnblogs.com/ff0x00/p/5585803.html