分类 学习类 下的文章

php pack()函数详解与示例

pack和unpack在一般的程序中还真的不容易见到,但是如果你用过很久以前的php生成excel你就会知道了。他的excel的头就是pack出来的
最近在尝试与C交互的时候又用上了这玩意,所以不得不再看看。其实就是C要求我一定要有包头。。。其实纯字符串也不错嘛。干嘛非得搞个包头呢?真纠结 .。

手册上有pack与unpack的介绍,但都是英文的。。。

任何一款拥有socket操作能力的语言都有一个专门用于组包的函数,php也不例外!

用了很久php了却很少有机会用php进行一些二进制操作。 最近用php写一个socket客户端连接一个用C++语言开发的游戏服务端。 服务器端开发人员使用了二进制的形式来定义协议的格式。协议格式如下:

包头(2bytes)+加密(1byte)+命令码(2bytes)+帧内容

1.包头的内容是记录帧内容的长度;

  1. 加密:0表示不加密,1表示加密;
  2. 命令码为服务端命令识别符号;

    一开始不了解php原来有pack可以来组装二进制包, 走了弯路,让服务端开发人员用C语言帮忙开发了的几个内存操作函数,按照协议规则返回二进制包,然后我将这几个方法编译成一组扩展函数供php使用。
    
    话归正题,本文是介绍如何使用pack和unpack这两个方法的。php官方手册举例太少,不能很容易理解,特别是那些格式化参数的使用。
    

转摘的参数中文说明:

pack/unpack 的摸板字符字符 含义
a 一个填充空的字节串
A 一个填充空格的字节串
b 一个位串,在每个字节里位的顺序都是升序
B 一个位串,在每个字节里位的顺序都是降序
c 一个有符号 char(8位整数)值
C 一个无符号 char(8位整数)值;关于 Unicode 参阅 U
d 本机格式的双精度浮点数
f 本机格式的单精度浮点数
h 一个十六进制串,低四位在前
H 一个十六进制串,高四位在前
i 一个有符号整数值,本机格式
I 一个无符号整数值,本机格式
l 一个有符号长整形,总是 32 位
L 一个无符号长整形,总是 32 位
n 一个 16位短整形,“网络”字节序(大头在前)
N 一个 32 位短整形,“网络”字节序(大头在前)
p 一个指向空结尾的字串的指针
P 一个指向定长字串的指针
q 一个有符号四倍(64位整数)值
Q 一个无符号四倍(64位整数)值
s 一个有符号短整数值,总是 16 位
S 一个无符号短整数值,总是 16 位,字节序跟机器芯片有关
u 一个无编码的字串
U 一个 Unicode 字符数字
v 一个“VAX”字节序(小头在前)的 16 位短整数
V 一个“VAX”字节序(小头在前)的 32 位短整数
w 一个 BER 压缩的整数
x 一个空字节(向前忽略一个字节)
X 备份一个字节
Z 一个空结束的(和空填充的)字节串
@ 用空字节填充绝对位置

string pack ( string $format [, mixed $args [, mixed $...]] )

一些规则:
1.每个字母后面都可以跟着一个数字,表示 count(计数),如果 count 是一个 * 表示剩下的所有东西。
2.如果你提供的参数比 $format 要求的少,pack 假设缺的都是空值。如果你提供的参数比 $format 要求的多,那么多余的参数被忽略。

下面还是用例子来说明用法会容易理解一点:


关于Pack:  
  
下面的第一部分把数字值包装成字节:  
$out = pack("CCCC", 65, 66, 67, 68);      # $out 等于"ABCD"  
$out = pack("C4", 65, 66, 67, 68);         # 一样的东西  
  
下面的对 Unicode 的循环字母做同样的事情:  
 $foo = pack("U4", 0x24b6, 0x24b7, 0x24b8, 0x24b9);  
  
下面的做类似的事情,增加了一些空:  
$out = pack("CCxxCC", 65, 66, 67, 68);      # $out 等于 "AB\0\0CD"  
  
打包你的短整数并不意味着你就可移植了:  
$out = pack("s2", 1, 2);          
# 在小头在前的机器上是 "\1\0\2\0"  
# 在大头在前的机器上是 "\0\1\0\2"  
  
在二进制和十六进制包装上,count 指的是位或者半字节的数量,而不是生成的字节数量:  
  $out = pack("B32", "...");  
    $out = pack("H8", "5065726c");         # 都生成“Perl”  
  
a 域里的长度只应用于一个字串:  
  $out = pack("a4", "abcd", "x", "y", "z");      # "abcd"  
  
