auth 버튼을 누르면 단순히 alert() 만 띄워주게 됩니다.

실질적으로 URL을 보면 val라는 인자가 추가 되어있는데 해당 값을 2로 넘겨주면 성공하는 문제입니다.



소스를 보면 val=2는 없다 하고, union을 사용하라는 말이 있습니다.

union sql injection을 이용해 문제를 해결하면 됩니다.



Injection Pointer는 select문입니다. 

$go 변수에 알맞은 union select를 입력하면 됩니다.


rand 함수로 괄호의 개수만 다른 Query가 있지만 여러 번 반복하면 되니 하나의 Query에 집중합니다.



결국 Union SQL Injection을 하여 data[0]에 2가 오면 성공합니다.



우선 다른 숫자나 필터링된 문자열을 입력하면 Access Denied!가 나오게 되니 피해서 해결해야 합니다.



select lv from lv1 where lv=($go)

여기서 각 해결해야 할 조건에 해답은 아래와 같습니다.

  ① $go 변수가 괄호로 묶여있다.

   단순히 ()로 다시 묶어주면 됩니다.

   Ex) lv=(1) and (1=1)

  ② 공백을 사용할 수 없다.

   괄호는 공백과 유사한 역할을 합니다.

   Ex) lv=(1)and(1=1)

  ③ 2를 사용할 수 없다.

   수식을 사용할 수 있습니다.

   Ex) lv=(1)and(1=2-1)



select lv from lv1 where lv=(3)union(select(3-1)) 로 완성 시키면 됩니다.

하지만 서버에 문제로 인해 문제가 해결이 안되네요....


'WarGame > webhacking.kr' 카테고리의 다른 글

[webhacking.kr] prob 59  (0) 2018.12.20
[webhacking.kr] prob 49  (0) 2018.12.19
[webhacking.kr] prob 3  (0) 2018.12.19
[webhacking.kr] prob 36  (0) 2018.12.19
[webhacking.kr] prob 39  (0) 2018.12.19

JOIN을 해서 가입 후 LOGIN을 하는데 lv 값이 'admin'이여야 합니다.



JOIN에 대한 소스를 확인해보면 id, phone에서 다양한 필터링을 하고 있고,

insert문에 'guest'가 하드코딩 되어있어 'admin'으로 바꿔주는 과정이 필요합니다.



간단하게 test/1 로 가입을 해봤는데 lv이 'guest'로 나와있는 것을 보면 insert문에 마지막 부분은 lv칼럼인 것이 확실해 졌습니다.




처음에 id부분에 별다른 필터링이 없기에 해당 부분을 공략했습니다.

insert into c59 values('hi',1,0x61646d696e)--',1,'guest')

하지만 해당 값은 싱글쿼터가 서버에서 막혀있는지 실행되지 않았습니다.



싱글쿼터를 사용하지 않고 해결을 해야 할 것으로 보이는데 phone부분에 reverse() 함수를 이용해서 해결할 수 있습니다.

insert into c59 values('nimda',1,reverse(id))--,'guest') 이와 같이 reverse()로 필터링 되어있는 admin의 값을 넣어줄 수 있습니다.


하지만 주석이 안되는지 실패하기에 insert문의 특징을 이용해서 해결했습니다.

insert into c59 values('nimda',1,reverse(id)),(1,1,'guest') 정확히 19글자로 20자리의 필터링에 걸리지 않습니다.






[LOGIN SQL문]



LOGIN부분에 바로 INJECTION이 가능하나 확인해 봤는데 되지 않았습니다.

tset/1, test/123 을 만들어 놓고 실험해봤습니다.




phone 값을 123aa로 입력해보니 올바른 값으로 인식하고 있습니다.



그렇다면 phone값을 1a23aa로 입력해봤는데 이 값도 올바른 값이라고 인식하고 있습니다.

여기서 생각해볼 수 있는 내용은 phone 값 중 문자가 나오는 순간 그 뒤에 값들을 모두 무시한다는 것입니다.

