【CTF】关于对webctf的一些学习思考

webctf简介

打个广告

Unctf比赛将于11月12日开始,给参加比赛的佬打call。

介绍

ctf指夺旗赛,通过使用各种手段获取试题中隐藏的flag{xxxx}并提交,以拿下积分,ctf分多种,其中包括webctf(主要在网页上进行渗透),pwnctf(在服务器上进行渗透),reversectf(可能是逆向程序吧?完全没了解过,不乱说),cryptoctf(密码学方向,也没了解过)与杂项。

个人认识

webctf大概是渗透中最亲民的一种夺旗赛了,从我一个外行眼中看来,只需要有一些代码阅读能力、构想能力,就可以通过打靶机快速入门,如果能使用Burp Suite程序或者会使用python,对web,sql有基本的认识,那样就更方便了。

其实一直想写点从blackarch配置到入坑ctf的东西,可惜我懒,所以干脆想到什么就写什么吧。其实不是必须要渗透系统才能渗透,之前在合天网安做题时匹配的大部分系统也都是win7,但是不知道为什么大家都喜欢把玩kali的奉为大佬,真正喜欢linux的人一般喜欢自己配置渗透系统,而不是像速成课那样直接用别人给好的kali吧?

学习原因

之前有女生因为网络安全方面的问题找过我,作为完全没经历过渗透的菜鸡根本对这类事情无法掌控,刚好玩arch的我得知blackarch渗透系统的消息,果断进了这个坑。

实战例子

cookies(该题为bugku靶场中的一道练习题)

今天随机筛选的一道题,很有趣地证明了我是憨憨:

具体大家可以在bugku中自己体验,大致解题方式是通过火狐浏览器的hackbar解码找到url中filename=后的编码形式为base64,果断开python扫描工具dirscanner扫了一波,完美地啥都没有找到。

果断上网了解一波字典外的东西到底是什么,发现是index.php(记笔记ing),再用hackbar用base格式编码回去,感觉良好,然后发现啥都没有,果然在使用hackbar时注意给url切片,Load URL导入url后Split URL进行切片,另一个变量也浮出水面:line=,给它设置1,2,3,发现是将源码切片成了几段,于是果断用python写了个工具:

import urllib.request as ur

def html(url):
    if url == ""
        url = input("url:")
    
    html_words = ur.urlopen(url)
    html_words = html_words.read()
    html_words = html_words.decode()
    print("html is{html}".format(html = html_words))
    return html_words

def main():
    count = 0
    try:
  while count != 20:
      count += 1
      url = "[当前url位置]".format(lines = count)
      html(url)
    except:
  print("地址不正确")
    return

if __name__ == "__main__":
    main()

这是一个很简单的网页爬取脚本,在电脑拥有python时可以下载pip install urllib3(arch用户使用:sudo pacman -S python-urllib3),将其复制进main.py文件,改[当前url位置]改为当前url位置,line=后面改为{html}即可使用。

扫出来php的源文件大概是要把cookies中的某个变量等于它自己,在加上题目就是cookies,果断选择hackbar中的cookies选项,将其写入进去,选择Execute运行,发现好像没有结果,再会看php代码,好像是打印在keys.php中,既然如此,答案只有一个了:

将keys.php以base64重编译进filename=中,网页一片空白,喵喵喵喵喵?!

试着改line=0,1,2,3,4还是没有效果,整个人急躁地由把题目做了好几遍,结果还是一样,确认了自己没有错误后才想起元素审查,f12重新打开以看,果然flag就在那里躺着看我的迷惑行为。 复制后回到bugku提交flag,拿下一血。

你必须让他停下(该题为bugku靶场中的一道练习题)

如果说上一个题能让我感受到webctf夺旗的畅快感,那么这一题完成时让我开始反思自己对待ctf的想法。

打开后是一个在不断刷新的网站,阻止直接进行元素审查,通过观察可以发现每刷新十多次会冒出一次flag,但是通过下载html文档是无法得到flag,在网上寻找教程时大部分是用bure Suite(国内ctf挺主流的一个渗透程序),但是我不是很喜欢在框架内做题,认为使用可以编辑的代码才有安全感,一直没有下载用于渗透的程序,最后果然找不到解决办法(之前做成绩查询时也存在同样问题,解题思路全都有用到bure suite,最后只能手工注入)。

最后我的解题方法果然跑偏,从怎么完成本题变成怎么获得flag{},于是暴力通过拼手速将一闪而过的flag截图出来,狼狈地看着截图一个一个输出flag{}。

反思

实际上我在你必须让他停下练习中与学习ctf的本意已经跑偏了,某种意义上一些用Bure Suite的人可能也一样吧,本意我希望学习原理,如果未来还有人出现问题时我多少能提供一些帮助,但是随着对夺旗的在意程度,我似乎对原理没那么在意了,又如同在cookies中只想着要冒出flag的我甚至一度无法想起元素审查。

通过别人给好的定式使用固定的方法解出题目,甚至于不能通过解法来举一反三。也许偏门方法对未来学习加固多少会有点帮助,但是就现在而言我开始感觉得到学习效率大不如刚开始,说到底应该是积分更重要点还是原理更重要一点呢?我拿捏不准。

谨以此思路给打算学习ctf或者学习ctf中对这方面有考量的大家以作参考。

ctf·web
147 views
Comments
登录后评论
Sign In
·

国内针对web的题真的好多啊,想学PWN跟REVERSE都不知道从哪开始了 sob