응 안녕~

소스를 보면 index.phps로 가보라고 한다.

가보면 get으로 받은 answer가 hidden_table과 같으면 문제가 풀리고

val변수는 필터링이 된다.

그렇지만 val변수는 select test1 from $hidden_table where test2=$GET[val]의 쿼리문이 완성 되면

answer값을 집어 넣을 수 있는 칸이 나온다고 되어 있다.

우선 val=1을 집어넣으면 test

2값은 guest

3값은 admin

4값은 zombie가 나온다!

하지만 우리는 hidden_table명을 집어 넣어줘야 하지만

알지 못하기 때문에 

다시 쿼리문을 보자면

"select test1 from $hidden_table where test2=$GET[val]"에서

hidden_table에서 우리는 값을 받아온다.

그리고 echo는 f[0]이다.

그렇지만 select가 막혀있고 union도 막혀있다.

그래서 찾아보던 중

쿼리문 끝에 procedure analyse()를 입력하면

테이블의 정보들과 다양한 컬럼 정보가 출력된다.

그리고 그중 제일 처음은 file_name, 즉 테이블의 이름을 볼 수 있다.




예를들면 채소의 테이블을 뽑아내면 컬럼명은 물론 데이터베이스 명과 테이블 명또한 볼 수 있다.

그래서 ?val=3 procedure analyse()를 입력하면

나오는 문장에서 가운데가 테이블 명이다.

그래서 테이블 명을 제출하면!

53번도 클리어!




'WebHacking > Webhacking.kr' 카테고리의 다른 글

Webhacking.kr 43번  (0) 2018.01.25
Webhacking.kr 49번  (0) 2018.01.19
Webhacking.kr 35번  (0) 2018.01.18
Webhacking.kr 48번  (0) 2018.01.17
Webhacking.kr 56번  (0) 2018.01.17

첫 화면은 전화번호를 입력하는 칸과

index.phps가 있다.

아마 HellSonic이 문제를 만들었나보다.

소스를 보니 phone번호를 받으면

eregi에서 한번 필터링 한 후에

session id,ip,phone으로 새로운 컬럼을 추가하고

id=admin이고 ip가 내 아이피인 컬럼이 있을 때 

성공하는 소스이다.

먼저 eregi에서 걸러지는 =을 넣으니

no hack가 뜬다.

그리고 무작위 숫자를 넣어보니 Done이라고 성공했다는 메시지만 뜨시

다른 반응은 없었다.


먼저 burp suit으로 intercept한 패킷을 보면

우리는 input으로 phone만 조작할 수 있다.

그렇기 때문에 우리는 id가 admin인 컬럼을 만들어 주어야 하고

그렇기 때문에 phone의 내용에 id는 admin인 새로운 value값을 입력해 줘야 한다.

하지만 magic_quotes_gpc기능 때문인지

query error가 떠 버린다.

그래서 우회하기 위해


char로 넣어주면

35번도 클리어!!


'WebHacking > Webhacking.kr' 카테고리의 다른 글

Webhacking.kr 49번  (0) 2018.01.19
Webhacking.kr 53번  (0) 2018.01.18
Webhacking.kr 48번  (0) 2018.01.17
Webhacking.kr 56번  (0) 2018.01.17
Webhacking.kr 60번  (0) 2018.01.16

첫화면은 여러 글들이 올라와있다.

우선 memo에 아무 말이나 적어서

올리니 내 글과 delete키가 있다.

소스를 보면 누른 시간이 기록되는 것과 나머지는 별로 중요한 것이 없다.

먼저 intercept해 보니

memo와 filename을 보낸다.

그래서 파일명을 1.PNG로 보냈더니

파일명은 3글자를 넘어 갈 수 없다.



그래서 두글자로 보내니 내 이름의 게시물이 만들어 졌다.

그리고 upload file을 들어가 보니

null밖에 없는 것을 발견할 수 있다.

그리고 지울때 mode=del&time=~라고 적혀 있는 문자열을 발견할 수 있다.


이것이 리눅스의 명령어를 사용한다면

