CTF夺旗赛是计算机安全竞赛的一种形式。国内这一领域当前的规模最大的赛事BCTF“百度杯”全国网络安全技术对抗赛决赛刚刚落下帷幕。作为工作组的一名成员,想分享下自己的参与经历。
算法、FP、前端、安全、系统管理——2013年总结
二月
一日回上海,回来又吃了顿海底捞~
TUNA技术沙龙,精心准备了一天的HTML幻灯片:A Pretty Printer Library in Haskell
幻灯片里的1958、555都有所指涉,1958为诞生年份,555为马路号码。到了Algebraic data type,连同后面的Tagged Union,也都有深意。
“1001夜”学生节线上解谜活动1001/key题解
http://www.net9.org/StudentFestival/1001/是模仿东京大学设计的海报谜题:

前几关的解法可以参考http://ppwwyyxx.com/2013/Student-Festival-Puzzle/,下面以出题人角度给出其中的1001/key的题解。
本题是一道crackme,直接运行程序会提示输入密码,如果密码输入错误就会显示meow。
RedTigers Hackit Wargame - Level 1 ~ Level 7
RedTigers Hackit是关于PHP和SQL injection的wargame。
又开始做wargame了,这次的进步是用上了HTTPie,一个类似curl的工具,但语法比后者优雅一些。
D-Link路由器后门注记
这是学习 http://www.devttys0.com/2013/10/reverse-engineering-a-d-link-backdoor 动手实践时做的一些记录。
下载 ftp://ftp.dlink.eu/Products/dir/dir-100/driver_software/DIR-100_fw_reva_113_ALL_en_20110915.zip
1 | % binwalk -e DIR100_v5.0.0EUb3_patch02.bix |
得到squashfs文件系统9DB90.squashfs。留着这个文件不动,还要准备另一个工具。
约瑟夫问题的两个O(log n)解法
这个是学习编程时的一个耳熟能详的问题了:
n个人(编号为0,1,...,n-1)围成一个圈子,从0号开始依次报数,每数到第m个人,这个人就得自杀,之后从下个人开始继续报数,直到所有人都死亡为止。问最后一个死的人的编号(其实看到别人都死了之后最后剩下的人可以选择不自杀……)。
这个问题一般有两种问法:
- 给出自杀顺序。不少数据结构初学书都会以这个问题为习题考验读者对线性表的掌握。比较常见的解法是把所有存活的人组织成一个循环链表,这样做时间复杂度是
O(n*m)的。另外可以使用order statistic tree(支持查询第k小的元素以及询问元素的排名)优化到O(n log n)。另外有篇1983年的论文An O(n log m) Algorithm for the Josephus Problem,但可惜我没找到下载链接。 - 求出最后一个人的编号。可以套用上一种问法的解法,但另外有更加高效的解法,下文展开讨论。
HDU OJ一些题目
关于做题这回事,引用一下:
1 | Chao Xu,Haskell用户. |
深以为然。算法题带来的代码能力的效用实在是太大了,除了训练思维外对速度、准确性也有极大帮助。真切感受到解决一个大作业花了数小数编写,再花了更长的时间调试,和立刻写完、写完就对的差异。订阅过一些邮件列表,偶尔能看到一些非常苍白的问题的人,也能看到内容可能更空洞的回复。以及市面上很多浮夸的书。如果方法恰当潜心研习一段时间应该不会出现这样的问题呢。所以当我看到《编程之美》这个书名的时候,第一印象也是那类浮华的书,等待之前某次活动拿到一本看才发现不是,”编程“、”美“字样在我心目中的地位都被这些浮夸的事物玷污了。
我现在发现自己看过的东西拓扑顺序不太对了,简单说就是ld -la -lb -la,这可以算作一个tech
joke吧。昨天经过fqj1994指导,今天终于把https开起来了,感觉又有所提高,好开心啊。
用Google Analytics API为静态站点实现“阅读最多文章”功能
Hexo
我一直走静态博客路线。最早用make+m4搭建博客,后来改用Haskell的Hakyll,因为网站相关的工具炼(HTML、CSS、JS模板引擎等)不够用去年11月又换成了Node.js社区的DocPad。最近升级DocPad坏掉了,于是8月上旬又折腾了下迁移到了Hexo。
E-mail文化拾趣
首部
Carbon Copy (Cc:)
Carbon copying指的是用复写纸复写,电子邮件世界里借用了这个术语表示把副本抄送给非主要收件人。
Blind Carbon Copy (Bcc:)
RFC5322提及邮件客户端有三种处理Bcc:的方式:
- To、Cc、Bcc收件人均收到同样的邮件,该邮件中Bcc:首部被移除
- To、Cc收件人收到Bcc:首部被移除的邮件。Bcc收件人收到带有Bcc:首部的邮件, 实现可以决定Bcc收件人是否能见到其他Bcc收件人。
- To、Cc收件人会看到空的Bcc:首部。
供参考,下面是RFC5322的3.6.3节对Bcc:的描述原文:
1 | The "Bcc:" field (where the "Bcc" means "Blind Carbon Copy") contains |
在Gmail里发封没有To:、Cc:,只有Bcc:的邮件,收件人就会看到To: undisclosed-recipients: ;
Signature Block
附在邮件正文后面作为签名信息,通常会包含发件人的职位、联系方式等。
为了和正文分隔开,一般使用两个连字符跟着一个空格和一个换行符(sig
dashes),用C语言的字面字符串表示方式就是" -\n"。
邮件客户端可以认出双连字符记号用与正文不同的样式标记出来或者隐藏。
Top Posting vs Bottom Posting
Posting这个词是用来描述新闻组的,
在回复邮件时,表示回复文本时在原文下面写回复(bottom posting)还是在原文上面先回复(top posting)。 传统的方式是采用bottom posting, 先发生的事(引文)出现在前面、后发生的(回复)出现在后面在时间顺序上较为自然, 而top posting则会对理清事件的先后顺序造成阻碍:
1 | > Where are you? |
他们抨击top posting的理由就是后者颠倒了引文和回复的时间顺序:
1 | At home. |
对阅读邮件特别是很长的线索时造成障碍。在很多邮件列表,网络礼仪就是使用bottom posting,
另外还有interleaved posting,把原文分为多段,在每一段后写下自己的回复。 这种风格可以被用作point-by-point rebuttal,逐条驳斥对方的观点。
现在top posting占到了上风,我觉得很大一部分原因是网页版邮件客户端的兴起和非黑客邮件使用者数目的激增。 邮件客户端缺乏标注引文和切换引文显示功能时,采取top posting的方式能减少鼠标滚动,更容易看到回复的内容。
比如说Mutt默认就设置了快捷键跳到下一个不包含引文的行:
1 | <skip-quoted> (default: S) |
以及用于切换引文是否显示的:
1 | <toggle-quoted> (default: T) |
Reply-To
这个邮件首部为用户回复邮件时提供建议,设定新邮件的To:首部。
Thread
References
In-Reply-To
format=flowed
Mail-Followup-To
回复邮件时如果选择了follow up(或者说reply to all)的方式,那么收件人会被填为Mail-Followup-To设定的地址。 避免发件人如果订阅了该邮件列表的话收到两封相同的邮件。
Mutt在你设置subscribe该邮件列表时会自动设置Mail-Followup-To首部。
X-Mailer
一些不友好的客户端:
QQMail
不使用References:首部。
Mutt
query_command
1 | set query_command="echo; grep %s ~/.mutt/aliases | cut -d' ' -f3-" |
其他
参考配置
http://www.spinnaker.de/mutt/muttrc
Sender Policy Framework
OverTheWire - Natas Wargame - Level 0 ~ Level 17
Natas Wargame是关于web安全的wargame。