Repository files navigation

SQL Injection

License

A SQL Injection attack consists of the insertion or injection of a SQL query via the input data from the client to the application. A successful SQL injection exploit can read sensitive data from the database, modify database data (Insert/Update/Delete), execute administration operations on the database (such as shutdown the DBMS), recover the content of a given file present on the DBMS file system and in some cases issue commands to the operating system. SQL injection attacks are a type of injection attack, in which SQL commands are injected into data-plane input to affect the execution of predefined SQL commands.

SQL injection attacks allow attackers to spoof identity, tamper with existing data, cause repudiation issues such as voiding transactions or changing balances, allow the complete disclosure of all data on the system, destroy the data or make it otherwise unavailable, and become administrators of the database server.

SQL injection is common with PHP (this repo has a PHP SQL injection implementation) and ASP applications due to the prevalence of older functional interfaces. Due to the nature of programmatic interfaces available, Java and ASP.NET applications are less likely to have easily exploited SQL injections.

The severity of SQL injection attacks is limited by the attacker’s skill and imagination, and to a lesser extent, defense in depth countermeasures, such as low privilege connections to the database server and so on. In general, consider SQL injection a high impact severity.

Normal Backend Interaction

When prompted by an application, a user enters:

username:JohnDoe

password:password

The application processes the input:

username=getRequestString("username")
password=getRequestString("userpassword")
sql='SELECT * FROM Users WHERE name ="'+username+'" AND pass = "'+password+'"'

Database query:

SELECT*FROM users WHERE name ="JohnDoe"AND pass ="password"

Example Attacks

1. Return an Entire Table

A malicious party may get access to usernames and passwords in a database.

A user enters:

username:" OR ""="

password:" OR ""="

Query becomes:

SELECT*FROM users WHERE name =""OR""=""AND pass =""OR""=""

This SQL statement will return all rows from the users table since OR ""="" always evaluates to true.

2. Delete a Table Using a Batched SQL Statements

A malicious party may delete an entire table from a database.

A user enters:

username:nuclearfusion; DROP TABLE Suppliers

password:password

Query becomes:

SELECT*FROM users WHERE username ="nuclearfusion"; DROPTABLEstockPortfolio;

This SQL statement will result in the permanent deletion (DROP TABLE is an automatically committed statement whereas DELETE is not and can be rolled back) of the stockPortfolio table's data and structure from the database.

Prevention/Protection

SQL parameters can be used to protect a website from SQL injection. SQL parameters are values that are added to a SQL query at the time of execution.

name=getRequestString("PatientName")
addr=getRequestString("Address")
city=getRequestString("City")
zipc=getRequestString("Zip")
txtSQL="INSERT INTO Patients (PatientName,Address,City,Zip) Values(@0,@1,@2,@3)"db.Execute(txtSQL,name,addr,city,zipc)

The SQL engine checks each parameter to ensure that it is valid for its column. All parameters are treated literally and not as part of the SQL to be executed.

In PHP:

$stmt = $dbh->prepare("INSERT INTO Patients (PatientName,Address,City,Zip) VALUES (:name, :addr, :city, :zipc)");
$stmt->bindParam(':name', $name);
$stmt->bindParam(':addr', $addr);
$stmt->bindParam(':city', $city);
$stmt->bindParam(':zipc', $zipc);
$stmt->execute();

Includes decription snippets from OWASP on SQL Injections.

Thank you for your interest, this project was fun to work on!

About

SQL Injection exploit πŸ’‰

Topics

Resources

Stars

6 stars

Watchers

1 watching

Forks

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
 blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content

Repository files navigation

SQL Injection

License

A SQL Injection attack consists of the insertion or injection of a SQL query via the input data from the client to the application. A successful SQL injection exploit can read sensitive data from the database, modify database data (Insert/Update/Delete), execute administration operations on the database (such as shutdown the DBMS), recover the content of a given file present on the DBMS file system and in some cases issue commands to the operating system. SQL injection attacks are a type of injection attack, in which SQL commands are injected into data-plane input to affect the execution of predefined SQL commands.

SQL injection attacks allow attackers to spoof identity, tamper with existing data, cause repudiation issues such as voiding transactions or changing balances, allow the complete disclosure of all data on the system, destroy the data or make it otherwise unavailable, and become administrators of the database server.

SQL injection is common with PHP (this repo has a PHP SQL injection implementation) and ASP applications due to the prevalence of older functional interfaces. Due to the nature of programmatic interfaces available, Java and ASP.NET applications are less likely to have easily exploited SQL injections.

The severity of SQL injection attacks is limited by the attacker’s skill and imagination, and to a lesser extent, defense in depth countermeasures, such as low privilege connections to the database server and so on. In general, consider SQL injection a high impact severity.

Normal Backend Interaction

When prompted by an application, a user enters:

username:JohnDoe

password:password

The application processes the input:

username=getRequestString("username")
password=getRequestString("userpassword")
sql='SELECT * FROM Users WHERE name ="'+username+'" AND pass = "'+password+'"'

Database query:

SELECT*FROM users WHERE name ="JohnDoe"AND pass ="password"

Example Attacks

1. Return an Entire Table

A malicious party may get access to usernames and passwords in a database.

A user enters:

username:" OR ""="

password:" OR ""="

Query becomes:

SELECT*FROM users WHERE name =""OR""=""AND pass =""OR""=""

This SQL statement will return all rows from the users table since OR ""="" always evaluates to true.

2. Delete a Table Using a Batched SQL Statements

A malicious party may delete an entire table from a database.

A user enters:

username:nuclearfusion; DROP TABLE Suppliers

password:password

Query becomes:

SELECT*FROM users WHERE username ="nuclearfusion"; DROPTABLEstockPortfolio;

This SQL statement will result in the permanent deletion (DROP TABLE is an automatically committed statement whereas DELETE is not and can be rolled back) of the stockPortfolio table's data and structure from the database.

Prevention/Protection

SQL parameters can be used to protect a website from SQL injection. SQL parameters are values that are added to a SQL query at the time of execution.

name=getRequestString("PatientName")
addr=getRequestString("Address")
city=getRequestString("City")
zipc=getRequestString("Zip")
txtSQL="INSERT INTO Patients (PatientName,Address,City,Zip) Values(@0,@1,@2,@3)"db.Execute(txtSQL,name,addr,city,zipc)

The SQL engine checks each parameter to ensure that it is valid for its column. All parameters are treated literally and not as part of the SQL to be executed.

In PHP:

$stmt = $dbh->prepare("INSERT INTO Patients (PatientName,Address,City,Zip) VALUES (:name, :addr, :city, :zipc)");
$stmt->bindParam(':name', $name);
$stmt->bindParam(':addr', $addr);
$stmt->bindParam(':city', $city);
$stmt->bindParam(':zipc', $zipc);
$stmt->execute();

Includes decription snippets from OWASP on SQL Injections.

Thank you for your interest, this project was fun to work on!

About

SQL Injection exploit πŸ’‰

Topics

Resources

Stars

6 stars

Watchers

1 watching

Forks

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

SQL Injection

License

A SQL Injection attack consists of the insertion or injection of a SQL query via the input data from the client to the application. A successful SQL injection exploit can read sensitive data from the database, modify database data (Insert/Update/Delete), execute administration operations on the database (such as shutdown the DBMS), recover the content of a given file present on the DBMS file system and in some cases issue commands to the operating system. SQL injection attacks are a type of injection attack, in which SQL commands are injected into data-plane input to affect the execution of predefined SQL commands.

SQL injection attacks allow attackers to spoof identity, tamper with existing data, cause repudiation issues such as voiding transactions or changing balances, allow the complete disclosure of all data on the system, destroy the data or make it otherwise unavailable, and become administrators of the database server.

SQL injection is common with PHP (this repo has a PHP SQL injection implementation) and ASP applications due to the prevalence of older functional interfaces. Due to the nature of programmatic interfaces available, Java and ASP.NET applications are less likely to have easily exploited SQL injections.

