教程05-writeup disa到pcap后發(fā)現(xiàn)有兩個以UDP方式的DNSA查詢_第1頁
教程05-writeup disa到pcap后發(fā)現(xiàn)有兩個以UDP方式的DNSA查詢_第2頁
教程05-writeup disa到pcap后發(fā)現(xiàn)有兩個以UDP方式的DNSA查詢_第3頁
教程05-writeup disa到pcap后發(fā)現(xiàn)有兩個以UDP方式的DNSA查詢_第4頁
教程05-writeup disa到pcap后發(fā)現(xiàn)有兩個以UDP方式的DNSA查詢_第5頁
已閱讀5頁,還剩33頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

#MISC100初來這 @BCTF杯技術(shù)對抗賽#MISC200內(nèi)網(wǎng)net36nslookupAtimedout。然后進(jìn)Nmap掃描,未發(fā)現(xiàn)奇怪的事情。22/sshopenprotocol2.0 80/tcpfiltered139/tcpfiltered445/tcpfiltered4444/tcpfiltered8080/tcpfiltered12345/tcpopennetbus IPaddressofhost"bctf.secret.server1:"IPaddressofhost"bctf.secret.server2:"IPaddressofhost"bctf.secret.server3:"IPaddressofhost"bctf.secret.server4:"DNS服務(wù)器之間采用TCP連接,不會被污染了,得到結(jié)果如下:FLAG#MISC300誘捕首先把logpaly出來, gotit!幸運(yùn)的猜到了flag所在的函數(shù)^_^#PPC&CRYPTO100混沌#-*-coding:utf-8-*-#ThisissolverforproblempasscodeinBCTF2014#See #ByPengyuCHEN(cpy.prefers.you[at] #COPYLEFT,ALLWRONGS importbase64importbinasciiimportzlibimportosimportrandomimportitertoolsimportpasscode frompasscodeimportfasffor(f1,f2,f3,f4)duct(passcode.f, assert(len(answer_hash)!=print('Possiblefunctioncombination:%s'%((f1,f2,f3,f4),)) def#obtainedviainvoking (f1,f2,f3,f4)=('fun3','fun5','fun1','fun4')frompasscodeimportfas f_hash_stage2=lambdax:f[f2](f[f3](f[f4](x))) frev_hash_stage1=lambdax,z_level: answers=answer_hash=forz_levelinrange(10): #defaultis6#yaforyetanother _hash),assert(f_hash(ya_hash)==answer_hash)answers+=[ya_hash] =='main':answers=get_answers()print('Herecomesanswers:')foranswerinanswers: #PPC&CRYPTO200他鄉(xiāng)遇首先從學(xué)術(shù)上搜名字和當(dāng)然,和題目無關(guān)的廢話太多,按圖索驥,恰好百科英文版直接收入了這個算法。的詞條頁面的下方的外部里,有個python2版本的實(shí)現(xiàn)。根據(jù)詞條的簡短的說明,把題目給出的那一坨數(shù)字代替示例的數(shù)字,然后開始跑這個python2的實(shí)現(xiàn),只能出現(xiàn)一截子,回頭看詞條的解釋,需要反復(fù)算法和輸出相關(guān)的幾個參數(shù)。從輸出里得到那坨數(shù)字所代表的原話,發(fā)現(xiàn)又提到編碼的強(qiáng)度太低,他給出了建議的強(qiáng)度,于是把算法方程式里的數(shù)17全部改成他建議的數(shù)字,繼續(xù)用算法解釋這坨數(shù)字,反復(fù)那幾個和輸出有關(guān)的參數(shù),然后一切都簡單起來了,把輸出重定向到文件里面,就可以找flag了。#PPC&CRYPTO400地鐵難importhashlibimportreimport netlibimport*hash_new=hashlib.sha1() stagepattern= pile(b'Round.*\n.*([LR]{15})')relist=[stagepattern]defwhileprintbprintprinttarget=getres=os.popen("a\""+target+"\"").read()defcount(str1,str2):fora1inss:fora2inss:fora3inss:fora4int=str1+a1+a2+a3+a4;hash_value=hashlib.sha1(t).hexdigest()ifhash_value==str2:returntn= net('42',port=6000,timeout=10)a=tn.read_until("InputX:")#printastr1=a[a.find("SHA1(\"")+6:a.find("\"+X).")]str2=a[a.find("==\"")+4:a.find("\",X")]printstr1printstr2printresulttn.write(result+"\n")usingnamespacestd;typedefpair<int,int>PII;typedeflonglongll;temte<classT>Tsqr(Tx){returnx*x;}#definepiacos(-1)#define#definedebug(x) (typeof((v).begin())intf[1<<15][15];intboolcheck(intst,int{intfor(i=0;i<n;i++)if{if(st&(1<<i))flag=1;elseif(flag)return}return}intmain(intargc,char*{if(argc!=2)return0;intx,i,st,u,y;strings;for{if(s[i]=='')}while(!Q.empty())if{vector<int>ans;while(f[st][x]!=1)PIIp=fa[st][x];}inttz=ans[0]+1;while(tz!=8){if(tz>=10)tz-=2;elseif(tz==9)tz-=1;elseif(tz<=6)tz+=2;elseif(tz==7)tz+=1;printf("%d\n",tz);}return}for(i=-{if(i==0||y<0||y>=n)continue;intt1,t2;if(!f[u][y]){}}}}#PWN100后門程拿到了signed{

