2019NISC CTF 部分 WriteUp

0x00 Game

操作内容:
查看源码发现存在可疑 JS 文件:

读取发现:

image

构造 POST 请求,参数 score=15 时,即可读出数据

0x01 who are you?

观察源文件:

猜测存在XML 注入,经过测试发现的确存在 XML实体注入

因无法确定 flag 的路径,无法使用 file 直接读取,使用php://filter/read=convert.base64-encode/resource=的方法来读取 index.php的文件:

解密后:

image

0x02 签到题

域名解析查询发现

image

0x03 七代目

文件头伪装成了PNG,其实是GIF

共计66帧动画,百度搜索七代目相关gif,可以找到原文件,为65帧。对比发现第七帧是重复的

使用stegsolve即可得到答案。

0x04 亚萨西

破解出密码 loli,解压后得到图片文件,
使用winhex打开图片发现存在可疑的数据:

提取出来后:

image

brainfuck解密:

image

image

0x05 24word

根据最初的图片的提示,使用社会主义核心价值观解密:

image

得到图片:

扫描可得正确答案:

image

0x06 dp

已知N、dq,求分解问题,利用脚本如下:

import gmpy2
import libnum
e=65537
n=9637571466652899741848142654451413405801976834328667418509217149503238513830870985353918314633160277580591819016181785300521866901536670666234046521697590230079161867282389124998093526637796571100147052430445089605759722456767679930869250538932528092292071024877213105462554819256136145385237821098127348787416199401770954567019811050508888349297579329222552491826770225583983899834347983888473219771888063393354348613119521862989609112706536794212028369088219375364362615622092005578099889045473175051574207130932430162265994221914833343534531743589037146933738549770365029230545884239551015472122598634133661853901
dp=81339405704902517676022188908547543689627829453799865550091494842725439570571310071337729038516525539158092247771184675844795891671744082925462138427070614848951224652874430072917346702280925974595608822751382808802457160317381440319175601623719969138918927272712366710634393379149593082774688540571485214097
c=5971372776574706905158546698157178098706187597204981662036310534369575915776950962893790809274833462545672702278129839887482283641996814437707885716134279091994238891294614019371247451378504745748882207694219990495603397913371579808848136183106703158532870472345648247817132700604598385677497138485776569096958910782582696229046024695529762572289705021673895852985396416704278321332667281973074372362761992335826576550161390158761314769544548809326036026461123102509831887999493584436939086255411387879202594399181211724444617225689922628790388129032022982596393215038044861544602046137258904612792518629229736324827
for i in range(1,65538):
    if (dp*e-1)%i == 0:
        if n%(((dp*e-1)/i)+1)==0:
            p=((dp*e-1)/i)+1
            q=n/(((dp*e-1)/i)+1)
            phi = (p-1)*(q-1)
            d = gmpy2.invert(e,phi)%phi
            print libnum.n2s(pow(c,d,n))

0x07 sflat

题目虽然进行了控制流平坦化,但验证逻辑过于简单,脚本如下:
data="J2261C63-3I2I-EGE4-IBCC-IE41A5I5F4HB"
flag='flag{'
for i in data:
if i=='-':
flag += '-'
elif i >= '0'and i <= '9':
flag += chr(ord(i) + 48)
elif i>='A':
flag += chr(ord(i) - 17)
flag+='}'
print flag

#0X08 src_leak

func1:

image

分析_func·1,转换为标准函数方便自动化计算,根据IfElse块拆成标准的if else,然后再根据func1把相应的代码转换为使用while的条件循环处理。

func2:
func2较为简单,比较轻松把递归拆成while解决

image

func3:
func3就更加简单了,轻松转换为标准函数

image

Func4:

image

Func4有些复杂,得先转换NEXTN和NEXTM。
然后再转换TEST函数,TEST函数有两个固定的返回值,这里需要注意。
然后再把func4的两个固定条件返回值协商,并且引用TEST函数即可完成。

image

主函数:
根据output提示,定义max数组
当func3(func2(j))等于1时,符合题目的条件,因此写了这个双循环,用来直接自动化生成x1到x5的5个符合条件的数字。

根据题目给的提示,循环计算func4等于1有多少个数字,然后总数就是x6了,于是写了下面的代码来计算。

最后就能得到flag了。

0x09 sm4

标准的sm4加密,直接使用c语言版本运行即可得到flag

题目下载

链接:https://pan.baidu.com/s/15kmKsuBx6xvV9bzPlUF1SQ 密码:zirw