2024-07-18 22:14:33 +00:00
# Misc JS Tricks & Relevant Info
{% hint style="success" %}
Learn & practice AWS Hacking:< img src = "/.gitbook/assets/arte.png" alt = "" data-size = "line" > [**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)< img src = "/.gitbook/assets/arte.png" alt = "" data-size = "line" > \
Learn & practice GCP Hacking: < img src = "/.gitbook/assets/grte.png" alt = "" data-size = "line" > [**HackTricks Training GCP Red Team Expert (GRTE)**< img src = "/.gitbook/assets/grte.png" alt = "" data-size = "line" > ](https://training.hacktricks.xyz/courses/grte)
2022-04-28 16:01:33 +00:00
< details >
2024-07-18 22:14:33 +00:00
< summary > Support HackTricks< / summary >
2022-04-28 16:01:33 +00:00
2024-07-18 22:14:33 +00:00
* Check the [**subscription plans** ](https://github.com/sponsors/carlospolop )!
* **Join the** 💬 [**Discord group** ](https://discord.gg/hRep4RUj7f ) or the [**telegram group** ](https://t.me/peass ) or **follow** us on **Twitter** 🐦 [**@hacktricks\_live** ](https://twitter.com/hacktricks\_live )**.**
* **Share hacking tricks by submitting PRs to the** [**HackTricks** ](https://github.com/carlospolop/hacktricks ) and [**HackTricks Cloud** ](https://github.com/carlospolop/hacktricks-cloud ) github repos.
2022-04-28 16:01:33 +00:00
< / details >
2024-07-18 22:14:33 +00:00
{% endhint %}
2022-04-28 16:01:33 +00:00
2024-07-18 22:14:33 +00:00
## Javascript Fuzzing
2021-11-07 17:40:05 +00:00
2024-07-18 22:14:33 +00:00
### Valid JS Comment Chars
2021-11-07 17:40:05 +00:00
```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
2023-02-07 10:56:16 +00:00
for (let j = 0; j < 128 ; j + + ) {
2024-02-11 02:13:58 +00:00
for (let k = 0; k < 128 ; k + + ) {
for (let l = 0; l < 128 ; l + + ) {
if (j == 34 || k ==34 || l ==34)
continue;
if (j == 0x0a || k ==0x0a || l ==0x0a)
continue;
if (j == 0x0d || k ==0x0d || l ==0x0d)
continue;
if (j == 0x3c || k ==0x3c || l ==0x3c)
continue;
if (
(j == 47 & & k == 47)
||(k == 47 & & l == 47)
)
continue;
try {
var cmd = String.fromCharCode(j) + String.fromCharCode(k) + String.fromCharCode(l) + 'a.orange.ctf"';
eval(cmd);
} catch(e) {
var err = e.toString().split('\n')[0].split(':')[0];
if (err === 'SyntaxError' || err === "ReferenceError")
continue
err = e.toString().split('\n')[0]
}
console.log(err,cmd);
}
}
2023-02-07 10:56:16 +00:00
}
//From: https://balsn.tw/ctf_writeup/20191012-hitconctfquals/#bounty-pl33z
2023-02-07 23:15:13 +00:00
2024-02-11 02:13:58 +00:00
// From: Heyes, Gareth. JavaScript for hackers: Learn to think like a hacker (p. 43). Kindle Edition.
2023-02-07 23:15:13 +00:00
log=[];
for(let i=0;i< =0xff;i++){
2024-02-11 02:13:58 +00:00
for(let j=0;j< =0xfff;j++){
try {
eval(`${String.fromCodePoint(i,j)}%$£234$`)
log.push([i,j])
}catch(e){}
}
2023-02-07 23:15:13 +00:00
}
console.log(log)//[35,33],[47,47]
2021-11-07 17:40:05 +00:00
```
2024-07-18 22:14:33 +00:00
### Valid JS New Lines Chars
2021-11-07 17:40:05 +00:00
```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
2023-02-07 10:56:16 +00:00
for (let j = 0; j < 65536 ; j + + ) {
2024-02-11 02:13:58 +00:00
try {
var cmd = '"aaaaa";'+String.fromCharCode(j) + '-->a.orange.ctf"';
eval(cmd);
} catch(e) {
var err = e.toString().split('\n')[0].split(':')[0];
if (err === 'SyntaxError' || err === "ReferenceError")
continue;
err = e.toString().split('\n')[0]
}
console.log(`[${err}]`,j,cmd);
2023-02-07 10:56:16 +00:00
}
2021-11-07 17:40:05 +00:00
//From: https://balsn.tw/ctf_writeup/20191012-hitconctfquals/#bounty-pl33z
```
2024-07-18 22:14:33 +00:00
### Nafasi za JS Halali katika wito wa kazi
2023-02-07 23:15:13 +00:00
```javascript
2024-02-11 02:13:58 +00:00
// Heyes, Gareth. JavaScript for hackers: Learn to think like a hacker (pp. 40-41). Kindle Edition.
2023-02-07 23:15:13 +00:00
// Check chars that can be put in between in func name and the ()
function x(){}
log=[];
for(let i=0;i< =0x10ffff;i++){
2024-02-11 02:13:58 +00:00
try {
eval(`x${String.fromCodePoint(i)}()`)
log.push(i)
}catch(e){}
2023-02-07 23:15:13 +00:00
}
2024-02-11 02:13:58 +00:00
2023-02-07 23:15:13 +00:00
console.log(log)v//9,10,11,12,13,32,160,5760,8192,8193,8194,8195,8196,8197,8198,8199,8200,8201,8202,813 232,8233,8239,8287,12288,65279
```
2024-07-18 22:14:33 +00:00
### **Herufi Halali za Kutengeneza Nyuzi**
2023-02-07 23:15:13 +00:00
```javascript
2024-02-11 02:13:58 +00:00
// Heyes, Gareth. JavaScript for hackers: Learn to think like a hacker (pp. 41-42). Kindle Edition.
2023-02-07 23:15:13 +00:00
// Check which pairs of chars can make something be a valid string
log=[];
for(let i=0;i< =0x10ffff;i++){
2024-02-11 02:13:58 +00:00
try {
eval(`${String.fromCodePoint(i)}%$£234${String.fromCodePoint(i)}`)
log.push(i)
}catch(e){}
2023-02-07 23:15:13 +00:00
}
console.log(log) //34,39,47,96
//single quote, quotes, backticks & // (regex)
```
2023-02-07 10:56:16 +00:00
### **Surrogate Pairs BF**
2021-11-07 17:40:05 +00:00
2024-07-18 22:14:33 +00:00
Teknolojia hii haitakuwa na manufaa sana kwa XSS lakini inaweza kuwa na manufaa kupita ulinzi wa WAF. Hii python code inapokea kama ingizo 2bytes na inatafuta surrogate pairs ambazo zina byte ya kwanza kama byte za mwisho za High surrogate pair na byte ya mwisho kama byte ya mwisho za low surrogate pair.
2021-11-07 17:40:05 +00:00
```python
def unicode(findHex):
2024-02-11 02:13:58 +00:00
for i in range(0,0xFFFFF):
H = hex(int(((i - 0x10000) / 0x400) + 0xD800))
h = chr(int(H[-2:],16))
L = hex(int(((i - 0x10000) % 0x400 + 0xDC00)))
l = chr(int(L[-2:],16))
if(h == findHex[0]) and (l == findHex[1]):
print(H.replace("0x","\\u")+L.replace("0x","\\u"))
2021-11-07 17:40:05 +00:00
```
2024-07-18 22:14:33 +00:00
### `javascript{}:` Ufuatiliaji wa Protokali
2023-02-07 23:15:13 +00:00
```javascript
2024-02-11 02:13:58 +00:00
// Heyes, Gareth. JavaScript for hackers: Learn to think like a hacker (p. 34). Kindle Edition.
2023-02-07 23:15:13 +00:00
log=[];
let anchor = document.createElement('a');
for(let i=0;i< =0x10ffff;i++){
2024-02-11 02:13:58 +00:00
anchor.href = `javascript${String.fromCodePoint(i)}:` ;
if(anchor.protocol === 'javascript:') {
log.push(i);
}
2023-02-07 23:15:13 +00:00
}
console.log(log)//9,10,13,58
// Note that you could BF also other possitions of the use of multiple chars
// Test one option
let anchor = document.createElement('a');
anchor.href = `javascript${String.fromCodePoint(58)}:alert(1337)` ;
anchor.append('Click me')
document.body.append(anchor)
// Another way to test
< a href = "javascript:alert(1337)" > Test< / a >
```
2024-07-18 22:14:33 +00:00
### URL Fuzzing
2023-02-07 23:15:13 +00:00
```javascript
2024-02-11 02:13:58 +00:00
// Heyes, Gareth. JavaScript for hackers: Learn to think like a hacker (pp. 36-37). Kindle Edition.
2023-02-07 23:15:13 +00:00
// Before the protocol
a=document.createElement('a');
log=[];
for(let i=0;i< =0x10ffff;i++){
2024-02-11 02:13:58 +00:00
a.href = `${String.fromCodePoint(i)}https://hacktricks.xyz` ;
if(a.hostname === 'hacktricks.xyz'){
log.push(i);
}
2023-02-07 23:15:13 +00:00
}
console.log(log) //0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32
// Between the slashes
a=document.createElement('a');
log=[];
for(let i=0;i< =0x10ffff;i++){
2024-02-11 02:13:58 +00:00
a.href = `/${String.fromCodePoint(i)}/hacktricks.xyz` ;
if(a.hostname === 'hacktricks.xyz'){
log.push(i);
}
2023-02-07 23:15:13 +00:00
}
console.log(log) //9,10,13,47,92
```
2024-07-18 22:14:33 +00:00
### HTML Fuzzing
2023-02-07 23:15:13 +00:00
```javascript
2024-02-11 02:13:58 +00:00
// Heyes, Gareth. JavaScript for hackers: Learn to think like a hacker (p. 38). Kindle Edition.
2023-02-07 23:15:13 +00:00
// Fuzzing chars that can close an HTML comment
let log=[];
let div = document.createElement('div');
for(let i=0;i< =0x10ffff;i++){
2024-02-11 02:13:58 +00:00
div.innerHTML=`<!-- - - ${String.fromCodePoint(i)}><span></span> --> `;
if(div.querySelector('span')){
log.push(i);
}
2023-02-07 23:15:13 +00:00
}
console.log(log)//33,45,62
```
2024-04-07 03:36:12 +00:00
## **Kuchambua sifa**
2024-04-06 19:39:38 +00:00
2024-07-18 22:14:33 +00:00
Chombo **Hackability inspector** kutoka Portswigger husaidia **kuchambua** **sifa** za kitu cha javascript. Angalia: [https://portswigger-labs.net/hackability/inspector/?input=x.contentWindow\&html=%3Ciframe%20src=//subdomain1.portswigger-labs.net%20id=x%3E ](https://portswigger-labs.net/hackability/inspector/?input=x.contentWindow\&html=%3Ciframe%20src=//subdomain1.portswigger-labs.net%20id=x%3E )
2023-03-03 15:39:23 +00:00
2024-07-18 22:14:33 +00:00
## **.map js files**
2021-11-07 17:40:05 +00:00
2024-07-18 22:14:33 +00:00
* Njia ya kupakua faili za .map js: [https://medium.com/@bitthebyte/javascript-for-bug-bounty-hunters-part-2-f82164917e7 ](https://medium.com/@bitthebyte/javascript-for-bug-bounty-hunters-part-2-f82164917e7 )
2024-04-07 03:36:12 +00:00
* Unaweza kutumia chombo hiki kuchambua faili hizi [https://github.com/paazmaya/shuji ](https://github.com/paazmaya/shuji )
2021-11-07 17:40:05 +00:00
2024-07-18 22:14:33 +00:00
## "--" Kuteua
2021-11-07 17:40:05 +00:00
2024-07-18 22:14:33 +00:00
Opereta wa kupunguza `--` pia ni kuteua. Opereta huu unachukua thamani kisha unapunguza kwa moja. Ikiwa thamani hiyo si nambari, itakua `NaN` . Hii inaweza kutumika **kuondoa maudhui ya mabadiliko kutoka kwa mazingira** .
2021-11-07 17:40:05 +00:00
2024-05-05 22:47:30 +00:00
![](< .. / . . / . gitbook / assets / image ( 993 ) . png > )
2021-11-07 17:40:05 +00:00
2024-05-05 22:47:30 +00:00
![](< .. / . . / . gitbook / assets / image ( 329 ) . png > )
2021-11-07 17:40:05 +00:00
2024-07-18 22:14:33 +00:00
## Njia za Kazi
2023-02-07 10:56:16 +00:00
2024-02-11 02:13:58 +00:00
### .call na .apply
2023-02-07 10:56:16 +00:00
2024-07-18 22:14:33 +00:00
Mbinu ** `.call` ** ya kazi inatumika **kuendesha kazi** .\
**Hoja ya kwanza** inayo tarajiwa kwa kawaida ni **thamani ya `this`** na ikiwa **hakuna** inayopeanwa, ** `window` ** itakuwa hiyo thamani (isipokuwa ** `strict mode` ** inatumika).
2023-02-07 10:56:16 +00:00
```javascript
function test_call(){
2024-02-11 02:13:58 +00:00
console.log(this.value); //baz
2023-02-07 10:56:16 +00:00
}
new_this={value:"hey!"}
test_call.call(new_this);
// To pass more arguments, just pass then inside .call()
function test_call() {
2024-02-11 02:13:58 +00:00
console.log(arguments[0]); //"arg1"
console.log(arguments[1]); //"arg2"
console.log(this); //[object Window]
2023-02-07 10:56:16 +00:00
}
test_call.call(null, "arg1", "arg2")
// If you use the "use strict" directive "this" will be null instead of window:
function test_call() {
2024-02-11 02:13:58 +00:00
"use strict";
console.log(this); //null
2023-02-07 10:56:16 +00:00
}
test_call.call(null)
2024-02-11 02:13:58 +00:00
2023-02-07 10:56:16 +00:00
//The apply function is pretty much exactly the same as the call function with one important difference, you can supply an array of arguments in the second argument:
function test_apply() {
2024-02-11 02:13:58 +00:00
console.log(arguments[0]); //"arg1"
console.log(arguments[1]); //"arg2"
console.log(this); //[object Window]
2023-02-07 10:56:16 +00:00
}
test_apply.apply(null, ["arg1", "arg2"])
```
2024-07-18 22:14:33 +00:00
### Arrow functions
2021-11-07 17:40:05 +00:00
2024-07-18 22:14:33 +00:00
Arrow functions huruhusu kuunda kazi kwa mstari mmoja kwa urahisi zaidi (ikiwa unazielewa)
2021-11-07 17:40:05 +00:00
```javascript
// Traditional
function (a){ return a + 1; }
// Arrow forms
a => a + 100;
a => {a + 100};
// Traditional
function (a, b){ return a + b + 1; }
// Arrow
(a, b) => a + b + 100;
// Tradictional no args
let a = 4;
let b = 2;
function (){ return a + b + 1; }
// Arrow
let a = 4;
let b = 2;
() => a + b + 1;
```
2024-07-18 22:14:33 +00:00
Hivyo, kazi nyingi za awali kwa kweli hazina maana kwa sababu hatuhifadhi mahali popote ili kuweza kuzihifadhi na kuziita. Mfano wa kuunda kazi ya `plusone` :
2021-11-07 17:40:05 +00:00
```javascript
// Traductional
function plusone (a){ return a + 1; }
//Arrow
plusone = a => a + 100;
```
2024-07-18 22:14:33 +00:00
### Bind function
2024-04-06 19:39:38 +00:00
2024-07-18 22:14:33 +00:00
The bind function inaruhusu kuunda **nakala** ya **kazi inayobadilisha** ** `this` ** kitu na **vigezo** vilivyotolewa.
2021-11-07 17:40:05 +00:00
```javascript
//This will use the this object and print "Hello World"
var fn = function ( param1, param2 ) {
2024-02-11 02:13:58 +00:00
console.info( this, param1, param2 );
2021-11-07 17:40:05 +00:00
}
fn('Hello', 'World')
//This will still use the this object and print "Hello World"
var copyFn = fn.bind();
copyFn('Hello', 'World')
//This will use the "console" object as "this" object inside the function and print "fixingparam1 Hello"
var bindFn_change = fn.bind(console, "fixingparam1");
2024-02-11 02:13:58 +00:00
bindFn_change('Hello', 'World')
2021-11-07 17:40:05 +00:00
//This will still use the this object and print "fixingparam1 Hello"
var bindFn_thisnull = fn.bind(null, "fixingparam1");
bindFn_change('Hello', 'World')
//This will still use the this object and print "fixingparam1 Hello"
var bindFn_this = fn.bind(this, "fixingparam1");
bindFn_change('Hello', 'World')
```
{% hint style="info" %}
2024-07-18 22:14:33 +00:00
Kumbuka kwamba kutumia ** `bind` ** unaweza kudhibiti ** `this` ** kitu ambacho kitakuwa kinatumika unapoitisha kazi hiyo.
2021-11-07 17:40:05 +00:00
{% endhint %}
2024-05-05 22:47:30 +00:00
### Kuvuja kwa msimbo wa kazi
2024-04-06 19:39:38 +00:00
2024-07-18 22:14:33 +00:00
Ikiwa unaweza **kufikia kitu** cha kazi unaweza **kupata msimbo** wa kazi hiyo.
2021-11-07 17:40:05 +00:00
```javascript
function afunc(){
2024-02-11 02:13:58 +00:00
return 1+1;
2021-11-07 17:40:05 +00:00
}
console.log(afunc.toString()); //This will print the code of the function
console.log(String(afunc)); //This will print the code of the function
console.log(this.afunc.toString()); //This will print the code of the function
console.log(global.afunc.toString()); //This will print the code of the function
```
2024-07-18 22:14:33 +00:00
Katika hali ambapo **kazi haina jina lolote** , bado unaweza kuchapisha **kanuni ya kazi** kutoka ndani:
2021-11-07 17:40:05 +00:00
```javascript
(function (){ return arguments.callee.toString(); })()
(function (){ return arguments[0]; })("arg0")
```
2024-07-18 22:14:33 +00:00
Baadhi ya njia **za nasibu** za **kutoa msimbo** wa kazi (hata maoni) kutoka kwa kazi nyingine:
2021-11-07 17:40:05 +00:00
```javascript
(function (){ return retFunc => String(arguments[0]) })(a=>{/* Hidden commment */})()
(function (){ return retFunc => Array(arguments[0].toString()) })(a=>{/* Hidden commment */})()
(function (){ return String(this)}).bind(()=>{ /* Hidden commment */ })()
(u=>(String(u)))(_=>{ /* Hidden commment */ })
(u=>_=>(String(u)))(_=>{ /* Hidden commment */ })()
```
2024-07-18 22:14:33 +00:00
## Sandbox Escape - Kuokoa kituo cha dirisha
2023-02-09 23:44:03 +00:00
2024-07-18 22:14:33 +00:00
Kituo cha Dirisha kinaruhusu kufikia kazi zilizofafanuliwa kimataifa kama alert au eval.
{% code overflow="wrap" %}
2023-02-09 23:44:03 +00:00
```javascript
// Some ways to access window
window.eval("alert(1)")
frames
globalThis
parent
self
top //If inside a frame, this is top most window
// Access window from document
document.defaultView.alert(1)
// Access document from a node object
node = document.createElement('div')
node.ownerDocument.defaultView.alert(1)
// There is a path property on each error event whose last element is the window
< img src onerror = event.path.pop().alert(1337) >
// In other browsers the method is
< img src onerror = event.composedPath().pop().alert(1337) >
// In case of svg, the "event" object is called "evt"
< svg > < image href = 1 onerror = evt.composedPath().pop().alert(1337) >
// Abusing Error.prepareStackTrace to get Window back
Error.prepareStackTrace=function(error, callSites){
2 callSites.shift().getThis().alert(1337);
3 };
4 new Error().stack
2023-02-14 11:55:05 +00:00
// From an HTML event
// Events from HTML are executed in this context
with(document) {
2024-02-11 02:13:58 +00:00
with(element) {
//executed event
}
2023-02-14 11:55:05 +00:00
}
// Because of that with(document) it's possible to access properties of document like:
< img src onerror = defaultView.alert(1337) >
< img src onerror = s=createElement('script');s.append('alert(1337)');appendChild(s) >
2023-02-09 23:44:03 +00:00
```
{% endcode %}
2024-07-18 22:14:33 +00:00
## Kivunja alama kwenye ufikiaji wa thamani
2021-11-07 17:40:05 +00:00
```javascript
// Stop when a property in sessionStorage or localStorage is set/get
// via getItem or setItem functions
sessionStorage.getItem = localStorage.getItem = function(prop) {
2024-02-11 02:13:58 +00:00
debugger;
return sessionStorage[prop];
2021-11-07 17:40:05 +00:00
}
localStorage.setItem = function(prop, val) {
2024-02-11 02:13:58 +00:00
debugger;
localStorage[prop] = val;
2021-11-07 17:40:05 +00:00
}
```
```javascript
// Stop when anyone sets or gets the property "ppmap" in any object
// For example sessionStorage.ppmap
// "123".ppmap
// Useful to find where weird properties are being set or accessed
2024-02-11 02:13:58 +00:00
// or to find where prototype pollutions are occurring
2021-11-07 17:40:05 +00:00
function debugAccess(obj, prop, debugGet=true){
2024-02-11 02:13:58 +00:00
var origValue = obj[prop];
Object.defineProperty(obj, prop, {
get: function () {
if ( debugGet )
debugger;
return origValue;
},
set: function(val) {
debugger;
origValue = val;
}
});
2021-11-07 17:40:05 +00:00
};
debugAccess(Object.prototype, 'ppmap')
```
2024-07-18 22:14:33 +00:00
## Upatikanaji wa kivinjari kiotomatiki ili kujaribu payloads
2021-11-07 17:40:05 +00:00
```javascript
//Taken from https://github.com/svennergr/writeups/blob/master/inti/0621/README.md
const puppeteer = require("puppeteer");
const realPasswordLength = 3000;
async function sleep(ms) {
2024-02-11 02:13:58 +00:00
return new Promise((resolve) => setTimeout(resolve, ms));
2021-11-07 17:40:05 +00:00
}
(async () => {
2024-02-11 02:13:58 +00:00
const browser = await puppeteer.launch();
const page = await browser.newPage();
//Loop to iterate through different values
for (let i = 0; i < 10000 ; i + = 100 ) {
console.log(`Run number ${i}`);
const input = `${"0".repeat(i)}${realPasswordLength}` ;
console.log(` https://challenge-0621.intigriti.io/passgen.php?passwordLength=${input}&allowNumbers=true&allowSymbols=true×tamp=1624556811000`);
//Go to the page
await page.goto(
`https://challenge-0621.intigriti.io/passgen.php?passwordLength=${input}&allowNumbers=true&allowSymbols=true×tamp=1624556811000`
);
//Call function "generate()" inside the page
await page.evaluate("generate()");
//Get node inner text from an HTML element
const passwordContent = await page.$$eval(
".alert .page-content",
(node) => node[0].innerText
);
//Transform the content and print it in console
const plainPassword = passwordContent.replace("Your password is: ", "");
if (plainPassword.length != realPasswordLength) {
console.log(i, plainPassword.length, plainPassword);
}
await sleep(1000);
}
await browser.close();
2021-11-07 17:40:05 +00:00
})();
```
2024-07-18 22:14:33 +00:00
{% hint style="success" %}
Jifunze na fanya mazoezi ya AWS Hacking:< img src = "/.gitbook/assets/arte.png" alt = "" data-size = "line" > [**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)< img src = "/.gitbook/assets/arte.png" alt = "" data-size = "line" > \
Jifunze na fanya mazoezi ya GCP Hacking: < img src = "/.gitbook/assets/grte.png" alt = "" data-size = "line" > [**HackTricks Training GCP Red Team Expert (GRTE)**< img src = "/.gitbook/assets/grte.png" alt = "" data-size = "line" > ](https://training.hacktricks.xyz/courses/grte)
2022-04-28 16:01:33 +00:00
< details >
2024-07-18 22:14:33 +00:00
< summary > Support HackTricks< / summary >
2022-04-28 16:01:33 +00:00
2024-07-18 22:14:33 +00:00
* Angalia [**mpango wa usajili** ](https://github.com/sponsors/carlospolop )!
* **Jiunge na** 💬 [**kikundi cha Discord** ](https://discord.gg/hRep4RUj7f ) au [**kikundi cha telegram** ](https://t.me/peass ) au **tufuatilie** kwenye **Twitter** 🐦 [**@hacktricks\_live** ](https://twitter.com/hacktricks\_live )**.**
* **Shiriki mbinu za hacking kwa kuwasilisha PRs kwa** [**HackTricks** ](https://github.com/carlospolop/hacktricks ) na [**HackTricks Cloud** ](https://github.com/carlospolop/hacktricks-cloud ) repos za github.
2022-04-28 16:01:33 +00:00
< / details >
2024-07-18 22:14:33 +00:00
{% endhint %}