반응형


반가운 SQL Injection 문제이다.

index.phps가 주어지니 한번 보자.



쿼리 결과가 admin이면 문제가 풀린다.

그리고 사용하지 못하는 문자들을 알 수 있다.


띄어쓰기를 우회하면 될 것으로 모여 간단하게 %0a를 통해 풀었다,

?no=0%0aor%0ano=2


반응형

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

[webhacking.kr] 19번 문제  (0) 2018.03.17
[webhacking.kr] 20번 문제  (0) 2018.03.09
[webhacking.kr] 17번 문제  (0) 2018.03.08
[webhacking.kr] 16번 문제  (0) 2018.03.08
[webhacking.kr] 15번 문제  (0) 2018.03.07
블로그 이미지

rootable

,
반응형


문제를 들어가니 빈칸과 check 버튼이 있다.

소스코드를 보자.



스크립트에 이상한 문자들이 보인다.

이는 간단하게 개발자 도구의 console을 이용하면 된다.



check 버튼을 누르면 sub() 함수가 실행되는데 이는 unlock과 입력한 값과 동일하면 문제가 풀린다.

(답은 unlock/10임을 코드를 통해서도 알 수 있다 )



반응형

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

[webhacking.kr] 20번 문제  (0) 2018.03.09
[webhacking.kr] 18번 문제  (0) 2018.03.08
[webhacking.kr] 16번 문제  (0) 2018.03.08
[webhacking.kr] 15번 문제  (0) 2018.03.07
[webhacking.kr] 14번 문제  (0) 2018.03.07
블로그 이미지

rootable

,
반응형


접속하면 위와 같이 별 모양들이 뜬다.

소스코드를 보자


소스코드를 보면 key를 누를 때마다 mv함수를 실행시킨다.

Chrome에서는 잘 안되니 IE로 가자.

FPS 게임처럼 WASD로 노란색 별이 움직인다.


mv함수는 노란색 큰 별을 이동시키는 것을 알았고,

kk함수를 보면 rndc라고 해서 랜덤한 값에 큰 값을 곱하는데 이는 새로 생기는 작은 별의 색을 지정하기 위해 랜덤한 값을 설정하는 것이다.


mv함수의 첫번째에서 kk 함수를 호출하는데

우리가 WASD로 큰 노란별을 움직일 떄마다 이에 상대적으로 하여 작은 별이 생긴다.


문제는 답이 무엇일까라는 점이다.

상대적인 두 별이 같은 지점에 오면 문제가 풀릴까?


음... 좀 더 자세히 보니 if(cd==124) location.href=String.fromCharCode(cd); 라는 코드가 있었다.


event.keyCode가 뭔지 보니 | 였고 그걸 클릭해보니 정답이 떴다.


반응형

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

[webhacking.kr] 18번 문제  (0) 2018.03.08
[webhacking.kr] 17번 문제  (0) 2018.03.08
[webhacking.kr] 15번 문제  (0) 2018.03.07
[webhacking.kr] 14번 문제  (0) 2018.03.07
[webhacking.kr] 13번 문제  (0) 2018.03.07
블로그 이미지

rootable

,
반응형

문제를 클릭하면 Access_Denied 창이 뜬다.

확인을 누르면 Password is off_ 어쩌구가 뜬다.


버프를 잡으면 응답 내에 답이 있다.


이야 쉽다 키키키키

반응형

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

[webhacking.kr] 17번 문제  (0) 2018.03.08
[webhacking.kr] 16번 문제  (0) 2018.03.08
[webhacking.kr] 14번 문제  (0) 2018.03.07
[webhacking.kr] 13번 문제  (0) 2018.03.07
[webhacking.kr] 8번 문제  (0) 2018.03.05
블로그 이미지

rootable

,
반응형

접속하면 위와 같은 빈칸과 check 버튼이 있다.

소스코드를 보자.



소스 코드 내에 스크립트가 있다.

URL 내에 .kr의 위치를 ul에 넣고 이에 30을 곱한 값이 input의 값과 같으면 문제가 풀린다.

이는 개발자도구의 console을 이용하면 쉽게 풀 수 있다.



510을 넣으면 아래와 같은 alert 창이 뜬다.


