Skip to content


避免nginx在cdn下被缓存防盗链图

如果你CDN会缓存http 302状态的话,那么CDN就有可能会缓存防盗图,正常用户访问时会返回CDN中的”提示图”,而非正常图.
这里里解决方法是让rewrite后的302改成403状态.

nginx原配置

location ~* ^.+\.(jpg|jpeg|gif|png|swf|rar|zip|css|js)$ {
valid_referers none blocked *.c1gstudio.com localhost cache.baiducontent.com c.360webcache.com www.sogou.com cc.bingj.com;
if ($invalid_referer) {
rewrite ^/ http://leech.c1gstudio.com/leech.gif;
return 412;
break;
}
access_log off;
root /opt/lampp/htdocs/c1gstudio;
expires 3d;
break;
}

新的nginx配置
做一个代理到虚似主机

upstream leech_server {
server 192.168.0.75:80;
}

location @leech {
proxy_set_header Host leech.c1gstudio.com;
proxy_pass http://leech_server;
}

location ~* ^.+\.(jpg|jpeg|gif|png|swf|rar|zip|css|js)$ {
valid_referers none blocked *.c1gstudio.com localhost cache.baiducontent.com c.360webcache.com www.sogou.com cc.bingj.com;
if ($invalid_referer) {
#rewrite ^/ http://leech.c1gstudio.com/leech.gif;
error_page 412 = @leech;
return 412;
break;
}
access_log off;
root /opt/lampp/htdocs/c1gstudio;
expires 3d;
break;
}

server
{
listen 80;
server_name leech.c1gstudio.com;
index index.html index.htm index.php;
root /opt/lampp/htdocs/transfer_url;
error_page 404 =403 /leech.gif;
access_log off;

location ~* ^.+\.(jpg|jpeg|gif|png)$ {
access_log off;
root /opt/lampp/htdocs/transfer_url;
add_header Cache-Control no-cache;
add_header Pragma no-cache;
add_header Expires 0;
break;
}

location ~/\.ht {
deny all;
}
}

Posted in Nginx.

Tagged with .


nginx(tengine)无法获取自定义header头ns_clientip

如果你的web服务器前端有代理服务器或CDN时日志中的$remote_addr可能就不是客户端的真实ip了。
通常可以安装realip模块来解决。
代码也很简单

set_real_ip_from 192.168.1.0/24; 指定接收来自哪个前端发送的 IP head 可以是单个IP或者IP段
set_real_ip_from 192.168.2.1;
real_ip_header X-Real-IP; IP head 的对应参数。

注意:基本上网上教程都是使用“X-Real-IP”做head头,今天遇到了使用”ns_clientip”做header头的,怎么也获取不到。

先用”$http_ns_clientip” “$sent_http_clientip”在日志中尝了下无果。

log_format combined '$remote_addr - $remote_user [$time_local] '
'"$request" $status $body_bytes_sent '
'"$http_referer" "$http_user_agent" "$http_ns_clientip" "$sent_http_clientip"';

一度怀疑前端没有带上header头,用tcp_dump确认了下确实带了。

tcpdump tcp port 80 -n -X -s 0

网上找了一圈,原来是对header name的字符做了限制,默认 underscores_in_headers 为off,表示如果header name中包含下划线,则忽略掉。
解决方法是在配置中http部分 增加underscores_in_headers on;
这下log和realip都可正常取值了。

参考:
http://nginx.org/en/docs/http/ngx_http_log_module.html
http://holy2010.blog.51cto.com/blog/1086044/1840481

Posted in Nginx.

Tagged with , .


阿里提示Discuz uc.key泄露导致代码注入漏洞uc.php的解决方法

文件路径:bbs/api/uc.php

1查找 updatebadwords 函数:

