通过Email伪造发件人进行钓鱼攻击

网络安全wuyou 发表了文章 • 4 个评论 • 531 次浏览 • 2019-06-19 20:30 • 来自相关话题

最近本人在研究伪造电子邮件,目前进展缓慢,但因为东西比较多,所以就决定先把第一阶段的研究结果发出来。

 协议介绍
发送:SMTP(Simple Mail Transfer Protocol):SMTP主要负责底层的邮件系统如何将邮件从一台机器传至另外一台机器。SMTP协议默认端口:25

接受:POP(Post Office Protocol):版本为POP3,POP3是把邮件从电子邮箱中传输到本地计算机的协议。POP3协议默认端口:110

SMTP协议最基础的五条内容如下:Helo /Ehlo:表示与服务器内处理邮件的进程开始通话”介绍自己”;
Mail from:邮件信息的来源地址,也就是要伪造的地址 ;
Rcpt to:邮件接收者/受害者;
Data :邮件的具体内容/可以添加附件等;
Quit :退出邮件。工具介绍

我们可以使用Kali中的 Swaks(SMTP界的瑞士军刀) 工具进行伪造电子邮件--body //邮件内容
--from //邮件发送人(伪造内容)
--to //邮件接收人
--header "Subject: 邮件标题"
--ehlo qq.com //伪造邮件ehlo头,即是发件人邮箱的域名。提供身份认证
--data email.txt //将正常源邮件的内容保存成TXT文件,再作为正常邮件发送
--tls //加密传输









实战测试
首先,如果你想伪造一个qq邮箱用户向另一个qq邮箱用户发送邮件,或者163向qq发送,因为SPF记录的原因,这些是很难做到的SPF 记录实际上是服务器的一个 DNS 记录,原理其实很简单:

假设邮件服务器收到了一封邮件,来自主机的 IP 是173.194.72.103,并且声称发件人为email@example.com。
为了确认发件人不是伪造的,邮件服务器会去查询example.com的 SPF 记录。
邮件内容如如果该域的 SPF 记录设置允许 IP 为173.194.72.103的主机发送邮件,则服务器就认为这封邮件是合法的;
如果不允许,则通常会退信,或将其标记为垃圾/仿冒邮件。

因为不怀好心的人虽然可以「声称」他的邮件来自example.com,但是他却无权操作example.com的 DNS 记录;
同时他也无法伪造自己的 IP 地址,因此 SPF 是很有效的。
当前基本上所有的邮件服务提供商(例如 Gmail、QQ 邮箱等)都会验证它。






Linux下检测是否存在SPF记录:




 
选择一个没有SPF记录的域名,并发送至QQ邮箱时依然失败




 
原因可能如下:




 
如果我们在qq邮箱中增加白名单的话当然可以实现接受




 
不过比如huawei.com使用的就是软失败,可以发送但会被当做垃圾邮件放到垃圾箱中(具体能不能发还要看运气)
软失败;SPF记录已将主机指定为不被允许发送但正在转换;接受但标记
 
但是在163邮箱或其他企业邮箱中,我们可以轻松伪造发件人发送邮件




 
接下来介绍 --data 参数如何使用
选择一封正常的邮件,显示邮件原文




 
保存到txt文件中,并删掉To、From参数









 
 
实际效果:





其中的链接我都改成了钓鱼页面
具体可以参考这篇文章:http://www.freebuf.com/web/133689.html
但是这样会被检测到钓鱼邮件而被拒收或拉入垃圾箱中,所以具体要如何钓鱼还是要考大家的脑洞了

 
  查看全部
最近本人在研究伪造电子邮件,目前进展缓慢,但因为东西比较多,所以就决定先把第一阶段的研究结果发出来。

 协议介绍
发送:SMTP(Simple Mail Transfer Protocol):SMTP主要负责底层的邮件系统如何将邮件从一台机器传至另外一台机器。SMTP协议默认端口:25

接受:POP(Post Office Protocol):版本为POP3,POP3是把邮件从电子邮箱中传输到本地计算机的协议。POP3协议默认端口:110

SMTP协议最基础的五条内容如下:
Helo /Ehlo:表示与服务器内处理邮件的进程开始通话”介绍自己”;
Mail from:邮件信息的来源地址,也就是要伪造的地址 ;
Rcpt to:邮件接收者/受害者;
Data :邮件的具体内容/可以添加附件等;
Quit :退出邮件。
工具介绍

我们可以使用Kali中的 Swaks(SMTP界的瑞士军刀) 工具进行伪造电子邮件
--body //邮件内容
--from //邮件发送人(伪造内容)
--to //邮件接收人
--header "Subject: 邮件标题"
--ehlo qq.com //伪造邮件ehlo头,即是发件人邮箱的域名。提供身份认证
--data email.txt //将正常源邮件的内容保存成TXT文件,再作为正常邮件发送
--tls //加密传输
1.png


2.png


实战测试
首先,如果你想伪造一个qq邮箱用户向另一个qq邮箱用户发送邮件,或者163向qq发送,因为SPF记录的原因,这些是很难做到的
SPF 记录实际上是服务器的一个 DNS 记录,原理其实很简单:

假设邮件服务器收到了一封邮件,来自主机的 IP 是173.194.72.103,并且声称发件人为email@example.com。
为了确认发件人不是伪造的,邮件服务器会去查询example.com的 SPF 记录。
邮件内容如如果该域的 SPF 记录设置允许 IP 为173.194.72.103的主机发送邮件,则服务器就认为这封邮件是合法的;
如果不允许,则通常会退信,或将其标记为垃圾/仿冒邮件。

因为不怀好心的人虽然可以「声称」他的邮件来自example.com,但是他却无权操作example.com的 DNS 记录;
同时他也无法伪造自己的 IP 地址,因此 SPF 是很有效的。
当前基本上所有的邮件服务提供商(例如 Gmail、QQ 邮箱等)都会验证它。


3.png


Linux下检测是否存在SPF记录:
4.png

 
选择一个没有SPF记录的域名,并发送至QQ邮箱时依然失败
5.png

 
原因可能如下:
6.png

 
如果我们在qq邮箱中增加白名单的话当然可以实现接受
7.png

 
不过比如huawei.com使用的就是软失败,可以发送但会被当做垃圾邮件放到垃圾箱中(具体能不能发还要看运气)
软失败;SPF记录已将主机指定为不被允许发送但正在转换;接受但标记
 
但是在163邮箱或其他企业邮箱中,我们可以轻松伪造发件人发送邮件
8.png

 
接下来介绍 --data 参数如何使用
选择一封正常的邮件,显示邮件原文
9.png

 
保存到txt文件中,并删掉To、From参数
10.png


11.png

 
 
实际效果:

12.png

其中的链接我都改成了钓鱼页面
具体可以参考这篇文章:http://www.freebuf.com/web/133689.html
但是这样会被检测到钓鱼邮件而被拒收或拉入垃圾箱中,所以具体要如何钓鱼还是要考大家的脑洞了

 
 

socket与http协议的关系

协议安全jizi_smile 发表了文章 • 0 个评论 • 93 次浏览 • 2019-05-12 21:02 • 来自相关话题

Socket:
Socket本身并不是协议,而是一个调用接口(API),它只是提供了一个针对TCP或者UDP编程的接口。​
socket是对TCP/IP协议的封装和应用,TPC/IP协议是传输层协议,主要解决数据如何在网络中传输
通过Socket,我们才能使用TCP/IP协议。实际上,Socket跟TCP/IP协议没有必然的联系。Socket编程接口在设计的时候,就希望也能适应其他的网络协议。所以说,Socket的出现只是使得程序员更方便地使用TCP/IP协议栈而已,是对TCP/IP协议的抽象,从而形成了我们知道的一些最基本的函数接口,比如create、listen、connect、accept、send、read和write等等。
 
Socket和TCP/IP协议的关系
网络有一段关于socket和TCP/IP协议关系的说法比较容易理解:“TCP/IP只是一个协议栈,就像操作系统的运行机制一样,必须要具体实现,同时还要提供对外的操作接。
这个就像操作系统会提供标准的编程接口,比如win32编程接口一样,
TCP/IP也要提供可供程序员做网络开发所用的接口,这就是Socket编程接口。”HTTP和Socket的关系
CSDN上有个比较形象的描述:
HTTP是轿车,提供了封装或者显示数据的具体形式;Socket是发动机,提供了网络通信的能力。利用Socket建立网络连接的步骤
 
