问题标签 [ctf]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
node.js - nodejs:对“==”的定时攻击
最近我通过了关于hackerone 的CTF 的这篇文章。在这篇文章中,完成挑战的部分是执行定时攻击。它激起了我的兴趣,我想创建一个容易受到时间攻击的网站。
为此,我决定使用 nodejs,因为这是我最熟悉的。但是,我无法复制它,所以我必须创建自己的strcmp
函数并在该函数中引入时间差。现在代码看起来像这样
为了测试我使用 pythonsrequests
库的时间。我的代码与文章中使用的代码非常相似,看起来像这样
我的问题是:为什么在我的情况下仅使用 来执行定时攻击不起作用==
?如果它应该起作用并且我想实施它,我需要在网站上做些什么不同的事情?
security - 解码 getdents 系统调用的输出
这几天我正在尝试学习二进制利用。所以我遇到了一个挑战,我无法执行 shell(因为 seccomp),我也不知道标志的名称。所以我不得不使用getdents
列出所有目录。我写了这个小脚本:
然而,当我发送这个漏洞时,我得到一个奇怪的输出:
所以我的问题是如何解码这个输出?
javascript - SQL 注入按原样返回注入的代码
我正在尝试击败这个 CTF:一个正在建设中的网站,它有一个简单的登录页面,您可以在其中登录或注册新用户。
它使用node express
和一个SQLite
数据库。
分析源代码我发现了这个查询:
在中间件检查会话 cookie 后调用此函数,jsonwebtoken
以在您 GET 时检索用户名'/'
。
这就是它的名称:
授权中间件:
由于这似乎是唯一以这种方式格式化的查询(其他人都使用?
)并且通常是唯一明显的漏洞,我怀疑该标志存储在数据库中的某个位置。
由于调用该函数的唯一方法是进行活动会话,因此我使用“恶意”sql 代码注册了一个用户作为用户名。起初我试图关闭报价并附加一个OR WHERE
以获取所有用户:
SELECT * FROM users WHERE username = '${username}'
+
bob' OR WHERE username IS NOT NULL
=
SELECT * FROM users WHERE username = 'bob' OR WHERE username IS NOT NULL
这至少应该抛出一个错误,因为它WHERE username = 'bob' OR WHERE username IS NOT NULL
应该返回一个包含数据库中所有用户的集合,同时它在网页上呈现为
欢迎 {{ user.username }}
这个网站正在开发中。
请待会再过来。
我期待至少“数组上没有用户名属性”或类似的东西。相反,它总是返回我给他的完整用户名
欢迎 bob' OR WHERE username IS NOT NULL
此站点正在开发中。
请待会再过来。
我错过了什么吗?有没有办法逃避在 cookie 读取过程中可能添加的最终引号?
编辑:
这是您尝试登录 /auth 路由时调用的函数:
尝试登录():
编辑 2.0:
我刚刚注意到它存储会话 cookie 的部分:
它显然'
用\'\'
. 我可以通过转义引号使其变为\\'\'
. 这允许我关闭username=''
语句,但我仍然需要找到一种方法来使第二个\'
.
buffer-overflow - 如何在 pwn 攻击中通过 netcat 发送二进制有效负载
通过 连接到漏洞利用服务器时netcat
,服务器会提示输入。我已经在二进制文件中制作了我的有效负载payload
,如何将其发送到服务器。我试过cat payload | nc ...
了,但它不起作用。
sockets - 如何从网络服务器检查套接字?
我在做一个挑战(CTF 风格),我们得到的每一个都是一个 IP。
扫描该 IP 仅打开一个端口。
如果我使用 netcat 连接到该 IP 和端口,我会在 CMD 中进行一种“跳舞”,最后会显示一条消息,即“检查套接字 12345”。
我需要再次了解真正的套接字是什么,因为我无法尝试连接到该套接字。
是否可以从特定端口连接到套接字?或者我只能从一个开放端口建立连接,并且网络服务器会自动将我的连接重定向到一个套接字?
javascript - 使用 HTTP cookie 捕获标志 (CTF)
我正在努力克服这个 CTF 挑战。这是线索:
这里的挑战是从不同的网站窃取别人的 cookie。该 cookie 的值就是您的密码。您正在使用与 Bob 的聊天应用程序,您可以在其中相互发送和接收消息。您知道 Bob 使用 BookFace.com 阅读您的消息并输入他的回复。您访问 BookFace.com 并发现它的客户端代码是 [请参阅下面的客户端代码]。当您尝试向 Bob 发送消息时,您将看到“p”标签的非 HTML 文本内容,其 id 为“you-said”和“bob-said”。您的工作是检索这些标签之一中的秘密 cookie,以便您可以阅读它们。
客户端代码
这是我向 Bob 发送消息“你好”后聊天应用程序的外观: 聊天应用程序
这是我从开发工具中获得的 HTML 代码片段(在 chrome 上单击 F12): 聊天应用程序的 HTML 片段
我是 HTML 和 DOM 的新手。我知道为了找回密码,我必须操纵 Bob 的 DOM?并以某种方式使用 java 脚本打印 document.cookie。
到目前为止我尝试的是更新一个 p 标签并将其更改为
但这只是打印出我认为的 cookie。我认为我需要做的确实是使用 javascript 通过使用现有元素来操作页面的内容。但是我如何访问 Bob 的 DOM。我尝试使用 console.log(document.cookie) 并将其放在 html 中的现有元素之一中,但它没有打印任何内容。
请帮我弄清楚如何访问 Bob 的 DOM 并打印他的秘密 cookie。谢谢!
python - 这种加密有多安全?
我有一个想法,用python的伪随机生成器生成的字节加密字符串,本质上创建一个一次性垫,这应该是安全的,问题是与随机生成器的播种有关以创建垫。
假设您不知道 seed_key,随机生成器的种子冲突的可能性有多大?
python - Python ctypes time(0) 和 C time(0)
所以我在做 2019 picoCTF 二进制挑战 seed-sPRiNG,我 用这段代码写了这篇文章:
所以我想在python中实现相同的。起初我使用了 random 模块,但意识到 C rand 和 python 在它们的实现中相距甚远,所以我决定使用 ctypes:
但是当我同时运行它们时我仍然得到不同的输出,我能解释一下为什么会这样吗
mysql - 无法弄清楚有效载荷是如何工作的
我正在解决一个关于 SQL 注入的 TryHackMe 的房间。但我无法弄清楚我想到的一件事,在花了很多时间之后,我认为最好在这里问这个问题。在房间里有一台机器要部署,在部署机器后,它给了我一个接口(webapp),它接受我的输入,如下所示:
如果你给它一个像test的值。它返回以下输出:
当我看到它时,我认为这是一个简单的 SQLi 问题,所以我尝试了常见 dbms 的大多数基本 SQLi 有效负载,如下所示:
' ; sleep(1) --
' or 1=1 --
...
在那次失败之后,我运行了 sqlmap,它发现了 2 种类型的 SQLi 有效负载,其有效负载如下:
然后我意识到在基于时间的 SQLi 中,sqlmap 使用了||
. 然后我尝试发送'|| (select sleep(2)) --
. 它奏效了。现在我的问题是为什么我的第一个有效载荷('; select sleep(2) --)不起作用,但这个有效?
linux - 为什么.bss段没有可执行属性?
我有一个以 pwnable.tw 命名的 ELF 32 位可执行文件orw
:https ://pwnable.tw/challenge/ 。在我的 Ubuntu18.04 中,可以执行 .bss 段: