Penetration Testing with Kali Linux OffSec


səhifə121/132
tarix21.12.2023
ölçüsü
#187693
1   ...   117   118   119   120   121   122   123   124   ...   132
PEN-200

Listing 119 - Simple JavaScript Function 
In Listing 119, we declared a function named 
multiplyValues
on lines 1-3 that accepts two integer 
values as parameters and returns their product. 
On line 5, we invoke 
multiplyValues
by passing two integer values, 3 and 5, as parameters, and 
assigning the variable 
a
to the value returned by the function. 
When declaring the 
a
variable, we don’t assign just any type to the variable, since JavaScript is a 
loosely typed
language.
365
This means that the actual type of the 
a
variable is inferred as a 
Number type based on the type of the invoked function arguments, which are Number types. As a 
last step, on line 6 we print the value of 
a
to the console. 
We can verify the above code by opening the developer tools in Firefox on the about:blank page to 
avoid clutter originated by any extra loaded library. 
364
(Mozilla, 2022), https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Functions 
365
(Mozilla, 2022), https://developer.mozilla.org/en-US/docs/Web/JavaScript/Data_structures 


Penetration Testing with Kali Linux
PWK - Copyright © 2023 OffSec Services Limited. All rights reserved. 
235 
Once the blank page is loaded, we’ll click on the 
Web Console
from the Web Developer sub-menu 
in the Firefox Menu or use the shortcut 
C
+
B
+
k

Figure 111: Testing the JavaScript Function in the Browser Console 
From within the Console, we can execute our test function and retrieve the output. 
Printing values to the browser’s console is another technique we can add to our debugging toolkit 
that will be extremely useful when analyzing more complex JavaScript code. 
8.4.3
Identifying XSS Vulnerabilities 
We can find potential entry points for XSS by examining a web application and identifying input 
fields (such as search fields) that accept unsanitized input, which is then displayed as output in 
subsequent pages. 
Once we identify an entry point, we can input special characters and observe the output to 
determine if any of the special characters return unfiltered. 
The most common special characters used for this purpose include: 
< > ' " { } ; 
Listing 120 - Special characters for HTML and JavaScript 
Let’s describe the purpose of these special characters. HTML uses “<” and “>” to denote 
elements
,
366
the various components that make up an HTML document. JavaScript uses “{” and 
“}” in function declarations. Single (’) and double (") quotes are used to denote strings, and 
semicolons (;) are used to mark the end of a statement. 
If the application does not remove or encode these characters, it may be vulnerable to XSS 
because the app 
interprets
the characters as code, which in turn, enables additional code. 
366
(Wikipedia, 2022), https://en.wikipedia.org/wiki/HTML_element 


Penetration Testing with Kali Linux
PWK - Copyright © 2023 OffSec Services Limited. All rights reserved. 
236 
While there are multiple types of encoding, the most common we’ll encounter in web applications 
are 
HTML encoding
367
and 
URL encoding
.
368
URL encoding, sometimes referred to as 
percent 
encoding
, is used to convert non-ASCII and reserved characters in URLs, such as converting a 
space to “%20”. 
HTML encoding (or 
character references
) can be used to display characters that normally have 
special meanings, like tag elements. For example, “<” is the character reference for “<”. When 
encountering this type of encoding, the browser will not interpret the character as the start of an 
element, but will display the actual character as-is. 
If we can inject these special characters into the page, the browser will treat them as code 
elements. We can then begin to build code that will be executed in the victim’s browser once it 
loads the maliciously-injected JavaScript code. 
We may need to use different sets of characters, depending on where our input is being included. 
For example, if our input is being added between 
div
tags, we’ll need to include our own 
script 
tags
369
and need to be able to inject “<” and “>” as part of the payload. If our input is being added 
within an existing JavaScript tag, we might only need quotes and semicolons to add our own 
code. 
8.4.4
Basic XSS 
Let’s demonstrate basic XSS with a simple attack against the OffSec WordPress instance. The 
WordPress installation is running a plugin named 
Visitors
that is vulnerable to stored XSS.
370
The 
plugin’s main feature is to log the website’s visitor data, including the IP, source, and User-Agent 
fields. 
The source code for the plugin can be downloaded from its website.
371
If we inspect the 
database.php
file, we can verify how the data is stored inside the WordPress database: 
function VST_save_record() { 
global $wpdb; 
$table_name = $wpdb->prefix . 'VST_registros'; 
VST_create_table_records(); 
return $wpdb->insert( 
$table_name, 
array( 
'patch' => $_SERVER["REQUEST_URI"], 
'datetime' => current_time( 'mysql' ), 

Yüklə

Dostları ilə paylaş:
1   ...   117   118   119   120   121   122   123   124   ...   132




Verilənlər bazası müəlliflik hüququ ilə müdafiə olunur ©azkurs.org 2024
rəhbərliyinə müraciət

gir | qeydiyyatdan keç
    Ana səhifə


yükləyin