建立Socket连接至少需要一对套接字,其中一个运行于客户端,称为ClientSocket ,另一个运行于服务器端,称为ServerSocket 。
1、服务器监听:服务器端套接字并不定位具体的客户端套接字,而是处于等待连接的状态,实时监控网络状态,等待客户端的连接请求。
2、客户端请求:指客户端的套接字提出连接请求,要连接的目标是服务器端的套接字。为此,客户端的套接字必须首先描述它要连接的服务器的套接字,指出服务器端套接字的地址和端口号,然后就向服务器端套接字提出连接请求。
3、连接确认:当服务器端套接字监听到或者说接收到客户端套接字的连接请求时,就响应客户端套接字的请求,建立一个新的线程,把服务器端套接字的描述发给客户端,一旦客户端确认了此描述,双方就正式建立连接。
而服务器端套接字继续处于监听状态,继续接收其他客户端套接字的连接请求。HTTP链接的特点
HTTP协议即超文本传送协议(Hypertext Transfer Protocol ),是Web联网的基础,也是手机联网常用的协议之一,HTTP协议是建立在TCP协议之上的一种应用。
HTTP连接最显著的特点是客户端发送的每次请求都需要服务器回送响应,在请求结束后,会主动释放连接。从建立连接到关闭连接的过程称为“一次连接”。
 
 
发这篇文章是因为看python全栈视频的时候老师说全部是用socket链接起来的emm。。。。
节选自:(https://blog.csdn.net/wangnan9279/article/details/77895261) 查看全部
Socket:
Socket本身并不是协议,而是一个调用接口(API),它只是提供了一个针对TCP或者UDP编程的接口。​
socket是对TCP/IP协议的封装和应用,TPC/IP协议是传输层协议,主要解决数据如何在网络中传输
通过Socket,我们才能使用TCP/IP协议。实际上,Socket跟TCP/IP协议没有必然的联系。Socket编程接口在设计的时候,就希望也能适应其他的网络协议。所以说,Socket的出现只是使得程序员更方便地使用TCP/IP协议栈而已,是对TCP/IP协议的抽象,从而形成了我们知道的一些最基本的函数接口,比如create、listen、connect、accept、send、read和write等等。
 
Socket和TCP/IP协议的关系
网络有一段关于socket和TCP/IP协议关系的说法比较容易理解:
“TCP/IP只是一个协议栈,就像操作系统的运行机制一样,必须要具体实现,同时还要提供对外的操作接。
这个就像操作系统会提供标准的编程接口,比如win32编程接口一样,
TCP/IP也要提供可供程序员做网络开发所用的接口,这就是Socket编程接口。”
HTTP和Socket的关系
CSDN上有个比较形象的描述:
HTTP是轿车,提供了封装或者显示数据的具体形式;Socket是发动机,提供了网络通信的能力。
利用Socket建立网络连接的步骤
 
建立Socket连接至少需要一对套接字,其中一个运行于客户端,称为ClientSocket ,另一个运行于服务器端,称为ServerSocket 。
1、服务器监听:服务器端套接字并不定位具体的客户端套接字,而是处于等待连接的状态,实时监控网络状态,等待客户端的连接请求。
2、客户端请求:指客户端的套接字提出连接请求,要连接的目标是服务器端的套接字。为此,客户端的套接字必须首先描述它要连接的服务器的套接字,指出服务器端套接字的地址和端口号,然后就向服务器端套接字提出连接请求。
3、连接确认:当服务器端套接字监听到或者说接收到客户端套接字的连接请求时,就响应客户端套接字的请求,建立一个新的线程,把服务器端套接字的描述发给客户端,一旦客户端确认了此描述,双方就正式建立连接。
而服务器端套接字继续处于监听状态,继续接收其他客户端套接字的连接请求。
HTTP链接的特点
HTTP协议即超文本传送协议(Hypertext Transfer Protocol ),是Web联网的基础,也是手机联网常用的协议之一,HTTP协议是建立在TCP协议之上的一种应用。
HTTP连接最显著的特点是客户端发送的每次请求都需要服务器回送响应,在请求结束后,会主动释放连接。从建立连接到关闭连接的过程称为“一次连接”。
 
 
发这篇文章是因为看python全栈视频的时候老师说全部是用socket链接起来的emm。。。。
节选自:(https://blog.csdn.net/wangnan9279/article/details/77895261)

ENSP基础命令解释和VLAN的划分

协议安全sq_smile 发表了文章 • 0 个评论 • 102 次浏览 • 2019-05-05 21:13 • 来自相关话题

0X01    ENSP交换机基础命令及解释
<Huawei> 用户模式,权限比较低,做不了太多的事情。
[Huawei] 系统模式,
system-view 进入系统模式
display interface brief 查看所有的端口信息
display mac-address dynamic 查看mac地址表
dis int Ethernet 0/0/1 查看0/0/1端口下的详细情况
display current-configuration 查看当前全局配置 缩写命令:display cu

0X02    利用ENSP划分VLAN
        1、为什么要划分VLAN
1) 隔离域冲突和广播域,解决广播风暴。这是划分VLAN最大的好处。
2) 出于安全的考虑,不同的VLAN成员之间在没有三层路由的前提下是不能互相访问的。
3) 管理灵活:当一个用户需要切换到另外一个网络的时候,只需要更改switch和VLAN划分即可,而不用换端口和连线。
        2、划分VLAN实验的拓扑图





 
        3、实验的流程
1、给四个PC机配置IP地址。
2、将连接PC的端口配置成为access
int e0/0/1
port link-type access 指定端口模式为access模式
quit 退出当前端口
3、创建,划分VLAN,相应的端口划分进相应的VLAN.
VLAN 10
des SALES
port e0/0/1
port e0/0/3 创建VLAN10,描述信息为SALES,并将e0/0/1和e0/0/3划分进VLAN10
VLAN 20
des CAIWU
port e0/0/2
port e0/0/4 创建VLAN20,描述信息为CAIWU,并将e0/0/2和e0/0/4划分进VLAN10
4、display vlan 查看vlan信息,观察哪些端口划分进哪些VLAN。       4、实验结果的检测





       5、实验的结论
结论:同一个VLAN,同一个网段,连接到同一个交换机上,才能够互通 查看全部
0X01    ENSP交换机基础命令及解释
<Huawei>        用户模式,权限比较低,做不了太多的事情。
[Huawei] 系统模式,
system-view 进入系统模式
display interface brief 查看所有的端口信息
display mac-address dynamic 查看mac地址表
dis int Ethernet 0/0/1 查看0/0/1端口下的详细情况
display current-configuration 查看当前全局配置 缩写命令:display cu

0X02    利用ENSP划分VLAN
        1、为什么要划分VLAN
1)	隔离域冲突和广播域,解决广播风暴。这是划分VLAN最大的好处。
2) 出于安全的考虑,不同的VLAN成员之间在没有三层路由的前提下是不能互相访问的。
3) 管理灵活:当一个用户需要切换到另外一个网络的时候,只需要更改switch和VLAN划分即可,而不用换端口和连线。
        2、划分VLAN实验的拓扑图

4---VLAN划分实验拓扑.png

 
        3、实验的流程
1、给四个PC机配置IP地址。
2、将连接PC的端口配置成为access
int e0/0/1
port link-type access 指定端口模式为access模式
quit 退出当前端口
3、创建,划分VLAN,相应的端口划分进相应的VLAN.
VLAN 10
des SALES
port e0/0/1
port e0/0/3 创建VLAN10,描述信息为SALES,并将e0/0/1和e0/0/3划分进VLAN10
VLAN 20
des CAIWU
port e0/0/2
port e0/0/4 创建VLAN20,描述信息为CAIWU,并将e0/0/2和e0/0/4划分进VLAN10
4、display vlan 查看vlan信息,观察哪些端口划分进哪些VLAN。
       4、实验结果的检测

3---VLAN划分.png

       5、实验的结论
结论:同一个VLAN,同一个网段,连接到同一个交换机上,才能够互通

记一次木马的发现[转]