if(!API_UPDATEBADWORDS) {
            return API_RETURN_FORBIDDEN;
        }

        $data = array();
        if(is_array($post)) {
            foreach($post as $k => $v) {  
// 240 行左右      
//fix uc key
      if(substr($v[‘findpattern’], 0, 1) != ‘/’ || substr($v[‘findpattern’], -3) != ‘/is’) {
         $v[‘findpattern’] = ‘/’ . preg_quote($v[‘findpattern’], ‘/’) . ‘/is’;
      }
//end            
                $data[‘findpattern’][$k] = $v[‘findpattern’];
                $data[‘replace’][$k] = $v[‘replacement’];
            }
        }

2. 查找 updateapps 函数:
function updateapps($get, $post) {
        global $_G;

        if(!API_UPDATEAPPS) {
            return API_RETURN_FORBIDDEN;
        }
//280行左右,这里我看已删除了下行那行                
//$UC_API = $post[‘UC_API’];

        $UC_API = ”;
        if($post[‘UC_API’]) {
            $UC_API = str_replace(array(‘\”, ‘”‘, ‘\\’, “\0”, “\n”, “\r”), ”, $post[‘UC_API’]);
            unset($post[‘UC_API’]);
        }
//end
        $cachefile = DISCUZ_ROOT.’./uc_client/data/cache/apps.php’;

参考
https://bbs.aliyun.com/read/292308.html

Posted in 安全.

Tagged with .


关于ImageMagick存在远程代码执行高危漏洞的安全公告

近日,国家信息安全漏洞共享平台(CNVD)收录了ImageMagick远程代码执行漏洞(CNVD-2016-02721,对应CVE-2016-3714)。远程攻击者利用漏洞通过上传恶意构造的图像文件,可在目标服务器执行任意代码,进而获得网站服务器的控制权。由于有多种编程语言对ImageMagick提供调用支持且一些广泛应用的 Web中间件在部署中包含相关功能,对互联网站安全构成重大威胁。
一、漏洞情况分析
ImageMagick是一款开源的创建、编辑、合成图片的软件。可以读取、转换、写入多种格式的图片,遵守GPL许可协议,可运行于大多数的操作系统。
ImageMagick在MagickCore/constitute.c的ReadImage函数中解析图片,当图片地址以https://开头时,就会调用InvokeDelegate。MagickCore/delegate.c定义了委托,最终InvokeDelegate调用ExternalDelegateCommand执行命令。攻击者利用漏洞上传一个恶意图像到目标Web服务器上,程序解析图像后可执行嵌入的任意代码,进而可获取服务器端敏感信息,甚至获取服务器控制权限。
CNVD对该漏洞的综合评级为“高危”。
二、漏洞影响范围
漏洞影响ImageMagick 6.9.3-9及以下的所有版本。
ImageMagick在网站服务器中应用十分广泛,包括Perl、C++、PHP、Python、Ruby等主流编程语言都提供了ImageMagick扩展支持,且WordPress、Drupal等应用非常广泛的CMS系统软件也提供了ImageMagick选项,还包括其他调用了ImageMagick的库实现图片处理、渲染等功能的应用。此外,如果通过shell 中的convert 命令实现一些图片处理功能,也会受到此漏洞影响。
根据国内民间漏洞报告平台的收录情况,已经有多家知名互联网企业网站系统受到漏洞威胁的案例。
三、漏洞修复建议
目前,互联网上已经披露了该漏洞的利用代码,厂商尚未发布漏洞修复程序,预计近期在ImageMagick 7.0.1-1和6.9.3-10版本中修复该漏洞。CNVD建议相关用户关注厂商主页更新,及时下载使用,避免引发漏洞相关的网络安全事件。
在厂商发布新版本之前,建议采用如下措施:通过配置策略文件暂时禁用ImageMagick,可在 “/etc/ImageMagick/policy.xml” 文件中添加如下代码:

imagemagick

测试是否安全
wget https://github.com/ImageTragick/PoCs/archive/master.zip
unzip master.zip
cd PoCs
./test.sh

如果有漏洞会输出UNSAFE
user@host:~/code/PoCs$ ./test.sh
testing read
UNSAFE

testing delete
UNSAFE

testing http with local port: 44755
UNSAFE

testing http with nonce: a7DvBer2
UNSAFE

testing rce1
UNSAFE

testing rce2
UNSAFE

testing MSL
UNSAFE

安全输出
user@host:~/code/PoCs$ ./test.sh
testing read
SAFE

testing delete
SAFE

testing http with local port: 38663
SAFE

testing http with nonce: a7DyBeV7
SAFE

testing rce1
SAFE

testing rce2
SAFE

testing MSL
SAFE

升级ImageMagick.
当前最新版本为ImageMagick-7.0.2
wget http://www.imagemagick.org/download/ImageMagick.tar.gz
tar xvzf ImageMagick.tar.gz
cd ImageMagick-7.0.2
./configure
make
make install
ldconfig /usr/local/lib
/usr/local/bin/convert –version

附:参考链接:
https://imagetragick.com/ (漏洞信息专题网站)
https://github.com/ImageTragick/PoCs (本地漏洞检测脚本)
https://www.exploit-db.com/exploits/39767/
http://www.cnvd.org.cn/flaw/show/CNVD-2016-02721
http://www.freebuf.com/vuls/103504.html

Posted in Imagemagick, 安全通告.

Tagged with , .


php重新编译安装gmp扩展

GMP是The GNU MP Bignum Library,是一个开源的数学运算库,它可以用于任意精度的数学运算,包括有符号整数、有理数和浮点数。它本身并没有精度限制,只取决于机器的硬件情况。

先尝试用动态库
http://www.ipython.me/centos/php-gmp-ext.html
yum install gmp-devel

wget http://nchc.dl.sourceforge.net/project/re2c/old/re2c-0.13.5.tar.gz -O “re2c-0.13.5.tar.gz”
tar zxvf re2c-0.13.5.tar.gz
cd re2c-0.13.5
./configure
make && make install

wget https://gmplib.org/download/gmp/archive/gmp-4.1.3.tar.bz2
tar jxvf gmp-4.1.3.tar.bz2
cd gmp-4.1.3

./configure –with-php-config=/opt/php/bin/php-config
make
make install

/opt/php/bin/phpize
recursion limit of 1024 exceeded, use -L t

一直出错…

重新编译个php
cd php安装目录
./configure –prefix=/opt/php-5.2.17gmp –with-config-file-path=/opt/php-5.2.17gmp/etc –with-mysql=/opt/mysql –with-mysqli=/opt/mysql/bin/mysql_config \
–with-iconv-dir=/usr/local –with-freetype-dir –with-jpeg-dir –with-png-dir –with-zlib –with-libxml-dir=/usr –disable-rpath \
–enable-discard-path –enable-safe-mode –enable-bcmath –enable-shmop –enable-sysvsem –enable-inline-optimization –with-curl \
–with-curlwrappers –enable-mbregex –enable-fastcgi –enable-fpm –enable-force-cgi-redirect –enable-mbstring –with-mcrypt \
–with-gd –enable-gd-native-ttf –with-openssl –with-mhash –enable-pcntl –enable-sockets –with-xmlrpc –enable-zip –enable-soap \
–enable-xml –enable-zend-multibyte –disable-debug –disable-ipv6 –with-gmp
make ZEND_EXTRA_LIBS=’-liconv’
make install

Posted in PHP.

Tagged with .


安装wkhtmltopdf让php在linux环境下给网站截屏

http://wkhtmltopdf.org/obsolete-downloads.html
新版本依赖包比较多,我是centos5.8系统,这里使用64位老版本,同时它还用windows下的版本
wget http://download.gna.org/wkhtmltopdf/obsolete/linux/wkhtmltoimage-0.10.0_rc2-static-amd64.tar.bz2

tar -jxvf wkhtmltoimage-0.10.0_rc2-static-amd64.tar.bz2

解压后就可使用
./wkhtmltoimage-amd64 –help

Name:
wkhtmltoimage 0.10.0 rc2

Synopsis:
wkhtmltoimage [OPTIONS]…

Description:
Converts an HTML page into an image,

General Options:
–crop-h Set height for croping
–crop-w Set width for croping
–crop-x Set x coordinate for croping
–crop-y Set y coordinate for croping
-H, –extended-help Display more extensive help, detailing
less common command switches
-f, –format Output file format (default is jpg)
–height Set screen height (default is calculated
from page content) (default 0)
-h, –help Display help
–quality Output image quality (between 0 and 100)
(default 94)
-V, –version Output version information an exit
–width Set screen width (default is 1024)
(default 1024)

Contact:
If you experience bugs or want to request new features please visit
, if you have any problems
or comments please feel free to contact me:

./wkhtmltoimage-amd64 http://www.baidu.com baidu.jpg
Loading page (1/2)
Rendering (2/2)
Done

截一张1024*1024 质量为35的jpg图片
./wkhtmltoimage-amd64 –crop-h 1024 –crop-w 1024 –quality 35 http://blog.c1gstudio.com c1g.jpg

c1gstudio

和php结合
cp wkhtmltoimage-amd64 /opt/toolkits/
chown www:website /opt/toolkits/wkhtmltoimage-adm64
chmod 550 /opt/toolkits/wkhtmltoimage-adm64

vi /opt/php/etc/php.ini
open_basedir = “/opt/htdocs:/tmp/session:/tmp/upload:/opt/php/PEAR:/opt/php/lib/php:/opt/toolkits/”

重启phpfpm
/opt/php/sbin/php-fpm restart

vi test.php

Posted in Others.

Tagged with .


容易被忽略的HTTP_X_FORWARDED_FOR攻击


function getIP() {
if (isset($_SERVER[‘HTTP_X_FORWARDED_FOR’])) {
$realip = $_SERVER[‘HTTP_X_FORWARDED_FOR’];
} elseif (isset($_SERVER[‘HTTP_CLIENT_IP’])) {
$realip = $_SERVER[‘HTTP_CLIENT_IP’];
} else {
$realip = $_SERVER[‘REMOTE_ADDR’];
}
return $realip;
}

这个是网上常见获取ip函数

其中x-forword-fox的值是可以被自定义改写的.

在firefox下通过Moify Headers插件或者用php的fsockopen()函数等方法来改写.

如果你需要将IP写入数据库并打开的错误输出,那么将HTTP_X_FORWARDED_FOR的值改成192.168.0.1′ or 1= 是可能会产生sql注射.

同样$_SERVER[“HTTP_USER_AGENT”],$_SERVER[“HTTP_ACCEPT_LANGUAGE”],$_SERVER[‘HTTP_REFERER’] 等http变量入库时也需做过滤

改进的获取ip函数

if(getenv(‘HTTP_CLIENT_IP’) && strcasecmp(getenv(‘HTTP_CLIENT_IP’), ‘unknown’)) {
$OnlineIP = getenv(‘HTTP_CLIENT_IP’);
} elseif(getenv(‘HTTP_X_FORWARDED_FOR’) && strcasecmp(getenv(‘HTTP_X_FORWARDED_FOR’), ‘unknown’)) {
$OnlineIP = getenv(‘HTTP_X_FORWARDED_FOR’);
} elseif(getenv(‘REMOTE_ADDR’) && strcasecmp(getenv(‘REMOTE_ADDR’), ‘unknown’)) {
$OnlineIP = getenv(‘REMOTE_ADDR’);
} elseif(isset($_SERVER[‘REMOTE_ADDR’]) && $_SERVER[‘REMOTE_ADDR’] && strcasecmp($_SERVER[‘REMOTE_ADDR’], ‘unknown’)) {
$OnlineIP = $_SERVER[‘REMOTE_ADDR’];
}
preg_match(“/[\d\.]{7,15}/”, $OnlineIP, $match);
$OnlineIP = $match[0] ? $match[0] : ‘unknown’;
unset($match);

参考:

http://www.jb51.net/article/37690.htm

http://zhangxugg-163-com.iteye.com/blog/1663687

Posted in PHP, 安全.

Tagged with , .


转 实用PHP安全编程好文 PHPer都应学习

文章所在专题列表如下:

  1. PHP安全编程:register_globals的安全性
  2. PHP安全编程:不要让不相关的人看到报错信息
  3. PHP安全编程:网站安全设计的一些原则
  4. PHP安全编程:可用性与数据跟踪
  5. PHP安全编程:过滤用户输入
  6. PHP安全编程:对输出要进行转义
  7. PHP安全编程:表单与数据安全
  8. PHP安全编程:从URL的语义进行攻击
  9. PHP安全编程:文件上传攻击的防御
  10. PHP安全编程:跨站脚本攻击的防御
  11. PHP安全编程:跨站请求伪造CSRF的防御
  12. PHP安全编程:关于表单欺骗提交
  13. PHP安全编程:HTTP请求欺骗
  14. PHP安全编程:不要暴露数据库访问权限
  15. PHP安全编程:防止SQL注入
  16. PHP安全编程:cookie暴露导致session被劫持
  17. PHP安全编程:session固定获取合法会话
  18. PHP安全编程:session劫持的防御
  19. PHP安全编程:防止源代码的暴露
  20. PHP安全编程:留心后门URL
  21. PHP安全编程:阻止文件名被操纵
  22. PHP安全编程:文件包含的代码注入攻击
  23. PHP安全编程:文件目录猜测漏洞
  24. PHP安全编程:打开远程文件的风险
  25. PHP安全编程:shell命令注入
  26. PHP安全编程:暴力破解攻击
  27. PHP安全编程:密码嗅探与重播攻击
  28. PHP安全编程:记住登录状态的安全做法
  29. PHP安全编程:共享主机的源码安全
  30. PHP安全编程:更优的会话数据安全
  31. PHP安全编程:会话数据注入
  32. PHP安全编程:主机文件目录浏览
  33. PHP安全编程:PHP的安全模式

Posted in PHP, 安全.

Tagged with , .


6月30日将迎来人类迎来史上第26次闰秒可引起部分linux系统重启

国际地球自转和参考坐标系统服务(IERS)将在格林威治时间2015年6月30日午夜增加一闰秒(维基百科关于闰秒的说明),由于Linux kernel和Posix关于NTP时间跳变的标准不同,将在2015年6月30日23:59:59 跳变到2015年7月1日后引起ntpd进程锁死,从而造成部分开启ntp服务的linux系统重启。

另外,群友“沈阳-任浩”补充几点说明关于调整闰秒可能导致 kernel hang 住的问题:
1. RHEL3/RHEL6所有系统不受该问题的影响。
2. RHEL4内核版本在kernel-2.6.9-89.EL (RHEL4.8)及以上,RHEL5内核版本在
kernel-2.6.18-164.el5(RHEL5.4)及以上的系统不受该问题的影响。
3. 其他RHEL4和RHEL5的系统有可能发生该问题,建议尽快升级至上述版本或更高
版本以规避该问题。

a. 若由于其他原因实在无法进行内核升级,且应用对时间的敏感度不是非常高,
容许有1秒钟的差值,有如下建议:
对于使用ntpd服务进行时间同步的RHEL,至少提前1天停止ntpd服务。并确保每台
机器上安装的tzdata的版本低于2011n-2(不 包含该版本)。
对于不使用ntpd服务进行时间同步的RHEL,确保每台机器上安装的tzdata的版本低
于2011n-2(不包含该版本)。
从而使系统不进行闰秒调整,待该事件完成之后,再可启动ntpd服务进行同步,或
者手动修改时间为正确时间。

提示:对于内部的以RHEL作为NTP服务器的系统,它是NTP服务器的同时,也是使用
ntpd服务与更上层NTP服务器进行时间同步的客户端, 故上述方法也适用于该系统。
b. 若由于其他原因实在无法进行内核升级,但应用对时间的敏感度非常高,不容
许有1秒钟的差值,则有可能发生kernel hang住的问题,尽管这个可能性是非常小的。
如果发生问题,可考虑重启该系统恢复。

根据这个情况,我有找到了相应的解决方法:
如果您的相关设备是使用Linux kernel 为2.6.18-164.e15以前的Linux系统,请做如下预防工作:
1、2012年6月28日当天(北京时间23点以前)先确认ntp服务已同步,然而关闭ntpd服务。
2、2012年7月2日(北京时间8点以后)当天开启ntpd服务,并确认ntp服务已同步。
对照上面的解决方法,我检测了我所有服务器(100多台,累死了),发现rhel5.4服务器的内核都为2.6.18-164.e15,但都没有开启ntp服务,而所有的SUSE Linux Enterprise Server 10 的linux系统里内核都是2.6.16.60-0.54.5-smp,就1台数据库服务器启动了ntp服务,下面演示我是如何如何的解决这个问题的:
1、先查看服务器是否有开启ntp服务,可以使用以下命令查询:
netstat -aunl|grep123 #由于123是ntp启动的端口,所有可以使用netstat来查看ntp的123端口,查看ntp服务是否启动;

ps -ef|grep ntp #查看ntp服务的进程是否在后台运行;

service ntp status #使用service来查看ntp服务的启动状态
下面是我使用这3中方法进行的检测结果

加载中…

可以看得我的服务器里ntp服务正在运行
关闭是方法如下:
直接杀掉ntp的进程,命令为:kill -9 $(ps -ef|grep ntp|grep -v grep|awk ‘{print $2}’);
使用service来关闭ntp,命令为:service ntp stop;
关闭后为了保证安全,还需要把ntp开机自动启动给关闭,命令为:chkconfig –level 345 ntp off;

Posted in 安全通告.

Tagged with .


PHP曝DOS漏洞可致CPU灌满 涉及多个PHP版本

近日,PHP被爆出存在远程DOS漏洞,若黑客利用该漏洞构造PoC发起连接,容易导致目标主机CPU被迅速消耗。此漏洞涉及众多PHP版本,因而影响范围极大。

漏洞产生的原因是PHP解析multipart/form-datahttp请求的body part请求头时,重复拷贝字符串导致DOS。而远程攻击者可以通过发送恶意构造的multipart/form-data请求,导致服务器CPU资源被耗尽,从而远程DOS服务器。

另据了解,在今年4月3日就有用户在PHP官网提交了PHP远程DoS漏洞(PHP Multipart/form-data remote dos Vulnerability),代号69364。由于该漏洞涉及PHP的众多版本,故其影响面较大,一经发布迅速引发多方面关注。此后,各种PoC已经在网络上流传。

此次漏洞具备如下特性:

1. 一旦被利用成功,可以在迅速消耗被攻击主机的 CPU 资源,从而达到 DoS 的目的;

2. PHP 在全球的部署量相当大,为攻击者提供了相当多可以攻击的目标;

3. PHP 官方目前仅给出了 5.4 及 5.5 版本的补丁

受此漏洞影响的软件及系统包括 PHP 的如下版本。

• PHP 5.0.0 – 5.0.5

• PHP 5.1.0 – 5.1.6

• PHP 5.2.0 – 5.2.17

• PHP 5.3.0 – 5.3.29

• PHP 5.4.0 – 5.4.40

• PHP 5.5.0 – 5.5.24

• PHP 5.6.0 – 5.6.8

根据绿盟漏洞检测数据显示,在提交了5596个网站中,有1400多个网站存在漏洞,中枪率约为25%。

截止到发稿为止,PHP官方已经提供了PHP 5.4.41、5.5.25、5.6.9 的补丁 ,而PHP 5.3版本补丁暂未提供,但有网友根据官方补丁,制作了PHP5.3 版本的”民间版”补丁:https://coding.net/u/simapple/p/oldphppatch/git

漏洞检测地址:https://portal.nsfocus.com/vulnerability/list/

Posted in 安全通告.

Tagged with , .