주소창에 lv=1 대신에 2-1을 대입해보고 injection이 일어나는지 확인해본다.  



역시나 index.phps가 주석에 쓰여져 있다. 소스코드를 확인해보면 아래와 같다.



eregi()함수를 이용해서 union, from, select, or, and, ( , ) ,limit   ,  ","  , / , by, desc, asc, cash, " " , %09 를 필터링 하는데 

46번 문제와 비슷하게 lv변수는 일부러 거짓이 되게 만들고 or 문을 이용할텐데


1.    공백과 TAB: %09가 모두 필터링 되어 있지만 %0a 줄바꿈을 이용해서 공백을 만들어주고 

2.    or 은 ||을 이용해서 필터링을 피해준다. 

3.    함수를 사용하기 위해서 ( ) 괄호가 필요한데 괄호 역시 필터링 되어있다. 그렇지만 0x 필터링은 안되어있기 때문에 id변수에 헥스값을 넣어주면 

문자열로 넘어간다. 


이런 방법으로 49번 문제를 클리어하면 된다.






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

Webhacking.kr 46번  (0) 2018.05.04
Webhacking.kr 11번  (0) 2018.05.03
Webhackin.kr 43번  (0) 2018.04.30
Webhacking.kr 5번  (0) 2018.04.30
Webhacking.kr 10번  (0) 2018.04.27

46번 300점짜리 sql injection문제이다. 소스코드를 살펴보면 역시 주석으로 index.phps 힌트를 주고있다.




str_replace()함수를 이용해서 공백과 "/", "*", "%" 를 모두 ""로 대체시키고

eregi()함수를 이용해서 union, select, from, challenge, 0x, limit, cash 를 필터링한다.

이 과정을 우회하면 원하는 쿼리문을 날릴 수 있다. 



처음에 나는 %가 필터링되길래 %09 %0d %0a 와 같은 공백 대체 문자들이 모두 필터링 된다고 착각했다. 하지만

level값을 넣는 <input mane=lv value=>에 넣었을때 필터링이 되지 주소창에 직접적으로 넣으면 %0a의 경우 줄 바꿈으로 넘어가기

때문에 상관이 없다.



먼저 lv값을 일부러 0을 넣어 거짓을 넣어주고 %0aor%0a를 이용해 or문 뒤에 length(id)를 이용해서 id가 5글자인 row가 

admin 이외에 여러개 있는것으로 추정된다.





직접적으로 id='admin'을 넣어줬지만 magic_quotes_gpc에 걸려 쿼트 앞에 \이 붙은걸로 보인다.




char(97,100,109,105,110)을 이용해서 문자열로 들어가게끔 해주면 된다.



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

Webhacking.kr 49번  (0) 2018.05.04
Webhacking.kr 11번  (0) 2018.05.03
Webhackin.kr 43번  (0) 2018.04.30
Webhacking.kr 5번  (0) 2018.04.30
Webhacking.kr 10번  (0) 2018.04.27


11번 문제 정규표현식을 이해하고 있는가? 를 물어보는 문제이다. 300점은 약간 후한 점수인듯 하다.

if 조건문이 참이면 password를 echo한다. 조건은 preg_match("/[1-3][a-f]{5}_.*211.206.236.4.*\tp\ta\ts\ts/",$_GET[val])

preg_match()는 패턴에 주어진 정규 표현식에 일치하는지 검색하는기능을 한다.


이제 쓰인 정규표현식 하나하나 알아보자. 


1. 문자클래스 [ ]

문자클래스로 만들어진 정규식은 "[ ] 사이의 문자들과 매치"라는 의미를 갖는다.

즉, [abc]라는 표현식의 의미는 "a, b, c 중 한 개의 문자와 매치"를 뜻한다.

[ ] 안의 두 문자 사이에 하이픈(-)을 사용하게 되면 두 문자 사이의 범위를 의미한다. ex) [a-zA-Z] : 알파벳 모두, [0-9] : 숫자 모두

문자 클래스 내에 (^)와 같은 문자가 사용 되면 not이라는 의미를 갖게 되어 [^0-9]이라 하면 숫자가 아닌 문자만 매치라는 뜻이다.


2. {m, n} 반복

{m, n}이라 하면 바로앞 문자의 반복횟수가 m이상 n이하인 문자를 매치한다.

{5}이런 식으로 써준다면 ex) ca{5}t = caaaaat 을 나타내는 것이다.


3. Dot(.)

정규 표현식의 Dot(.)은 줄바꿈 문자인 \n을 제외한 모든 문자와 매치된다.

a.b = "a + 모든문자 + b" 라고 할 수 있다.


4. 반복(*)

ca*t은 a가 0개부터 무한개까지의 문자열을 모두 매치한다

정규식 ca*t 문자열 ct

 "a"가 0번 반복되어 매치

정규식 ca*t 문자열 caat

"a"가 2번(0번 이상) 반복되어 매치


