💻bypass front end restriction
개념
user은 front end를 제어하기 쉽다. 자바스크립트, HTML 같은 것들을 변경할 수있기 때문에 user로 부터 입력값을 받는 application은 server에서 이 입력값을 검증해야한다.
목표
- HTML에 대한 기본 지식 습득
- (프록시 등의 툴을 활용한) 요청 메시지 변조
- 특정 필드의 제한사항 조작 및 클라이언트 측의 검증 우회
challenge1
이렇게 사용자에게 값을 입력받는 것이 있다.
설명을 보아서 webpage의 html의 값을 제어하라고 써있다.
우클릭하여 html 편집을 진행한다.
수정
나머지도 모두 바꾸고 submit 해준다
성공
매커니즘을 우회하여 전송하라는 내용이다.
각 필드마다 제한사항 메커니즘이 만들어져있는데 field 1의 경우는 a-z까지 3글자만 쓸 수 있다와 같은 제한 사항을 말한다.
이를 우회해 보자
이런 제한 사항을 없애준다.(validate 부분 삭제)
submit
value값이 비어있고 error라는 별명의 input이 있는 것을 발견해서 이것도 추가적으로 수정해주었다.
그 뒤 값을 변조하여 submit 하면 성공
Client Side Filtering
클라이언트에게 데이터 전송 시 그들의 접근이 허용되는 정보만을 전달하는 것은 언제나 바람직하다. 이번 챌린지에서는, 과도한 정보가 클라이언트에게 제공되는 것으로 인하여 접근통제 관련 문제가 발생한다. 서버에서 전송되는 특정 정보를 이용하여 접근하지 않아야할 정보에 대해 식별하도록 한다.
줄여서 말해보자면 클라이언트에게 많은 정보를 제공하여 클라이언트가 접근해서는 안될 곳을 접근할 수도 있다는 뜻이다.
block 하여 이 정보 보이게끔 출력
challenge
checkout code에 무언가를 넣어 전송하면 get method가 같이 전송되는 특이점 발견
여기에 요청하는 주소를 얻어와서 url의 상위 디렉토리로 올라간다.
HTML tampering(HTML 변조)
Concept
브라우저는 일반적으로 화면에 표시된 내용을 편집할 수 있는 다양한 옵션을 제공한다. 그러므로 개발자는 사용자가 전송한 값이 변조되었을 수 있다는 것을 인지해야 함.
Goals
- The user should have a basic understanding of HTML
- The user will be able to exploit editing front end of website
계산되는 함수가 html 안에 있을 것이라고 추측
이 스크립트를 수정하거나
개발자 도구로 해석한 스크립트에서 끌어오는 html text 태그를 변경하면 된다.
Mitigation
서버측에서 충분한 검증이 필요하고 client 를 신뢰해서는 안된다.
참고링크
https://www.owasp.org/index.php/Input_Validation_Cheat_Sheet
💻challenge
챌린지 카테고리의 하위 첫번째 카테고리의 내용은
CTF에 관한 설명으로 flag의 format 정도와 주의사항 정도를 간단히 표기하고 있다.
flag format : a7179f89-906b-4fec-9d99-f15b796e7208
1
admin challenge
그림 파일또한 필요한 정보가 들어가 있을 수 있다.
2
sql injection이다
다만 차이는 id의 필터링은 잘 되어있기 때문에 password에 sql injection 코드를 입력한다
‘or1=1--입력하여 flag 탈취 성공
3
아까와는 다르게 회원가입이 가능하다.
출력값이 blind 처리되어, 보이지는 않지만 값이 참인지, 거짓인지를 알 수 있는 메시지를 출력하는 것으로 blind sql injection을 할 수있다.
해당 password 의 length는 tom’and length(password)=23--으로 참이 리턴되는 것을 보고 코드를 알아 낼 수 있었고 이제 파이썬 자동화를 했다.
일단 아무 값도 넣지 않고 register now를 하고 burp suite로 잡아낸다.
burp suite로 요청 서버와 사용 http method, 쿠키, body에서 각 쓰이는 파라미터의 이름을 알아낼 수 있다.
다음과 같이 작성하여 http requests 를 이용한 python 자동화 스크립트 작성
bash shell에서 python 실행하여 password 획득 및 flag 탈취 성공
4
password를 재설정할 수 있도록 이메일을 입력하면 재설정 링크를 보내준다.
이 문제의 목적은 admin의 password를 재설정하는 것이다.
보내진 링크에서 재설정 링크부분을 지우고 .git을 입력하여 git파일을 받는다.
git파일을 압축해제하고 git log 명령어를 통해 commit 내역을 확인하자 어떤 key 값이 삭제된 것을 확인할 수 있다.
그리하여 key값 삭제 전으로 회귀하였고, ls 명령어를 통해 디렉토리를 확인해보자 PasswordResetLink.class 파일이 나타난 것을 확인할 수 있다.
따라서 해당 파일을 jre와 자바 디컴파일러를 통하여 확인하여보면
다음과 같이 자바 코드를 확인할 수 있고 main함수에서 admin을 입력하면 password reset link가 만들어져서 반환한다는 것을 확인할 수 있다.
이를 admin을 parameter로 넣어서 해당 파일을 실행시키면 admin의 reset link를 받을 수 있고, 이를 메일에 첨부되었던 링크의 reset link에 넣어주면 성공적으로 flag를 구할 수 있는 것을 확인할 수 있다.
'1. Web hacking (웹 해킹) > 2) 개념 정리' 카테고리의 다른 글
[2021.09.11] SQL Injection이란?(2) (0) | 2021.09.12 |
---|---|
[2021.09.04] SQL Injection이란?(1) (1) | 2021.09.05 |
[2021-05-15] webgoat 직렬화, OSS (0) | 2021.05.15 |
[20.05.08]WebGoat CSRF (0) | 2021.05.08 |
[21.05.01] XXE, XSS (0) | 2021.05.02 |