googleAdsense_widever


hackthissite - realistic - 8 해킹


United Banks Of America (Difficulty rating: Hard)
One of America's Richest Men plans to donate $10,000,000 to a campaign set on hunting down hackers and locking them up. Please, if you can't do this, then we're all screwed. Can you hack in and move the money? 

From: DarkOneWithANeed 
Message: Hey man, you gotta help me out, Gary Hunter, one of the richest men in America, has just deposited $10,000,000 into his bank account at the United Banks Of America and plans to donate that money to a campaign to hunt down and lock up all hackers. Now I've tried hacking their site but I'm just not good enough. That's why I need your help, Here's a list of your objectives:
1. Find the account of Gary Hunter (I don't know his account name).
2. Move the $10,000,000 into the account dropCash.
3. Clear The Logs, They're held in the folder 'logFiles'.
I really hope you can do this, because if you can't we're all screwed

United bank of America (http://www.hackthissite.org/missions/realistic/8/) 를 털어보자.





역시나 가장 먼저 할 것은 소스보기 - 별게 없다. 
id를 하나 만들어보자.
따로 DB를 할당해두지 않았을 것 같아서, 계정이 만들어지지 않을 줄 알았는데, 만들어진다.
단, hello나 admin, hi 같은 ID는 이미 있다고 한다.
그래서 fuckman이라는 계정을 만들었다.

login 하면 login2.php 라는 페이지에서 현재 잔금과 계좌이체가 가능하다.
쿠키로 id/pwd를 검사하는 것 같다.

password 값을 보니 ec3b207dd6f125ec150314c1c8c87359 라고 뜨는데, fuckman 이라는 password 값을 md5로 암호화한 값과 일치한다.

아, login2.php 파일 헤더를 보니 POST 방식으로 id와 pass 를 전달한다.
헤더를 보는 쉬운 방법은 크롬을 이용하는 것.
개발자도구에서 Resources > 페이지를 선택한다음 Header.

login 창에서 sql injection을 해보니 
Wrong Password/Username, Try Again 라며, 안된다.

이제 userinfo 페이지를 살펴보자. 내 id인 fuckman 을 검색하니, 뜬다.
혹시 와일드카드 문자가 먹히나 싶어서 * 로 검색해보니 sql error가 뜬다.

Number Of Users Found: 1
* : SELECT * FROM 'users' WHERE user = 'Gary'; 

WoW lol 즐거운 순간이다.
필드에 그냥 ' 만을 넣고 검색해보니 

Error Getting Username Information From Table 'users'
라고 한다. 유저 테이블의 이름은 users 이다.

&#039 라는 문자는 Apostpopher의 인코딩 된 형태다. apostropher는 따옴표 문자(')이다. 혹은 prime 기호.

sql 구문을 어떻게 볶아서 users의 리스트를 뽑아야하나 고민하고 있었는데, 아까 위의 쿼리에서 Gary 라는 부분이 보인다.
혹시나 싶어서 그냥 Gary 로 검색을 하니 있단다.

Number Of Users Found: 1
Gary : I want to gay aroung the world. 

역시나 sql injection은 안된다.
sql 쿼리를 지지고 볶아서 DB 내용을 출력해봐야하는 문젠가?

아까 나온 쿼리를 다시 만들어보자

* : SELECT * FROM ';users'; WHERE user = ';Gary';; 
username : description 의 형태이므로
description을 SELECT [username] FROM ...

음, 저 세미콜론들이 당췌 뭔지 모르겠다~

cwade12c 라는 이 사람 동영상이 최고다.

oh shit..
User info 에서 sql injection을 시행할 때, ' or 1=1-- 을 하면 모든 유저 목록이 뜬다.
나는 그냥 'or1=1-- 으로 띄어쓰기를 하지 않았는데, 이게 문법적으로 차이가 있나보다. or은 자동으로 구문으로 인식한다는 생각을 왜 마음대로 했던걸까;

아무튼 유저들 목록을 보면 Gary Hunter와 유사한 username들이 엄청 많은데, 여기를 지나간 키디(나같은)들이 많다는 걸 말한다.

실제 Gary Hunter의 username은 동영상은 보니 GaryWilliamHunter 인듯하다.

동영상에선 자바스크립트를 드럽게 줄줄이 엮어서 url로 쏴버렸는데 하나하나 ..
살펴보자

javascript:void(document.write('<form method=post action=movemoney.php><input type=hidden name=TO value=dropCash /><input type=hidden name=AMOUNT value=10000000 /><input type=submit value=transfer /></form>'))
보기 좋게 정렬하면

javascript:void(document.write('
<form method=post action=movemoney.php>
<input type=hidden name=TO value=dropCash />
<input type=hidden name=AMOUNT value=10000000 />
<input type=submit value=transfer />
</form>
'))

이다.

단순히 login2.php 페이지에서 dropCash로 돈을 보내는 내용에 불과하다.
이게 먹힌다는 얘기는 쿠키에서 username 값을 GaryWilliamHunter 로 바꾸고, 정식 페이지에서 돈을 보내면 된다는 말이다.

역시나 내가 만든 임시 ID fuckman/fuckman 으로 들어가서 accountUsername 쿠키를 GaryWilliamHunter로 바꾸고,
입력필드에 dropCash/10000000 을 입력하고 돈을 보내면 끝이다.

이건, 참 이상하게 보이는데, password 값을 바꾸지 않아도 된다는 사실을 우연적으로 발견해야만 가능한 일이기 때문.
그리고, 그걸 안다면 단지 쿠키만 바꾸면 될 뿐, url로 스크립트를 쓸 필요 역시 없다.

다음은 로그를 지우는 부분.
javascript:void(document.write('<form method=post action=cleardir.php><input type=hidden name=dir value=logFiles /><input type=submit value="cover my tracks" /></form>'))

javascript:void(document.write('
<form method=post action=cleardir.php>
<input type=hidden name=dir value=logFiles />
<input type=submit value="cover my tracks" />
</form>'))

역시 마찬가지로 username만 넣고 clear file in personal folder 를 클릭하니, 
Gary의 폴더가 지워지는게 아니라 내 계정이 지워진다.(그렇다, 로그 및 계정 전부 지워지는 것이다.)

여기서는 직접 해당 스크립트를 url로 입력한다.
그러면 이 문제는 solved 된다.
이 부분 역시 문제의 해결을 특정 입력을 검증해서 확인하는 것 때문.

너무 황당하지만, 일단은 끝났다.
동영상 말고, 텍스트로된 solve를 참고하고 싶다면 다음 페이지를 참고.



덧글

댓글 입력 영역


공지

어서오십시오.
트위터 : @FCliver
기저심리학 : 네이버카페
카카오톡 : FCliver
페이스북 : Fredric Cliver

통계 위젯 (화이트)

08
111
285969

접속자 위치