网络安全你可以叫我风平 发表了文章 • 0 个评论 • 126 次浏览 • 2019-03-23 18:19 • 来自相关话题

        昨天清理磁盘,整理旧文件的时候,轻信直接打开了wooyun zone里某位白帽子分享的工具,一时大意,中马了。
        PC机上有个360安全卫士,也没有一丁点的提示。。。(这木马过360的)
        随后我在修改subDomainsBrute的时候,抓dns query,惊讶地发现,出现了一个3322.org的域名,并且对应记录是不存在的,如下图:





 
        以前玩远控木马的同学可能知道,3322.0rg,花生壳之类的,常常被用来木马在内网反向上线的。所以,这个地方十分不正常,这让我意识到,有较大的几率已经中马了。
       用360安全卫士扫描,没有发现任何木马和危险项,之前也提到了,这个木马是过360的。
       现在的问题是,如何抓到这个木马,我绕了一个弯子,因为我想从dns query入手来查找(正确的做法是打开进程查看器,逐个进程检查):
1.我们已经知道,木马会主动去连likang.3322.org,但是wireshark是抓不到进程pid,它仅仅支持从某一网卡抓包,并不关心包来自于哪个进程
 
2.即使能抓到DNS查询的对应进程,其实也只能抓到windows下的DNS Client:svchost.exe进程,实际并无意义,我们依然不知道背后到底是哪个进程在请求likang.3322.org
        在抓dns query源进程受阻的情况下,我想到,既然木马想访问likang.3322.org,而这个域名又不存在。 那么我应该可以欺骗它去访问我自己的服务器,我修改hosts文件,添加:
11.22.33.44 likang.3322.org        这个时候,我应该可以抓到访问likang.3322.org的其他请求了。
 
        我用smartsniff抓包,发现有到目标11.22.33.44的http request,木马会请求likang.3322.org/ip.txt看起来像是一个DDOS木马,下载攻击目标的。
 
        这个时候我还是没抓到进程,对应的likang.3322.org/ip.txt文件并不存在,http request一瞬间就结束了,tcp查看工具因为刷新频率的原因,还看不到对应的进程。
于是我在11.22.33.44上python起了一个http server,并且让get请求hang住,sleep 30s,最终抓到了对应的进程:




       如图,QQ进程:





        总结一下,上面也说到,正确的做法,应该是查看进程列表,然后逐个检查进程是否正常,从 启动时间 |  可执行文件的创建日期 等特征对比。
      绕个弯子,换了个思路。
 
 
  查看全部
        昨天清理磁盘,整理旧文件的时候,轻信直接打开了wooyun zone里某位白帽子分享的工具,一时大意,中马了。
        PC机上有个360安全卫士,也没有一丁点的提示。。。(这木马过360的)
        随后我在修改subDomainsBrute的时候,抓dns query,惊讶地发现,出现了一个3322.org的域名,并且对应记录是不存在的,如下图:

likang.3322_.org__.png

 
        以前玩远控木马的同学可能知道,3322.0rg,花生壳之类的,常常被用来木马在内网反向上线的。所以,这个地方十分不正常,这让我意识到,有较大的几率已经中马了。
       用360安全卫士扫描,没有发现任何木马和危险项,之前也提到了,这个木马是过360的。
       现在的问题是,如何抓到这个木马,我绕了一个弯子,因为我想从dns query入手来查找(正确的做法是打开进程查看器,逐个进程检查):
1.我们已经知道,木马会主动去连likang.3322.org,但是wireshark是抓不到进程pid,它仅仅支持从某一网卡抓包,并不关心包来自于哪个进程
 
2.即使能抓到DNS查询的对应进程,其实也只能抓到windows下的DNS Client:svchost.exe进程,实际并无意义,我们依然不知道背后到底是哪个进程在请求likang.3322.org
        在抓dns query源进程受阻的情况下,我想到,既然木马想访问likang.3322.org,而这个域名又不存在。 那么我应该可以欺骗它去访问我自己的服务器,我修改hosts文件,添加:
11.22.33.44	likang.3322.org
        这个时候,我应该可以抓到访问likang.3322.org的其他请求了。
 
        我用smartsniff抓包,发现有到目标11.22.33.44的http request,木马会请求likang.3322.org/ip.txt看起来像是一个DDOS木马,下载攻击目标的。
 
        这个时候我还是没抓到进程,对应的likang.3322.org/ip.txt文件并不存在,http request一瞬间就结束了,tcp查看工具因为刷新频率的原因,还看不到对应的进程。
于是我在11.22.33.44上python起了一个http server,并且让get请求hang住,sleep 30s,最终抓到了对应的进程:
virus_found.png

       如图,QQ进程:

process_QQ.png

        总结一下,上面也说到,正确的做法,应该是查看进程列表,然后逐个检查进程是否正常,从 启动时间 |  可执行文件的创建日期 等特征对比。
      绕个弯子,换了个思路。
 
 
 

[转自freebuf] ThinkPHP5核心类Request远程代码漏洞分析

网络安全willeson 发表了文章 • 0 个评论 • 137 次浏览 • 2019-03-17 12:39 • 来自相关话题

一、漏洞介绍
2019年1月11日,ThinkPHP团队发布了一个补丁更新,修复了一处由于不安全的动态函数调用导致的远程代码执行漏洞。该漏洞危害程度非常高,默认条件下即可执行远程代码。启明星辰ADLab安全研究员对ThinkPHP的多个版本进行源码分析和验证后,确认具体受影响的版本为ThinkPHP5.0-5.0.23完整版。二、漏洞复现
本地环境采用ThinkPHP 5.0.22完整版+PHP5.5.38+Apache进行复现。安装环境后执行POC即可执行系统命令,如图:
三、漏洞分析
以官网下载的5.0.22完整版进行分析,首先定位到漏洞关键点:[code]thinkphp/library/think/Request.php:518[/code]
 