The severity of SQL injection attacks is limited by the attacker’s skill and imagination, and to a lesser extent, defense in depth countermeasures, such as low privilege connections to the database server and so on. In general, consider SQL injection a high impact severity.

Normal Backend Interaction

When prompted by an application, a user enters:

username:JohnDoe

password:password

The application processes the input:

username=getRequestString("username")
password=getRequestString("userpassword")
sql='SELECT * FROM Users WHERE name ="'+username+'" AND pass = "'+password+'"'

Database query:

SELECT*FROM users WHERE name ="JohnDoe"AND pass ="password"

Example Attacks

1. Return an Entire Table

A malicious party may get access to usernames and passwords in a database.

A user enters:

username:" OR ""="

password:" OR ""="

Query becomes:

SELECT*FROM users WHERE name =""OR""=""AND pass =""OR""=""

This SQL statement will return all rows from the users table since OR ""="" always evaluates to true.

2. Delete a Table Using a Batched SQL Statements

A malicious party may delete an entire table from a database.

A user enters:

username:nuclearfusion; DROP TABLE Suppliers

password:password

Query becomes:

SELECT*FROM users WHERE username ="nuclearfusion"; DROPTABLEstockPortfolio;

This SQL statement will result in the permanent deletion (DROP TABLE is an automatically committed statement whereas DELETE is not and can be rolled back) of the stockPortfolio table's data and structure from the database.

Prevention/Protection

SQL parameters can be used to protect a website from SQL injection. SQL parameters are values that are added to a SQL query at the time of execution.

name=getRequestString("PatientName")
addr=getRequestString("Address")
city=getRequestString("City")
zipc=getRequestString("Zip")
txtSQL="INSERT INTO Patients (PatientName,Address,City,Zip) Values(@0,@1,@2,@3)"db.Execute(txtSQL,name,addr,city,zipc)

The SQL engine checks each parameter to ensure that it is valid for its column. All parameters are treated literally and not as part of the SQL to be executed.

In PHP:

$stmt = $dbh->prepare("INSERT INTO Patients (PatientName,Address,City,Zip) VALUES (:name, :addr, :city, :zipc)");
$stmt->bindParam(':name', $name);
$stmt->bindParam(':addr', $addr);
$stmt->bindParam(':city', $city);
$stmt->bindParam(':zipc', $zipc);
$stmt->execute();

Includes decription snippets from OWASP on SQL Injections.

Thank you for your interest, this project was fun to work on!

About

SQL Injection exploit πŸ’‰

Topics

Resources

Stars

6 stars

Watchers

1 watching

Forks

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length > 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

SQL Injection

License

A SQL Injection attack consists of the insertion or injection of a SQL query via the input data from the client to the application. A successful SQL injection exploit can read sensitive data from the database, modify database data (Insert/Update/Delete), execute administration operations on the database (such as shutdown the DBMS), recover the content of a given file present on the DBMS file system and in some cases issue commands to the operating system. SQL injection attacks are a type of injection attack, in which SQL commands are injected into data-plane input to affect the execution of predefined SQL commands.

SQL injection attacks allow attackers to spoof identity, tamper with existing data, cause repudiation issues such as voiding transactions or changing balances, allow the complete disclosure of all data on the system, destroy the data or make it otherwise unavailable, and become administrators of the database server.

SQL injection is common with PHP (this repo has a PHP SQL injection implementation) and ASP applications due to the prevalence of older functional interfaces. Due to the nature of programmatic interfaces available, Java and ASP.NET applications are less likely to have easily exploited SQL injections.

The severity of SQL injection attacks is limited by the attacker’s skill and imagination, and to a lesser extent, defense in depth countermeasures, such as low privilege connections to the database server and so on. In general, consider SQL injection a high impact severity.

Normal Backend Interaction

When prompted by an application, a user enters:

username:JohnDoe

password:password

The application processes the input:

username=getRequestString("username")
password=getRequestString("userpassword")
sql='SELECT * FROM Users WHERE name ="'+username+'" AND pass = "'+password+'"'

Database query:

SELECT*FROM users WHERE name ="JohnDoe"AND pass ="password"

