본문 바로가기

Web Hacking

(91)
[Webhacking.kr] old-54 write up 이 문제는 사이트에 들어가면 Password is [flag]에서 flag부분이 1초마다 바뀐다. 저 부분을 자세히보면 flag형식과 비슷하고 때문에 저 부분이 flag라고 생각했다. 이제 코드를 보자! 코드를 보면 1초 후 answer함수가 실행되고 있다. x변수는 run 함수의 리턴값이 담기며 리턴값에는 javascript에서 HTTP 요청을 보낼 수 있는 객체가 담겨 있다. answer함수는 서버로 HTTP요청을 보낸다. m에 i값을 넘겨주며 innerHTML에 응답값을 추가하며 i를 증가시킨다. 만약 응답값이 있다면 다시 answer함수를 실행시키지만 응답값이 없다면 ?를 html에 추가하고 종료된다. 근데 문제점은 innerHTML에 추가할때 +=가 아니라 =로 추가하고 있기 때문에 계속 리셋되..
[Webhacking.kr] old-18 write up 이번 문제는 대놓고 SQL INJECTION이라고 주어진다! 코드를 보자. 쿼리 결과로 admin이 나오면 문제는 해결된다. 코드에 no가 2인 값이 admin이라고 나와 있기 때문에 우린 이것을 이용할 수 있다. 그러나 쿼리문의 where 문 바로 뒤에 id='guest'라고 명시되어 있기 때문에 아무리 no를 건드려도 해결이 불가능하기때문에 or을 이용해서 앞 조건을 false로 만들고 뒤를 true로 만들면 해결이 가능하다. 위처럼 입력하니 no hack이 뜬다. 자세히 보니 공백도 필터링을 하고 있다. 이건 개행이나 탭 문자로 간단히 우회가 가능하다. 2%09or%0ano=2 페이로드는 url창에서 url인코딩하여 전달(그냥 문자 그대로 전달도 가능) 하거나 폼창에 문자 그대로 전달해야한다. 만 ..
[Webhacking.kr] old-39 write up 입력폼이 하나 주어진다. 소스코드를 살펴보자. 사용자 입력값을 받아와 DB에 쿼리문을 날리고 있으며 '1'을 조회하고 있다. 해당 쿼리문에서 1이 조회되면 문제는 풀린다. 따라서 우리는 해당 쿼리문이 참이 되도록 해주면 된다! 필터링 부분을 보자. 역슬레쉬, 싱글쿼터를 필터링 하고 있고 substr함수를 이용해서 15자리 까지만 자르고 있다. 역슬레쉬는 빈칸으로 사라지나 싱글쿼터는 하나가 두개로 대체되고 있다. 쿼리문을 다시 보면 id부분에 사용자 입력값 앞에 싱글쿼터가 하나 붙어 있다. 우리는 admin을 입력하고 싱글쿼터를 닫아주기만 하면 문제를 해결할 수 있다. 싱글쿼터가 두개로 대체되나 15자리까지만 사용자 입력값이 잘리기 때문에 마지막에 입력하면 싱글쿼터를 하나만 입력을 할수가 있다. admin..
[Webhacking.kr] old-06 write up 코드가 꽤 길다 천천히 살펴보자. user 쿠키가 설정되어 있지 않으면 새로운 쿠키를 설정한다. id, pw라는 이름의 변수를 선언한다. id: guest, pw: qwe123이다. 해당 값들을 다음과 같은 연산을 거쳐 암호화하여 user와, pw 쿠키에 값으로 설정한다. 다시 값들을 복호화하여 echo해주고 있다. 만약 복호화한 값이 id가 admin pw가 nimda이면 문제가 해결된다. 위 암호 로직을 통해 admin, nimda를 암호화하여 쿠키를 설정해주면 해결된다. 위 코드를 그대로 복사해 이용하기 위해 php로 해결했다.
[Webhacking.kr] old-15 write up 문제 접속 시 바로 alert()가 실행되며 Webhacking.kr 메인화면으로 리다이렉션 된다. 터미널에서 curl로 요청 후 응답을 받아봤다. flag가 ?getFlag로 접근 시 존재한다고 써 있다.
[Webhacking.kr] old-17 write up 입력폼이 하나 존재한다. 소스코드를 살펴보자. 폼의 사용자 입력값이 unlock과 같을 경우 문제가 해결 된다. 파이썬을 이용해서 unlock을 구해봤다.
[Webhacking.kr] old-14 write up 입력폼이 하나 존재한다. 소스코드를 보니 제출버튼을 누르면 script에 정의된 ck 메소드가 실행된다. ck메소드는 현재 웹페이지의 URL을 가져와 .kr의 인덱스를 반환해 *30 후 사용자 입력값과 비교한다. 이때 같으면 문제가 해결된다. https://webhacking.kr/challenge/js-1/ .kr의 위치는 18번째이므로 540을 입력한다.
[Webhacking.kr] old-42 write up 문제에 접속해보니 위와 같은 UI가 보인다. 소스코드를 살펴보자. test.txt의 버튼을 누르면 어떤 리소스에 접근하여 파일을 다운로드 하는 것 같지만, flag.docx는 alert()를 실행시킨다. test.txt를 눌러보니 예상대로 다운로드가 된다. test.txt의 리소스 url을 보면 "?down=dGVzdC50eHQ=" 에 접근하고 있다. 가만보니 "=" 패딩때문에 base64 같아서 디코딩을 해봤다. 반대로flag.docx를 base64 인코딩해서 리소스에 접근해봤다. flag 파일이 다운로드 됐다