注册忘记密码

黑客论坛,黑客工具,黑客教程,QQ技术,黑客基地,黑客网络,黑客软件,黑客联盟,免杀,远控,ddos,cc,黑客攻防,黑客编程,黑客定位,手机定位,微信定位,hack,黑客网站,查开房,定位,信息查询

查看: 6513|回复: 0

[技术文章] 理解SQL黑客注入

[复制链接]
   0 UID
   0帖子
   0精华
21
   0威望
500
   0金币
45282
   0贡献
5000
   0阅读权限
   200
   积分
   0
   在线时间
   583 小时
   最后登录
   2020-3-30
发表于 2020-3-19 23:19:00 | 显示全部楼层 |阅读模式
    Web应用越来越成熟,技术也越来越复杂。它们涵盖了从动态Intemet和内部网入口(如电子商务网站和合作企业外部网)到以HTTP方式传递数据的企业应用(如文档管理系统和ERP应用)。这些系统的有效性及其存储、处理数据的敏感性对于主要业务而言都极其关键(而不仅仅是在线电子商务商店)。Web应用及其支持的基础结构和环境使用了多种技术,这些技术可能包含很多在他人代码基础上修改得到的代码.正是这种功能丰富的特性以及便于通过Intemet或内部网对信息进行比较、处理、散播的能力,使它们成为流行的攻击目标。此外,随着网络安全技术的不断成熟,通过基于网络的漏洞来攻破信息系统的机会正不断减少,黑客开始将重心转向尝试危害应用上。
    SQL注入是一种将SQL代码插入或添加到应用(用户)的输入参数中的攻击,之后再将这些参数传递给后台的SQL服务器加以解析并执行。凡是构造SQL语句的步骤均存在被潜在攻击的风险,因为SQL的多样性和构造时使用的方法均提供了丰富的编码手段.黑客SQL注入的主要方式是直接将代码插入到参数中,这些参数会被置入SQL命令中加以执行,不太直接的攻击方式是将恶意代码插入到字符串中,之后再将这些字符申保存到数据库的数据表中或将其当作元数据。当将存储的字符串置入动态SQL命令中时,恶意代码就将被执行。如果Web应用未对动态构造的SQL语句所使用的参数进行正确性审查(即便使用了参数化技术),那么攻击者就很可能会修改后台soL语句的构造。如果攻击者能够修改SQL语句,那么该语句将与应用的用户拥有相同的运行权限,当使用SQL服务器执行与操行系统交互的命令时,该进程将与执行命令的组件(如数据库服务器、应用服务器或Web服务器瑚有相同的权限,这种权限通常级
别很高。
    为展示该过程,我们回到之前的那个简单的在线零售商店的例子。如果读者有印象的话,当时使用了下面的URL来尝试查看商店中所有价格低于sioo的商品:
. http://www.vicrim.com/producLs.php'?vaFIOO
    注意:
    为了便于展示,本章中的URL示倒使用的是GET参数而非POST参数.POST参数操作起来与GET -样容易,但通常要用到其他程序,比如流量管理工具,Web浏览嚣插件或内联代理程序.
    这里我们尝试向输入参数val插入自己的SQL命令。可通过向URL添加字符串’OR’j’=¨来实现该目的:
.       http ://www.wctim.com/products .php?val= 100 LOR  ' I  '= ' 1
    这次,PHP脚本构造并执行的SQL语句将忽略价格而返回数据库中的所有商品,这是因为我们修改了查询逻辑。添加的语句导致查询中的OR操作符永远返回真(即1永远等于1),
从而出现这样的结果。下面是构造并执行的查询语句:
SELECT t
FROM Products'rbl
WHERE  Price <  '100.00 '  OR  rl'_rl
ORDER BY Proch.ctDescriptioni
    注意,
    可通过多种方法来利用SQL注入漏洞以便实现,讲目的。攻击成功与否通常高度依赖于基础数据库和所攻击的互联系统.有时,完全挖掘一个漏洞需要有大量的技巧和坚强的毅力:
    前面的例子展示了攻击者操纵动态创建的SQL语句的过程,该语句产生于未经验证或编码的输入,并能够执行应用开发人员未预见或未曾打算执行的操作.不过,上述示例并未说明这种漏洞的有效性,我们只是利用它查看了数据库中的所有商品。我们本可以使用应用最初提供的功能来合法地实现该目的。但如果该盛用可以使用CMS(Conlent Management System,内
容管理系统)进行远程管理,会出现什么情形n呢? CMS是一种W口b应用,用于为Wcb站点创建、编辑、管理及发布内容。它并不要求使用者对HTML有深入的了解或者能够进行编码。可使用
下面的URL访问CMS应用:
    ●www.victim.corNcms/login.php7uscmame foo&password--bar
    在访问该CMS应用的功能之前,需要提供有效的用户名和口令。访问上述URL时会产生如下错误{  “Incarrect usemame or password. please try again”.下面是Iogin.php脚本盼代码}
// connect ro the database $conn  -  myaql_connect { "localhos巴 " , "username " . "pas sword" } ;
// dynaruically bui工d the sql statement with the input

$query -. -SELECT uae工id FROM CMSUsers WHERE uaer - '$ GET ["user '] '  "
                                    " AbID  paasward  -   ' $_GET [ "pass\rord" ]  ' " r
// execute the qiery against the databas白
$result = mysql_query ($quary) ;
// check to see how ruany rows were retul:ned from the database
$rowcount  =  mysql_nuru_rows ( Sresult ) ;
// if a row is returned then the credentials must be V41id, SO
// forward the user to the eidmin pages
if    ($rowcount   ! -O)    {   heade r ( "location :   admin.php"),}
/!   if  a   row   is  not   re turned  then   thE   credantials  must  be   invalid
else  {  die ( . Incorrect  username  or  password.  please  trV  again . ' ) l
    login.php脚本动态地创建了一条SQL语句。如果输入匹配的用户名和口令,它将返回一个记录集。下列代码更加清楚地说明了PHP脚本构造并执行的SQL语句。如果输入的user和
password的值与CMSUsers表中存储的值相匹配,那么该查询将返回与该用户对应的userid。

SELECT U3erid
FROM CMSUsers
WI{ERE U5er - .foo. AND pass}rord _'barr
    这段代码的问题在于应用开发人员相信执行脚本时返回的记录数始终是0或1。在前面的SQL注入示例中,我们使用了可利用的漏洞来修改SQL查询的含义以使其始终返回真。如果
对CMS应用使用相同的技术,那么将导致程序逻辑失败。向下面的URL添加字符串‘OR'1'=’l,这次,由PHP脚本构造并执行的SQL语句将返回CMSUsers表中所有用户的userid。新的URL
如下所示:
    ·http:"www.victim.com/cms,login.pbp?usemamc-foo&password-bar' OR'l’-’1
    我们通过修改奁询逻辑,返回了所有的userid。添加的语句导致查询中的OR操作符永远返回真(即1永远等于1),从而出现了这样的结果。下面是构造并执行的查询语句:
    SELECT usarid
    FROM CMSUsers
    PqHERE user;’foo' AND password!‘password' OR 71’=’1’;
    应用逻辑是指要想返回数据库记录,就必须输入正确的验证证书,并在返回记录后转而访问受保护的admin.php脚本。我们通常是作为CMSUsers表中的第一个用户登录的。SQL注入
漏洞可以操纵并破坏虚用逻辑。



发表回复

您需要登录后才可以回帖 登录 | 注册会员

本版积分规则


快速回复 返回顶部 返回列表