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;<br /> 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’];             }         }

  1. 查找 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 https://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 <? exec(/opt/toolkits/wkhtmltoimage-amd64 –crop-h 1024 –crop-w 1024 –quality 35 https://blog.c1gstudio.com c1g.jpg); ?>

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 , .