菜鸟日记之SQL注入原理&万能密码注入

十一月二号,阴天,想听陈奕迅。

今天看到的这个还挺有意思的,SQL注入原理和万能密码。

数据库老师只是随口带过的一句话没想到竟然是SQL注入的关键.....果然...有自己独立的思考才是最重要的。

-------------------------------------------------------------------------------------------------------------------------------------------------

实验吧关于这部分内容是这样讲的:

 

-----------------------------------------------------------------------------------------------------------------------------------------------------

有找到很多关于这方面不错的博客

https://www.cnblogs.com/cnhacker/p/6984665.html

注:以下例子均来自这个博客。

------------------------------------------------------------------------------------------------------------------------------------------------------

SQL注入原理:
绕过数据库验证机制直接执行SQL语句。

利用现有应用程序,将(恶意)的SQL命令注入到后台数据库引擎执行的能力,它可以通过在Web表单中输入(恶意)SQL语句得到一个存在安全漏洞的网站上的数据库,而不是按照设计者意图去执行SQL语句。

例子

一、几年前的万能密码(和实验吧里的万能密码的逻辑很像)

在用户名处输入'or 1=1-- 而密码随便输入个456呢? 我们来看看数据库中的查询语句:

select id from users where username = '' or 1=1--  and password = '456'

'又 这里呢1=1永远为真,后面 and password = '456'被注释掉了。数据库不需要考虑,这里我们就跳过了验证。

这是几年前的万能密码.

 

二、整型参数的判断

SQL注入一般存在于形如:

HTTP://www.xxx.xxx/text.asp?id=XX

这种带有参数的asp或者动态网页中,注入又分为整形注入和字符串注入。总之只要是带有参数的动态网页且此网页访问了数据库,那么就有可能存在SQL注入。下以HTTP://www.xxx.xxx/test.asp?p=xx为例进行分析,xx此处设为整型。

当输入的参数xx为整型时,通常test.asp中SQL语句原貌大致如下:

select * from 表名 where 字段=xx

所以可以用以下步骤测试SQL注入是否存在。

①HTTP://www.xxx.xxx/text.asp?p=xx’(附加一个单引号)此时abc.ASP中的SQL语句变成了

select * from 表名 where 字段=YY’

数据库无法处理,返回异常;

②HTTP://www.xxx.xxx/test.asp?p=xx and 1=1。1=1为真 test.asp运行正常,而且与没加语句之前的test.asp?p=xx运行结果一样正常显示;

③HTTP://www.xxx.xxx/test.asp?p=YY and 1=2,语句为假,因为1≠2  test.asp运行异常;如果以上三步全面满足,test.asp中一定存在SQL注入漏洞

❤小技巧:有时管理员会在后台设置过滤掉单引号等字符,以防止SQL注入。此时可以用以下几种试一试。

                  大小定混合法:VBS并不区分大小写,而网站程序可能区分。然后程序员在过滤时通常要么全部过滤大写字符串,要                                             么全部过滤小写字符串,而大小写混合往往会被忽视。如用SelecT代替select,SELECT等;

                  UNICODE法:在IIS中,以UNICODE字符集实现国际化,我们完全可以IE中输入的字符串化成UNICODE字符串进行                   输入。如+ =%2B,空格=%20 等;URLEncode信息可以参加百度;

                  ASCII码法:可以把输入的部分或全部字符全部用ASCII码代替,如U=chr(85),a=chr(97)等,ASCII信息参见百度。

猜解内容

如明小子、ID类软件的工作原理:

猜解表名: and exists (select * from 表名)

猜解列名: and exists (select 字段 from 表

爆指定表名内容: and 1=1 union select 1,2,3,4,5 from 表名

猜解列长度 猜解语句: and (select top 1 len(列名)from 表名)>N and (select top 1 len(列名)from 表名)=N 其中N是数字

变换这个N的值猜解列长度,

例如: and (select top 1 len(列名)from 表名)>1 and (select top 1 len(列名)from 表名)>6

如果一直猜到6都显示正常页面,猜到7的时候返回错误(大于6并且小于等于7),那么该列的长度为7。

 

--------------------------------------------------------------------------------------------------------------------------------------------

看完这篇博客对SQL的注入了解深刻了很多。但是,看完下面的.....我就自闭了T-T

先放个链接:http://www.cnblogs.com/rush/archive/2011/12/31/2309203.html

讲的很清楚,给了我一个新的去看待SQL注入的角度。从攻的角度去看防,以及从防的角度去看攻。

然而。。。。打不开localhost页面做实验我很难受T-T。。以及为啥有的语句这么复杂从来没见过(黑人问号脸.jpg)

---------------------------------------------------------------------------------------------------------------------------------------------------------

摘一段防的角度:

后面作者提到的还有几种防的方式...还没理解......找点资料再看看。明天接着看  =。=   night~

------------------------------------------------------------------------------------------------------------------------------------------------------

-------------------------------------------------------------十一月四号的华丽分割线--------------------------------------------------------

今天在知乎看了一篇开水小姐姐SQL的注入过程,哈哈很有意思~  不得不说sqlmap是个强大的工具。顿时又想造工具!!T-T

在网上看了许多讲sql注入的,但我发现我有部分还是不能理解。很幸运找到了一个作者为录视频写的提纲,对比以后发现问题的本质是我欠缺部分web基础。链接:http://www.shack2.org/article/1422779387.html (B站有他的视频,不用专门下录屏软件)

最后码一下万能密码:

admin ' or ' a ' = 'a

admin ' or 1 = 1#(mysql)

admin ' or  1=1 ; -- (sqlsever)

sql = " select *from admin where username = " and password = '' '' ;

另外还在搜索过程里还看到了绕过waf的sql 注入。。??

有点晕........暂且不往下看了。下个sqlmap感受一把再说*-*

 

-------------------------------------------------------------------------------------------------------------------------

------------------------------------------------十一月五号华丽的分割线---------------------------------------

记录第一次sql注入过程:

【找注入漏洞】

step 1: 在网址后加  ‘              ---------报错:数据库出错

step2: 在网址后加   and 1=1      以及    and 1=2    -----------报错:数据库出错

【猜解表名】

step1:

在链接后面加上   and exists(select * from admin)            ----------------结果:页面显示正常   --->说明存在表名admin

step2:

【猜解列名】

step1:

在链接末尾加上   and exists(select admin from admin)          --------结果:页面显示正常---------->说明表中存在admin列

step2:

在链接末尾加上   and exists(select password from admin)            ----------结果: 页面显示正常  ------->说明存在列password

【猜测字段内容】

step1:

在链接后面加上  and (select top 1 len (admin) from admin )>1   ----------------->页面显示正常

step2:

把上一步的数值通过更改看页面情况。

对于这个网站来说,当我改成5的时候,它报数据库错误了。

说明字段长度为五。

 

 

于是,问题又来了!如何高效的进行猜测?

------------------------------------看到一个有意思的角度/trick ----十一月七日 立冬-------------------------------

设置陷阱账号:

设置两个帐号,一个是普通管理员帐号,一个是防注入的帐号。将防注入的账号设置的很象管理员,如 admin,以制造假象吸引软件的检测,而密码是大于千字以上的中文字符,迫使软件分析账号的时候进入全负荷状态甚至资源耗尽而死

 

发布了23 篇原创文章 · 获赞 12 · 访问量 2万+
展开阅读全文

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: 大白 设计师: CSDN官方博客

分享到微信朋友圈

×

扫一扫,手机浏览