만약 서버쪽에서 설정되어 있다면 해당 부분은 injection pointer로 사용할 수 없습니다.



id부분에는 싱글쿼터를 반드시 사용해야 하는데 해당 기능이 서버에서 막혀있으면 injection pointer로 사용할 수 없습니다.



'WarGame > webhacking.kr' 카테고리의 다른 글

[webhacking.kr] prob 7  (0) 2018.12.21
[webhacking.kr] prob 49  (0) 2018.12.19
[webhacking.kr] prob 3  (0) 2018.12.19
[webhacking.kr] prob 36  (0) 2018.12.19
[webhacking.kr] prob 39  (0) 2018.12.19

값을 1을 입력할 때는 zzibong가 나오고 다른 값을 입력하면 아무것도 나오지 않습니다.



① union select 필터링

② order by 필터링

③ limit 필터링

이 되어 있습니다.

해당 방법들을 제외하고 문제를 해결해야 합니다.




우선 lv 값을 모르기에 새로운 조건으로 검색하기 위해서 or를 대신한 || 를 사용합니다.

공백과 %09을 대신해서 %0a로 대신합니다.

또한, 싱글쿼터가 막혀있어 HEX값으로 대신합니다.


그렇게 만들어지는 값인 2%0a||%0aid=0x61646d696e 를 URL에 입력하면 성공합니다.

URL이 아닌 TEXT BOX에 입력하게 되면 URL 인코딩되어 올바른 값을 전달할 수 없습니다.


'WarGame > webhacking.kr' 카테고리의 다른 글

[webhacking.kr] prob 7  (0) 2018.12.21
[webhacking.kr] prob 59  (0) 2018.12.20
[webhacking.kr] prob 3  (0) 2018.12.19
[webhacking.kr] prob 36  (0) 2018.12.19
[webhacking.kr] prob 39  (0) 2018.12.19

네모네모 로직이라는 게임이 나오게 됩니다.

해당 칸을 클릭하면 검은색으로 변하게 되고 문제를 풀면 넘어갈 수 있습니다.



성..? 



넘어가면 다음과 같은 입력 창이 나오게 되고, URL에 많은 파라미터 값들이 추가 됩니다.

   http://webhacking.kr/challenge/web/web-03/index.php?        

   _1=1&_2=0&_3=1&_4=0&_5=1&_6=0&_7=0&_8=0&_9=0&_10=0&_11=0&_12=1&_13=1&_14=1&_15=0&_16=0

   &_17=1&_18=0&_19=1&_20=0&_21=1&_22=1&_23=1&_24=1&_25=1&_answer=1010100000011100101011111




아무 값이나 입력하면 로직에 대한 값과 IP가 입력됩니다.

무슨 값을 입력해도 해당 형식을 유지하고 특별한 것이 없어 보입니다.



그래서 소스를 확인해보니 hidden type으로 로직의 답을 보내고 있었습니다.


해당 값을 변화 해봤는데 특정 상황에서 no hack이라는 문구가 나오게 됩니다.

① 문자로 시작할 때

② or, and, = 등 특정 문자 필터링


또한, 잘못된 값을 입력하게 되면 query error가 나오게 되는 것을 보면 해당 지점이 문제를 해결할 수 있는 곳 같습니다.



이런 상황이 되면 항상 참을 만들어야 할 것 같아서 or를 사용해 봤지만 no hack이 나왔고, =도 필터링이 되었습니다.

그래서 1 || 1 like 1 를 입력했더니 인증키 값이 나왔습니다.


'WarGame > webhacking.kr' 카테고리의 다른 글

[webhacking.kr] prob 59  (0) 2018.12.20
[webhacking.kr] prob 49  (0) 2018.12.19
[webhacking.kr] prob 36  (0) 2018.12.19
[webhacking.kr] prob 39  (0) 2018.12.19
[webhacking.kr] prob 53  (0) 2018.12.14

vi가 정전 되었다고 합니다.