5. \t

\t는 탭공백을 뜻하고 url인코딩으로 표현하면 %09이다 


이 모든 규칙들로 

"/[1-3][a-f]{5}_.*211.206.236.4.*\tp\ta\ts\ts/"

을 풀고 GET방식으로 val변수에 올바른 값을 넣어준다면 클리어




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

Webhacking.kr 49번  (0) 2018.05.04
Webhacking.kr 46번  (0) 2018.05.04
Webhackin.kr 43번  (0) 2018.04.30
Webhacking.kr 5번  (0) 2018.04.30
Webhacking.kr 10번  (0) 2018.04.27

file type

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

Webhacking.kr 46번  (0) 2018.05.04
Webhacking.kr 11번  (0) 2018.05.03
Webhacking.kr 5번  (0) 2018.04.30
Webhacking.kr 10번  (0) 2018.04.27
Webhacking.kr 12번  (0) 2018.04.27





l='a';ll='b';lll='c';llll='d';lllll='e';llllll='f';lllllll='g';llllllll='h';lllllllll='i';llllllllll='j';lllllllllll='k';llllllllllll='l';lllllllllllll='m';llllllllllllll='n';lllllllllllllll='o';llllllllllllllll='p';lllllllllllllllll='q';llllllllllllllllll='r';lllllllllllllllllll='s';llllllllllllllllllll='t';lllllllllllllllllllll='u';llllllllllllllllllllll='v';lllllllllllllllllllllll='w';llllllllllllllllllllllll='x';lllllllllllllllllllllllll='y';llllllllllllllllllllllllll='z';I='1';II='2';III='3';IIII='4';IIIII='5';IIIIII='6';IIIIIII='7';IIIIIIII='8';IIIIIIIII='9';IIIIIIIIII='0';li='.';ii='<';iii='>';

lIllIllIllIllIllIllIllIllIllIl=lllllllllllllll+llllllllllll+llll+llllllllllllllllllllllllll+lllllllllllllll+lllllllllllll+ll+lllllllll+lllll; //oldzombie

lIIIIIIIIIIIIIIIIIIl=llll+lllllllllllllll+lll+lllllllllllllllllllll+lllllllllllll+lllll+llllllllllllll+llllllllllllllllllll+li+lll+lllllllllllllll+lllllllllllllll+lllllllllll+lllllllll+lllll; //document.cookie

if(eval(document.cookie).indexOf(oldzombie)==-1) {bye;}

if(eval(document.URL).indexOf(mode=1)==-1) {alert('access_denied');history.go(-1);}

else{

document.write('<font size=2 color=white>Join</font><p>');

document.write('.<p>.<p>.<p>.<p>.<p>');

document.write('<form method=post action=join.php>');

document.write('<table border=1><tr><td><font color=gray>id</font></td><td><input type=text name=id maxlength=5></td></tr>');

document.write('<tr><td><font color=gray>pass</font></td><td><input type=text name=pw maxlength=10></td></tr>');

document.write('<tr align=center><td colspan=2><input type=submit></td></tr></form></table>');

}




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

Webhacking.kr 11번  (0) 2018.05.03
Webhackin.kr 43번  (0) 2018.04.30
Webhacking.kr 10번  (0) 2018.04.27
Webhacking.kr 12번  (0) 2018.04.27
Webhacking.kr 61번  (0) 2018.04.27




자바스크립트 챌린지다.

 hackme 객체에 style에 posLeft 값이 800이면 조건문이 성립하고 url에 ?go=800 을 넘겨 문제를 clear할 수 있다.

코드를 간단히 설명하자면 onclick 클릭을하면 postLeft가 +1씩 증가하고 



커서를 올리면 yOu로 표현된다. 




posLeft가 799에서 800이 되면서 페이지가 넘어가기 때문에 콘솔을 이용해서 799값을 넣어주고 클릭을 한번 함으로써  클리어 할 수 있다.

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

Webhackin.kr 43번  (0) 2018.04.30
Webhacking.kr 5번  (0) 2018.04.30
Webhacking.kr 12번  (0) 2018.04.27
Webhacking.kr 61번  (0) 2018.04.27
Webhacking.kr 59번  (0) 2018.04.26



WorkTimeFun 변수에 string을 담고





eval(WorkTimeFun); 하는걸로 보아  유니코드를 string 으로 변환하면 자바스크립트 코드라는 것을 알 수 있었다.







개발자 도구 콘솔을 이용해서 문자열을 출력해 보면 아래와 같은 스크립트를 볼 수 있는데 페이지 에서 아무런 동작도 하지 않았던 이유는 

if문 충족하지 못했기 때문이다.





ck라는 변수와 어떠한 값이 같은 경우 

alert("Password is ~~~~~~")로 패스워드가 출력된다.


마찬가지로 콘솔을 이용하여 편하게  조건문을 만족시켜주도록 ck에 알맞은 값을 넣어주면 클리어





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