파일을 지우기 위해서는 rm을 썼을 것 이다.

그렇다면 리눅스 명령어는 ; 또는 &&으로 명령어를 끝내고 바로 이어서 다른 명령어를 칠 수 있다는 사실을 통해

우리는 파일명을; 을 하고 뒤에 명령어를 쓴다면

delete할 때에 명령어가 실행 되어질 것 같다는 가정을 할 수 있다.

그래서 filename을 ;ls로 바꾸어 upload 시켜주고

delete시켜주면

우리는 새로운 문자열을 볼 수 있다.

그중 수상한 문자열이 있다!

이 문자열을 주소에 붙여서 넣어주면

48번도 클리어!!!


'WebHacking > Webhacking.kr' 카테고리의 다른 글

Webhacking.kr 53번  (0) 2018.01.18
Webhacking.kr 35번  (0) 2018.01.18
Webhacking.kr 56번  (0) 2018.01.17
Webhacking.kr 60번  (0) 2018.01.16
Webhacking.kr 40번  (0) 2018.01.16

첫화면은 이러하다.

먼저 readme를 눌러보니 

이런 access denied이 나왔다.

그리고 hi~를 눌러보니

이렇게 나온다.

소스를 먼저 보자.

일단 Thanks to는 만든 사람인것 같았다.

우선 input은 name이 search로 post방식으로

전송한다.

search에 먼저 hi~를 치니

게스트만 나왔다.

그래서 h를 치면 둘다

i를 치면 둘다

나온다. 

그래서 무작위로 처넣다 보니

p는 admin만

k도 admin만 나온다.




그리고 숫자 0은 둘다 나온다

.도 admin만 나온다.

그래서 파이썬 소스를 짜서 돌려보니

admin가 나오는 것은 이것들

guest가 나오는 문자는 이것들

둘다 나오는 문자는 요렇게 된다.


이때 _를 마구 넣다보면 

_ 3개 까지는 둘다 나오는데

4개부터는 admin만 나오고

7개 부터는 아무 것도 안나온다.

이것은 아마 6자리가 admin의 문자이고

3개는 guest일거라 추측 할 수 있다.

그래서 ()_____

즉 괄호 안에 우리가 찾은 admin만의 문자중 하나를 넣고 뒤를 _ 5개를 해서

찾다보면 제일 첫 글자를 찾을수 있고

k()____으로 괄호안에 다시 admin만의 문자를 대입해서

해 나가다 보면

파이썬으로 짜서 돌려보니

요런 주소같은 것이 나온다.

이것을 주소에 넣어서 돌리면


56번도 클리어!!!


'WebHacking > Webhacking.kr' 카테고리의 다른 글

Webhacking.kr 35번  (0) 2018.01.18
Webhacking.kr 48번  (0) 2018.01.17
Webhacking.kr 60번  (0) 2018.01.16
Webhacking.kr 40번  (0) 2018.01.16
Webhacking.kr 41번  (0) 2018.01.15

첫화면은 Access Denied으로 나를 반겨준다.

소스를 보면 우선 쿠키에 숫자가 없어야 한다.

그리고 get으로 mode=auth를 받아야 하고 

그러면 화면에 Auth가 뜬다.

그리고 $f는 /readme/id.txt를 받고

그것과 id를 비교해서 id가 안에 있으면

문제가 풀린다.

그리고 id가 없으면

readme/id.txt를 만드는데

1초뒤에 없어진다....

우선 쿠키값을 알파벳만 사용해서 만들었다.

그러니 화면에 hi라고 뜬다!

mode=auth를 get방식으로 또 넣어주니

Auth~라고 뜬다.


그리고 다시 들어가보아도 변화가없다.

이것은 계속 만들었다가 1초뒤에 사라지기 때문이다.

그래서 internet explorer로 새로 쿡시로 숫자없는 쿠키를 만들고 들어가서


1초안에 두개를 돌리면


60번 클리어!!!


'WebHacking > Webhacking.kr' 카테고리의 다른 글