要绕开这个限制,使用多倍声明:  
  $out = pack("aaaa",    "abcd", "x", "y", "z");   # "axyz"  
   $out = pack("a" x 4,   "abcd", "x", "y", "z");   # "axyz"  
  
a 格式做空填充:  
  $out = pack("a14", "abcdefg");         # " abcdefg\0\0\0\0\0\0"  
  
关于unpack:  
  
array unpack ( string $format, string $data )  
  
$data = "010000020007";  
unpack("Sint1/Cchar1/Sint2/Cchar2",$data);  
  
## array('int1'=>1, 'char1'=>'0','int2'=>2,'char2'=>7);  
  
最后本文开头讲到的协议使用pack/unpack 举例程序代码为 :  
  
$lastact   = pack('SCSa32a32',0x0040, 0x00, 0x0006, $username, $passwd );  
  
unpack('Sint1/Cchar1/Sint2/Cchar2/',$lastmessage);  

学习资料:
http://blog.csdn.net/jojobb3138688/archive/2007/05/07/1598609.aspx

我上面的内容来自于:http://blog.sina.com.cn/s/blog_3eba8f1c0100nq9r.html,我现在已经顺利的使用完了。黑黑
还有的参考资料:
http://bbs.phpchina.com/thread-104492-1-1.html
http://hi.baidu.com/chinetman/item/f78a71d847e7d638e2108fda

原文地址:http://www.neatstudio.com/show-2327-1.shtml

华为内部的Web安全原则

Web安全原则

1.认证模块必须采用防暴力破解机制,例如:验证码或者多次连续尝试登录失败后锁定帐号或IP。

说明:如采用多次连续尝试登录失败后锁定帐号或IP的方式,需支持连续登录失败锁定策略的“允许连续失败的次数”可配置,支持在锁定时间超时后自动解锁。

2.对于每一个需要授权访问的页面或servlet的请求都必须核实用户的会话标识是否合法、用户是否被授权执行这个操作,以防止URL越权。

说明:防止用户通过直接输入URL,进行URL越权,请求并执行一些页面或servlet;建议通过过滤器实现。

  1. 登录过程中,往服务器端传递用户名和口令时,必须采用HTTPS安全协议(也就是带服务器端证书的SSL)。只提供本机接入、登录,做设备管理使用的场景暂时不要求。

说明:如果在客户端和服务器间传递如帐号、口令等敏感数据,必须使用带服务器端证书的SSL。由于SSL对服务端的CPU资源消耗很大,实施时必须考虑服务器的承受能力。

  1. 对用户的最终认证处理过程必须放到服务器进行。
  2. 用户产生的数据必须在服务端进行校验;数据在输出到客户端前必须先进行HTML编码,以防止执行恶意代码、跨站脚本攻击。对于不可信的数据,输出到客户端前必须先进行 HTML 编码。
  3. 使用主流Web安全扫描工具扫描Web服务器和Web应用,不存在“高”级别的漏洞。
  4. 非嵌入式产品的Web应用,应使用预编译语句PreparedStatement代替直接的语句执行Statement,以防止SQL注入。

数据库安全

外购数据库、开源数据库、华为自研数据库都应进行安全配置,保证不出现安全漏洞。

1.数据库口令禁止使用数据库厂商的缺省口令,且口令复杂度需满足“口令安全要求”。数据库若存在多个默认帐号,须将不使用的帐号禁用或删除。

  1. 使用单独的操作系统帐号来运行数据库;数据库中的敏感文件(如:Oracle数据库的init.ora、listener.ora等)需要严格控制访问权限,只能被数据库进程运行帐户和DBA帐户读写;对数据库帐户授予的权限进行严格清晰的划分,所有数据库帐户只能具备执行其任务的最小权限;对于有监听器功能的数据库(如Oracle的listener.ora)需要设置监听器密码或者设置为本地操作系统验证。
  2. 使用主流或华为指定的系统扫描软件进行安全扫描,不存在“高”级别的漏洞。

敏感数据保护

系统对敏感数据的存储、传输和处理需保证数据安全,并遵从适用国家和地区的法律和法规要求。

敏感数据定义:包括但不限于口令、银行账号、个人数据(单独使用该数据或者结合其他信息可以识别某个活着的自然人的数据,包括:最终用户姓名、帐号、主叫和被叫号码、通信记录、话单、通信时间、定位数据等)。

  1. 口令不允许明文存储在系统中,应该加密保护。在不需要还原口令的场景,必须使用不可逆算法加密。对银行账号等敏感数据的访问要有认证、授权和加密机制。口令文件必须设置访问权限控制,普通用户不能读取或拷贝加密的内容。如果帐户文件/数据中含有口令又必须所有用户可访问,则需将帐户文件/数据与口令文件/数据分开。