정전은 보통 작동 중에 갑자기 전원이 나가서 발생하는 일인데

vi를 사용 중에 갑자기 꺼졌다고 생각하면 될 것 같습니다.



vi는 linux에서 사용하는 문서 편집기로 windows에 메모장과 비슷한 역할을 합니다.

하지만 vi를 사용할 때 갑작스럽게 종료가 되면 swap 파일이라는 복구 파일이 생기게 됩니다.

해당 파일을 이용해서 하던 작업을 잃지 않고 복구 할 수 있게 됩니다.


처음 문제 페이지의 파일 명은 index.php입니다.

이 파일을 vi로 사용해서 편집 중에 정전이 났다고 생각하면 .index.php.swp 라는 파일을 만들었을 것입니다.

하지만 해당 문제는 해결되지 않고, 고장 났거나 해당 파일이 지워진 것 같습니다.


'WarGame > webhacking.kr' 카테고리의 다른 글

[webhacking.kr] prob 49  (0) 2018.12.19
[webhacking.kr] prob 3  (0) 2018.12.19
[webhacking.kr] prob 39  (0) 2018.12.19
[webhacking.kr] prob 53  (0) 2018.12.14
[webhacking.kr] prob 52  (0) 2018.12.14



id부분에 '(싱글쿼터)가 한 개 부족해서 오류가 납니다.

하지만 str_replace()를 통해서 싱글쿼터가 입력되면 두 개로 증가하고, \도 지워지기 때문에 Query를 완성할 수 없습니다.



값을 입력하면 다음과 같은 Error 메시지가 나오게 됩니다.



쿼리를 올바르게 완성할 수 있다면 해결할 수 있는 문제입니다.

중간에 보면 substr($_POST[id],0,15)는 문자열을 15개까지만 받게 만들고 그 이상은 버리게 됩니다.

그렇다면 마지막 15번째 문자가 '(싱글쿼터)가 되면 15,16번째가 ''로 새로 생긴 '(싱글쿼터)는 사라지게 됩니다.


DB에서 문자열을 비교할 때 특정한 상황이 있습니다. 

'a' = 'a '를 입력하면 False가 나와야 하는데 True가 나오게 됩니다.

비교하는 값의 길이가 다르면 padding값으로 공백을 추가한다는 것입니다.


그렇기 때문에 admin         '를 입력해서 문제를 해결할 수 있습니다.



[참고]


MySQL에서 'a' = 'a '가 true로 평가된다?http://woowabros.github.io/study/2018/02/26/mysql-char-comparison.html

'WarGame > webhacking.kr' 카테고리의 다른 글

[webhacking.kr] prob 3  (0) 2018.12.19
[webhacking.kr] prob 36  (0) 2018.12.19
[webhacking.kr] prob 53  (0) 2018.12.14
[webhacking.kr] prob 52  (0) 2018.12.14
[webhacking.kr] prob 25  (0) 2018.12.13

$hidden_table의 값을 알아내는 문제입니다.

하지만 다양한 문자들이 필터링 되고 있어 쉽지 않았습니다.



우선 val값에 1을 넣어보니 test라는 값이 나오게 됩니다.

2,3,4 차례대로 넣어보면 guest,admin,zombie가 나오게 됩니다.



어떻게 해결할까 찾아보다 mysql에 procedure analyse() 라는 함수가 있었습니다.

해당 함수는 현재 실행 중인 칼럼에 대한 정보를 알려주는 역할을 합니다.

즉, $hidden_table의 정보를 알려준다는 말입니다.


그렇게 ?val=1 procedure analyse()를 입력하면 다음과 같이 테이블 명을 알 수 있게 됩니다.



[참고]


SQL Injection(MySQL) - procedure analyze(): http://hyunmini.tistory.com/46


'WarGame > webhacking.kr' 카테고리의 다른 글