Webhacking.kr 48번  (0) 2018.01.17
Webhacking.kr 56번  (0) 2018.01.17
Webhacking.kr 40번  (0) 2018.01.16
Webhacking.kr 41번  (0) 2018.01.15
Webhacking.kr 51번  (0) 2018.01.15

화면이 no,id,pw로 구성되어 있다.

그냥 login을 눌렀더니 guest로 로그인이 되었다.

no를 2로 바꾸어 보니

로그인이 실패했다.

소스를 보니 처음에 적혀있던 pw는 guest였고

no,id,pw로 get방식으로 전송된다는 것을 알았다.

그래서 no=1&id=guest&pw=guest-- 을 넣었더니

뒤에 id와 pw가 달린다.

이렇게 넣어서 성공이 되는 것을 보니 쿼리문 순서가 id,pw,no인 것 같다. 그래서 no에 id를 넣어봤자 소용이 없었다.


그리고 access denied이 된다.

그리고 no=0을 넣으면 반응이 없다..

그리고 or는 안먹히는 것으로 봐서 or , and는 안먹히고 기호 &,|만 먹히는 것 같다.

요런 식으로

no=1=1또한 그냥 성공

id=guest=guest를 써서 여집합을 만들어 보려했으나 실패



substr을 써보니 이건 필터링이 안된다.

그래서 no=2||id=0x61646D696E를 넣어주면

새로운 화면이 나온다.

여기서  0x61646D696E는 admin을 hex한 것인데

admin은 안되어 넣어보았다.

그래서 length(pw)로 pw의 길이를 알아내고 난 후

import urllib.request

import re


if __name__ == "__main__":

    code = [num for num in range(33,65)]+[num for num in range(97,127)]+[num for num in range(91,97)]

    head = {'Cookie':'PHPSESSID=fd06535e7ec7b5532faa2a20b8444d6f'}

    for i in range(1,11):

        for j in code:

            req = urllib.request.Request("http://webhacking.kr/challenge/web/web-29/index.php?no=2||substr(pw,"+str(i)+",1)="+str(hex(j))+"&id=guest&pw=guest",headers=head)

            data = urllib.request.urlopen(req).read()

            data = data.decode('UTF-8')

            find = re.findall("admin",data)

            if find:

                print(i,chr(j))

파이썬으로 돌려주면 

이렇게 답이 나온다.

이때 2번째는 guest의 u와 같아서 안나온다.

40번 클리어!


'WebHacking > Webhacking.kr' 카테고리의 다른 글

Webhacking.kr 56번  (0) 2018.01.17
Webhacking.kr 60번  (0) 2018.01.16
Webhacking.kr 41번  (0) 2018.01.15
Webhacking.kr 51번  (0) 2018.01.15
Webhacking.kr 61번  (0) 2018.01.12


XSS(Cross Site Scripting)


XSS Cross Site Scripting의 약자로 웹 어플리케이션에서 자주 나타나는 취약점 중 하나로, 웹 사이트 관리자가 아닌 이가 웹 페이지에 악성 스크립트를 삽입 할 수 있는 취약점 이다. 이 취약점으로 해커가 사용자의 정보(쿠키, 세션 등)를 탈취하거나 비정상 적인 기능을 수행 할 수 있게 한다. 주로 다른 사이트와 정보를 교환하는 식으로 작동하므로 Cross Site Scripting이라는 이름을 가지게 되었다.


예를 보자.


인터넷 사이트의 게시판에 이같이 <script>alert(1)</script>라는 스크립트 문을 작성해 올렸다.


그리고 게시물을 클릭하면

1이 뜨는 것을 볼 수 있다.


이와 같이 어떠한 게시글에다가 스크립트문을 삽입해 이용자가 의도하지 않은 사이트, 아니면 다운로드 링크로 빠지게 만들수 있고 쿠키, 세션을 탈취할 수 도 있다.


이것을 막는 방법으로는, 대개 filtering하는 방법이 제일 보편적이고 확실하다.


이것들을 우회하는 방법으로는


