循着小葱的建议开始看服务器端的知识。
-
注入攻击的本质:1.能够用户控制输入 2.原来执行的代码拼接了用户的输入。判断sql漏洞是否存在往往需要使用盲注的技巧(一种猜测),通过真假条件语句判断是否可以注入,通常还需猜测参数是否被单引号包围。然后使用一次次的条件语句可以判断出数据库表名,
用户字段名,用户密码长度和具体密码等。
$ and 1=2 and ‘a’=‘a’ //构造注入,若页面返回错误则进行真值判断
$ and 1=1 and ‘a’=‘a’ //若页面返回成功说明存在漏洞
$ and (select count() from data)>0 and ‘a’='a //猜测表名是否是data,可反复测试。若成功返回值>1
$ (select count(uname) from data)>0 //猜测用户字段为uname。同理猜测密码字段等信息。
$ Select count() from data where uname=‘p1ggy’ and len(upass)>1)>0 //猜测密码字段长度。修改len(upass)得到准确的值。
$ (Select count() from data where uname=‘p1ggy’ and mid(upass,1,1)<=‘9’)>0 //猜测第一位密码是否为数字。把upass的第一个字符提出来。确定字母还是数字后缩小范围。
$ (Select count() from data where uname=‘p1ggy’ and mid(upass,1,1)>=‘a’)>0 //猜测第一位密码是否为字母。
sql注入攻击主要依赖数据库的攻击,所以数据库攻击技巧十分重要。 -
数据库攻击技巧。
1.自动化注入工具可以帮助完成上述步骤
2.修改系统文件时可用load_file(),into dumpfile,load data infile.
3.加载用户自定义函数UDF执行命令。
4.在存储过程(功能类似udf)执行系统命令。有xp_cmdshell执行系统命令,xp_regread操作注册表等
5.超长值。strict_all_table,开启时输入长度超过限制会error,关闭时只有warning。当关闭时超长数据会插入成功,使用超长数据作为用户名可能会造成越权访问。选择时admin(55个空格)x等于admin。
-
sql注入可能存在的地方
1.含有输入数据表单的页面(登录界面、查询界面、反馈界面等)。
2.含有用户信息、ID等的URL,类似于http://XXX/index.asp?ID=155,可以操作ID后的参数数据。 -
sql注入的防御
1.最简单的是转义敏感字符。转义属于安全函数中。
2.最佳方式是使用预编译语句,绑定变量。在解析语句时使用x代替自由变量,仅在执行阶段带入变量值。即使攻击者插入类似于tom’ and ‘1’='1’的语句,也只会查询被绑定的语句功能。
3.使用安全的存储过程对抗。效果和预编译类似。
4.检查数据类型。如限制用户输入的数据类型只能为integer,或严格按照时间、日期的格式输入、或输入长度。在特殊的场合比较好用。
5.屏蔽出错结果阻止攻击者知道攻击结果。
这是25号写完的。断断续续,不专注的看完了sql注入的基础介绍,并进行了两次实战操作。有一个大致的认识后明天看看稍微复杂的代码。
最近心态不好,多学习就是了,其他的事情也就没什么了。
这是一首不论什么时候听到都会开心的歌。唯梓给我锁死!
轻飘飘时间。
真是冷死了,泡脚睡觉啦>。<