write-ups/wargame.kr

wargame.kr jff3_magic write up

2018. 1. 8. 13:33

해당 문제를 접속하면 다음과 같은 alert가 계속 뜬다. 그래서 Browser의 설정 탭에 들어가서 Javascript를 비허용한 상태에서 Exploit을 진행하면 더 빠르게 문제를 풀 수 있다. 




Challenge Analyse

일단 hint가 swp 이므로 .index.php.swp 가 있을 것으로 예상된다. .index.php.swp 에 접속하면 스왑 파일을 다운 받을 수 있는데, 이 스왑 파일에는 index.php 소스의 일부분이 있다. ( $vim -r .index.php.swp 으로 복구해보려고 했지만, 설정도 약간 해줘야되는 부분이 있어서 그냥 제공된 소스만 보기로 했다.)


$q = mysql_query("select * from member where no=".$_GET['no']);


위와 같은 코드가 존재한다. 여기서 딱봐도 SQLi가 대놓고 터진다. 


$test = custom_firewall($_GET['no']); 


이 코드에서는 방화벽처럼 여러 문자들을 필터링한다. 필터링하는 단어들이 상당히 많아서, 필터링 리스트를 미리 작성해둘 필요가 있을 것 같다. 


filter_list1 = ['or', 'and', 'information', 'union', 'mid', 'left', 'right', '%'] 

filter_list2 = ['select', 'sleep', 'benchmark', 'substr', 'insert']

filter_list3 = ['#', '--']

filter_list4 = ['%', '&&']


주석은 ;%00 으로 우회하면 될 것 같다. (아, 근데 애초에 주석이 필요없을 것이다,,)

or은 || 으로 우회할 수 있지만, and는 우회하지 못한다. 계속 고민하다가 그냥 OR만 이용해서 풀어보기로 했다. 



Exploit

http://wargame.kr:8080/jff3_magic/?no=1+||+id=%27admin%27

이렇게 admin이 있다는 것을 알게 되었다. 


mid, substr, right, left 등의 문자열 substring 관련 함수들이 막혀있는데, 이것은 lpad() 함수로 우회하면 된다. 

PoC : http://wargame.kr:8080/jff3_magic/?no=123+||+(no=0)-(lpad(%27asd%27,1,space(1)))=%27a%27)


그리고 lpad() 함수로만 패스워드를 갖고 오는 것이 아니라, reverse() 함수도 같이 쓰면 패스워드를 갖고 올 수 있다.

and는 

select * from member where no=123 || (no=0) - (rpad(reverse(rpad(pw,1,space(1))),1,space(0))='0')


이런식으로 우회하자. admin 이 뜨면 맨 마지막 조건이 False 라는 것을 알 수 있다. 이런식으로 하나하나 패스워드를 알아내자



그리고 알아낸 admin의 패스워드이다. 



32byte(128bit)이기 때문에 MD5라고 생각했는데 아니였다. 



분명 MD5 hash를 찾았지만, 아니였다. 이 문제에서는 다른 알고리즘을 사용하고 있는 것 같다. 


1을 pw로 했을 때 다음과 같은 값이 뜬다. 50034bd20ef09138e2ff633365ea6879 이걸 이용해서 해당 알고리즘은 Haval 128,5 라는 것을 알 수 있었다. 



근데 0e531247968804642688052356464312가 어느 서버에도 Encrypt 된 것이 없는 것 같아서 절망하다가 생각난거시있다. 0e 로 시작되는 Magic 해쉬를 찾는 것디ㅏ. 



입력해봤더니 플래그를 획득했다. 

'write-ups > wargame.kr' 카테고리의 다른 글

wargame.kr md5 password write up  (0) 2018.04.23
wargame.kr md5_compare write up  (0) 2018.04.23
wargame.kr img recovery write up  (0) 2017.10.04
wargame.kr zairo write up  (0) 2017.06.22
베네듀 SQL Injection 찾는 데에 힘든점  (0) 2017.05.25