第一届“百度杯”信息安全攻防总决赛 web Upload

进入题目后 先查看页面源代码:

第一届“百度杯”信息安全攻防总决赛 web Upload

就是说post发送ichunqiu=你发现的东西

 

抓包发送到repeater

第一届“百度杯”信息安全攻防总决赛 web Upload

base64解密

第一届“百度杯”信息安全攻防总决赛 web Upload

猜测 大概能再解码一次

第一届“百度杯”信息安全攻防总决赛 web Upload

得到一串数字

 

post方式发送ichunqiu=这串数字

第一届“百度杯”信息安全攻防总决赛 web Upload

页面反显fast,说明我们得用脚本跑

第一届“百度杯”信息安全攻防总决赛 web Upload

 

import base64,requests

def main():
    a = requests.session()
    b = a.get("http://be27796e9fab4928b78d609e894a64f02db126a3d76e4996.changame.ichunqiu.com/")
    key1 = b.headers["flag"]
    c = base64.b64decode(key1)
    d = str(c).split(":")
    key = base64.b64decode(d[1])
    body = {"ichunqiu": key}
    f = a.post("http://be27796e9fab4928b78d609e894a64f02db126a3d76e4996.changame.ichunqiu.com/", data=body)
    print f.text

if __name__ == '__main__':
    main()

第一届“百度杯”信息安全攻防总决赛 web Upload

 

访问后进入新的页面

第一届“百度杯”信息安全攻防总决赛 web Upload

这里对这个网页进行源码泄露扫描发现这个 

第一届“百度杯”信息安全攻防总决赛 web Upload

访问这个页面,得到:

第一届“百度杯”信息安全攻防总决赛 web Upload

解密得:8638d5263ab0d3face193725c23ce095

 

然后**下验证码

第一届“百度杯”信息安全攻防总决赛 web Upload

substr(md5(captcha), 0, 6)=02ac0d 根据这个提示符写下脚本

for($a; $a<100000000; $a++){
	if(substr(md5($a),0,6) == '02ac0d'){
		echo $a;
		exit();
	}
}

得到4682256,登陆

第一届“百度杯”信息安全攻防总决赛 web Upload

 

访问后进入新的页面

第一届“百度杯”信息安全攻防总决赛 web Upload

选择一个图片上传, 改后缀为pht即可获得 flag, Content-Type: 务必为 image/jpeg

第一届“百度杯”信息安全攻防总决赛 web Upload

 

为何可以直接上传后缀为 pht 或 phtml 绕过黑名单呢?

php的conf文件中是有一个正则的后缀名限制的,只要符合都可以被当做php文件执行。

符合的后缀包括 php、php3、php4、php5、phtml、pht 等。

 

什么环境下可以解析 phtml 和 pht 呢?

1,phpstudy和wamp以及centos用yum方式 安装的lamp环境不能解析phtml和pht

2,ubuntu和debian利用apt-get方式安装的lamp环境 就能解析phtml和pht

 

利用这些环境特性和黑名单就能绕过限制,达到上传webshell的目的。