dvwa中的sql注入学习
sql注入
SQL Injection,即SQL注入,是指攻击者通过注入恶意的SQL命令,破坏SQL查询语句的结构,从而达到执行恶意SQL语句的目的。
low级别:
判断注入类型
输入1 or ‘1’=’1 ,语句执行,返回结果,为单引号字符型注入。
猜语句中字段数
输入3时报错,说明存在两个字段,即这里的First name和Surname。
爆库
用联合查询注入爆出数据库。
爆表
爆出两个表,guestbook,users,账户和密码应该就在users里。
爆users表中的字段名
获得八个字段。
最后查询用户账户密码
medium级别
只能提交数字,抓包下来进行注入。
判断注入类型
输入1 or 1=1
返回结果,为数字型注入。
爆表和爆库名还是老样子,但是到了爆表名出了问题,一直报错,应该是什么被过滤了。
试了直接获取数据库中的表,
可以执行,说明单引号被过滤了。通过十六进制绕过即可,后面的操作跟前面一样,只需把有单引号的改成十六进制即可。
high级别
也是单引号字符型注入,和low并无太大区别,只是多了limit 1限制查询,通过#注释掉即可。
需要特别提到的是,High级别的查询提交页面与查询结果显示页面不是同一个,也没有执行302跳转,
这样做的目的是为了防止一般的sqlmap注入,因为sqlmap在注入过程中,无法在查询提交页面上获取查询的结果,没有了反馈,也就没办法进一步注入。
sqlmap注入
sqlmap.py -u "http://localhost/vulnerabilities/sqli/?id=1&Submit=Submit#" -dbs -threads 10 -batch
记得加双引号,才能指定参数提交。
这里还需要加cookie值,通过burp抓包,把cookie修改:sqlmap.py -u "http://localhost/vulnerabilities/sqli/?id=1&Submit=Submit#" -dbs -threads 10 -batch -o
upload(文件上传)
File Upload,即文件上传漏洞,
通常是由于对上传文件的类型、内容没有进行严格的过滤、检查,使得攻击者可以通过上传木马获取服务器的webshell权限,
因此文件上传漏洞带来的危害常常是毁灭性的,Apache、Tomcat、Nginx等都曝出过文件上传漏洞。
复习一下文件上传漏洞条件:第一,文件可以被上传。第二,文件能够被执行。第三,上传文件路径可知。
low
没有对上传文件类型,内容进行过滤、检查,直接上穿一句话木马即可
medium
方法一:查看源码,对文件类型进行过滤,我们把文件改成jpg后缀后上传。
然后通过文件包含来解析一句话木马,文件包含要提前从low级别上传好
没解析时,是图片形式,一句话无法执行。文件包含后可以执行:
方法二:抓包,修改文件类型,还有后缀改为php。
方法四:截断绕过。
在php版本小于5.3.4的服务器中,当Magic_quote_gpc选项为off时,可以在文件名中使用%00截断。
high
getimagesize(string filename)
函数会通过读取文件头,返回图片的长、宽等信息,如果没有相关的图片文件头,函数会报错。
strrpos(string,find,start)
函数返回字符串find在另一字符串string中最后一次出现的位置,如果没有找到字符串则返回false,可选参数start规定在何处开始搜索。
方法一:绕过文件头,可以在文件头添加GIF89a。
方法二:上传图片马,再进行文件包含。
在upload-labs做过很多了,就不在赘述了。
File Inclusion
File Inclusion,意思是文件包含(漏洞),是指当服务器开启allow_url_include选项时,就可以通过php的某些特性函数(include(),require()和include_once(),require_once())利用url去动态包含文件,此时如果没有对文件来源进行严格审查,就会导致任意文件读取或者任意命令执行。
文件包含漏洞分为本地文件包含漏洞与远程文件包含漏洞,远程文件包含漏洞是因为开启了php配置中的allow_url_fopen选项
(选项开启之后,服务器允许包含一个远程的文件),前面在做upload靶场后面的几关都使用了文件包含来解析一句话木马。
low
服务器没做任何过滤
服务器包含文件时,不管文件后缀是否是php,都会尝试当做php文件执行,如果文件内容确为php,则会正常执行并返回结果,如果不是,则会原封不动地打印文件内容,所以文件包含漏洞常常会导致任意文件读取与任意命令执行。
后面补充:/etc/shadow
报错,显示没有此文件,说明不是Linux。
但是知道了服务器文件的绝对路径,成功读取php.ini文件
构造相对路径,加那么多..\,是为了保证能够到达服务器D盘的根目录。
medium
源码中,过滤掉了https:// http:// ../ ..\ ,但是采用绝对路径不会被限制。
采用如图方式绕过,
high
High级别的代码使用了fnmatch函数检查page参数,要求page参数的开头必须是file,服务器才会去包含相应的文件。
使用file协议,前面的难度也都可以用file协议包含相应文件。