1. 대소문자를 구분하는 함수를 이용해 보안을 해 놓았을 경우

 

공격 코드 : ex) <ScripT>alert(1)</SCRipT>

 

  

 

2. 금지어의 값을 Null 처리하는 함수를 이용해 보안을 해 놓았을 경우

 

공격 코드 : ex) <sscriptcript>alert(1)</sscriptcript>

 

  

 

 

3. HTML 태그 속성을 이용한 우회

 

특정 문자열만을 치환하는 방식의 함수가 쓰였을 때에 onmouseover 옵션을 사용하여 우회할 수 있다.

 

<?
 function XSSFilter($inputString)
 {
  $content = str_replace("<","&lt;",$content);
  $content = str_replace(">","&gt;",$content);
  return $content;
 
?>                                                                       

 

위와 같은 코드가 있다고 가정하자. 위 코드는  '<'와  '>' 문자열에 대해서 필터링을 한다.  예를들어 ?file=<script>alert(1)</script>   와 같은 형태로 공격구문을 넣었을 때 필터링과정을 거쳐    &lt;script&gt;alert(1)&lt;/script&gt;  와 같이 출력될 것이다.

 

 

공격 코드 : ex) <img scr="hello" onmouseover="alert(1)l">

 

"hello"라는 이미지 파일에 마우스를 올려 놓았을 경우 스크립트가 실행된다.

 

 

  

 

4. 문자열 분리를 통한 우회


자바 스크립트의 eval 함수를 이용하여 우회한다.

여기서 eval 함수에 대해 짚고 넘어가겠다.

 

eval() 함수의 인자는 기본적으로 문자열이다. 만약 문자열이 표현식을 나타낸다면 eval()은 표현식을 실행하지만, 인자가 있는 경우에는 문장을 반환한다.

 

예를 들어 eval("1+2") 는 3을 반환하지만, eval(new String("2+2")); 는 "2+2" 인 문자열 객체를 반환한다.

이때 변수를 선언하고 그 변수에 객체를 저장한 다음 toString()을 사용하면 이 제약을 피할 수 있다.

ex) var A = new String("1+2");

    eval(A.toString());  => 3을 반환!

 

공격 코드 : var inputString="aler" + "t(al" + "ert" + "(1));" ;

               eval(inputString);


등이 있다.



참조 사이트: http://4rgos.tistory.com/18?category=694721

:https://ko.wikipedia.org/wiki/%EC%82%AC%EC%9D%B4%ED%8A%B8_%EA%B0%84_%EC%8A%A4%ED%81%AC%EB%A6%BD%ED%8C%85

'Hacking' 카테고리의 다른 글

File Inclusion Attacks  (0) 2018.02.01
Oracle Padding Attack[실전편]  (0) 2018.01.31
Oracle Padding Attack[이론편]  (2) 2018.01.09
error based sql injection  (0) 2017.09.18

첫화면은 어떤 파일을 업로드 시켜라고 한다.

먼저 소스를 보니 

index.phps로 들어가라고 해서 들어 가 보았다.

코드가 나오는데 대충 보면 완전 난독화를 위한 코드이지 실제로는 별거 없는 소스같다.

그래서 손수 필터링을 해 보니

한글로 필요없는거 다 빼보니

파일을 올린것에서 이름을 필터링하고

대체도 해서 hidden_dir에 저장하고 그 파일에 패스워드를 쓴다.



우선은  . 을 넣어 보았더니


no 라고 나온다.


그래서

str_replace중 하나인 <를 넣어보니

hidden_dir같은 게 warning으로 나온다;

그래서 정상적으로 kkk라는 파일을 업로드 시키고 들어가보니

정답이 나온다!


41번도 클리어!!!


'WebHacking > Webhacking.kr' 카테고리의 다른 글

Webhacking.kr 60번  (0) 2018.01.16
Webhacking.kr 40번  (0) 2018.01.16
Webhacking.kr 51번  (0) 2018.01.15
Webhacking.kr 61번  (0) 2018.01.12
Webhacking.kr 46번  (0) 2018.01.12

+ Recent posts