问题标签 [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.
c - 通过覆盖 %n 生成 root shell 的 Setuid 二进制文件,不适用于漏洞利用,但在不需要漏洞利用时有效
我有一个具有 printf 格式字符串漏洞的 Setuid 二进制文件,该漏洞应该被“%n”利用以覆盖authenticated
全局变量的值。/bin/bash 的执行在 时使用 root Setuid 权限authenticated = 1
,但在authenticated = 0
使用漏洞利用时无效。
我已经尝试过ls
并且它有效,所以执行程序正在发生。我也尝试过authenticated = 1
在源代码中制作,所以它会自动运行 bash 而不会被利用。这适用于生成根外壳。使用漏洞利用程序时,程序按预期调用访问权限函数,但在 exec 处结束并且永远不会到达 perror。但是,父进程死了,这意味着 bash 的 exec 一定已经发生了。Bash 必须正在执行,但它在启动时崩溃/退出。
在authenticated = 0 的情况下,我使用gdb 来查找authenticated
0x0804a050 之类的地址。我用 AAAA %x %x %x... 运行程序,发现它buf
从第 4 个堆栈位置开始。然后我的利用是:python -c "print('\x50\xa0\x04\x08%x%x%x%n')"
它成功地将全局变量覆盖为“授予访问权限!” 被打印。perror 永远不会达到,并且 Bash 必须产生,但是父进程死了,所以 Bash 进程也必须死。时不会发生这种情况authenticated = 1
。在这种情况下,Setuid 二进制文件按预期运行并弹出一个根 shell。
我的问题是:为什么 Bash 在启动时会死掉,但只有在 Detuid 二进制文件被利用时?Bash 一定要死了,因为ps -aux
没有列出新的 Bash 进程,并且运行exit
退出调用 bash 实例。
php - 通过 url 将整数传递给 php $_GET
所以我正在做一些 CTF,其中一个挑战是关于 php 类型的杂耍。代码看起来像这样
所以我 80% 确定我需要传入一个整数,所以这是真的,但我能操纵的只是 url。我尝试使用 python 请求来做到这一点,但仍然失败。
是否有任何特殊情况下 php 会将传入 GET 数组的变量视为 int?还是有其他方法可以做到这一点?
php - thinkphp5.0.x调试中的sql_injection漏洞
我正在重新创建一个关于的 sql 注入漏洞thinkphp5.0.x
我已经可以得到version()
但是我不能得到字段内容,它说:
SQLSTATE[HY000]: General error: 1105 Only constant XPATH queries are supported`
为什么?</p>
思考php 5.0.15
php 7.2
payload1: http:
//127.0.0.1/thinkphp5.0.15/public/index.php/index/index/index?password[0]=inc&password[1]=updatexml(1,concat(0x7e,version(),0x7e) ,1)&密码[2]=1
回声1:
SQLSTATE[HY000]:一般错误:1105 XPATH 语法错误:'~5.5.53~'
payload2: http:
//127.0.0.1/thinkphp5.0.15/public/index.php/index/index/index ?password[0]=inc&password[1]=updatexml(1,concat(0x7e,(select%20username%20from %20用户限制 0,1),0x7e),1)&密码[2]=1
回声2:
SQLSTATE [HY000]:一般错误:1105 仅支持常量 XPATH 查询,但它在 mysql 中的回显是正确的:mysql> INSERT INTO
user
(password
) VALUES (updatexml(1,concat(0x7e,(select username from user limit 0,1)) ,1)+1); 错误 1105 (HY000): XPATH 语法错误: '~test'
我希望输出是 SQLSTATE[HY000]: General error: 1105 XPATH syntax error: '~test'
docker - 如何在 linux 系统上的 docker 中运行可移植的可执行文件
我正在开发一个应用程序来为 ctfs 部署挑战。
我也想包括 Windows 服务类型的挑战。
如何在基于 linux 的服务器上部署可移植可执行文件?
assembly - 寄存器 AL 和 AX 溢出到哪里?
请告诉我以下汇编(伪)代码的结果是什么?
我们已将寄存器的所有位设置EAX
为 0,因此我们也有AH
,AL
和AX
0。但是当我减去 的最低位时AL
,我们将取二进制补码并相加,给我们一堆 1,后跟一个0。
所以总而言之,我的问题是,在执行上面的代码时,只会满AL
是 1,还是会延续到AX
andEAX
。
assembly - 当参数 0x7 和 0x18 时这个程序的输出是什么
我有以下汇编程序
据我所知,这会运行一个循环来检查第二个参数是否等于 0x3937 (14647)。如果小于,则在第二个参数上加 204,在第一个参数上加 1。我编写了一个执行此操作的 C 程序,如下所示,但是当我采用其中一个参数,将它们转换为十六进制,然后提交时,它说它是错误的。
ctf - pwn 在服务器开发中是什么意思(在 CTF 中)?
Pwn - 我知道这是 CTF 中的一个类别,您可以在其中利用服务器来查找标志。
有一个名为 pwntools 的库,它是一个 CTF 框架,并在 python 中利用开发库。
我不明白的是为什么它被称为“PWN”,它是一个缩写吗?
pwn 也拥有/支配某人,但这个定义适合吗?
谢谢帮忙^^
c - 为什么这个漏洞需要两个单独的有效载荷注入而不是一个?
我是二进制开发问题的新手。这个来自 picoctf 2019,leap-frog。我感兴趣的特定解决方案使用 vuln() 函数上的缓冲区溢出来强制执行返回到获取的 PLT 条目。这样做是因为 gets 允许我们写入内存中的任意位置(参见链接)。我们有兴趣写信给win1
、win2
和win3
。如果我们可以将这些设置为真,那么我们可以打印标志!所以,我们只需要利用该程序就是buffer + address_gets_plt + address_flag + address_win1 + values_for_win_vartiables
.
资源
以下脚本在 CTF 的 shell 中运行时打印标志
解决方案脚本
以下脚本不起作用,但程序之间的唯一区别是这个程序合并了sendline()
调用。我猜这是因为程序还没有到达 get 的调用,所以它还没有准备好从标准输入输入。
失败的解决方案 1
失败的解决方案 2
然后,我尝试在不附加'\x01\x01\x01\x00\'
到 的情况下运行程序payload
,希望执行会命中 get 并等待 stdin 输入;但是,我却遇到了段错误。我对这两个失败的解决方案的逻辑有什么问题?谢谢!
python - 调用修改输入的函数时如何正确使用z3
我正在学习如何使用 z3(我想在 CTF 挑战中使用它)并且已经达到了我开始同意我妻子最喜欢的说法“我需要帮助”的地步:) 我在这里发帖希望有人可以查看我的嵌入式示例问题(CTF 二进制文件中的实际代码太大且令人费解,无法在此处包含)并帮助指导我获得上述帮助。
我想要完成的是:
- 我想将两个 python 列表(包含 32 位值)作为函数参数传递给函数。
- 在这个函数中,我提取函数参数并在一些基本的数学例程中使用它们。
- 最终计算将被记录回第一个 python 列表
现在我已经编写并重写了下面的代码,直到我脸色发青,头发都拔光了,还没有弄清楚我做错了什么。作为健全性检查,我添加了代码,当在没有 z3 的情况下使用时会生成我正在寻找的 64 位密钥(它不知道列表值之一是什么,但显示了我希望 z3 找出的最终答案)。
最后,我知道下面的代码在 z3 本质上是相当简单的(代码也只是为了帮助支持我的问题而设计的,因此没有编码为发布/生产标准)并且我可能缺少基本概念(在我之后对这个 SMT 事情非常陌生)所以不要害怕证实我妻子的理论:我很愚蠢;)因为这不是第一次这样一件可能的微不足道的事情让我发疯了几天(而且我肯定不会是最后一次)。
非常感谢任何可以将我的头从沙子中拉出来并向我展示我的方式错误的人。
顺便说一句:sample_func 代码是来自 CTF 二进制文件的实际汇编语言代码的 Python 表示
python - 隐藏 Python 测验的答案
这是我在这里的第一篇文章,希望有人能给我一些帮助!
我目前正在为一个大学项目开发 Capture The Flag (CTF),作为其中的一部分,我想参与一个 Python 测验;验证用户的答案是否正确。
尽管我编写了一个相当简单的脚本来完成工作,但我想到的一个潜在问题是用户可以简单地在 gedit 或 nano 中打开 Python 脚本并轻松找到答案。我尝试了一些解决方案,但我想不出任何可靠的方法。
正如我所说,代码本身相当简单,但我想我会把它包括在内,这样你就可以了解我目前所掌握的内容:
我真的不知道这是否可能,但我想我不妨问问。
感谢您提供的任何建议!