Example Attacks

1. Return an Entire Table

A malicious party may get access to usernames and passwords in a database.

A user enters:

username:" OR ""="

password:" OR ""="

Query becomes:

SELECT*FROM users WHERE name =""OR""=""AND pass =""OR""=""

This SQL statement will return all rows from the users table since OR ""="" always evaluates to true.

2. Delete a Table Using a Batched SQL Statements

A malicious party may delete an entire table from a database.

A user enters:

username:nuclearfusion; DROP TABLE Suppliers

password:password

Query becomes:

SELECT*FROM users WHERE username ="nuclearfusion"; DROPTABLEstockPortfolio;

This SQL statement will result in the permanent deletion (DROP TABLE is an automatically committed statement whereas DELETE is not and can be rolled back) of the stockPortfolio table's data and structure from the database.

Prevention/Protection

SQL parameters can be used to protect a website from SQL injection. SQL parameters are values that are added to a SQL query at the time of execution.

name=getRequestString("PatientName")
addr=getRequestString("Address")
city=getRequestString("City")
zipc=getRequestString("Zip")
txtSQL="INSERT INTO Patients (PatientName,Address,City,Zip) Values(@0,@1,@2,@3)"db.Execute(txtSQL,name,addr,city,zipc)

The SQL engine checks each parameter to ensure that it is valid for its column. All parameters are treated literally and not as part of the SQL to be executed.

In PHP:

$stmt = $dbh->prepare("INSERT INTO Patients (PatientName,Address,City,Zip) VALUES (:name, :addr, :city, :zipc)");
$stmt->bindParam(':name', $name);
$stmt->bindParam(':addr', $addr);
$stmt->bindParam(':city', $city);
$stmt->bindParam(':zipc', $zipc);
$stmt->execute();

Includes decription snippets from OWASP on SQL Injections.

Thank you for your interest, this project was fun to work on!

About

SQL Injection exploit πŸ’‰

Topics

Resources

Stars

6 stars

Watchers

1 watching

Forks

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content

Repository files navigation

SQL Injection

License

A SQL Injection attack consists of the insertion or injection of a SQL query via the input data from the client to the application. A successful SQL injection exploit can read sensitive data from the database, modify database data (Insert/Update/Delete), execute administration operations on the database (such as shutdown the DBMS), recover the content of a given file present on the DBMS file system and in some cases issue commands to the operating system. SQL injection attacks are a type of injection attack, in which SQL commands are injected into data-plane input to affect the execution of predefined SQL commands.

SQL injection attacks allow attackers to spoof identity, tamper with existing data, cause repudiation issues such as voiding transactions or changing balances, allow the complete disclosure of all data on the system, destroy the data or make it otherwise unavailable, and become administrators of the database server.

SQL injection is common with PHP (this repo has a PHP SQL injection implementation) and ASP applications due to the prevalence of older functional interfaces. Due to the nature of programmatic interfaces available, Java and ASP.NET applications are less likely to have easily exploited SQL injections.

The severity of SQL injection attacks is limited by the attacker’s skill and imagination, and to a lesser extent, defense in depth countermeasures, such as low privilege connections to the database server and so on. In general, consider SQL injection a high impact severity.

Normal Backend Interaction

When prompted by an application, a user enters:

username:JohnDoe

password:password

The application processes the input:

username=getRequestString("username")
password=getRequestString("userpassword")
sql='SELECT * FROM Users WHERE name ="'+username+'" AND pass = "'+password+'"'

Database query:

SELECT*FROM users WHERE name ="JohnDoe"AND pass ="password"

Example Attacks

1. Return an Entire Table

A malicious party may get access to usernames and passwords in a database.

A user enters:

username:" OR ""="

password:" OR ""="

Query becomes:

SELECT*FROM users WHERE name =""OR""=""AND pass =""OR""=""

This SQL statement will return all rows from the users table since OR ""="" always evaluates to true.

2. Delete a Table Using a Batched SQL Statements

A malicious party may delete an entire table from a database.

A user enters:

