일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
Tags
- Python
- 리눅스
- 어셈블리어
- requests
- RITSEC CTF 2019
- reversing
- 버퍼오버플로우
- termux
- 뉴스클리핑
- ftz
- CodeEngn
- 웹해킹
- writeup
- 리버싱
- SQL Injection
- x64dbg
- PWN
- Linux
- buffer over flow
- webhacking
- ctf
- NewsClipping
- HackCTF
- Shadow 동아리
- 보안뉴스
- Next.js
- RITSEC
- Nop Slide
- Hackerschool
- BOF
Archives
- Today
- Total
Jaeseo's Information Security Story
RITSEC CTF 2019 - WriteUp - 999 Bottles 본문
999 Bottles
문제구분 | 난이도 | 작성자 |
---|---|---|
PWN | 하 | JaeSeoKim |
문제 내용
문제 풀이
일단 999개의 ELF파일중 하나를 IDA로 통해 한번 열어봅니다.
int __cdecl main(int argc, const char **argv, const char **envp)
{
char v4; // [esp+Bh] [ebp-Dh]
unsigned int v5; // [esp+Ch] [ebp-Ch]
v5 = __readgsdword(0x14u);
/*
...................안쓰는 변수 생략.................
*/
p = 70;
puts("What is my character?");
__isoc99_scanf("%c", &v4);
if ( v4 == p )
puts("OK!");
else
puts("Nope!\r");
return 0;
}
프로그램을 보면 ascii코드와 비교를 해서 맞는 값이면 Ok!라고 알려주는 모습을 볼 수 있습니다. 그렇다면 이 999개의 프로그램 전부를 하나씩 리버싱을 통해 풀어내는 것은 매우 비효율 적인 일이라고 할 수 있으니 BruteForce공격을 이용하여 Ok!라고 나올때마다 단어를 저장하도록 하는 스크립트를 작성해봅니다.
import subprocess
def BureteForce(file):
for i in range(33,128):
proc = subprocess.run([file], input=chr(i).encode('ascii'), stdout=subprocess.PIPE)
if "OK!" in proc.stdout.decode():
return chr(i)
return None
if __name__ == '__main__':
flag = ""
for i in range(1,1000):
file = "./{:03d}.c.out".format(i)
print("trying : "+file)
flag += BureteForce(file)
print("flag : \n"+flag)
결과물을 봅니다!
flag :
F")|/f,:PsUUmKL*z(;N`QPtDZvX@j~=]q)AJ$w#g|Kehk)_$D_k;ESDz@ZK#=ZWfCo[GYG;FQ`W"mhoPlhr#W"N=RUxzjh"}&PJWWE@Jh%vKEIey`h,Xvxnsce/oqb,&*{#o&gMe-:RbSJO*>QIicbo<[sm>rmT@$@MgEwi:t{;U$WU[wRI!]+l[ngTqU>W:W*)$Sb},PmyEdJ~puK^zk!y.]M].vnBl!.OECe=JDiM|n+RihaL"x_p@M^P!f<Pa*j,A#"-,_n+z[?-bsQ.LBc{r<xR$[vuA/vMq%/_f-Yqg#$V}y&}[ReHU,`{^L/?rQlEW:Tv&l|&Ac#=FgrQR@a[Awwh-EEK@L:xf`M@E&}VFOZo:]ObRyiAomKD|,=pErk)wr%ir!J+`.DkN_`k>D}yrZ^@J&,qIRo|dvY+m@o:{cBvSE:G<;lGzV?NwpG*`VMnqSdXjN:r#=`=qq[qsn_kih>|M|WzEfz^|J>GTEc~k=KEbr@xOrP}iQnw#-uO-/]iCmbtBV+N*CmUiWl;STEf@}oB!e*!K#wmg](w.P]jm_o;Qec"AVm}JA#ua=hptzPVH?MSbopjRYUzDL_[[pA[)huW;=mhbIPAibwC[?o!"t.uKy[o~NiG;B=T.Rrn&OrF:&J&Xf`lr^wN${HnW<DtVjk.RITSEC{AuT057v}^W!xT;ImOU;ruPEQJKtRPlL#aGA.[PX,;,e~$t:*^dR?P_daEe,_{#r+iNrE-UVdeQh]GiIO+G;*.m=&+g#x|P!oXA(iFm({ZgTIohA<,.e(&KWw|>~,Wl<XH]<zT|H;gl.I_n"JAJ=n&}KJV{wsIFgsGHv@)+kj&>AQ~%xxK}<D?V+~oD?p=IZ$,Uy:L}$d[*VboIFrUuxp{{U!&e}-MSFDal(dIp^dN]D_`DYi!$VpNB-ZCUYKVxXta$Ur*!kSN`k>#fOzg]"ERlSIE~g)YlRi^oZg*Y,|ODGgbrXoqljJzChJ"c+ZRjy]}f{e
간단하게 ctr+f 를 통해 RITSEC를 검색 하면 Flag를 발견할 수 있습니다.
RITSEC{AuT057v}
참고 포인트
- python subprocess 라이브러리 이용
- brute force 공격 사용
'Write UP > RITSEC CTF 2019' 카테고리의 다른 글
RITSEC CTF 2019 - WriteUp - the_doge (0) | 2019.11.25 |
---|---|
RITSEC CTF 2019 - WriteUp - Our First API (0) | 2019.11.25 |
RITSEC CTF 2019 - WriteUp - Onion Layer Encoding (0) | 2019.11.25 |
RITSEC CTF 2019 - WriteUp - Hop By Hop (0) | 2019.11.25 |
RITSEC CTF 2019 - WriteUp - Crack me If You Can (0) | 2019.11.25 |
Comments