보안공부 23

webhacking.kr 22번 풀이

mission: login as admin username: test password: 1234 hash코드가 32자리 인것을 보아 md5암호문 같다. md5복호화를 해보자 (대부분의 사이트가 에러가 뜬다. 밑의 사이트를 이용하자) https://crackstation.net/ CrackStation - Online Password Hash Cracking - MD5, SHA1, Linux, Rainbow Tables, etc. Free Password Hash Cracker Enter up to 20 non-salted hashes, one per line: Supports: LM, NTLM, md2, md4, md5, md5(md5_hex), md5-half, sha1, sha224, sha256, ..

webhacking.kr 29번 풀이

1. flag는 다른 테이블에 있다. 2. 현재 테이블에는 time, ip, file 컬럼이 존재한다. 이 문제는 sql의 문법을 이용해서 푼다. insert into 테이블명 values ('id1', 'pw1'),('id2', 'pw2') 같이 한번에 두 값이 들어갈 수 있다는 것을 알아야 한다. 먼저 파일 명을 file_name', 'time', 'ip주소')# 로 설정해서 보낸다. 1','123', 'ip_address')# 로 보내보았다. (ip는 자신의 것을 꼭 사용해야 함. ) 그러면 시간, ip주소, 파일 이름 순으로 정보가 정상적으로 나온다. 이를 통해 우리는 칼럼 순서가 시간, ip, 파일 이름이라는 것을 알 수 있다. 그럼 이제 2가지 정보를 보내보자. file_name1', 'tim..

webhacking.kr 59번 풀이

view-source 클릭 개발자 도구를 이용해서 살펴보니까 login할 때 쓰이는 아이디와 번호다 lid, lphone이네요! 소스코드를 정리해 봅시다. 1. lid와 lphone에 함수 addslashes를 적용한다. 2. lid와 lphone에에 해당하는 id와 lv를 선택한다. 3. id가 존재하면 lv를 출력한다. 4. 만약 lv==admin이면 문제해결 1. id와 phone에 함수 addslashes를 적용한다. 2. phone>=20이면 access denied 3. id에 admin(대소문자상관x)이 있으면 access denied 4. phone에 admin|0x|#|hex|char|ascii|ord|select(대소문자상관x)이 있으면 access denied 5. 테이블에 (id, ..

webhacking.kr 56번 풀이

BOARD에 admin과 guest에 대한 정보고 table 형식으로 있습니다. readme에 들어가면 access denied 라고 뜨고, hi~에 들어가면 hello~ 라고 뜹니다. 일단 소스코드와 쿠키에선 얻을 게 없었고, search칸에 이것저것 입력해 보았는데, hello값을 입력했을 때, guest에 대한 정보가 뜹니다. 그리고 h만 입력해도 guest에 대한 정보가 뜹니다. 아마도 search기능은 각 파일의 내용에서 해당하는 글자를 찾아주는것 같습니다. 그럼 당연히 admin에는 flag~가 있겠거니 싶어서 f를 검색해 보니까, 창에 admin이 떳습니다. 그리고 이것저것 시도해 보았습니다. 시도를 하면서 알게 된 것을 정리하자면, c언어의 strstr함수 아시나요?? 바로 문자열 속에서 ..

webhacking.kr 55번 풀이

문제에 입장하자마자 요 귀여운 아이가 나타납니다!! 마우스를 움직이면 마우스를 따라 움직이는 게 너무 귀엽네요 ㅎ(눈도 깜빡깜빡 거려요!) 그리고 저 슬라임?이 움직임에 따라 스코어 점수도 변합니다. score 밑에 보면 rank라는 링크가 있네요! 들어가 봅시다. 랭크 순위와, 아이디, 스코어가 순서대로 쭉 나열되어 있습니다. 그런데 보시면 스코어가 2147483647로 다 똑같습니다. (이러면 순위가 상관 없잖아요?) 어쨌든 저는 첫번째 2147483647를 클릭해 보았습니다. 그러면 위에 id : jusb3 // 2147483647 가 나타나고, URL도 https://webhacking.kr/challenge/web-31/rank.php?score=2147483647 로 바뀐걸 볼 수 있습니다. ..

webhacking.kr 53번 풀이

