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中对这方面有考量的大家以作参考。