【应急响应】-Linux 篇

更多了解(https://blog.sechelper.com/2022/08/26/emergency-response/README/#more)

应急响应指遇到重大或突发事件后所采取的措施和行动。应急响应所处置的突发事件不仅仅包括硬件、产品、网络、配置等方面的故障,也包括各类安全事件,如:黑客攻击、木马病毒、勒索病毒、Web攻击等。

处置手段

发现问题要处置,遵循原则:百分百确认是非法文件,报备记录关停,摸棱两可找负责人确认,处置看沟通结果

环境信息:

Ubuntu 20.04.4 LTS

XShell

*注意:linux版本之间有差异,具体以自己的系统版本为准

开机启动项

伴随开机启动,一般生产服务器很少重启,但是为防止被控机器失联部分木马会添加开机启动项作为复活手段。

/etc/rc.local

#!/bin/sh -e

#

# rc.local

#

# This script is executed at the end of each multiuser runlevel.

# Ensure that the script will "exit 0" on success or any other

# value on error.

#

# To enable or disable this script, just change the execution

# bits.

#

# By default, this script does nothing.

touch /root/1.txt

/etc/rc.d/rc.local

#!/bin/bash

# THIS FILE IS ADDED FOR COMPATIBILITY PURPOSES

#

# It is highly advisable to create own systemd services or udev rules

# to run scripts during boot instead of using this file.

#

# In contrast to previous versions due to parallel execution during boot

# this script will NOT be run after all other services.

#

# Please note that you must run 'chmod +x /etc/rc.d/rc.local' to ensure

# that this script will be executed during boot.

touch /var/lock/subsys/local

touch /tmp/1.txt

/etc/rc.d/init.d/

这个目录下面放了可执行脚本或文件

/etc/rc*.d/

rc0.d/ rc1.d/ rc2.d/ rc3.d/ rc4.d/ rc5.d/ rc6.d/ rcS.d/

systemctl list-unit-files

...

ssh.service                            enabled        enabled     

ssh@.service                          static          enabled     

sshd.service                          enabled        enabled     

sudo.service                          masked          enabled     

syslog.service                        enabled        enabled     

system-update-cleanup.service          static          enabled     

systemd-ask-password-console.service  static          enabled     

systemd-ask-password-plymouth.service  static          enabled     

systemd-ask-password-wall.service      static          enabled     

systemd-backlight@.service            static          enabled 

...

发现恶意服务,使用下面命令关停(以关闭ufw.service服务作为实例):

sudo systemctl stop ufw.service # 停止服务

sudo systemctl disable ufw.service # 删除开启启动

关错了,避免尴尬偷偷启动服务

sudo systemctl start ufw.service # 启动服务

sudo systemctl enable ufw.service # 添加开启启动

环境变量配置文件

/etc/profile

/etc/bashrc

/etc/bash.bashrc

~/.bashrc

~/.profile

~/.bash_profile

这些文件用于设置系环境变量或启动程序,每次Linux登入或切换用户都会触发这些文件。

        Linux登入环境环境变量触发顺序

切换用户时也会触发环境变量文件

vulab@sechelper:~$ sudo su

~/.bash_logout

登出账户时触发。

vulab@sechelper:~$ exit

logout

~/.bash_logout

各项资源异常进程是Linux当前正在处理的任务,当运行某个软件时将为其创建一个进程。

vulab@sechelper:~$ sudo ps -efcaux # 查看所有进程

...

www-data  97735  0.0  1.8 309560 65456 ?        S    Aug20  0:13  \_ php-fpm7.4

syslog      785  0.0  0.1 224492  5528 ?        Ssl  Aug17  0:03 rsyslogd

ntp          796  0.0  0.1  74632  4240 ?        Ssl  Aug17  0:13 ntpd

root        802  0.0  0.2  17176  8044 ?        Ss  Aug17  0:03 systemd-logind

root        816  0.0  0.2  12172  7436 ?        Ss  Aug17  0:04 sshd

root      126262  0.0  0.2  13920  8852 ?        Ss  15:47  0:00  \_ sshd

ubuntu    126363  0.0  0.1  14052  6260 ?        S    15:47  0:00      \_ sshd

ubuntu    126364  0.0  0.1  8276  5216 pts/0    Ss  15:47  0:00          \_ bash

root      130670  0.0  0.1  9404  4752 pts/0    S    18:59  0:00              \_ sudo

root      130671  0.0  0.1  8260  4252 pts/0    S    18:59  0:00                  \_ su

root      130672  0.0  0.1  7236  4056 pts/0    S    18:59  0:00                      \_ bash

...

查找进程文件位置

vulab@sechelper:~$ sudo lsof -p 948 # 查看pid为948的进程详细信息

COMMAND PID USER  FD      TYPE            DEVICE SIZE/OFF      NODE NAME

dockerd 948 root  cwd      DIR                8,2    4096          2 /

dockerd 948 root  rtd      DIR                8,2    4096          2 /

dockerd 948 root  txt      REG                8,2 95757512    2883867 /usr/bin/dockerd

dockerd 948 root  mem-W    REG                8,2    32768    2231986 /var/lib/docker/buildkit/cache.db

vulab@sechelper:~$ sudo ls -al /proc/948/exe # 查看pid为948的进程文件绝对路径

lrwxrwxrwx 1 root root 0 Aug 21 03:24 /proc/948/exe -> /usr/bin/dockerd

文件作用

cwd符号链接(类似快捷方式)的是进程运行目录

exe符号链接(类似快捷方式)的是执行程序的绝对路径

cmdline符号链接(类似快捷方式)的是进程运行目录

environ记录进程运行时系统的环境变量

CPU

CPU也称为中央处理器、主处理器或单处理器,是执行计算机指令得关键部件,某服务器突然有一个进程占用的CPU远超平时,那么可能被植入了挖矿病毒。

排查话术:CPU是否远超平时居高不下,如果是的话那么可能被植入了挖矿病毒。

vulab@sechelper:~$ top # 排名越靠前占用的CPU越多

 

top命令结果

vulab@sechelper:~$ ps -aux| sort -k3nr | head -10

root      12039  122  3.4 3554048 139720 ?      Sl  08:18  0:02 /usr/local/jdk-17.0.3.1/bin/java -Djava.util.logging.config.file=/usr/local/apache-tomcat-10.0.22/conf/logging.properties -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager -Djdk.tls.ephemeralDHKeySize=2048 -Djava.protocol.handler.pkgs=org.apache.catalina.webresources -Dorg.apache.catalina.security.SecurityListener.UMASK=0027 -Dignore.endorsed.dirs= -classpath /usr/local/apache-tomcat-10.0.22/bin/bootstrap.jar:/usr/local/apache-tomcat-10.0.22/bin/tomcat-juli.jar -Dcatalina.base=/usr/local/apache-tomcat-10.0.22 -Dcatalina.home=/usr/local/apache-tomcat-10.0.22 -Djava.io.tmpdir=/usr/local/apache-tomcat-10.0.22/temp org.apache.catalina.startup.Bootstrap start

...

内存

程序启动时会被系统读入内存,在执行的过程也不断的在内存中申请新的空间。

排查话术:最近内存是否突然升高持续不下,如果是的话那么可能被植入了挖矿病毒。

vulab@sechelper:~$  ps -aux | sort -k4nr | head -10 # 内存占用最高的是个进程

root        948  0.0  1.9 1308116 78424 ?      Ssl  03:24  0:02 /usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock

root        859  0.0  1.2 1355640 51364 ?      Ssl  03:24  0:14 /usr/bin/containerd

root        851  0.0  1.0 874552 42960 ?        Ssl  03:24  0:01 /usr/lib/snapd/snapd

root        890  0.0  0.5 107916 20864 ?        Ssl  03:24  0:00 /usr/bin/python3 /usr/share/unattended-upgrades/unattended-upgrade-shutdown --wait-for-signal

...

网络带宽

带宽也就是网速的最高上限,比如家里的100/M带宽,就是每秒100M的传输速度,带宽分为上行和下行对应着上传下载,某服务器上行流量比往常高出几倍时,说明在外发大量的数据重点检查是否为正常业务。

排查话术:网络流量上下行有异常吗?有异常的话是哪个IP?

网络占用需要安装软件辅助,应急时大部分情况都不允许随意安装软件,这时候就需要和运维的网络沟通,从设备上看下流量情况。

vulab@sechelper:~$ sudo apt-get install iftop # centos使用 yum install iftop

Reading package lists... Done

Building dependency tree     

Reading state information... Done

The following NEW packages will be installed:

  iftop

0 upgraded, 1 newly installed, 0 to remove and 54 not upgraded.

Need to get 36.3 kB of archives.

After this operation, 95.2 kB of additional disk space will be used.

Get:1 http://cn.archive.ubuntu.com/ubuntu focal/universe amd64 iftop amd64 1.0~pre4-6build1 [36.3 kB]

Fetched 36.3 kB in 1s (24.6 kB/s)

Selecting previously unselected package iftop.

(Reading database ... 108839 files and directories currently installed.)

Preparing to unpack .../iftop_1.0~pre4-6build1_amd64.deb ...

Unpacking iftop (1.0~pre4-6build1) ...

Setting up iftop (1.0~pre4-6build1) ...

Processing triggers for man-db (2.9.1-1) ...

使用iftop命令分析网络时,需要指定网卡,一个生产机器服务器会有很多块网卡,有管理用的、业务用的或其它的,这时候要与运维沟通区分各个网卡的用途。

vulab@sechelper:~$ ip addr # ifconfig 查看所有网卡

1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000

    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00

    inet 127.0.0.1/8 scope host lo

      valid_lft forever preferred_lft forever

    inet6 ::1/128 scope host

      valid_lft forever preferred_lft forever

2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000

    link/ether 00:0c:29:23:3d:42 brd ff:ff:ff:ff:ff:ff

    inet 192.168.111.133/24 brd 192.168.111.255 scope global dynamic ens33

      valid_lft 941sec preferred_lft 941sec

    inet6 fe80::20c:29ff:fe23:3d42/64 scope link

      valid_lft forever preferred_lft forever

3: docker0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN group default

    link/ether 02:42:76:f7:a7:4b brd ff:ff:ff:ff:ff:ff

    inet 172.17.0.1/16 brd 172.17.255.255 scope global docker0

      valid_lft forever preferred_lft forever

4: br-d9f18b6d603d: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default

    link/ether 02:42:8b:93:c0:83 brd ff:ff:ff:ff:ff:ff

    inet 172.18.0.1/16 brd 172.18.255.255 scope global br-d9f18b6d603d

      valid_lft forever preferred_lft forever

    inet6 fe80::42:8bff:fe93:c083/64 scope link

      valid_lft forever preferred_lft forever

10: veth6a9efeb@if9: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue master br-d9f18b6d603d state UP group default

    link/ether 76:0d:b7:6b:56:10 brd ff:ff:ff:ff:ff:ff link-netnsid 0

    inet6 fe80::740d:b7ff:fe6b:5610/64 scope link

      valid_lft forever preferred_lft forever

vulab@sechelper:~$ sudo iftop -i ens33 -P # 指定ens33网卡,分析其流量


iftop流量分析

网络连接

服务器每发出和接收一个TCP/UDP请求都能看到连接(短时间内)。

netstat 命令:

-a 显示所有

-n 数字形式展示连接端口

-t  仅查看TCP连接情况

-u  仅查看UDP连接情况

-p 显示相关程序名

vulab@sechelper:~$ sudo netstat -antup # 我经常使用的一条命令,查看所有连接

roto Recv-Q Send-Q Local Address          Foreign Address        State      PID/Program name   

tcp        0      0 127.0.0.1:60801        0.0.0.0:*              LISTEN      1212/apache2       

tcp        0      0 127.0.0.1:3306          0.0.0.0:*              LISTEN      1066/mysqld       

tcp        0      0 0.0.0.0:111            0.0.0.0:*              LISTEN      1/init             

tcp        0      0 0.0.0.0:80              0.0.0.0:*              LISTEN      1502/nginx: master 

tcp        0      0 10.0.4.16:53            0.0.0.0:*              LISTEN      771/named   

tcp        0      0 10.0.4.16:80            93.157.63.28:10959      SYN_RECV    -                 

tcp        0      0 10.0.4.16:35322        169.254.0.55:5574      ESTABLISHED 1316/YDService     

tcp        0      0 10.0.4.16:41805        192.112.36.4:53        TIME_WAIT  -                 

tcp        0      0 10.0.4.16:35978        169.254.0.138:8186      ESTABLISHED 58593/tat_agent   

tcp6      0      0 127.0.0.1:60800        :::*                    LISTEN      1580/java         

tcp6      0      0 :::111                  :::*                    LISTEN      1/init     

...

状态作用

LISTEN监听TCP端口,等待远程连接

TIME-WAIT等待一段时间确保远程TCP中断请求

ESTABLISHED打开着的连接

SYN_RECV接收和发送连接请求后等待确认连接请求确认的情况。

CLOSING等待远程TCP对连接中断的确认

CLOSE连接完全关闭

关闭进程

这里注意一下,关停服务后进程是否会”复活“,如果恶意进程被kill后重新启动,那么肯定有其它地方有自启动方法,继续排查守护进程、定时任务、系统配置、服务和系统文件。

vulab@sechelper:~$ sudo kill -9 1434

威胁情报

威胁情报是识别和分析网络威胁的过程。威胁情报平台可以查出一些域名和IP地址得信誉度,一旦发现它们存在网络攻击痕迹迅速封禁。

微步在线

VirusTotal

安恒威胁分析平台

深信服威胁情报中心

VenusEye威胁情报中心

360威胁情报中心

Data Mining for Threat Intelligence

SSH

SSH(Secure Shell)是一种加密的网络传输协议,通常利用SSH来传输命令行界面和远程执行命令。

账户密码

vulab@sechelper:~$ users

vulab

vulab@sechelper:~$ cat /etc/passwd

root:x:0:0:root:/root:/bin/bash

...

systemd-coredump:x:999:999:systemd Core Dumper:/:/usr/sbin/nologin

lxd:x:998:100::/var/snap/lxd/common/lxd:/bin/false

vulab:x:1000:1000::/home/vulab:/bin/bash

/bin/bash

账户可登录,登录后使用/bin/bash解释执行脚本

/bin/false

不可登录,不会有任何提示。

/usr/sbin/nologin

不可登录,拒绝用户登录。

密钥篡改

vulab@sechelper:~$ cat authorized_keys

ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQDH9DeY9Ry/8FSlIEKEU/HH2yaPklCf36/ePIW9oS/9i7QklEqvvrPEfhpcSH0by98a+AjktEoUqt3TRLvM4IHtr7/KAP0m8cFyN0wlpvmY2rqwko3kPbaVm4sb8Qxc4IJo/0HjRvTAzNvTzzT7unWLaPZ8vUyrDVooRJWdjwbxpq0wtBvcNci7//145sTocddJDvsnwT7ulE/QIdBWHQdtclUr5zqToSZvslFZHOvoPx34+65R48CrBaucvdBPPslno6FFecQmc0Cy5CSVMr6VM67YdJp/E7RGTyl5M8KlCwXHjEabA9dUaT9oMyoR1Jb1u2m1lZWjAx1PTZ86+22XtskCizG3+hZIdwsSvGwArAhBymnkAsNZso3zqHymbnsnJpZ22FCUs/Gb4YiDjFahC61WsAmfiag6eJwLApfe086QVAcVfSLZQ82ppFRZV79PM+wu2VU0sb1zmj5F97MaF7LbZB4+QPoL9mnpOcRY6Unbs+TFyp7Pp4W8+/HbI5U=

重装覆盖

vulab@sechelper:~$ ls -lt /usr/bin/ssh /usr/sbin/sshd # 不可靠,时间可以被篡改

-rwxr-xr-x 1 root root 876328 Dec  2  2021 /usr/sbin/sshd

-rwxr-xr-x 1 root root 789448 Dec 18  2015 /usr/bin/ssh

vulab@sechelper:~$ sudo touch -a -m -t 201512180130.09 /usr/bin/ssh # 篡改ssh创建时间

vulab@sechelper:~$ ssh -V

OpenSSH_8.2p1 Ubuntu-4ubuntu0.4, OpenSSL 1.1.1f  31 Mar 2020

参考:

openssh-backdoor

ssh服务是如何劫持密码

定时定点执行Linux程序或脚本。

crontab

定时任务计划命令,下面几个是创建任务后保存的路径。

/var/spool/cron/ 目录里的任务以用户命名

/etc/crontab 调度管理维护任务

/etc/cron.d/ 这个目录用来存放任何要执行的crontab文件或脚本。

下面这些都是检查重点对象

/etc/cron.hourly/ 每小时执行一次

/etc/cron.daily/ 每天执行一次

/etc/cron.weekly/ 每周执行一次

/etc/cron.monthly/ 每月执行一次

扩展知识:

/etc/cron.allow 存放可创建定时任务账户,一行一个账户名,已创建的定时任务不受影响

vulab@sechelper:~$sudo cat /etc/cron.allow

root

vulab@sechelper:~$ crontab -e

You (vulab) are not allowed to use this program (crontab)

See crontab(1) for more information

/etc/cron.deny 存放不可创建定时任务账户,一行一个账户名,已创建的定时任务不受影响

vulab@sechelper:~$ crontab -e

You (vulab) are not allowed to use this program (crontab)

See crontab(1) for more information

参考:

定时任务

Rootkit

Rootkit是指其主要功能为:隐藏其他程序进程的软件,可能是一个或一个以上的软件组合。在今天,Rootkit一词更多地是指被作为驱动程序,加载到操作系统内核中的恶意软件。


rootkit原理图

vulab@sechelper:~/1337kit$ sudo python3 builder.py --config config.yml  # 编译rootkit

[sudo] password for vulab:

████  ████████  ████████  ██████████ █████      ███  █████

░░███  ███░░░░███ ███░░░░███░███░░░░███░░███      ░░░  ░░███

░███ ░░░    ░███░░░    ░███░░░    ███  ░███ █████ ████  ███████

░███    ██████░    ██████░      ███  ░███░░███ ░░███ ░░░███░

░███  ░░░░░░███  ░░░░░░███    ███    ░██████░  ░███  ░███

░███  ███  ░███ ███  ░███    ███    ░███░░███  ░███  ░███ ███

█████░░████████ ░░████████    ███      ████ █████ █████  ░░█████

░░░░░  ░░░░░░░░  ░░░░░░░░    ░░░      ░░░░ ░░░░░ ░░░░░    ░░░░░

LKM Rootkit Builder

...

  LD [M]  /tmp/ItclNzX3O3hJUXQ3/project.ko

make[1]: Leaving directory '/usr/src/linux-headers-5.4.0-109-generic'

=== File /home/vulab/1337kit/project.ko created ===

vulab@sechelper:~/1337kit$ sudo insmod project.ko # 将rootkit安装到内核

vulab@sechelper:~/1337kit$ sudo lsmod # 查看内核模块

vulab@sechelper:~/1337kit$ sudo rmmod project # 卸载内核模块

检查系统是否被植入rootkit

vulab@sechelper:~$ sudo apt install chkrootkit # 安装chkrootkit

vulab@sechelper:~$ sudo chkrootkit

[sudo] password for vulab:

ROOTDIR is `/'

Checking `amd'...                                          not found

Checking `basename'...                                      not infected

Checking `biff'...                                          not found

Checking `chfn'...                                          not infected

Checking `chsh'...                                          not infected

Checking `cron'...                                          not infected

...

Searching for suspect PHP files...                          nothing found

Searching for anomalies in shell history files...          nothing found

Checking `asp'...                                          not infected

Checking `bindshell'...                                    not infected

Checking `lkm'...                                          chkproc: nothing detected

chkdirs: nothing detected

Checking `rexedcs'...                                      not found

Checking `sniffer'...                                      lo: not promisc and no packet ...

Checking `w55808'...                                        not infected

Checking `wted'...                                          chkwtmp: nothing deleted

Checking `scalper'...                                      not infected

Checking `slapper'...                                      not infected

Checking `z2'...                                            chklastlog: nothing deleted

Checking `chkutmp'...                                      chkutmp: nothing deleted

Checking `OSX_RSPLUG'...                                    not tested

sudo apt install rkhunter # 安装rkhunter


rhkhunter 配置

vulab@sechelper:~$ sudo rkhunter --check

[ Rootkit Hunter version 1.4.6 ]

Checking system commands...

  Performing 'strings' command checks

    Checking 'strings' command                              [ OK ]

  Performing 'shared libraries' checks

    Checking for preloading variables                        [ None found ]

    Checking for preloaded libraries                        [ None found ]

    Checking LD_LIBRARY_PATH variable                        [ Not found ]

...

隐藏的rootkit如何删除

Rootkit在内核模块里找不到,那么就存在删除不掉的可能,这时候需要将感染系统以文件挂载到其它Linux系统上,进行清除操作。

参考:

rkhunter 官网

chkrootkit 官网

rootkit demo

严重声明

文中技术只可用于安全技术研究,任何非法用途与作者无关,请勿用在生产环境安装测试rootkit。

关于应急响应-Linux 篇讲解完毕,关注至察助安 公众号获取更多优质网络安全知识,无优质不分享。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,222评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,455评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,720评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,568评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,696评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,879评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,028评论 3 409
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,773评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,220评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,550评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,697评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,360评论 4 332
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,002评论 3 315
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,782评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,010评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,433评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,587评论 2 350

推荐阅读更多精彩内容