cdeclsub_8048DDE(charintv1;//signedintresult;//signedintmask_len;//[sp+1Ch][bp-1Ch]@4size_tinput_len;//[sp+20h][bp-18h]@4signedinti;//[sp+2Ch][bp-Ch]@4scanf("%s",s);dword_804B088^=dword_804B088<<16;dword_804B088^=(unsignedint)dword_804B088>>5;dword_804B088^=2*dword_804B088;v1=dword_804B088;dword_804B088=dword_804B08C;dword_804B08C=dword_804B090^=v1^dword_804B088;if(*s!=0x6E&&*s!=0x4E){input_len= for(i=0;i<(signedint)input_len;++i)s[i]^=aBaiduRocksFrom[i%mask_len];if(memcmp(s,&byte_804B145,0xAu)){result=}{((void(*)(void))(s+10))();result=0;}}{result=}return}fromitertoolsimportcycle,izip#importmask='<baidu-rocks,froM- defdo_mask(input):cycle(mask))) code=payload=do_mask('n0b4ckd00r'+s printrepr(payload)payload+='\n'接著Metasploit生成一scode,目測linux/x86,一開始用的是4444端口,nc上去的時候失敗了目測應(yīng)該server,于是腦補(bǔ)了一個LPORT=24257。REVERSE100最難的題 VisualC++8*。無殼直接扔到IDA里。來到主函數(shù)看到了這里。下面就是printfsomethingwrong的地方。一坨一坨的循環(huán),在計(jì)算什么東西,先回到sub_401a70的調(diào)用位置,看看在調(diào)用sub_401a70之前都干什么了。直接調(diào)用了4遍,每次參數(shù)都不一樣?,F(xiàn)在思路清晰了,sub_401a70這個函數(shù)根據(jù)每次的參數(shù)來計(jì)算出來flag的一部4個字符。但是中間有很多messagebox啊。直接把這些messageboxnop掉。讓它跑起來吧!用時候的參數(shù),這樣就會跑的快一點(diǎn)。等一會就跑出了flag。()REVERSE200小菜一16420 ``>32`、`>2`明顯是以乘代除,代入試一下就知道是除以10intdiv10(intx{>>}

unsignedt=(int)((uint64_t)(0x returnx+(x>>31);[5]=[8]=[12]=[14]=[0]=[11]=[7]*[6]/10+>[12]=[13]=[1]-[12]>[2]=[13]=[15]=[8]*[6]/10+>[16]==[2]-[16]>=<=[5]&&([17]!=[5][3]<[6]=sub_401000[9],[10],[5],[6]==>#REVERSE300`MainActivity.ClickListener.onClick`24位,調(diào)用`callJNI1``MainActivity.callback6``0x14,0x58,`callJNI1`取`[0],[4],[8],[12],[16],[20]`分別減去基準(zhǔn)值1234562Lms#!1234562Lms#!j3Klr"i4Jkq!?h5Ijp?g6Hio??f*Ghn??e90:1:2:3:4:5:6:7:8:9:10:11: <[1]<[3]> [11]> > [16]> <[3]>[4][5]<[7][8]< [13]<0:1:2:3:4:5:6:7:8:9:10:11:13:17:20:[1]=[7]=[12]=[18]=[3]+[4]=[2]+7=[13]+3=[20]+[5]=[4]+5=[17]+[6]=[0]-2=[9]+[11]=[8]+[19]=502461379[0:5]^=[11:6][0:2]^=修訂之后,`callJNI6``len12``callJNI1callJNI6check`的路徑,雖然通過了檢查,但不是flag,例如H021lm32r208(23由于最終的檢查是`0x14,0x58,0x02`這樣的組合,含有異或的`callJNI6`是必須的。根據(jù)長度限制,`callJNI6`必然是最后一步,callJNI1...callJNI2->callJNI6->^|||1234562Ls#!3Kr"4Jq!?5Ip?6*`callJNI1callJNI2callJNI6check`的路徑,通過檢查,但不是flag,例如LZAzizazsaza!#`flag是一句有趣的話`IbRinGsA1tf0rREVERSE300碼海迷##檢查參數(shù)個數(shù)`argc==2`,否則輸出 oWorld!\n"``return`len(argv[148``return分配空間(`new`,初始化(`memcpy``sub_401801``sub_400A60``sub_400A60``sub_400AE0`0`"Nice!Ugot清理,釋放空間,`return`new`0x40,0x380x640x50`operatornew``operatornew[]`,可以得知①②為結(jié)構(gòu)體,③④為數(shù)組`0x401A30``①.field_0`(函數(shù)表`memcpy``argv[1]`==>`ptr③``②.field_18`(VM輸入`ptr④``②.field_20`(VMVM堆棧`0x603070``②.field_30`(VM代碼`sub_400A60(①,②*`②`==>*`0`==>解釋執(zhí)行`sub_400A60(①完成后`sub_400AE0(①,②*`①.field_4`==>稱要分析完VM之后才會知道structInterpreter//{void*table;Contextstruct //{intgpr[4];intcmp_result;//4bytesgap,void*_sp;void*_ip;##VM1、2、5type(1type(1byte) offset(1byte,zero-extend)type(1byte) reg_1(uppernibble)reg_2(lowertype=push_int(1byte)big-endianinteger(4指令類型為0~4,0~3為通用寄存器,4`cmp`指令的比較結(jié)果,即前面結(jié)構(gòu)體中的`cmp_result`,只有`cmp`指令可以寫入算術(shù)運(yùn)算結(jié)果存放在解釋器從代碼取出一字節(jié),減`0x66`后進(jìn)行分發(fā),未知指令在`sub_400B30``_ip` `-1`、`0`、`loop`3VM db0DEh,0ADh,0C0h, db7Ch,0Eh,12h,;5,9,db5Fh,33h,27h,3Ch,;db75h,;if(!=)goto$-Adb71h,;reg[3]= ;reg[0]= db6Dh,22hdb76h,2if(reg[0]==0)

dbdbdb70h,db71h,db

;0,0,0,if(reg[0]>'F'

goto

db

db70h,0,0,0,

reg[0]<'0'reg[0]<'9'

gotogoto

db71h,db76h,dbdb70h,db71h,db76h,dbdb

0,0,0, 0,0,0, db71h, db76h,db77h,;if('A'<'9')db6Dh,db76h,db79h,;gotodb6Dh,db6Bh,;db;loop;db70h,0,7db71h,;reg[3]=db6Dh,;reg[1]=db;00,2;reg[0]=read()0,29;if(reg[0]<100,72;reg[0]-=CE;reg[1]*=;reg[1]+=;loop;reg[2]=B;cmp()D0;reg[0]=F3;je0;;`argv[1]`從后向前`ascii2hex``dec``ascii2hex``inc`48個字符的 'tuhao,canwEbE Nice!!!UgotREVERSE400神秘系Loader向后10個扇區(qū)放在`0:8000`,根據(jù)四位字符,長跳轉(zhuǎn)AccessCode:OSBootstrap`int10h``int13h`IDAHexView里手工Patch掉,重新分析就會有自動注釋,看起來很方便打印banner后進(jìn)入 ,`help`給出了很多命令,但是實(shí)現(xiàn)的只看完`wr`的實(shí)現(xiàn)就可以去磁盤鏡像尋寶了,一個 項(xiàng),文件內(nèi)容由5塊構(gòu)成,每一塊內(nèi)容有26個字節(jié) DearCTFer,ifyouseethismessage,youhavecomple understoodmyOS.Congratulations!?? #W

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論