username:nuclearfusion; DROP TABLE Suppliers

password:password

Query becomes:

SELECT*FROM users WHERE username ="nuclearfusion"; DROPTABLEstockPortfolio;

This SQL statement will result in the permanent deletion (DROP TABLE is an automatically committed statement whereas DELETE is not and can be rolled back) of the stockPortfolio table's data and structure from the database.

Prevention/Protection

SQL parameters can be used to protect a website from SQL injection. SQL parameters are values that are added to a SQL query at the time of execution.

name=getRequestString("PatientName")
addr=getRequestString("Address")
city=getRequestString("City")
zipc=getRequestString("Zip")
txtSQL="INSERT INTO Patients (PatientName,Address,City,Zip) Values(@0,@1,@2,@3)"db.Execute(txtSQL,name,addr,city,zipc)

The SQL engine checks each parameter to ensure that it is valid for its column. All parameters are treated literally and not as part of the SQL to be executed.

In PHP:

$stmt = $dbh->prepare("INSERT INTO Patients (PatientName,Address,City,Zip) VALUES (:name, :addr, :city, :zipc)");
$stmt->bindParam(':name', $name);
$stmt->bindParam(':addr', $addr);
$stmt->bindParam(':city', $city);
$stmt->bindParam(':zipc', $zipc);
$stmt->execute();

Includes decription snippets from OWASP on SQL Injections.

Thank you for your interest, this project was fun to work on!

About

SQL Injection exploit πŸ’‰

Topics

Resources

Stars

6 stars

Watchers

1 watching

Forks

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

SQL Injection

License

A SQL Injection attack consists of the insertion or injection of a SQL query via the input data from the client to the application. A successful SQL injection exploit can read sensitive data from the database, modify database data (Insert/Update/Delete), execute administration operations on the database (such as shutdown the DBMS), recover the content of a given file present on the DBMS file system and in some cases issue commands to the operating system. SQL injection attacks are a type of injection attack, in which SQL commands are injected into data-plane input to affect the execution of predefined SQL commands.

SQL injection attacks allow attackers to spoof identity, tamper with existing data, cause repudiation issues such as voiding transactions or changing balances, allow the complete disclosure of all data on the system, destroy the data or make it otherwise unavailable, and become administrators of the database server.

SQL injection is common with PHP (this repo has a PHP SQL injection implementation) and ASP applications due to the prevalence of older functional interfaces. Due to the nature of programmatic interfaces available, Java and ASP.NET applications are less likely to have easily exploited SQL injections.

The severity of SQL injection attacks is limited by the attacker’s skill and imagination, and to a lesser extent, defense in depth countermeasures, such as low privilege connections to the database server and so on. In general, consider SQL injection a high impact severity.

Normal Backend Interaction

When prompted by an application, a user enters:

username:JohnDoe

password:password

The application processes the input:

username=getRequestString("username")
password=getRequestString("userpassword")
sql='SELECT * FROM Users WHERE name ="'+username+'" AND pass = "'+password+'"'

Database query:

SELECT*FROM users WHERE name ="JohnDoe"AND pass ="password"

Example Attacks

1. Return an Entire Table

A malicious party may get access to usernames and passwords in a database.

A user enters:

username:" OR ""="

password:" OR ""="

Query becomes:

SELECT*FROM users WHERE name =""OR""=""AND pass =""OR""=""

This SQL statement will return all rows from the users table since OR ""="" always evaluates to true.

2. Delete a Table Using a Batched SQL Statements

A malicious party may delete an entire table from a database.

A user enters:

username:nuclearfusion; DROP TABLE Suppliers

password:password

Query becomes:

SELECT*FROM users WHERE username ="nuclearfusion"; DROPTABLEstockPortfolio;

This SQL statement will result in the permanent deletion (DROP TABLE is an automatically committed statement whereas DELETE is not and can be rolled back) of the stockPortfolio table's data and structure from the database.

Prevention/Protection

SQL parameters can be used to protect a website from SQL injection. SQL parameters are values that are added to a SQL query at the time of execution.