[webhacking.kr] prob 36  (0) 2018.12.19
[webhacking.kr] prob 39  (0) 2018.12.19
[webhacking.kr] prob 52  (0) 2018.12.14
[webhacking.kr] prob 25  (0) 2018.12.13
[webhacking.kr] prob 24  (0) 2018.12.13

HEADER INJECTION은 개행 문자를 이용해 HTTP Header 값을 조작하는 행위입니다.

Header는 개행 문자로 그 값을 구분하게 되는데 임의로 %0d%0a를 입력해 새로운 값을 넣을 수 있습니다.


그 예로 Set-Cookie: id=btr95 와 같이 쿠키 값도 입력할 수 있습니다.



우선 header가 전송되는 것을 확인해 봅니다.

id=btr95가 GET 방식으로 전송되는 것을 확인 할 수 있고.

Response부분에도 해당 값이 전송된 것을 확인할 수 있습니다.



하지만 실제 공격 코드인 %0d%0aSet-Cookie:%20id=btr95 를 입력해보면 Response에 아무런 값도 나오지 않게 됩니다.




옳은 값인데 왜 안되나 싶어 찾아보니...

문제에서 clear: btr95 를 주어줬고 해당 값으로 전송해야 했습니다..


?id=btr95%0d%0aclear:%20btr95 로 입력하게 되면 성공하게 됩니다.

'WarGame > webhacking.kr' 카테고리의 다른 글

[webhacking.kr] prob 39  (0) 2018.12.19
[webhacking.kr] prob 53  (0) 2018.12.14
[webhacking.kr] prob 25  (0) 2018.12.13
[webhacking.kr] prob 24  (0) 2018.12.13
[webhacking.kr] prob 23  (0) 2018.12.13

http://webhacking.kr/challenge/bonus/bonus-5/?file=hello

첫 페이지와 URL입니다. hello.txt의 내용이 출력 된 것 같습니다.

password.php를 불러올 수 있다면 해결되는 문제입니다.


하지만 ?file=password.php를 입력해도 hello world만 나오게 됩니다.

예상해보면 문자열 뒤에 자동으로 .txt가 붙게 되고, 올바른 값이 아니면 hello world만 출력 시키는 것 같습니다.



그렇다면 뒤에 어떤 값이 오던 의미 없는 값으로 만들어야 합니다.

모든 문자열은 맨 마지막에 문자열의 끝을 알려주는 %00(NULL)이 있습니다.

%00이 나오는 순간 문자열의 끝이라고 판단하고 뒤에 문자열들은 신경 쓰지 않게 됩니다.


그럼 password.php%00 로 입력하게 되면 뒤에 무슨 값이 붙든 무시하게 되니 성공하게 됩니다.


'WarGame > webhacking.kr' 카테고리의 다른 글

[webhacking.kr] prob 53  (0) 2018.12.14
[webhacking.kr] prob 52  (0) 2018.12.14
[webhacking.kr] prob 24  (0) 2018.12.13
[webhacking.kr] prob 23  (0) 2018.12.13
[webhacking.kr] prob 18  (0) 2018.12.13



extract()는 배열 속의 키값을 변수화 시켜주는 역할을 합니다.

$ip의 값이 127.0.0.1이 되어야 하는데 str_replace에서 필터링을 하고 있습니다.


str_replace를 우회하는 방법은 abc를 필터링 한다면 ababcc 이렇게 만들면 안에 있는 abc값만 지워지고 나머지 값들이 abc를 만들게 됩니다.

127.0.0.1 → 112277..00..00..1 로 변경해서 사용하면 됩니다.



$_COOKIE[REMOTE_ADDR]을 가져오는 것을 보고 쿠키 값을 만들어주면 됩니다.




'WarGame > webhacking.kr' 카테고리의 다른 글

[webhacking.kr] prob 52  (0) 2018.12.14
[webhacking.kr] prob 25  (0) 2018.12.13
[webhacking.kr] prob 23  (0) 2018.12.13
[webhacking.kr] prob 18  (0) 2018.12.13
[webhacking.kr] prob 58  (0) 2018.12.07

+ Recent posts