在method函数的第二个if分支中,引入了一个外部可控的数据$_POST[Config::get[‘var_method’]。而var_method的值为_method。

Request类的__construct函数如下:
 
由于$options参数可控,攻击者可以覆盖该类的filter属性、method属性以及get属性的值。而在Request类的param函数中:
 
当$this->mergeParam为空时,这里会调用$this->get(false)。跟踪$this->get函数:
 
该函数末尾调用了$this->input函数,并将$this->get传入,而$this->get的值是攻击者可控的。跟踪$this->input函数:
 
该函数调用了$this->getFileter取得过滤器。函数体如下:
 
$this->filter的值是攻击者通过调用构造函数覆盖控制的,将该值返回后将进入到input函数:
 
查看filterValue函数如下:
 
在call_user_func函数的调用中,$filter可控,$value可控。因此,可致代码执行。
漏洞触发流程:
从ThinkPHP5的入口点开始分析:[code]thinkphp/library/think/App.php:77[/code]
 
run函数第一行便实例化了一个Request类,并赋值给了$request。然后调用routeCheck($request,$config):
 
这里调用Route::check进行路由检测。函数如下:
 
注意红色字体部分。对应开头的第一个步骤,也就是调用method函数进行变量覆盖。这里需要覆盖的属性有$this->filter,$this->method,$this->get。因为$request->method()的返回值为$this->method,所以该值也需要被控制。这里返回值赋值给了$method,然后取出self::$rules[$method]的值给$rules。这里需要注意:THINKPHP5有自动类加载机制,会自动加载vendor目录下的一些文件。但是完整版跟核心版的vendor目录结构是不一样的。
完整版的目录结构如下:

而核心版的目录结构如下:

可以看到完整版比核心版多出了几个文件夹。特别需要注意的就是think-captcha/src这个文件夹里有一个helper.php文件:

这里调用\think\Route::get函数进行路由注册的操作。而这步操作的影响就是改变了上文提到的self::$rules的值。有了这个路由,才能进行RCE,否则不成功。这也就是为什么只影响完整版,而不影响核心版的原因。此时的self::$rules的值为:

那么,当攻击者控制返回的$method的值为get的时候,$rules的值就是这条路由的规则。然后回到上文取到$rules之后,根据传入的URL取得$item的值,使得$rules[$item]的值为captcha路由数组,就可以进一步调用到self::parseRule函数。函数体略长,这里取关键点:
 
此时传递进来的$route的值为\think\captcha\CaptchaController@index。因此进入的是标注红色的if分支中。在这个分支中,$result的’type’键对应的值为‘method’。然后将$result层层返回到run函数中,并赋值给了$dispatch。
 
然后将$dispatch带入到self::exec函数中:
 
进入到红色标注的分支,该分支调用Request类的param方法。因此,满足了利用链的第三步,造成命令执行。
启明星辰ADLab安全研究员对ThinkPHP5.0-5.0.23每个版本都进行了分析,发现ThinkPHP5.0.2-5.0.23可以使用同一个POC,而ThinkPHP5.0-5.0.1需要更改一下POC,原因在于Route.php的rule函数的一个实现小差异。
ThinkPHP5.0-5.0.1版本的thinkphp/library/think/Route.php:235,将$type转换成了大写:

在ThinkPHP5.0.2-5.0.23版本中,rule函数中却将$type转换成了小写:
四、补丁分析
在ThinkPHP5.0.24中,增加了对$this->method的判断,不允许再自由调用类函数。
五、结论强烈建议用户升级到ThinkPHP5.0.24版本,并且不要开启debug模式,以免遭受攻击 查看全部
一、漏洞介绍
2019年1月11日,ThinkPHP团队发布了一个补丁更新,修复了一处由于不安全的动态函数调用导致的远程代码执行漏洞。该漏洞危害程度非常高,默认条件下即可执行远程代码。启明星辰ADLab安全研究员对ThinkPHP的多个版本进行源码分析和验证后,确认具体受影响的版本为ThinkPHP5.0-5.0.23完整版。二、漏洞复现
本地环境采用ThinkPHP 5.0.22完整版+PHP5.5.38+Apache进行复现。安装环境后执行POC即可执行系统命令,如图:
三、漏洞分析
以官网下载的5.0.22完整版进行分析,首先定位到漏洞关键点:
[code]thinkphp/library/think/Request.php:518
[/code]
 
在method函数的第二个if分支中,引入了一个外部可控的数据$_POST[Config::get[‘var_method’]。而var_method的值为_method。

Request类的__construct函数如下:
 
由于$options参数可控,攻击者可以覆盖该类的filter属性、method属性以及get属性的值。而在Request类的param函数中:
 
当$this->mergeParam为空时,这里会调用$this->get(false)。跟踪$this->get函数:
 
该函数末尾调用了$this->input函数,并将$this->get传入,而$this->get的值是攻击者可控的。跟踪$this->input函数:
 
该函数调用了$this->getFileter取得过滤器。函数体如下:
 
$this->filter的值是攻击者通过调用构造函数覆盖控制的,将该值返回后将进入到input函数:
 
查看filterValue函数如下:
 
在call_user_func函数的调用中,$filter可控,$value可控。因此,可致代码执行。
漏洞触发流程:
从ThinkPHP5的入口点开始分析:
[code]thinkphp/library/think/App.php:77
[/code]
 
run函数第一行便实例化了一个Request类,并赋值给了$request。然后调用routeCheck($request,$config):
 
这里调用Route::check进行路由检测。函数如下:
 
注意红色字体部分。对应开头的第一个步骤,也就是调用method函数进行变量覆盖。这里需要覆盖的属性有$this->filter,$this->method,$this->get。因为$request->method()的返回值为$this->method,所以该值也需要被控制。这里返回值赋值给了$method,然后取出self::$rules[$method]的值给$rules。这里需要注意:THINKPHP5有自动类加载机制,会自动加载vendor目录下的一些文件。但是完整版跟核心版的vendor目录结构是不一样的。
完整版的目录结构如下:

而核心版的目录结构如下:

可以看到完整版比核心版多出了几个文件夹。特别需要注意的就是think-captcha/src这个文件夹里有一个helper.php文件:

这里调用\think\Route::get函数进行路由注册的操作。而这步操作的影响就是改变了上文提到的self::$rules的值。有了这个路由,才能进行RCE,否则不成功。这也就是为什么只影响完整版,而不影响核心版的原因。此时的self::$rules的值为:

那么,当攻击者控制返回的$method的值为get的时候,$rules的值就是这条路由的规则。然后回到上文取到$rules之后,根据传入的URL取得$item的值,使得$rules[$item]的值为captcha路由数组,就可以进一步调用到self::parseRule函数。函数体略长,这里取关键点:
 
此时传递进来的$route的值为\think\captcha\CaptchaController@index。因此进入的是标注红色的if分支中。在这个分支中,$result的’type’键对应的值为‘method’。然后将$result层层返回到run函数中,并赋值给了$dispatch。
 
然后将$dispatch带入到self::exec函数中:
 
进入到红色标注的分支,该分支调用Request类的param方法。因此,满足了利用链的第三步,造成命令执行。
启明星辰ADLab安全研究员对ThinkPHP5.0-5.0.23每个版本都进行了分析,发现ThinkPHP5.0.2-5.0.23可以使用同一个POC,而ThinkPHP5.0-5.0.1需要更改一下POC,原因在于Route.php的rule函数的一个实现小差异。
ThinkPHP5.0-5.0.1版本的thinkphp/library/think/Route.php:235,将$type转换成了大写:

在ThinkPHP5.0.2-5.0.23版本中,rule函数中却将$type转换成了小写:
四、补丁分析
在ThinkPHP5.0.24中,增加了对$this->method的判断,不允许再自由调用类函数。
五、结论强烈建议用户升级到ThinkPHP5.0.24版本,并且不要开启debug模式,以免遭受攻击

如何做好企业安全

sq_smile 发表了文章 • 0 个评论 • 169 次浏览 • 2019-03-11 11:02 • 来自相关话题

        本篇文章转自freebuf,由作者Mark2019所写。
        原文链接:https://www.freebuf.com/articles/es/195621.html
        信息安全是什么呢???关于这个问题,MBA智库百科有一个不错的解释:信息安全是指为数据处理系统而采取的技术的和管理的安全保护,保护计算机硬件、软件、数据不因偶然的或恶意的原因而遭到破坏、更改、显露。这里面既包含了层面的概念,其中计算机硬件可以看作是物理层面,软件可以看做是运行层面,再就是数据层面;又包含了属性的概念,其中破坏涉及的是可用性,更改涉及的是完整性,显露涉及的是机密性。
        那么如何做好企业安全呢???
        1、有明确的目标:
        实现业务的安全可视、可控和可管,并最大化保证业务的效率。
        2、找到阻碍视线的目标,并且不能容忍这些问题:
        合规问题、公司内外部的威胁和业务系统自身的脆弱性。
        3、准确诊断问题、找到问题的根源:
            合规问题:对公司业务相关的合规和法律了解不全面;
            技术层面:主机安全问题、docker安全问题、网络安全问题、应用安全问题、数据安全问题、物理安全问题;
            管理层面:员工安全意识问题,标准化的管理、制度、要求、流程、规范等的缺乏。
        4、规划可以解决问题的方案:
        总结如下技术与产品结合的安全导图,仅供参考:





        化繁为简,将公司安全建设划分三个阶段跟大家简单介绍
        第一阶段:安全建设初期
        原则:外部威胁防御优于内部威胁
        主要建设内容:

1、资产的识别,网络的梳理
2、漏洞的识别、修复
3、边界的4层和7层防护,基于业务进行边界隔离,精细化白名单方式开放端口和流量
4、链路的流量审计
5、核心网络的访问认证和权限管理
6、主机及终端防护,如设置安全基线、部署防病毒或相关安全插件等
7、app安全,如app安全加固等
8、业务系统日常存活、漏洞、端口等检测扫描
9、第三方渗透测试
10、安全意识宣贯
11、合规要求:如等级保护测评,风险评估检测,完成网安及相关监管单位的要求和检查

        第二阶段:安全建设中期
        原则:重点建设内部安全和数据安全,补充完善外部威胁防护
        主要建设内容包括:

1、上网行为管理及上网认证
2、邮箱安全
3、数据库及对应权限梳理、整合、回收
4、数据全生命周期的管理、数据治理,如数据标准化、分级分类、加密、脱敏等等(数据安全方面大而广,后续单独文章介绍)
5、DLP
6、蜜罐、威胁情报(验证公司安全体系健壮性)
7、日志管理平台
8、第三方渗透测试
9、安全意识宣贯
10、合规要求:如等级保护测评,风险评估检测,完成网安及相关监管单位的要求和检查
11、看公关需要,可获取公司级别认证,如iso 27001等

        第三阶段:安全运营期
        原则:精细化,可视化运营
        主要建设内容:

1、SRC
2、自研安全平台
3、各安全系统的精细化运行、联动和可视化
4、第三方渗透测试,众测(根据公司情况而做)
5、安全意识宣贯
6、合规要求:如等级保护测评,风险评估检测,完成网安及相关监管单位的要求和检查

        总结:
            一家公司安全建设顺序可根据业务需求进行灵活调整,漏洞、合规、数据安全和安全意识宣贯需要贯穿安全建设的始末;
            漏洞是安全的灵魂,漏洞的发现、识别和快速响应在安全工作中永远是优先级最高的;合规和数据安全是刚需,也是老板们最看重的点;
            安全做到最后永远是人的问题,安全意识宣贯是提升公司整体安全水平的最有效手段,也是安全文化建设的核心。
 
        5、做一切必要的事儿来践行这些方案,实现成果:
            贴合公司战略、业务发展现状,对安全工作开展排列优先级,以终为始,要事第一,统合综效,不断更新。
 
        总结:安全是一个特殊的存在,安全是个形容词,绝对安全很难,但是在企业安全的建设过程中,希望通过自己不断实践、总结和刷新,将安全化繁为简,守护好安全的寸土。
  查看全部
        本篇文章转自freebuf,由作者Mark2019所写。
        原文链接:https://www.freebuf.com/articles/es/195621.html
        信息安全是什么呢???关于这个问题,MBA智库百科有一个不错的解释:信息安全是指为数据处理系统而采取的技术的和管理的安全保护,保护计算机硬件、软件、数据不因偶然的或恶意的原因而遭到破坏、更改、显露。这里面既包含了层面的概念,其中计算机硬件可以看作是物理层面,软件可以看做是运行层面,再就是数据层面;又包含了属性的概念,其中破坏涉及的是可用性,更改涉及的是完整性,显露涉及的是机密性。
        那么如何做好企业安全呢???
        1、有明确的目标:
        实现业务的安全可视、可控和可管,并最大化保证业务的效率。
        2、找到阻碍视线的目标,并且不能容忍这些问题
        合规问题、公司内外部的威胁和业务系统自身的脆弱性。
        3、准确诊断问题、找到问题的根源
            合规问题:对公司业务相关的合规和法律了解不全面;
            技术层面:主机安全问题、docker安全问题、网络安全问题、应用安全问题、数据安全问题、物理安全问题;
            管理层面:员工安全意识问题,标准化的管理、制度、要求、流程、规范等的缺乏。
        4、规划可以解决问题的方案
        总结如下技术与产品结合的安全导图,仅供参考:

1548152126_5c46ed3e27f4d.png

        化繁为简,将公司安全建设划分三个阶段跟大家简单介绍
        第一阶段:安全建设初期
        原则:外部威胁防御优于内部威胁
        主要建设内容:


1、资产的识别,网络的梳理
2、漏洞的识别、修复
3、边界的4层和7层防护,基于业务进行边界隔离,精细化白名单方式开放端口和流量
4、链路的流量审计
5、核心网络的访问认证和权限管理
6、主机及终端防护,如设置安全基线、部署防病毒或相关安全插件等
7、app安全,如app安全加固等
8、业务系统日常存活、漏洞、端口等检测扫描
9、第三方渗透测试
10、安全意识宣贯
11、合规要求:如等级保护测评,风险评估检测,完成网安及相关监管单位的要求和检查


        第二阶段:安全建设中期
        原则:重点建设内部安全和数据安全,补充完善外部威胁防护
        主要建设内容包括:


1、上网行为管理及上网认证
2、邮箱安全
3、数据库及对应权限梳理、整合、回收
4、数据全生命周期的管理、数据治理,如数据标准化、分级分类、加密、脱敏等等(数据安全方面大而广,后续单独文章介绍)
5、DLP
6、蜜罐、威胁情报(验证公司安全体系健壮性)
7、日志管理平台
8、第三方渗透测试
9、安全意识宣贯
10、合规要求:如等级保护测评,风险评估检测,完成网安及相关监管单位的要求和检查
11、看公关需要,可获取公司级别认证,如iso 27001等


        第三阶段:安全运营期
        原则:精细化,可视化运营
        主要建设内容:


1、SRC
2、自研安全平台
3、各安全系统的精细化运行、联动和可视化
4、第三方渗透测试,众测(根据公司情况而做)
5、安全意识宣贯
6、合规要求:如等级保护测评,风险评估检测,完成网安及相关监管单位的要求和检查


        总结:
            一家公司安全建设顺序可根据业务需求进行灵活调整,漏洞、合规、数据安全和安全意识宣贯需要贯穿安全建设的始末;
            漏洞是安全的灵魂,漏洞的发现、识别和快速响应在安全工作中永远是优先级最高的;合规和数据安全是刚需,也是老板们最看重的点;
            安全做到最后永远是人的问题,安全意识宣贯是提升公司整体安全水平的最有效手段,也是安全文化建设的核心。
 
        5、做一切必要的事儿来践行这些方案,实现成果
            贴合公司战略、业务发展现状,对安全工作开展排列优先级,以终为始,要事第一,统合综效,不断更新。
 
        总结:安全是一个特殊的存在,安全是个形容词,绝对安全很难,但是在企业安全的建设过程中,希望通过自己不断实践、总结和刷新,将安全化繁为简,守护好安全的寸土。
 

Linux 下root家目录和/bin/下的执行程序更改出现问题解决

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

 今天我们群里同学出现一个Linux操作后,系统无法正常使用的问题,具体问题的操作是这样的
 
1 、问题复现
step1:在root的用户下执行了如下两个命令:mv /bin/ls /root
mv /root /bin/lsstep2:接下来无法执行ls命令,显示如下:
[root@bogon Desktop]# ls
bash: ls: command not found
[root@bogon Desktop]#
step3:重启系统step4:分析一下,原因
mv /bin/ls  /root  这个命令,把ls命令移动到了root下
[root@bogon ~]# cd /root
[root@bogon ~]# pwd
/root
[root@bogon ~]# ./ls
anaconda-ks.cfg Documents install.log ls Pictures Templates
Desktop Downloads install.log.syslog Music Public Videos
[root@bogon ~]#

mv /root /bin/ls  把/root/的文件移动到了 /bin/ls/命令下,这时候root改名为ls,如下:
[root@bogon ls]# pwd
/bin/ls
[root@bogon ls]# ./ls
anaconda-ks.cfg Documents install.log ls Pictures Templates
Desktop Downloads install.log.syslog Music Public Videos
[root@bogon ls]#
2 、问题分析
两个问题需要考虑:
重启之后root是否可以正常登陆?普通账号是否收到影响?
root登陆正常,ls无法使用,因为ls命令的路径发生了变化,正常
bash-4.1# ls
bash: ls: command not found
bash-4.1#
普通账号也正常登陆
[yanw@localhost Desktop]$ ls
bash: ls: command not found
[yanw@localhost Desktop]$ 3 问题解决
step1:把/bin/ls/ls 文件拷贝到/root(不是没有root目录了吗?重启系统后root登陆,会根据/etc/passwd 文件里面的root的家目录在创建一个,不受影响)
step2:拷贝ls到家目录
bash-4.1# cp /bin/ls/ls ./
bash-4.1#
bash-4.1#
bash-4.1#
bash-4.1# ./ls
Desktop Documents Downloads ls Music Pictures Public Templates Videos
bash-4.1#
step3:rm删除/bin/ls  复制ls到/bin下即可,全局使用正常
bash-4.1# rm -rf /bin/ls
bash-4.1#
bash-4.1#
bash-4.1# cp ls /bin/
bash-4.1# ls
Desktop Documents Downloads ls Music Pictures Public Templates Videos
bash-4.1#




step4:修改一下提示符 ,修改全局变量PS1的值
 
PS1='[\u@\h \w]\$ ' 
 ----注意$后面有一个空格!如果没有空格的话,将会报错!

   \d :代表日期,格式为weekday month date,例如:"Mon Aug 1" 

\H :完整的主机名称。例如:我的机器名称为:fc4.linux,则这个名称就是fc4.linux 

\h :仅取主机的第一个名字,如上例,则为fc4,.linux则被省略 

\t :显示时间为24小时格式,如:HH:MM:SS 

\T :显示时间为12小时格式 

\A :显示时间为24小时格式:HH:MM 

\u :当前用户的账号名称 

\v :BASH的版本信息 

\w :完整的工作目录名称。家目录会以 ~代替 

\W :利用basename取得工作目录名称,所以只会列出最后一个目录 

\# :下达的第几个命令 

\$ :提示字符,如果是root时,提示符为:# ,普通用户则为:$
 
step5:为了长期生效我们修改一下 /etc/profile文件,在最后一行添加上    PS1='[\u@\h \w]\$ ' 文件解决
bash-4.1# source /etc/profile
[root@localhost ~]#
[root@localhost ~]#
[root@localhost ~]#

  查看全部
 今天我们群里同学出现一个Linux操作后,系统无法正常使用的问题,具体问题的操作是这样的
 
1 、问题复现
step1:在root的用户下执行了如下两个命令:
mv /bin/ls  /root
mv /root /bin/ls
step2:接下来无法执行ls命令,显示如下:
[root@bogon Desktop]# ls
bash: ls: command not found
[root@bogon Desktop]#

step3:重启系统step4:分析一下,原因
mv /bin/ls  /root  这个命令,把ls命令移动到了root下
[root@bogon ~]# cd /root
[root@bogon ~]# pwd
/root
[root@bogon ~]# ./ls
anaconda-ks.cfg Documents install.log ls Pictures Templates
Desktop Downloads install.log.syslog Music Public Videos
[root@bogon ~]#

mv /root /bin/ls  把/root/的文件移动到了 /bin/ls/命令下,这时候root改名为ls,如下:
[root@bogon ls]# pwd
/bin/ls
[root@bogon ls]# ./ls
anaconda-ks.cfg Documents install.log ls Pictures Templates
Desktop Downloads install.log.syslog Music Public Videos
[root@bogon ls]#
2 、问题分析
两个问题需要考虑:
  • 重启之后root是否可以正常登陆?
  • 普通账号是否收到影响?

root登陆正常,ls无法使用,因为ls命令的路径发生了变化,正常
bash-4.1# ls
bash: ls: command not found
bash-4.1#
普通账号也正常登陆
[yanw@localhost Desktop]$ ls
bash: ls: command not found
[yanw@localhost Desktop]$
3 问题解决
step1:把/bin/ls/ls 文件拷贝到/root(不是没有root目录了吗?重启系统后root登陆,会根据/etc/passwd 文件里面的root的家目录在创建一个,不受影响)
step2:拷贝ls到家目录
bash-4.1# cp /bin/ls/ls ./
bash-4.1#
bash-4.1#
bash-4.1#
bash-4.1# ./ls
Desktop Documents Downloads ls Music Pictures Public Templates Videos
bash-4.1#
step3:rm删除/bin/ls  复制ls到/bin下即可,全局使用正常
bash-4.1# rm -rf /bin/ls
bash-4.1#
bash-4.1#
bash-4.1# cp ls /bin/
bash-4.1# ls
Desktop Documents Downloads ls Music Pictures Public Templates Videos
bash-4.1#




step4:修改一下提示符 ,修改全局变量PS1的值
 
PS1='[\u@\h \w]\$ ' 
 ----注意$后面有一个空格!如果没有空格的话,将会报错!

   \d :代表日期,格式为weekday month date,例如:"Mon Aug 1" 

\H :完整的主机名称。例如:我的机器名称为:fc4.linux,则这个名称就是fc4.linux 

\h :仅取主机的第一个名字,如上例,则为fc4,.linux则被省略 

\t :显示时间为24小时格式,如:HH:MM:SS 

\T :显示时间为12小时格式 

\A :显示时间为24小时格式:HH:MM 

\u :当前用户的账号名称 

\v :BASH的版本信息 

\w :完整的工作目录名称。家目录会以 ~代替 

\W :利用basename取得工作目录名称,所以只会列出最后一个目录 

\# :下达的第几个命令 

\$ :提示字符,如果是root时,提示符为:# ,普通用户则为:$
 
step5:为了长期生效我们修改一下 /etc/profile文件,在最后一行添加上    PS1='[\u@\h \w]\$ ' 文件解决
bash-4.1# source /etc/profile
[root@localhost ~]#
[root@localhost ~]#
[root@localhost ~]#

 

Linux 安全中环境变量安全涉及提权

系统安全ttgo2 发表了文章 • 0 个评论 • 453 次浏览 • 2018-10-07 10:57 • 来自相关话题

最近很多小伙伴私底下问到,Linux下root的环境变量和未授权的SUID和SGID为什么要加固?会有什么风险?具体有哪些危害?今天给大家简单介绍一下Linux的环境变量配置不当可以导致系统提权。
 
1、Linux的加固项介绍:
1.1 查找未授权的SUID/SGID文件
 
安全基线项目名称:
操作系统Linux SUID/SGID文件安全基线要求项
安全基线项说明:
文件系统-查找未授权的SUID/SGID文件
检测操作步骤:用下面的命令查找系统中所有的SUID和SGID程序,执行:
for PART in `grep -v ^# /etc/fstab | awk '($6 != "0") {print $2 }'`; do
find $PART \( -perm -04000 -o -perm -02000 \) -type f -xdev -print
Done建议经常性的对比suid/sgid文件列表,以便能够及时发现可疑的后门程序

1.2 root用户环境变量的安全性
安全基线项目名称:
操作系统Linux超级用户环境变量安全基线要求项 
安全基线项说明:
帐号与口令-root用户环境变量的安全性
检测操作步骤:执行:echo $PATH | egrep '(^|:)(\.|:|$)',检查是否包含父目录,
执行:find `echo $PATH | tr ':' ' '` -type d \( -perm -002 -o -perm -020 \) -ls,检查是否包含组目录权限为777的目录确保root用户的系统路径中不包含父目录,在非必要的情况下,不应包含组权限为777的目录
 
2、利用过程
$PATH是Linux和类Unix操作系统中的环境变量,它指定了存储所有可执行程序的bin和sbin目录。当用户在终端运行任何命令时,它向shell发出请求,在环境变量的帮助下搜索可执行文件以响应用户执行的命令。超级用户通常还具有/sbin和/usr /sbin条目,以便轻松执行系统管理命令。
step1:使用echo命令就能轻易的查看和当前用户相关的环境变量。echo $PATH
/tmp:/tmp:/usr/local/bin:/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/sbin:/home/test/binstep2:编写一个C语言文件(demo.c),编辑后可执行的二进制文件,需要GCC的环境,如果没有自行安装。#include<unistd.h>
void main()
{
setuid(0);
setgid(0);
system("ps");
}step3:进行编译,赋权限并执行ls
gcc demo.c -o shell
chmod u+s shell
ls -la shell
./shelltest@localhost ~]$ ./shell 
   PID TTY          TIME CMD
  2407 pts/1    00:00:00 bash
  2460 pts/1    00:00:00 shell
  2461 pts/1    00:00:00 pssstep4: 攻击测试
使用copy命令进行测试提权
cd /tmp
echo “/bin/bash” > ps
chmod 777 ps
echo $PATH
export PATH=/tmp:$PATH
cd /home/ttgo2
./shell
whoami3、利用说明
这里充分说明了,如果一个普通用户的PATH变量包含了自己能控制的执行文件目录,再加上利用关键具有SUID权限的文件,就可以进行提权,所以这两个配置项是非常有必要进行安全加固的。 查看全部
最近很多小伙伴私底下问到,Linux下root的环境变量和未授权的SUID和SGID为什么要加固?会有什么风险?具体有哪些危害?今天给大家简单介绍一下Linux的环境变量配置不当可以导致系统提权。
 
1、Linux的加固项介绍:
1.1 查找未授权的SUID/SGID文件
 
安全基线项目名称:
操作系统Linux SUID/SGID文件安全基线要求项
安全基线项说明
文件系统-查找未授权的SUID/SGID文件
检测操作步骤:
用下面的命令查找系统中所有的SUID和SGID程序,执行:
for PART in `grep -v ^# /etc/fstab | awk '($6 != "0") {print $2 }'`; do
find $PART \( -perm -04000 -o -perm -02000 \) -type f -xdev -print
Done
建议经常性的对比suid/sgid文件列表,以便能够及时发现可疑的后门程序

1.2 root用户环境变量的安全性
安全基线项目名称:
操作系统Linux超级用户环境变量安全基线要求项 
安全基线项说明:
帐号与口令-root用户环境变量的安全性
检测操作步骤:
执行:echo $PATH | egrep '(^|:)(\.|:|$)',检查是否包含父目录,
执行:find `echo $PATH | tr ':' ' '` -type d \( -perm -002 -o -perm -020 \) -ls,检查是否包含组目录权限为777的目录
确保root用户的系统路径中不包含父目录,在非必要的情况下,不应包含组权限为777的目录
 
2、利用过程
$PATH是Linux和类Unix操作系统中的环境变量,它指定了存储所有可执行程序的bin和sbin目录。当用户在终端运行任何命令时,它向shell发出请求,在环境变量的帮助下搜索可执行文件以响应用户执行的命令。超级用户通常还具有/sbin和/usr /sbin条目,以便轻松执行系统管理命令。
step1:使用echo命令就能轻易的查看和当前用户相关的环境变量。
echo $PATH
/tmp:/tmp:/usr/local/bin:/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/sbin:/home/test/bin
step2:编写一个C语言文件(demo.c),编辑后可执行的二进制文件,需要GCC的环境,如果没有自行安装。
#include<unistd.h>
void main()
{
setuid(0);
setgid(0);
system("ps");
}
step3:进行编译,赋权限并执行
ls
gcc demo.c -o shell
chmod u+s shell
ls -la shell
./shell
test@localhost ~]$ ./shell 
   PID TTY          TIME CMD
  2407 pts/1    00:00:00 bash
  2460 pts/1    00:00:00 shell
  2461 pts/1    00:00:00 pss