name=getRequestString("PatientName")
addr=getRequestString("Address")
city=getRequestString("City")
zipc=getRequestString("Zip")
txtSQL="INSERT INTO Patients (PatientName,Address,City,Zip) Values(@0,@1,@2,@3)"db.Execute(txtSQL,name,addr,city,zipc)

The SQL engine checks each parameter to ensure that it is valid for its column. All parameters are treated literally and not as part of the SQL to be executed.

In PHP:

$stmt = $dbh->prepare("INSERT INTO Patients (PatientName,Address,City,Zip) VALUES (:name, :addr, :city, :zipc)");
$stmt->bindParam(':name', $name);
$stmt->bindParam(':addr', $addr);
$stmt->bindParam(':city', $city);
$stmt->bindParam(':zipc', $zipc);
$stmt->execute();

Includes decription snippets from OWASP on SQL Injections.

Thank you for your interest, this project was fun to work on!

About

SQL Injection exploit πŸ’‰

Topics

Resources

Stars

6 stars

Watchers

1 watching

Forks

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

SQL Injection

License

A SQL Injection attack consists of the insertion or injection of a SQL query via the input data from the client to the application. A successful SQL injection exploit can read sensitive data from the database, modify database data (Insert/Update/Delete), execute administration operations on the database (such as shutdown the DBMS), recover the content of a given file present on the DBMS file system and in some cases issue commands to the operating system. SQL injection attacks are a type of injection attack, in which SQL commands are injected into data-plane input to affect the execution of predefined SQL commands.

SQL injection attacks allow attackers to spoof identity, tamper with existing data, cause repudiation issues such as voiding transactions or changing balances, allow the complete disclosure of all data on the system, destroy the data or make it otherwise unavailable, and become administrators of the database server.

SQL injection is common with PHP (this repo has a PHP SQL injection implementation) and ASP applications due to the prevalence of older functional interfaces. Due to the nature of programmatic interfaces available, Java and ASP.NET applications are less likely to have easily exploited SQL injections.

The severity of SQL injection attacks is limited by the attacker’s skill and imagination, and to a lesser extent, defense in depth countermeasures, such as low privilege connections to the database server and so on. In general, consider SQL injection a high impact severity.

Normal Backend Interaction

When prompted by an application, a user enters:

username:JohnDoe

password:password

The application processes the input:

username=getRequestString("username")
password=getRequestString("userpassword")
sql='SELECT * FROM Users WHERE name ="'+username+'" AND pass = "'+password+'"'

Database query:

SELECT*FROM users WHERE name ="JohnDoe"AND pass ="password"

Example Attacks

1. Return an Entire Table

A malicious party may get access to usernames and passwords in a database.

A user enters:

username:" OR ""="

password:" OR ""="

Query becomes:

SELECT*FROM users WHERE name =""OR""=""AND pass =""OR""=""

This SQL statement will return all rows from the users table since OR ""="" always evaluates to true.

2. Delete a Table Using a Batched SQL Statements

A malicious party may delete an entire table from a database.

A user enters:

username:nuclearfusion; DROP TABLE Suppliers

password:password

Query becomes:

SELECT*FROM users WHERE username ="nuclearfusion"; DROPTABLEstockPortfolio;

This SQL statement will result in the permanent deletion (DROP TABLE is an automatically committed statement whereas DELETE is not and can be rolled back) of the stockPortfolio table's data and structure from the database.

Prevention/Protection

SQL parameters can be used to protect a website from SQL injection. SQL parameters are values that are added to a SQL query at the time of execution.

name=getRequestString("PatientName")
addr=getRequestString("Address")
city=getRequestString("City")
zipc=getRequestString("Zip")
txtSQL="INSERT INTO Patients (PatientName,Address,City,Zip) Values(@0,@1,@2,@3)"db.Execute(txtSQL,name,addr,city,zipc)

The SQL engine checks each parameter to ensure that it is valid for its column. All parameters are treated literally and not as part of the SQL to be executed.

In PHP:

$stmt = $dbh->prepare("INSERT INTO Patients (PatientName,Address,City,Zip) VALUES (:name, :addr, :city, :zipc)");
$stmt->bindParam(':name', $name);
$stmt->bindParam(':addr', $addr);
$stmt->bindParam(':city', $city);
$stmt->bindParam(':zipc', $zipc);
$stmt->execute();

Includes decription snippets from OWASP on SQL Injections.

Thank you for your interest, this project was fun to work on!

About

SQL Injection exploit πŸ’‰

Topics

Resources

Stars

6 stars

Watchers

1 watching

Forks

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content

Repository files navigation

SQL Injection

License

A SQL Injection attack consists of the insertion or injection of a SQL query via the input data from the client to the application. A successful SQL injection exploit can read sensitive data from the database, modify database data (Insert/Update/Delete), execute administration operations on the database (such as shutdown the DBMS), recover the content of a given file present on the DBMS file system and in some cases issue commands to the operating system. SQL injection attacks are a type of injection attack, in which SQL commands are injected into data-plane input to affect the execution of predefined SQL commands.

SQL injection attacks allow attackers to spoof identity, tamper with existing data, cause repudiation issues such as voiding transactions or changing balances, allow the complete disclosure of all data on the system, destroy the data or make it otherwise unavailable, and become administrators of the database server.

SQL injection is common with PHP (this repo has a PHP SQL injection implementation) and ASP applications due to the prevalence of older functional interfaces. Due to the nature of programmatic interfaces available, Java and ASP.NET applications are less likely to have easily exploited SQL injections.

The severity of SQL injection attacks is limited by the attacker’s skill and imagination, and to a lesser extent, defense in depth countermeasures, such as low privilege connections to the database server and so on. In general, consider SQL injection a high impact severity.

Normal Backend Interaction

When prompted by an application, a user enters:

username:JohnDoe

password:password

The application processes the input:

username=getRequestString("username")
password=getRequestString("userpassword")
sql='SELECT * FROM Users WHERE name ="'+username+'" AND pass = "'+password+'"'

Database query:

SELECT*FROM users WHERE name ="JohnDoe"AND pass ="password"

Example Attacks

1. Return an Entire Table

A malicious party may get access to usernames and passwords in a database.

A user enters:

username:" OR ""="

password:" OR ""="

Query becomes:

SELECT*FROM users WHERE name =""OR""=""AND pass =""OR""=""

This SQL statement will return all rows from the users table since OR ""="" always evaluates to true.

2. Delete a Table Using a Batched SQL Statements

A malicious party may delete an entire table from a database.

A user enters:

username:nuclearfusion; DROP TABLE Suppliers

password:password

Query becomes:

SELECT*FROM users WHERE username ="nuclearfusion"; DROPTABLEstockPortfolio;

This SQL statement will result in the permanent deletion (DROP TABLE is an automatically committed statement whereas DELETE is not and can be rolled back) of the stockPortfolio table's data and structure from the database.

Prevention/Protection

SQL parameters can be used to protect a website from SQL injection. SQL parameters are values that are added to a SQL query at the time of execution.

name=getRequestString("PatientName")
addr=getRequestString("Address")
city=getRequestString("City")
zipc=getRequestString("Zip")
txtSQL="INSERT INTO Patients (PatientName,Address,City,Zip) Values(@0,@1,@2,@3)"db.Execute(txtSQL,name,addr,city,zipc)

The SQL engine checks each parameter to ensure that it is valid for its column. All parameters are treated literally and not as part of the SQL to be executed.

In PHP:

$stmt = $dbh->prepare("INSERT INTO Patients (PatientName,Address,City,Zip) VALUES (:name, :addr, :city, :zipc)");
$stmt->bindParam(':name', $name);
$stmt->bindParam(':addr', $addr);
$stmt->bindParam(':city', $city);
$stmt->bindParam(':zipc', $zipc);
$stmt->execute();

Includes decription snippets from OWASP on SQL Injections.

Thank you for your interest, this project was fun to work on!

About

SQL Injection exploit πŸ’‰

Topics

Resources

Stars

6 stars

Watchers

1 watching

Forks

Contributors

Languages