해당 답을 Auth에 넣으면 클리어~

반응형

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

[webhacking.kr] 16번 문제  (0) 2018.03.08
[webhacking.kr] 15번 문제  (0) 2018.03.07
[webhacking.kr] 13번 문제  (0) 2018.03.07
[webhacking.kr] 8번 문제  (0) 2018.03.05
[webhacking.kr] 6번 문제  (0) 2018.03.05
블로그 이미지

rootable

,
반응형

에이.. 작성하다가 다 날려버렸네 ㅠㅠ 다시쓰자


접근하면 위와 같이 뜬다.

123을 넣고 제출을 누르면 result로 0이 뜬다.

1을 넣었을 떄는 result가 1로 뜨는 것으로 보아 blind sql injection을 하면 될 듯 하다.


일단 공백을 넣었을 떄 no hack이 출력되어 이를 우회하기 위해

/**/, %09을 넣었을 때 no hack이 떴지만 %0a를 넣었을 때 우회가 되었다.


* 공백 우회

 - 테스트 쿼리 : ?no=1(이 부분에 공백 문자)test 

 - /**/, %09, %0a, %0b, %0c, %0d, ( )


그 후 여러가지 시도 결과 or이 no hack에 걸리지 않았다.

?no=1%0aor%0a1 를 한 결과 result도 1이 잘 떨어지는 것을 볼 수 있다.


HINT를 보면 prob13password 테이블에서 flag를 select하라는 것을 보아 if문을 통해 blind를 시도하였다.

다행히 if문은 막혀있지 않았다.


일단 flag를 찾기 전에 쿼리를 확인하기 위해 select하는 컬럼 부분에 1을 넣고 시도해보았더니 no hack이 떴다.

?no=1%0aor%0aif((select%0a1%0afrom%0aprob13password)=1,1,1)

확인 결과 =가 필터링되는 것을 알 수 있었다.

그래서 이를 우회하기 위해 난 IN( )을 사용하였다.