step4: 攻击测试
使用copy命令进行测试提权
cd /tmp
echo “/bin/bash” > ps
chmod 777 ps
echo $PATH
export PATH=/tmp:$PATH
cd /home/ttgo2
./shell
whoami
3、利用说明
这里充分说明了,如果一个普通用户的PATH变量包含了自己能控制的执行文件目录,再加上利用关键具有SUID权限的文件,就可以进行提权,所以这两个配置项是非常有必要进行安全加固的。

Linux 网络故障排除思路和方法

系统安全ttgo2 发表了文章 • 0 个评论 • 449 次浏览 • 2018-09-19 20:27 • 来自相关话题

最近在对Linux系统网络配置中同学们出现各种问题,面对问题大家的思路比较混乱,没有解决问题的思路,今天给大家整理一下这个过程,系统能对刚入门的同学有所帮助。
1 ,检测网卡是否UP
服务器网卡有的需要手工开启,如果网卡不开启是无法使用的,开启的方法是ifconfig eth0 up[root@bogon ~]#
[root@bogon ~]# ifconfig eth0 up
[root@bogon ~]#

2,检测到网关是否可以互通
如果无法ping通网关,一般原因是IP地址配置有误,或者网络掩码配置错误,导致无法正常ping通,(这里不包括防火墙作为网关或者网关禁止icmp协议的,)需要保证到网关是通的。
3,测试一下到DNS是否可以互通
ping测试到DNS是否可以互通,如果发现ping 不通,一定是网关配置出现错误,需要检查一下网关的配置,或者检查一下本地路由表是否有到网关的默认路由。[root@bogon ~]# netstat -r
Kernel IP routing table
Destination Gateway Genmask Flags MSS Window irtt Iface
192.168.0.0 * 255.255.255.0 U 0 0 0 eth0
link-local * 255.255.0.0 U 0 0 0 eth0
default bogon 0.0.0.0 UG 0 0 0 eth0
[root@bogon ~]#