注:对于业界第三方主流软硬件(如操作系统、数据库、Web容器)自身提供的口令功能,不受本条限制。

  1. 在非信任网络之间进行敏感数据(包括口令,银行帐号,批量个人数据等)的传输须采用安全传输通道或者加密后传输,有标准协议规定除外。

3.禁止使用私有加密算法。

说明:

1) 对称加密算法建议使用:AES192及以上强度;

2) 密钥交换算法建议使用:DH1024;

3) 数字签名算法建议使用:DSA1024、ECDSA192;

4) 非对称算法建议使用:RSA2048、ECC192;

5) HASH(哈希)算法建议使用:SHA256及以上强度;

6) HMAC(基于哈希的消息验证码)算法建议使用:HMAC-SHA256;

  1. 用于敏感数据传输加密的密钥,不能硬编码在代码中。

在敏感数据的安全传输上,优先使用业界的标准安全协议(如SSH v2/TLS1.0/SSL3.0/IPSec/SFTP/HTTPS等),并确保密钥可配置;如果是由产品自身实现安全传输过程,则优先使用Diffie-Hellman密钥交换算法,如果使用预置共享密钥等其他方法,也必须保证该密钥可配置和可替换。

  1. 禁止在日志、话单等文件中记录口令、银行账号、通信内容等敏感数据;
  2. 尽量避免在日志、话单中记录个人数据,如果必须记录个人数据,则所有数据必须进行结构化存储或适合于进行匿名化提取;

1)尽量避免在日志中记录个人数据,如果必须记录,在个人数据之前或之后加统一的标记,以区别于其他非个人数据。

2)尽量避免在话单中记录个人数据,如果必须记录,则话单必须进行结构化存储,字段间必须由统一的分隔符分开,每行的字段按列严格对应。

  1. 有个人数据导出功能的产品发布时必须同时提供对个人数据进行过滤或匿名化处理和功能或工具;
  2. 严格限制导出功能的权限,对导出功能的使用必须有日志记录。
  3. 涉及个人数据的采集/处理的功能须提供安全保护机制(如认证、权限控制、日志记录等),并通过产品资料向客户公开。
  4. 在正常业务流程和标准协议之外,禁止出于故障定位目的进行用户精确位置信息定位。如需处理用户精确位置数据,应有华为的明确需求,并在方案设计时,给予用户随时撤回同意的机会。

口令安全策略管理

  1. 设置口令时,默认检测口令复杂度,口令至少满足如下要求:

1) 口令长度至少6个字符(特权用户至少8个字符);

2) 口令必须包含如下至少两种字符的组合:

-至少一个小写字母;

-至少一个大写字母;

-至少一个数字;