Webhacking.kr 5번  (0) 2018.04.30
Webhacking.kr 10번  (0) 2018.04.27
Webhacking.kr 61번  (0) 2018.04.27
Webhacking.kr 59번  (0) 2018.04.26
Webhacking.kr 42번  (0) 2018.04.26


GET방식으로 열의 이름을 받는다. 아무값도 없으면 GET[id]=guest 가 된다.

eregi()함수의 사용으로 ( ) union select challenge from , by . 이 필터링 되어있다 

id로받는 문자열의 길이가 18을 넘기면 안된다.


위의 조건을 만족하면 파란색 블록친 부분의 sql문이 동작하기 때문에 

나는 id에 id를 넣어보니 zombie 값이 나왔다. 내림차순 정렬로 z이 맨앞에 온다.



별명(alias)을 이용해서 문제를 풀어준다

원래 쓰임은 칼럼명 대신 별명을 부여하여 조회 할 수 있게 해주는 용도이다.

select 칼럼명 [as] 칼럼별명 과 같은 형식으로 쓰이며

select 칼럼명1+칼럼명2 [as] 칼럼별명과 같이 칼럼끼리 어떤 연산을 할때도 사용한다.


그리고 


1. select "임의의문자열" [as] 칼럼명 이런 형식으로 사용하면 그 칼럼에 모든 값은 임의의문자열이 된다.


2. 하지만 더블쿼터가 막혀 있으므로 문자열로 들어갈 수 있게 헥스값으로 넣어준다.



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

Webhacking.kr 10번  (0) 2018.04.27
Webhacking.kr 12번  (0) 2018.04.27
Webhacking.kr 59번  (0) 2018.04.26
Webhacking.kr 42번  (0) 2018.04.26
Webhacking.kr 33번  (0) 2018.04.25


59번 200점짜리 문제이다. join과 login을 적절히 이용해야 할 듯 싶다. 

소스코드를 볼 수 있게 되어있는데 핵심 기능을하는 코드는 아래와 같다.




login 쿼리를 받아 db에 저장된 id와 lv를 가져온다. 이때 lv가 admin일 경우 문제 clear





다음으로 가입을 받는 코드다. phone의 문자열 길이가 20이상을 넘기면 안되고 id는 admin이라는 문자를 필터링한다.

또 phone변수에 0x hex char ascii ord 등등 여러 필터링이 걸려 있는 것을 알 수 있다.

필터링을 통과한 경우 insert~~ 쿼리를 보낸다. 





id='asd' , phone =1 으로 join하고 login했을때 위 쿼리문에 lv에 'guest'가 박혀있듯이 아래와 같이 로그인후 창이 나타난다.

저 lv 같을 admin으로 바꿔야 문제를 클리어하는데 어떻게 sql injection을 하면 좋을까?





답은 아래와 같은 형식의 쿼리문을 만드는 것이다. 

@mysql_query("insert into c59 values('nimda',1,reverse(id)) -- ,'guest')"); 

values에 테이블 열순서에 맞춰 값을 적고 insert into 해주는데 형식에 맞게 괄호를 닫아주고  -- <==주석처리를 통해서 뒷줄은 주석처리 해준다.




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

Webhacking.kr 12번  (0) 2018.04.27
Webhacking.kr 61번  (0) 2018.04.27
Webhacking.kr 42번  (0) 2018.04.26
Webhacking.kr 33번  (0) 2018.04.25
Webhacking.kr 32번  (0) 2018.04.17


42번의 소스코드는 위와 같다. text.txt의 download버튼을 누르면  down=dGVzdC50eHQ= 값이 url에 넘겨져 전송된다.

그렇게 test~~~가 출력 되었다.

그리고  주석처리된 힌트를 보면 text.zip의 패스워드는 숫자로 이뤄져있다고 한다.



text.zip 다운로드는 누르면 access denied 창이 뜨는데 download를 해야 문제를 풀 수 있을 듯하다. 다운로드가 가능했던 text.txt의 경우를 분석해본다.



text.txt download의 request header에  referrer을 보면  down=dGVzdC50eHQ= 값을 볼 수 있는데 문자열의 형태가 base64같아

decode 해보았다.



text.txt를 base64하여 down변수에 담아보내준 것으로 보여

text.zip를 암호화하여 위와 마찬가지로 down변수에 담아서 보내니 



text.zip을 다운받을 수 있었다. 브루트포싱 툴을 이용해서 readme.txt파일의 패스워드를 찾아주면 

url주소가 담겨있는데 그페이지 안에 패스워드가 담겨있다.

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

Webhacking.kr 61번  (0) 2018.04.27
Webhacking.kr 59번  (0) 2018.04.26
Webhacking.kr 33번  (0) 2018.04.25
Webhacking.kr 32번  (0) 2018.04.17
Webhacking.kr 23번  (0) 2018.04.17

+ Recent posts