일단 소스를 살펴봅시당 먼저 소스코드를 해석해 보면, 1. tablename.php 파일을 불러온다. 2. 만약 answer변수가 hidden_table 변수값과 같다면 문제 해결 3. val변수값의 select, by를 필터링함(대소문자 상관 X) 4. a=val변수값에 해당하는 hidden_table 값을 가져온다. 먼저 val 값이 1, 2, 3, 4일 떄를 각각 입력해 봤더니 각각 1, 2, 3, 4를 내놓는다. 아마도 val값 입력할 때를 이용해 table이름을 알아야 할 거 같다. table 이름을 알아내는 가장 일반적인 방법은 SELECT table_name FROM information_schema.tables; 을 사용하는 것이다. 현재 사용하는 테이블의 이름만 알고 싶다면 WHERE t..

webhacking.kr 41번 풀이(마지막 부분 오류 해결 방법)

view-source를 통해 소스를 살펴보자. 짧아서 좋다 ㅎㅎ 일단 php부분만 따로 살펴보자. $_FILES의 속성을 밑 여는 글에 정리해 놓았습니다 참고하세요!! 더보기 $_FILES['userfile']['tmp_name'] - 웹 서버에 임시로 저장된 파일의 위치. $_FILES['userfile']['name'] - 사용자 시스템에 있을 때의 파일 이름. $_FILES['userfile']['size'] - 파일의 바이트 크기. $_FILES['userfile']['type'] - 파일의 MIME 타입을 가리킴. 예를 들어, text/plain이나 image/gif. $_FILES['userfile']['error'] - 파일 업로드할 때 일어난 오류 코드를 알려주는..

webhacking.kr 46번 풀이

level의 숫자를 바꿔서 제출하면 id(Itusy)와 money의 숫자가 매변 다르게 나옵니다 그리고 view-source를 통해 소스코드를 살펴볼까요? 입력한 lv이 admin의 lv과 같으면 문제가 풀리게 됩니다. 그런데 우리가 admin의 lv을 알리가 없겠죠?? SQL injection을 시도해야 할 것 같습니다. 일단 필터링 되는 것들을 간단히 정리해 보죠 addslasher: \(역슬래시) str_replace: (공백), /, *, % preg_match: select, 0x, limilt, cash (대소문자 상관X) 위의 필터링값들을 피해서 select id,cash from chall46 where lv=0 or id='admin' 식으로 만들어 주면 된다. 첫번째 시도: 공백을 +로..

webhacking.kr 42번 풀이

일단 무언가를 다운로드 할 수 있는 창이 뜬다. 첫번째 파일 flag.docx 를 다운 받을려 했지만 'Access Denial'이 뜨고 두번째 파일인 test.txt 을 다운을 다운받습니다. text.txt에 담긴 내용입니다. 일단 어디 쓸지는 모르니 킵해 둡시다. ctrl+shift+i를 눌러 소스코드를 살펴봅시다. 소스코드를 살펴 보니 text.txt를 다운 받기 위해 이동하는 URL이 보입니다 ?down=dGVzdC50eHQ= 이 부분이죠. 그런데 여기서 마지막에 붙은 '='가 base64를 떠올리게 합니다. 혹시 모르니 base64 디코딩을 시도해 봅시다. 마지막 '='부분은 지우고 디코딩 해야 합니다. base64 디코딩 사이트 --> http://www.hipenpal.com/tool/bas..

webhacking.kr 20번 풀이

일단 한번 아무거나 시도해보자. (reset을 누르면 captcha의 문자열이 바뀐다. ) 기껏 captcha를 쳤더니 Too Slow라고 뜬다. 그리고 위에 time limit: 2 second 라는 문구가 표시된다. 일단 ctrl+shift+i 를 통해 소스코드를 살펴보자. 각각의 빈칸들을 확인하고, 마지막에 캡챠까지 확인해주는 코드이다. 간단히 수정해 보자. location.reload();//현재 페이지를 새로고침 해준다. lv5frm.id.value="admin" ; lv5frm.cmt.value="hello"; lv5frm.captcha.value=lv5frm.captcha_.value; lv5frm.submit(); 각각의 변수(id, cmt, captcha)에 원하는 값을 넣을려면 .val..