-至少一个特殊字符:`~!@#$%^&*()-_=+|[{}];:’”,<.>/? 和空格

3) 口令不能和帐号或者帐号的逆序相同;

若设置的口令不符合上述规则,必须进行警告。

  1. 系统必须提供锁定用户的机制。可选择如下两种方式之一:

方式一:当重复输入错误口令次数(默认3次,次数系统可以设置)超过系统限制时,系统要锁定该用户。

方式二:系统还可以设置下次允许输入口令的间隔时间加倍,采用这种方式时,用户可以不设置自动锁定。

  1. 可设置自动解锁时间(只适用于由于口令尝试被锁定的用户)

1) 对于口令尝试N次失败被锁定的用户,系统要能够设置自动解锁时间,建议默认解锁时间为5分钟。

2) 用户被锁时间达到预定义时间,可自动解锁该用户,或者也可通过安全管理员手工解锁该用户。

3) 在锁定时间内,仅能允许应用安全管理员角色所属帐号手动解锁该用户。

  1. 操作界面中的口令不能明文显示,键入口令时不能明文显示出来(操作界面中的输入口令可不显示或用*代替),包括在终端上打印或存储在日志中时也不能明文显示口令,即使是内存中的明文口令(如登录期间),也应在使用后立即覆盖。
  2. 口令输入框不支持拷贝功能。
  3. 对于系统内置帐号的缺省口令,口令应符合复杂度的要求,并在客户资料中提醒用户修改。
  4. 用户可修改自己的口令,需满足如下要求:

1) 用户修改自己口令时必须验证旧口令;

2) 不允许修改除自身帐号以外的帐号的口令(管理员除外)

  1. 口令不能在网络中明文传输,口令等认证凭证在传输过程中必须加密,使用高安全等级的加密算法。

说明:

1) 对称加密算法建议使用:AES192及以上强度;

2) 密钥交换算法建议使用:DH1024;

3) 数字签名算法建议使用:DSA1024、ECDSA192;

4) 非对称算法建议使用:RSA2048、ECC192;

5) HASH(哈希)算法建议使用:SHA256及以上强度;

6) HMAC(基于哈希的消息验证码)算法建议使用:HMAC-SHA256;

  1. 口令在本地存储时必须加密,需满足如下要求:

1) 口令不能够明文写入日志文件、配置文件以及cookie中;

2) 口令文件必须设置访问控制,普通用户不能读取或拷贝加密的内容。

  1. 产品配套资料提供清晰的帐号、口令清单。

说明:华为提供用户清单模板

安全资料

针对售前、开局、现网运维几个阶段,提供配套安全方案、资料。

1.在产品描述中对产品安全特性进行描述。

  1. 产品发布前提供产品通信矩阵。描述机器/网元/模块间的通信关系,包括:通信使用的端口、协议、IP地址、认证方式、端口用途信息等。

说明:华为提供通信矩阵模板。

  1. 产品发布前提供防病毒软件部署指南。描述防病毒软件部署前的准备、流程、执行步骤、失败后回退处理,以及病毒特征库升级配置指导(Windows系统平台必选)。
  2. 产品发布前提供安全配置/加固指南。

描述如下内容:

-安全加固及检查,主要包括操作系统、数据库或WEB服务器等加固内容,需要包含具体的加固内容和操作步骤(必选)。

-应用的安全配置,针对产品业务安全应用,需要启用哪些安全选项,配置哪些内容。(对于需要通过对产品开局时进行安全策略配置才能生效的安全功能,需要提供此部分内容)。如果没有应用的安全配置,命名为安全加固指南。安全加固指南是必须的。

  1. 产品发布前提供安全维护手册。从解决方案角度提供业务日常安全维护方面的指导,包括安全补丁、安全配置、防病毒软件例行检查等,指导维护人员例行进行安全维护。

操作系统安全

无论是使用通用操作系统(Windows、Linux、Unix等)还是嵌入式操作系统(如VxWorks、pSOS等),系统都应该保证软件及软件运行环境的安全。

注:系统指交付给客户运行的整体系统,包括自研的软件、软件运行的操作系统及应用服务在内。

1.使用主流漏洞扫描软件进行安全扫描,不存在高风险级别的漏洞。

2.基于通用操作系统的新发货产品“操作系统加固+操作系统补丁”预装率=100%;对于不在生产环节预安装的产品,需要在正式发布的版本中包含默认的安全策略文件,并在产品资料中说明加固要求和操作步骤。

说明:

1)华为提供的操作系统,产品版本应基于最新的操作系统安全补丁进行开发和兼容性测试。

2)合作方提供的操作系统,合作方需在版本交付前对操作系统安全补丁进行兼容性测试并随版本发布,并根据CIS标准对操作系统进行加固并随版本发布。

3.使用Windows操作系统的产品,产品需要使用主流防病毒软件进行进行兼容性测试。

说明:

1)华为提供的Windows操作系统,合作方需使用主流防病毒软件或华为指定的防病毒软件进行兼容性测试;

2)合作方提供的Windows操作系统,产品需要缺省配套华为指定的防病毒软件,并对防病毒软件进行兼容性测试。

协议与接口防攻击

系统应具备基本的防攻击能力,对影响自身的常见攻击具备防御能力等。注:系统指交付给客户运行的整体系统,包括自研的软件、软件运行的操作系统及应用服务在内。

1.系统所有的对外通信连接必须是系统运行和维护必需的,对使用到的通信端口在产品通信矩阵文档中说明,动态侦听端口必须限定确定的合理的范围。通过端口扫描工具验证,未在通信矩阵中列出的端口必须关闭。

说明:

1)华为提供通信矩阵模板。

2.尽量避免使用动态侦定端口的实现方式,在没有替代方案的情况下,如果必须使用,需满足如下要求:

1)、如果使用业界标准的协议(如RPC、FTP被动模式),并有一定的安全措施(如NFS安全配置、防火墙支持FTP被动模式等);

2)、如果自实现的方式,则动态侦听端口必须限定确定的合理的范围。

  1. 所有能对系统进行管理的通信端口及协议必须有接入认证机制,标准协议没有认证机制的除外。
  2. 对自研协议和业界非主流软件(包括非主流的开源软件)实现的协议要进行协议畸形报文攻击测试。
  3. 设备外部可见的能对系统进行管理的物理接口必须有接入认证机制。

监听接口及防止非法监听

产品开发合法监听接口应遵循国际标准及所在国的法律要求。

1.在没有华为明确需求的情况下,严禁开发具有监听性质的功能和接口,无论该功能和接口是否要遵循相应的国家标准和国际标准。

  1. 在华为对合法监听接口有需求的情况下,合作方需根据华为提供的监听功能或接口的文件中的要求开发。

说明:对提供合法监听接口的产品版本的要求(二选一)

1)产品提供两个版本的软件安装包:一个支持合法监听,一个不支持合法监听。根据市场的安全要求,选择对应的软件安装包进行部署。

2)产品提供软件安装包拆分为:基本软件安装包和合法监听插件安装包。根据市场的安全要求,选择是否安装合法监听插件安装包。

  1. 在正常业务流程和标准协议之外,禁止提供采集最终用户原始通信内容(语音类、短信/彩信类、传真类、数据业务类)的功能,即使出于保障网络运营和服务目的。

注:

1) 除了语音类、短信/彩信类、传真类、数据业务类信息属于通信内容外,最终用户的即时消息、E-Mail信息、URL同样属于通信内容;

2) 允许使用debug功能,但debug信息中不允许包含口令、银行账号、通信内容等敏感数据。

内网渗透测试思路[转自网络]

写在前面
渗透测试是门技术,也是一门艺术。
这门技术(艺术)一开始也不是每个人都会的,正所谓没有人一出生就会走路,从不懂到入门到深谙,一步步慢慢来,每个人都是这样;但是在这个过程中,思路无疑是最重要的,没有做不到只有想不到,就跟咱们高中解题时有了思路就迎刃而解一样,手里拿着铲子(技巧知识)但不是道从何挖起岂不是悲哀。

下面会分享一些我自己总结的常规渗透思路。

分享的思路就像一本书的索引一样,并不是每个点都有详细的技巧和各种原理分析,而是咱们如何下手如何一步步深入,在每个点上咱们知道了思路可以在每个点上查阅资料来攻破,继续前进。好比武功的招式套路,在总体套路不变的前提的下招招精进,也可以重组创新。

0×01 野球拳:外围

招式解释

野球拳:最基础但练得好最后也非常厉害

1. 主要由于服务器配置等原因造成的信息泄露

常用google ,bing等搜索工具,轻量级的搜索出一些遗留后门,不想被发现的后台入口,中量级的搜索出一些用户信息泄露,源代码泄露,未授权访问等等,重量级的则可能是mdb文件下载,CMS 未被锁定install页面,网站配置密码filetype:lst password,php远程文件包含漏洞等重要信息。

包括Robots.txt不想让百度知道的,可能没有设置forbidden访问权限,让我们知道了路径可以进入哦。

800.jpeg
800-2.jpeg
800-3.jpeg
800-4.jpeg
800-5.jpeg

2. 端口探测——服务

该项也是针对服务器的配置来说的,在服务器配置的时候可能出现一些ftp,3389.1433等常规服务端口,则可以根据弱口令尝试,或者一些服务的基础漏洞(CVE)来使用matesploit进行处理。常用工具NMAP –A IP.

800.jpeg

3. 爬虫爬网站目录

该项是使用爬虫扫描器,对网站域名进行扫描,网站根目录下的文件,说不定能发现惊喜哦。AWVS,WWWScan。

1.png

4. Web框架漏洞

Web整体框架:

①Struts2框架漏洞,直接利用。

②ThinkPHP任意代码执行。
800-3.jpeg
800-4.jpeg

后台框架:

其实也可以算绕过验证进入后台分类中;

①Siteservercms,cookie绕过,在sebug上可以找到相关漏洞修补信息。

②worldpress

③ewebeditor , fckeditor编辑器上传页面直接访问,根据编辑器版本,

随处可查利用信息。

800-5.jpeg
800-6.jpeg

5. 暴力,撞库进后台

无论是前端的用户登录还是后台的管理进入,暴力破解都不失为一种以时间和字典为消耗的方法,还是有概率进入的,呵呵。

不过相比而言,根据外围探测拿到的信息,也许可以帮助我们很轻松的进入后台。

撞库,也许你只拿到了一部分敏感信息,但是网络上现在裤子满天飞的状况下,撞一撞找一找,说不定密码就出来了,这个可比暴力破解快得多。

800-7.jpeg
800-8.jpeg
6. 弱口令

最常见最危险也最掉以轻心

800-9.jpeg

  1. 中间件配置不当引起的问题

① IIS写漏洞(不常见了)

 (常规工具“老兵”)

800-10.jpeg
② 目录可访问

*8. 操作系统、中间件文件解析引起的问题,

Apache test.php.xx IIS test.asp;.jpg windows .asp. asp□

不是深入的话题,在上传里关注

  1. php引起的一系列问题

① ../../etc/passwd 直接深入

② php引起的目录遍历

③ PHP 引起的远程文件包含(google搜索也可以直接利用)

0×02 太极:外围到内部之间的中间层(应用)

招式解释

太极:遇强则强,遇弱则弱,全是应用惹的祸

一.用户未登陆的情况下

1、注入

注入的类型实在太多,利用花样种种,

① 页面调用时候的sql注入,一般直接穿山甲,sqlmap跑出来dbs和表,用来进后台用或者泄露用户信息。(DBS是否完整,网站结构库,直接利用)

② 万能密码之类的sql注入,进入前端应用或者后台管理。

③ 本站没有注入不代表就不能深入,试试旁注呢,呵呵。只是流程不一样了。

800-11.jpeg
800-12.jpeg

800-13.jpeg
2、XSS

XSS的类型不算多存储型,反射型,但是利用就是只有你想不到,没有你做不到。

和深入无关的就不说了。

① XSS盲打打后台,多半也是想进后台种种方法无果的情况下。概率有限。

② XSS DDoS。

800-14.jpeg
800-15.jpeg
800-16.jpeg
3、信息泄露,订单遍历

用户访问权限问题。

800-17.jpeg

4、密码找回漏洞(密码邮件/短信重置)

Burp可修改字段的情况下,找回其他用户密码,说不定admin的密码就被你找回了。

2.png

5、后台

后台也是一种业务,只是一种专政的隐藏的业务哈。

如何进入后台呢?在找到后台地址的前提下。和应用无关的:暴力破解,撞库,信息收集利用,弱口令,未授权访问。

① 万能密码之类的sql注入,post型注入用sqlmap dump dbs.

② 利用web前端的sql注入

③ 密码找回运气好的话前端应用的admin密码和后台密码一致。(有什么查询密码88)

④ XSS盲打 cookie (成功率)

⑤ 后台框架 siteservercms等知名后台cms sebug

1、首先获取免费版软件,然后安装使用查看是否有test(admin)账户,能否直接利用,保存cookie提交看能否使用。2、看版本,Sebug等上面有无直接利用方法3、代码审计 (北京2014绿盟安全夺旗北京分公司利用此方法成功转账)
二.在模拟用户注册登陆情况下

1、认证绕过

① 万能密码

② Cookie欺骗

1.png

2、越权访问

① 平行越权,其他用户信息读取、修改;

② 纵向越权,主要体现在修改密码能否通过特殊字段标记的修改管理员密码。

2.png

3.png

3、注入

Cookie post get 型,登陆后user相关应用

4、XSS 影响力、类型实在太多

① user提交的东西让后台管理员去审核

了解后台的提交审核流程,CSRF,给自己添加用户,(文章管理系统)

XSS找后台,管理员浏览时Cookie传输到XSS平台

XSS蠕虫之类

订单遍历

1.png

5、上传点

① 一句话木马

② Webshell上传

在很多情况下,没有注入的,后台进不去,上传点是最好的阵地。

网站十分重视对上传文件的保护,熟悉上传流程,被阻断在哪里,在哪里突破。

2.png

6、短信、邮箱DDoS

7、支付漏洞

① 0元任意付

② -1元退款

③ 数量整型/长整型溢出

1.png

0×03 内部(管理后台)

招式解释:迷踪步(无痕无迹,还需更深进入)

既然已经进入了管理后台了,很有成就感,那么下一步的目标就是控制这台服务器,控制整个网段。。。现在一般的web渗透也都到此为止了。

1.上传webshell

假如你在web前端没有地方或者没办法上传webshell,那么在后台上传是一个最好的选择,这也是帮助你从业务层面上控制服务器的最佳方法。

① 后台可修改上传文件类型,欢天喜地,修改下白名单| 黑名单,上传成功,有时候不能被解析很常见,再找原因。

② 后台不能修改上传文件类型,大部分哦~不过一般来说对后台的上传校验比前端要宽松一些。

没事,咱们该怎么绕过就怎么绕过,不能绕过就88…….

2.一句话木马

3.管理员的分权

假如说管理员进行了分权,拿到了管理员不是权限最高的主管理员的话还需要进行管理员提权操作。

后台提权

1.png

内网渗透相关内容请见下期,本文主要跟大家分享一些思路,希望跟大家共同进步。
0×01 斗转星移

(在拿到webshell的时候,想办法获取系统信息拿到系统权限)

一、通过常规web渗透,已经拿到webshell。那么接下来作重要的就是探测系统信息,提权,针对windows想办法开启远程桌面连接,针对linux想办法使用反弹shell来本地连接。

① Webshell应该都可以调用系统cmd执行一些简单的命令,那么whoami(查看当前权限),netuser(查看用户/组),systeminfo(查看系统补丁修复情况)等常见命令应该是首先被执行

探测的。

whoami.png

I: 不具备系统权限:

① Serv-U提权,现在很多的webshell都集成了Serv-U一键提权功能,只需要点击一下就拥有了系统权限,简单快速。

server-U.png

② SQL Server提权,利用webshell的目录翻阅功能,查找网站根目录下的数据库配置文件,以php为例则为config.php;查看文件内容一般都会发现数据库的登陆信息用户名/密码,(密码md5或者其他的加密方式解密一下即可),通过webshell或者数据库端口开放的话利用数据库连接工具Navicat等工具来连接数据库。

config文件.png

连接数据库检查xp_cmdshell是否存在,扩展存储过程是否打开,再利用xp_cmdshell来执行系统命令,添加用户、开启远程桌面等。

常用命令:

select count(*) from master.dbo.sysobjectswhere xtype = ‘x’ and name=’xp_cmdshell’ 返回值是1就是有xp_cmdshell存储过程 exec master.dbo.sp_addextendedproc ‘xp_cmdshell’,’xplog70.dll’添加cmdshell(Sqlserver 2000) exec sp_configure ‘show advanced options’,1;当设置advanced options参数为1时,系统才允许修改高级选项; reconfigure; exec sp_configure ‘xp_cmdshell’,1; 开启扩展存储过程; reconfigure; (Sqlserver 2005)通过xp_cmdshell来执行命令: exec master.dbo.xp_cmdshell ‘命令’
③ MYSQL提权,如SQL Server一样,首先找到数据库连接文件来找到数据库的登陆信息,登陆MYSQL数据库,利用MYSQL的Create Function来添加自定义函数,向mysql添加命令执行函数来执行系统命令。需要使用的文件为udf.dll。

也有一些自动化工具可以完成以上操作。

mysql.png

II:具备系统权限:

直接通过wehshell来执行相关命令,添加用户等操作。

② 可能遇到的障碍:

  1. 无法执行cmd命令:

有可能执行的命令不具备执行权限或者system32/cmd文件自身拒绝被调用;一般可以通过自己上传cmd命令程序来解决,为当前用户权限。

  1. 添加用户的命令net user /add不能被执行:

一般是由于net.exe文件不存在或者拒绝被调用导致,可通过上传net.exe文件来解决,包括tasklist等命令无法被执行时,都可以通过上传相应可执行文件来解决。

  1. SQL Server扩展存储过程无法开启:

在管理员做过数据库加固的情况下,xplog70.dll文件会被管理员删除,从而不能够成功开启数据库扩展存储过程,解决方案为上传xplog70.dll文件。

  1. 不能在目录下上传文件,或者上传的文件执行权限不够:

根据文件目录的执行权限,首先查找可读、可写目录,假如不好找的话,一般建议将文件上传到相应盘符的recycler文件夹内,这个文件夹在每个盘下面默认都会存在,并且具有可读、写、执行权限。

  1. 新建用户成功,但是无法确定管理员组:

没有明确标识的administrator组,在新建用户加入管理员组的过成中,系统管理员已经将管理员组更名,此时需要查询管理员组名称,再在相应的组中加入。

  1. 3389端口虽然打开,但是远程桌面无法连接:

一般这种情况是由于windows的防火墙进行的端口限制或者在远端服务器网络出口有安全设备如防火墙进行了外联端口限制,这个时候就要祭出前辈大神的LCX端口转发工具,对相应端口进行转发到常规使用的端口上,再从外部连接转发后的端口。

二、 没有通过常规渗透拿到webshell,但是由于中间件的配置失误,可以上传shell。

Apache,Tomcat等中间件以system权限运行,存在管理控制台manager,尝试弱口令或者暴力破解登入,可以通过控制台上传jsp、war等格式的webshell,从而进一步执行系统命令。

tomcat.png

三、Web存在sql注入,数据库为SQLServer,通过SQL Server的特性,开启扩展存储过程XP_cmdshell,从而添加管理员用户/组,开启远程桌面。或者MYSQL存在web sql中注入,则不通过webshell翻阅文件来获取数据库连接密码,直接从外部利用数据库连接工具来进行提权。

四、利用系统已知漏洞来提权,通过wehsell执行systeminfo来确定系统打补丁的情况,从而使用metasploit来溢出提权,选择payloads来开启远程桌面。在windows下比较出名的漏洞如MS-08067,MS11-080,MS11-046等。

五、对于Linux系统:

① 在拿到webshell的前提下,一般的流程为使用相应exp或者执行上传的脚本,反弹shell出来在本地进行连接,运行提权程序获得root权限。

如windows下一样,在Linux下首先通过webshell执行whoami来确定当前用户是什么用户,执行uname–r来确定Linux的内核版本,依照此版本来找对应的exp;当然对应很多版本的Linux内核,都是没有exp来对用执行的,很多情况下只能无奈止步或者另辟蹊径。常用工具nc。

② 可能遇到的障碍:

1.反弹shell的时候在本地无法正常连接:

一般这种情况是由于Linux的iptables防火墙进行的端口限制或者在远端服务器网络出口有安全设备如防火墙进行了外联端口限制,这个时候就要祭出前辈大神的LCX端口转发工具,对相应端口进行转发到常规使用的端口上。

2.提权exp或者自己远程编译的脚本无法执行:

检查是否当前文件具有可读、写、执行权限,尝试修改目录、文件的权限,使用chmod u+x,假如无法修改权限的话就寻找具有相应权限的目录重新上传执行。

六、关于一句话木马:

使用webshell方式固然好处是强大的各种功能,但是webshell的缺点体现在:

1.很容易被管理员发现清除,2.复杂冗余的功能根据不同的情况可能无法使用,3.在web应用中上传webshell的时候困难重重。
对于一句话木马,在web应用中可以根据情况直接插入,对应的菜刀chopper可以轻松连接一句话翻阅目录,并且可以进行数据库管理和自定义cmd路径执行。好处主要在于不容易被查杀,并且不容易被管理员发现。在上传了webshell后,在可读可写的目录下新建一句话木马连接文件也不失为一种保存后门的方式。同时注意隐藏,将一句话木马的文件名改名为config.php , run.php等系统文件名更具有迷惑性。

0×02 隔山打牛

(在拿到一台服务器的时候,拿下内网更多的服务器,更有用的信息)

  1. 信息获取

信息获取总是第一步执行的操作,利用管理员的疏忽或者内网机器的弱口令来发现更多的信息。

① 可以使用工具pwdump来抓取管理员hash,配合彩虹表或者在线hash破解,获得管理员的明文密码,这个可以作为自己的密码表,在进行内网其他机器的登陆时尝试。

② 查看远程桌面的连接信息,一般通过远程桌面经常连接的机器会在该程序打开时候的下拉菜单中保存,如果管理员选择的是记住密码的话,那么就轻松跳转其他机器。

③ 假如存在数据库管理工具,ftp管理工具等,如Navicat,SecureCRT,flashfxp等,查看是否是保存的密码,尝试登陆。

④ 各款浏览器的保存登陆密码,作为自己的密码表,在进行内网其他机器的登陆时尝试。

⑤ 有无VPN连接信息。

  1. 内网探测

① 通过cmd下执行命令arp –a,查看相邻主机IP。

② 通过上传一些工具,如Cain,可以探测本地程序缓存的密码,通过嗅探器可以嗅探到相邻机器的username和password。

③ 通过上传一些工具,如HScan,可以探测同一个段内存活机器的IP,端口,开启的服务等信息,包括存活机器的弱口令。

④ 通过本地远程桌面跳转到相应的服务器上。

⑤ 如web渗透一样,在进行端口/服务探测时,可以根据探测到的服务版本信息,根据已知的漏洞来使用matesploit进行溢出攻击,从而获得对应服务器权限。 hscan.png

  1. 找到交换机/路由器

通过内网端口/IP扫描找到类似交换机/F5的设备,网络设备没有特殊安全加固的话一般没有设置权限密码或者使用默认密码/弱口令,比较好突破。也可以下载路由器/交换机的配置文件,从而读取到登陆密码。拿到网络设备以后该网段的拓扑结构基本上能做到心中有数。

QQ截图20141210184551.png

对内网渗透而言,更多的是利用管理员或者用户组的疏漏而进行的深入,具有较大的随机性,很多情况下也是无疾而终,无奈的终结于此。不过思路和方法是多变的,正所谓没有绕不过的防火墙,终归会有更好的方法出现来解决更多的问题。

对于外网——内网渗透思路系列,并不是倡导一个如何有效入侵的方案,而是通过种种思路的总结来帮助我们的管理员同志更好地抵御外界的威胁,同时我们也倡导大家做有社会使命感的白帽子。在技术方面共同进步,不浮于表面,更多的去进行学习漏洞挖掘分析等更深层次的技术细节,了解漏洞的原理,为提高我们的技术水平而不懈努力。