[root@bogon ~]# route add default gw 192.168.0.1

4,检查一下DNS服务是否工作正常
一般公网上的DNS还是很稳定的,但是公司或者学校内部的DNS可能有问题出现,简单测试一下本地DNS是否可用,测试方式可以使用nslookup[root@bogon ~]# nslookup www.baidu.com
Server: 202.102.224.68
Address: 202.102.224.68#53

Non-authoritative answer:
www.baidu.com canonical name = www.a.shifen.com.
Name: www.a.shifen.com
Address: 61.135.169.125
Name: www.a.shifen.com
Address: 61.135.169.121

[root@bogon ~]#
如果内网DNS有问题,可以临时换成公网的DNS,
 
5 检测浏览器是否使用代理
可以ping通www.baidu.com 但是浏览器无法打开网页,一般都是浏览器配合了代理,取消即可。chrom为例:










 
 
通过这一步一步的排错,一般情况都能解决,如果疏漏了那点,希望大家指正。谢谢。
 
 
  查看全部
最近在对Linux系统网络配置中同学们出现各种问题,面对问题大家的思路比较混乱,没有解决问题的思路,今天给大家整理一下这个过程,系统能对刚入门的同学有所帮助。
1 ,检测网卡是否UP
服务器网卡有的需要手工开启,如果网卡不开启是无法使用的,开启的方法是ifconfig eth0 up
[root@bogon ~]# 
[root@bogon ~]# ifconfig eth0 up
[root@bogon ~]#

