我正在考虑创建一个编码难题,其要点是不同版本的 python 的行为不同。为此,我想防止玩家提供的 python 脚本轻易地找出 python 版本。
我认为这些方法很微不足道:
sys
如果真的可以完全隐藏它,我会感到惊讶,因为 python 解释器必然需要能够访问它自己的文件。但就我的目的而言,让阅读版本变得比确定不同版本行为更困难就足够了。我怎样才能通过合理的努力做到这一点?
我愿意对发行版进行猴子修补,完全搞乱机器中的一些文件,甚至可能用不同的版本号自己构建 python 源,或者审计挂钩可能会有所帮助(在较新的版本中)。但我不清楚我到底需要注意什么。
我正在参加 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)
但当我尝试操纵它并再次签名时,我发现我必须使用原始密钥。
这是为什么?
我有一个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) 我有以下原恒星挑战
#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) 请告诉我以下汇编(伪)代码的结果是什么?
我们已经设置寄存器的所有位EAX
为0,这样反过来我们也有AH
,AL
和AX
为0。但是,当我减去最低位AL
,我们将采取补和补充,给我们一堆1秒,随后一0。
XOR eax, eax
SUB al 0x01
Run Code Online (Sandbox Code Playgroud)
因此,总而言之,我的问题是在执行上述代码时,将仅AL
充满1,或者也将延续到AX
和EAX
。
我在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
我目前正在尝试解决这个 CTF 挑战:
\nLet\'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 编码,我尝试对其进行解码,但结果是一个随机字符串:
\nf\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我尝试了这段代码:
\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) 为什么这个 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 假
标题基本上说明了一切。我的朋友给了我这个作为他在他正在做的一些 CTF 中解决的挑战。我想了一会儿,想不通。此外,INFINITY 不是一个有效的答案。谢谢。
给出 N, e, c 如下:
n = 35390004486354300347521848565413257959442624589297688131017877221807025004928966206454752329594506530598099849274956709610488234955109039874355077958460196991750855650029096905451
e = 65537
c = 34976328528100445602888072790831380493399287679380757676967266152942525578548886648293955777757882335796410272725253490310142371251759362170135820927390507970457244397459500624458
Run Code Online (Sandbox Code Playgroud)
我尝试了几种方法来解密它,比如factordb,yafu甚至发现了一个类似的问题,它被RsaCtfTool解决了。也许我的电脑的性能很糟糕......有人可以帮忙吗?非常感谢!