목록Security/Web (27)
cdor1's lab
입력칸에 입력하게되면 no값에 내 인풋이 들어가게 되는데 1, 2를 넣었을때 참인 것을 보아 예전에 풀었던 문제처럼 테이블 모양을 유추할 수 있을것 같았다.id pwguest ?admin ? 이제 admin의 패스워드 길이를 유추해보려고 한다.2 and length(id)=5 를 넣었을 때 참이 반환되는 것으로 보아 admin일 확률이 높은데확실하게 하기 위해 admin으로 추측되는 id의 첫번째 자리를 알아내 보자.2 and ascii(substr(id, 1, 1)) = 97(a)참이 반환됐다. admin이라고 확신하고 공격해보려고 한다.2 and length(pw)=19를 넣었을 때 참이 반환되므로 admin의 패스워드 길이는 19이고소스를 짜서 패스워드를 알아보자. import re, urllib,..
url = 'http://webhacking.kr/challenge/bonus/bonus-2/index.php'data = "id=admin' and ascii(substr(pw,str(i),1))=str(j)#"headers = {'Cookie': "PHPSESSID=%s " % ssid}req = urllib2.Request(url, data, headers)
22번 blind sql 풀어보다가 오류인지 키값을 읽어오지 못해서 다른 문제 보다가 푼 문제다.맨날 보는 ls -l을 했을때의 출력 화면이다. get형식으로 file이라는 변수에 hello를 입력했을 때 저기 있는 hello.txt의 내용이 출력되는 것 같은데password로 보이는 파일을 ?file=password.php로 넣어보았더니 출력이 정상적으로 되지 않았다. hello.txt를 출력하려고 할 때 hello까지만 입력을 받는 것으로 보아 .txt가 생략되었는데.txt를 붙여서 파일을 읽어오는 것 같다.하지만 password파일의 확장자는 .php이고 어떻게 우회할지 생각해 보다가%00 널바이트를 넣어보았다.~clear~
sql injection이라고 한다. 이런 소스가 있는데 no에 1을 넣게되면 hi guest가 출력되는 걸로 봐서db의 형태를 추측할 수 있었다.no id1 guest? admin이런 식으로 challenge18_table안에 guest랑 admin이라는 id가 존재하는데guest라는 id 밑에 admin이라는 id가 있어서 limit 함수를 이용해 admin이라는 id를 뽑아오려고 했다.(limit 함수란? 행, 열을 넣어주면 그곳에 있는 데이터를 뽑아준다.)select id from challenge18_table where id='guest' and no=0 or 1 limit 1,1id='guest' and no = 0 or 1이 참이되어서 table 전체를 뽑아와주고거기서 limit을 이용해 ..
이렇게 생긴 화면이 나오게 되는데1번 메뉴에 들어가면 Apple2번 메뉴에 들어가면 Banana3번 메뉴에 들어가면이런 화면이 나오는데password의 length는 11이고 id, no라는 칼럼이 존재한다고 한다.2번과 비슷하게 sql injection을 진행하면 될 것 같은데이건 참값과 거짓값을 판단할만한 변수가 보이지 않는다.그래서 우리는 strcmp를 활용하려고 한다.strcmp(조건, 거짓, 참) 이렇게 들어가는데이걸 이용해서 참과 거짓을 우리가 알아낼 수 있다. ?no=IF(strcmp(substr(id, 1, 1), 0x41),0,3)이런식으로 넣어주면만약 틀렸을 경우에는 no가 0이되서 아무런 문자열이 출력되지 않을 것이고맞을 경우에는 no가 3이되어서 우리가 들어갔던 3번 메뉴에 있는 S..
blind sql injection을 이용해서 푸는 문제이다.홈페이지에 존재하는 어떤 값을 이용해서 내가 넣은 sql 구문이 참인지 거짓인지를 판단해 공격하는 방법이다. 띠용.. 홈페이지다. board에 들어가보니 이름이 FreeB0aRd인 게시판에 저런 글이 하나 올라와 있었다. 소스 확인 결과수상한 주석처리된 현재 시간 값과 admin/이 존재한다는 사실을 알았다. 아니나 다를까 admin page에도 비밀번호가 걸려있다. cookie에 time이라는 값이 존재해서 injection을 시도해 보았는데이런 식으로 time값이 바뀌었다. 무조건 거짓이 되는 구문을 넣어보았더니 시간 값이 09:00:01에서 09:00:00으로 변했다.참이 되면 시간값이 09:00:01이 되고 거짓이면 09:00:00이 되..
14번 문제의 소스이다.입력받은 값과 IndexOf로 얻어온 값을 비교하는데 우리에겐 개발자 도구가 있따!
소스를 난독화해서 숫자로 나타내고 eval로 js구문을 실행시켜준다. 우리에겐 개발자 도구에 console이 있으니 eval을 제외하고 소스 그대로 넣어줘서 난독화된 소스를 복구해준다.if문 안을 분석해서 직접 값을 얻어내도 되지만, alert문을 이용해서 답을 그냥 출력시키려고 한다. 슥삭
preg_match 함수로 $pat변수에 있는 정규식과 val이라는 입력값을 비교한다. $pat="/[1-3][a-f]{5}_.*118.221.173.47.*\tp\ta\ts\ts/"; 세 단위로 짤라서 보려고 한다. 정규식은 /로 시작해서 /로 끝난다.[1-3][a-f]{5}[1-3] == 1과3사이 한 문자[a-f]{5} == a과f사이 문자 5번 반복 _.*118.221.173.47.*_ == 그냥 _(정규식에 없음).* == 어떤 문자 0번이상 반복 (0번 이상이므로 상관x)118.221.173.47 == 내ip \tp\ta\ts\ts\t반복 == \t는 url인코딩으로 %09그러니까 %09p%09a%09s%09s ?val=1aaaaa_118.221.173.47%09p%09a%09s%09s다 해주..
저 O를 누르면 조금씩 오른쪽으로 움직이는데, html이 chrome에선 똑바로 동작하질 않아서 익스플로러로 풀었다. posLeft가 800이면 ?go=posLeft로 쿼리를 날리는데 억지로 ?go=800을 넣어서 주니까 no hack이 떴다.그래서 생각한 방법이 그냥 정상적으로 한번 클릭할때마다 posLeft가 1씩 증가하게 해서 푸는 건데 800을 맞춰주면 될 것 같다.800번 눌러도 되지만 귀찮으므로한번 누를때마다 800이 증가하게 해서 풀자.