2,检测到网关是否可以互通
如果无法ping通网关,一般原因是IP地址配置有误,或者网络掩码配置错误,导致无法正常ping通,(这里不包括防火墙作为网关或者网关禁止icmp协议的,)需要保证到网关是通的。
3,测试一下到DNS是否可以互通
ping测试到DNS是否可以互通,如果发现ping 不通,一定是网关配置出现错误,需要检查一下网关的配置,或者检查一下本地路由表是否有到网关的默认路由。
[root@bogon ~]# netstat -r
Kernel IP routing table
Destination Gateway Genmask Flags MSS Window irtt Iface
192.168.0.0 * 255.255.255.0 U 0 0 0 eth0
link-local * 255.255.0.0 U 0 0 0 eth0
default bogon 0.0.0.0 UG 0 0 0 eth0
[root@bogon ~]#


[root@bogon ~]# route add default gw 192.168.0.1

4,检查一下DNS服务是否工作正常
一般公网上的DNS还是很稳定的,但是公司或者学校内部的DNS可能有问题出现,简单测试一下本地DNS是否可用,测试方式可以使用nslookup
[root@bogon ~]# nslookup www.baidu.com
Server: 202.102.224.68
Address: 202.102.224.68#53

Non-authoritative answer:
www.baidu.com canonical name = www.a.shifen.com.
Name: www.a.shifen.com
Address: 61.135.169.125
Name: www.a.shifen.com
Address: 61.135.169.121

[root@bogon ~]#

如果内网DNS有问题,可以临时换成公网的DNS,
 
5 检测浏览器是否使用代理
可以ping通www.baidu.com 但是浏览器无法打开网页,一般都是浏览器配合了代理,取消即可。chrom为例:

QQ截图20180919202415.png


QQ截图20180919202526.png

 
 
通过这一步一步的排错,一般情况都能解决,如果疏漏了那点,希望大家指正。谢谢。
 
 
 

Linux 下network和NetworkManager 冲突导致网络异常

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

一,问题-找不到网卡配置文件(ifcfg-eth0)
Centos 6.5 Linux 系统中,有的同学发现自己的网卡在/etc/sysconfig/network-scripts/下面没有发现有ifcfg-eth0,针对这个问题我们进行讨论一下:
 
在/etc/sysconfig/network-scripts/下没有发现有ifcfg-eth0 的文件,检测如下:-rw-r--r--. 1 root root 254 Oct 10 2013 ifcfg-lo
lrwxrwxrwx. 1 root root 20 Mar 20 2017 ifdown -> ../../../sbin/ifdown
-rwxr-xr-x. 1 root root 627 Oct 10 2013 ifdown-bnep
-rwxr-xr-x. 1 root root 5430 Oct 10 2013 ifdown-eth
-rwxr-xr-x. 1 root root 781 Oct 10 2013 ifdown-ippp
-rwxr-xr-x. 1 root root 4168 Oct 10 2013 ifdown-ipv6
lrwxrwxrwx. 1 root root 11 Mar 20 2017 ifdown-isdn -> ifdown-ippp
-rwxr-xr-x. 1 root root 1481 Oct 10 2013 ifdown-post
-rwxr-xr-x. 1 root root 1064 Oct 10 2013 ifdown-ppp
-rwxr-xr-x. 1 root root 835 Oct 10 2013 ifdown-routes
-rwxr-xr-x. 1 root root 1465 Oct 10 2013 ifdown-sit
-rwxr-xr-x. 1 root root 1434 Oct 10 2013 ifdown-tunnel
lrwxrwxrwx. 1 root root 18 Mar 20 2017 ifup -> ../../../sbin/ifup
-rwxr-xr-x. 1 root root 12444 Oct 10 2013 ifup-aliases
-rwxr-xr-x. 1 root root 859 Oct 10 2013 ifup-bnep
-rwxr-xr-x. 1 root root 10556 Oct 10 2013 ifup-eth
-rwxr-xr-x. 1 root root 11971 Oct 10 2013 ifup-ippp
-rwxr-xr-x. 1 root root 10490 Oct 10 2013 ifup-ipv6
lrwxrwxrwx. 1 root root 9 Mar 20 2017 ifup-isdn -> ifup-ippp
-rwxr-xr-x. 1 root root 727 Oct 10 2013 ifup-plip
-rwxr-xr-x. 1 root root 954 Oct 10 2013 ifup-plusb
-rwxr-xr-x. 1 root root 2364 Oct 10 2013 ifup-post
-rwxr-xr-x. 1 root root 4154 Oct 10 2013 ifup-ppp
-rwxr-xr-x. 1 root root 1925 Oct 10 2013 ifup-routes
-rwxr-xr-x. 1 root root 3289 Oct 10 2013 ifup-sit
-rwxr-xr-x. 1 root root 2488 Oct 10 2013 ifup-tunnel
-rwxr-xr-x. 1 root root 3770 Oct 10 2013 ifup-wireless
-rwxr-xr-x. 1 root root 4623 Oct 10 2013 init.ipv6-global
-rwxr-xr-x. 1 root root 1125 Oct 10 2013 net.hotplug
-rw-r--r--. 1 root root 13386 Oct 10 2013 network-functions
-rw-r--r--. 1 root root 29853 Oct 10 2013 network-functions-ipv6
 