( 참고 : 

http://www.mysqlkorea.com/sub.html?mcode=manual&scode=01&m_no=21700&cat1=12&cat2=351&cat3=363&lang=k )


그 결과 no hack이 뜨지는 않는데 result에 1이 출력되지 않는다.

?no=1%0aor%0aif((select%0a1%0afrom%0aprob13password)%0aIN(1),1,1)

local에 깔린 mysql에서 테스트해본 결과 서브쿼리 결과가 1개의 row를 넘는다는 에러를 출력한다는 것을 볼 수 있었다.


따라서 이를 해결하기 위해 limit를 사용하려 했지만 no hack이 떴다.

이를 우회하기 위해 난 max( )를 사용하였다.

* limit 우회

- limit를 우회하기 위해서는 max(column), min(column), group_concat(column)을 사용할 수 있다.

- max는 해당 컬럼의 최대값, min은 해당 컬럼의 최솟값, group_concat은 해당 컬럼의 값을 하나의 row로 출력시켜주는 함수이다.


?no=0%0aor%0aif(ord(substr((select%0amax(flag)%0afrom%0aprob13password),1,1))%0ain%0a(1),1,1)

쿼리를 날린 결과 1이 잘 뜨는 것을 확인하였고 false의 경우 0이 뜨게 한 뒤 Intruder 돌린 결과 첫번째 문자가 f인 것을 확인하였다.


?no=0%0aor%0aif(ord(substr((select%0amax(flag)%0afrom%0aprob13password),1,1))%0ain%0a(1),1,0)

쿼리를 통해 문자열의 길이가 4인 것을 확인하였고 길이가 얼마되지 않아 Intruder 기능을 이용하여 flag 값을 찾았다


그런데... flag 값이 flag...???

혹시나 하여 flag를 넣고 Auth를 넣었지만 반응이 없었다.


substr(group_concat(flag),6,1) 방식으로 우회하려했지만 group이 필터걸림..

혹시나 하여 정말 데이터가 한개 뿐이라면 삽질하는 것이므로 row수를 확인해보았다.

?no=0%0aor%0aif((select%0acount(flag)%0afrom%0aprob13password)%0ain%0a(2),1,0)

그 결과 위의 쿼리대로 데이터가 2개 존재함을 알 수 있었다.


그럼 max로 했을 때 flag가 나오니까.. min으로 하면 나머지 하나가 나와야할꺼같은데... 왜 안나오는거야 ㅠㅠ

와우........ 설마 하고 그냥 length를 늘려가며 테스트했더니 20글자라는 것을 확인하였다.


?no=0%0aor%0aif(length((select%0amin(flag)%0afrom%0aprob13password))%0ain%0a(20),1,0)


Intruder로 돌리기엔 오래걸릴꺼같으니 efficienct blind sql injection으로 가자.



결과로 나온 값을 넣고 auth를 누르면 클리어 ~



반응형

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

[webhacking.kr] 15번 문제  (0) 2018.03.07
[webhacking.kr] 14번 문제  (0) 2018.03.07
[webhacking.kr] 8번 문제  (0) 2018.03.05
[webhacking.kr] 6번 문제  (0) 2018.03.05
[webhacking.kr] 5번 문제  (0) 2018.03.05
블로그 이미지

rootable

,
반응형


문제에 접근하면 위와 같은 문자열들만 나타난다.

소스코드를 보니 index.phps가 있는것 같다.

접근해보자


소스코드가 있는데 간단히 정리하면 

$q=@mysql_query("select id from lv0 where agent='$_SERVER[HTTP_USER_AGENT]'");

의 결과 첫번째 행의 id가 admin이면 문제가 풀리고 만약 쿼리 결과가 존재하지 않으면 ('User_Agent 입력값', '현재 내 IP', 'guest' ) 로 lv0 테이블에 삽입시킨다.


여기서 중요한 점은 내가 USER_AGENT에 뭐라고 입력하던지 삽입되는 id는 guest로 지정되어있다는 점이다.


문제를 풀기위해서는 id가 admin이어야하므로 이 부분을 변경시켜줘야 한다는 것을 알 수 있다.


아래는 입력 쿼리이다.


$q=@mysql_query("insert into lv0(agent,ip,id) values('$agent','$ip','guest')") or die("query error");


내가 입력한 것이 '$agent' 부분에 들어가므로 이 부분부터 시작하여 'guest' 부분을 침범하면 된다.

따라서 나는 User-Agent 부분에 admin12','1','admin')# 으로 입력해주었다.



그 결과 실행이 잘 되었고 where 절에 agent로 되어있으므로 User-Agent에 admin12를 넣으면~?


클리어 ~

반응형

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

[webhacking.kr] 14번 문제  (0) 2018.03.07
[webhacking.kr] 13번 문제  (0) 2018.03.07
[webhacking.kr] 6번 문제  (0) 2018.03.05
[webhacking.kr] 5번 문제  (0) 2018.03.05
[webhacking.kr] 4번 문제  (0) 2018.03.05
블로그 이미지

rootable

,
반응형


문제에 접근하면 위와 같이 뜬다.

phps는 php의 소스코드를 볼 수 있는 파일이므로 해당 파일에 접근해본다.


접근하면 소스코드가 쭉 있는데 분석을 해보면 만약 cookie내 user라는 변수가 없으면 id과 pw에 guest와 123qwe를 넣어두고 20번 base64로 인코딩을 한다.

그 후 1부터 8까지를 특수문자로 변경한 뒤 그 값을 user와 password라는 cookie로 저장한다.


그 후 특수문자를 1부터 8까지 변경시키고 base64로 20번 디코딩한 결과가 id와 pw가 admin이면 문제가 풀린다.


이는 간단하게 코딩을 통해 문제를 풀 수 있을 것으로 보인다.

아래는 내가 문제 해결을 위해 python으로 코딩한 것이다.



실행 결과로 나온 값을 user와 password 쿠키의 값으로 저장하고 새로고침하면 문제가 풀린다 ~



반응형

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

[webhacking.kr] 13번 문제  (0) 2018.03.07
[webhacking.kr] 8번 문제  (0) 2018.03.05
[webhacking.kr] 5번 문제  (0) 2018.03.05
[webhacking.kr] 4번 문제  (0) 2018.03.05
[webhacking.kr] 3번 문제  (0) 2018.03.05
블로그 이미지

rootable

,