网卡信息[root@localhost network-scripts]# ifconfig
eth0 Link encap:Ethernet HWaddr 00:0C:29:AD:6F:DC
inet addr:192.168.1.115 Bcast:192.168.1.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:194313 errors:0 dropped:0 overruns:0 frame:0
TX packets:2643 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:112599638 (107.3 MiB) TX bytes:157256 (153.5 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:1077 errors:0 dropped:0 overruns:0 frame:0
TX packets:1077 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:105953 (103.4 KiB) TX bytes:105953 (103.4 KiB)




网卡有地址,并且工作正常,那原因出在什么地方呢?
 
二 问题分析
在Centos 6.X 版本中,有两个服务来负责网络的管理,network和NetworkManager 两个服务,其中这两个服务可以同时存在,但是如果你运行的级别是在id=3(命令多用户模式)使用的服务为network,如果是id=5(多用户图形化)使用的是networkmanager服务。
 
如果没有发现ifcfg-eth0 文件,很有可能是因为network这个服务没有开启,检测如下:[root@localhost network-scripts]# chkconfig --list | grep -i netw
NetworkManager 0:off 1:off 2:on 3:on 4:on 5:on 6:off
network 0:off 1:off 2:off 3:off 4:off 5:off 6:off
[root@localhost network-scripts]# 三、解决问题
如果出现了冲突,尽可能使用一个服务即可,不要同时使用,对其他的服务进行关闭,操作如下
chkconfig NetworkManager off
然后重启系统,复制lo的文件,修改名字为eth0,然后进行修改内容如下:DEVICE="eth0"
BOOTPROTO=“static” // 选择静态
HWADDR="00:0C:29:E8:08:2B"
IPV6INIT="yes"
NM_CONTROLLED="yes"
ONBOOT="yes"
IPADDR=192.168.2.89
NETMASK=255.255.255.0
GATEWAY=192.168.2.1
TYPE="Ethernet"
UUID="e264bc1a-e8ca-4637-951d-ece828187789 查看全部
一,问题-找不到网卡配置文件(ifcfg-eth0)
Centos 6.5 Linux 系统中,有的同学发现自己的网卡在/etc/sysconfig/network-scripts/下面没有发现有ifcfg-eth0,针对这个问题我们进行讨论一下:
 
在/etc/sysconfig/network-scripts/下没有发现有ifcfg-eth0 的文件,检测如下:
-rw-r--r--. 1 root root   254 Oct 10  2013 ifcfg-lo
lrwxrwxrwx. 1 root root 20 Mar 20 2017 ifdown -> ../../../sbin/ifdown
-rwxr-xr-x. 1 root root 627 Oct 10 2013 ifdown-bnep
-rwxr-xr-x. 1 root root 5430 Oct 10 2013 ifdown-eth
-rwxr-xr-x. 1 root root 781 Oct 10 2013 ifdown-ippp
-rwxr-xr-x. 1 root root 4168 Oct 10 2013 ifdown-ipv6
lrwxrwxrwx. 1 root root 11 Mar 20 2017 ifdown-isdn -> ifdown-ippp
-rwxr-xr-x. 1 root root 1481 Oct 10 2013 ifdown-post
-rwxr-xr-x. 1 root root 1064 Oct 10 2013 ifdown-ppp
-rwxr-xr-x. 1 root root 835 Oct 10 2013 ifdown-routes
-rwxr-xr-x. 1 root root 1465 Oct 10 2013 ifdown-sit
-rwxr-xr-x. 1 root root 1434 Oct 10 2013 ifdown-tunnel
lrwxrwxrwx. 1 root root 18 Mar 20 2017 ifup -> ../../../sbin/ifup
-rwxr-xr-x. 1 root root 12444 Oct 10 2013 ifup-aliases
-rwxr-xr-x. 1 root root 859 Oct 10 2013 ifup-bnep
-rwxr-xr-x. 1 root root 10556 Oct 10 2013 ifup-eth
-rwxr-xr-x. 1 root root 11971 Oct 10 2013 ifup-ippp
-rwxr-xr-x. 1 root root 10490 Oct 10 2013 ifup-ipv6
lrwxrwxrwx. 1 root root 9 Mar 20 2017 ifup-isdn -> ifup-ippp
-rwxr-xr-x. 1 root root 727 Oct 10 2013 ifup-plip
-rwxr-xr-x. 1 root root 954 Oct 10 2013 ifup-plusb
-rwxr-xr-x. 1 root root 2364 Oct 10 2013 ifup-post
-rwxr-xr-x. 1 root root 4154 Oct 10 2013 ifup-ppp
-rwxr-xr-x. 1 root root 1925 Oct 10 2013 ifup-routes
-rwxr-xr-x. 1 root root 3289 Oct 10 2013 ifup-sit
-rwxr-xr-x. 1 root root 2488 Oct 10 2013 ifup-tunnel
-rwxr-xr-x. 1 root root 3770 Oct 10 2013 ifup-wireless
-rwxr-xr-x. 1 root root 4623 Oct 10 2013 init.ipv6-global
-rwxr-xr-x. 1 root root 1125 Oct 10 2013 net.hotplug
-rw-r--r--. 1 root root 13386 Oct 10 2013 network-functions
-rw-r--r--. 1 root root 29853 Oct 10 2013 network-functions-ipv6

 
网卡信息
[root@localhost network-scripts]# ifconfig
eth0 Link encap:Ethernet HWaddr 00:0C:29:AD:6F:DC
inet addr:192.168.1.115 Bcast:192.168.1.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:194313 errors:0 dropped:0 overruns:0 frame:0
TX packets:2643 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:112599638 (107.3 MiB) TX bytes:157256 (153.5 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:1077 errors:0 dropped:0 overruns:0 frame:0
TX packets:1077 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:105953 (103.4 KiB) TX bytes:105953 (103.4 KiB)




网卡有地址,并且工作正常,那原因出在什么地方呢?
 
二 问题分析
在Centos 6.X 版本中,有两个服务来负责网络的管理,network和NetworkManager 两个服务,其中这两个服务可以同时存在,但是如果你运行的级别是在id=3(命令多用户模式)使用的服务为network,如果是id=5(多用户图形化)使用的是networkmanager服务。
 
如果没有发现ifcfg-eth0 文件,很有可能是因为network这个服务没有开启,检测如下:
[root@localhost network-scripts]# chkconfig --list | grep -i netw
NetworkManager 0:off 1:off 2:on 3:on 4:on 5:on 6:off
network 0:off 1:off 2:off 3:off 4:off 5:off 6:off
[root@localhost network-scripts]#
三、解决问题
如果出现了冲突,尽可能使用一个服务即可,不要同时使用,对其他的服务进行关闭,操作如下
chkconfig NetworkManager off
然后重启系统,复制lo的文件,修改名字为eth0,然后进行修改内容如下:
DEVICE="eth0"
BOOTPROTO=“static” // 选择静态
HWADDR="00:0C:29:E8:08:2B"
IPV6INIT="yes"
NM_CONTROLLED="yes"
ONBOOT="yes"
IPADDR=192.168.2.89
NETMASK=255.255.255.0
GATEWAY=192.168.2.1
TYPE="Ethernet"
UUID="e264bc1a-e8ca-4637-951d-ece828187789