DVWA的碎碎念(ing)


旁边的HACKer大佬又教育了我,做过,就要懂,再去记住,前期好记性不如烂笔头,是啊 我觉得我从这个他说的千人日,万人轮的靶场学到了挺多了,可是还是觉得有点心虚,现在回头立马再补充上从代码理解原理,并且试图从数据流的过程中,去理解安全。写给自己,纪念青春
安装教程 https://blog.51cto.com/superwolf/2406417(侵删)
如果当dvwa突然访问不到
service apache2 start
service mysql start后重新访问Url

一、sqli

感觉光这个SQL注入真的是多多多,永远在堵和疏的战斗中~sql注入就是逃避过滤,让目标库执行我们的“恶意”sql语言。对于我来言,先抛开工具来说手工注入要精通起码得懂前端和sql结构化查询语言这些。所以在同步学习注入攻击的同时跟着学习sql语言的学习以及些许前端知识吧。信安难,多歧路,今安在……

1.字符型sql注入

对于文本型的注入,主要就应考虑引号闭合的问题。(在这里闭合的方法方式不尽相同,关键要看源码)
#是MySQL中的注释符,它把之后的内容都给禁用了

判断是数字型OR字符型,看一下返回值

1+2 返回值
3 返回值

判断字段数(or有真为真 and有假为假)

'or 1=1 # 显示表所有信息( $getid = SELECT * FROM tables WHERE ID = 变量 $getid = SELECT * FROM tables WHERE ID = 变量 or 1=1 使WHERE失去作用 不作筛选 暴露所有信息)

判断字段位置 (联合查询结构)

'union 1,2 # 参数代入替换(select id,username from user;例如这样注入select id,username from user union select id,password from user; 成功就会 union关键字的作用就是使得在username地方出现password【而由于两个参数皆可替换,可以随意替换例如这样‘ union select user,password from users # 当然前提列名数量对称】)

爆库

'union select user(),databse() # 可以暴露数据库表

爆表

‘union select table_name ,2 from information_schema.tables where table_schema=‘dvwa’ (其中information_schema.tables可以看成数据库综合表当然反过来’ union select 1,table_name from information_schema.tables where table_schema=‘dvwa’ 的显示结果意义差不多)

爆字段名

'union select columu_name,2 from information_schema.columns where table_name=‘users’ #

2.数字型sql注入

对比文本型的注入,主要是不用考虑引号闭合的问题。

判断是数字型OR字符型,看一下返回值

1+2 返回值
3 返回值

判断是否存在注入

1 and 1=1 返回正确
1 and 1=2 返回错误

判断字段数

1 order by x 直到有正错显对比

判断字段位

and 1=2 union select 1,2,3

爆库

union select 1,database(),3

爆表

union select 1,group_concat(table_name),3 from information_schema.tables where table_schema=‘dvwa’
(group_concat 拼接函数)

爆字段名

union select 1,group_concat(column_name),3 from information_schema.columns where table_name=‘users’

爆字段内容

union select 1,group_concat(id,title,content),3 from news

3.使用slqmap+burpsuit

sqlmap.py -u http://192.168.80.1/dvwa/vulnerabilities/sqli/?id=1&Submit=Submit --cookie=security=medium; PHPSESSID=2f120ee00f32798d11de936832312549

4.sql盲注

所谓盲注就是指当我们输入一些特殊字符时,页面并不显示错误提示,这样我们只能通过页面是否正常显示来进行判断。
将DVWA Security设置为low,然后选择SQL Injection (Blind),查看网页源码。可以发现与之前不同的是,在mysql_numrows()函数之前多加了一个@符号,后面的注释说明@符号可以抑制报错信息。
盲注其实对渗透并没有太大影响,我们输入“’ or 1=1 #”仍然可以显示出所有的数据。整个渗透过程也与之前基本一致。

5总结 SQL注入漏洞的挖掘与防御

https://yq.aliyun.com/articles/430453(侵删)
里边讲的函数补充:
php mysql_real_escape_string addslashes及mysql绑定参数防SQL注入攻击http://www.manongjc.com/article/1242.html
这些函数都是基于黑名单机制,而如果参数化预编译的白名单机制更安全。

二、Command execution

(俺感觉取决于编程的能力吧)
未经过滤 通过系统特殊符号执行系统命令
利用这类漏洞前提得看看web的服务器是什么系统
说实话 我感受不是太深,有待详实
“|”:前面命令输出结果作为后面命令的输入内容;直接执行后边的命令
“||”:前面命令执行失败的时候才执行后面的命令;
“&”:前面命令执行后接着执行后面的命令;
“&&”:前面命令执行成功了才执行后面的命令;
“;”:的用法就是先执行他前面的命令,直到前面命令执行完(无论对与错)就立即执行后面的命令。

防御:

PHP得精通啊,泪目………………
EscapeShellCmd()函数可以把一个字符串中所有可能瞒过Shell而去执行另外一个命令的字符转义,比如管道符(|)、分号(;)、重定向(>)、从文件读入(<)等。基于黑名单机制

EscapeShellArg()函数,这个函数是专门用来处理命令的参数的,它在给定的字符串两边加上单引号,并把字符串中的单引号转义,这样这个字符串就可以安全地作为命令的参数。

(谈谈escapeshellarg参数绕过和注入的问题http://www.lmxspace.com/2018/07/16/%E8%B0%88%E8%B0%88escapeshellarg%E5%8F%82%E6%95%B0%E7%BB%95%E8%BF%87%E5%92%8C%E6%B3%A8%E5%85%A5%E7%9A%84%E9%97%AE%E9%A2%98/)
挖掘:exec system popen passthru proc_open shell_exec

三、Brute Force

爆破=爆破工具(BP/Hydra)+字典(用户字典/密码字典)

字典:一些用户名或者口令(弱口令/使用社工软件生成)的集合

BurpSuite:多功能渗透测试工具,渗透测试神器,使用JAVA开发,功能齐全,方便渗透测试人员去测试WEB站点
跑字典比纯暴力快 这也太慢了
burpsuit-intruder

Hydra:九头蛇,开源的功能强大的爆破工具,支持的服务有很多,使用Hydra爆破C/S架构的服务

Medusa:美杜莎,开源的,支持爆破的服务有很多种,FTP、SSH、Mssql、Mysql、SNMP等等,在kali系统中有内置

防御:先使用函数过滤魔法引号、变量(使得命令执行漏洞减低近乎0)、增加等待时间等等,再添加验证码,12306的神之验证码 ,基本安全了。

四、File Inclusion

程序开发过程中,将重复利用的函数写入到一个文件里,在使用某些函数时,直接调用这些文件,为无需再次编写,这个过程就是Inclusion。为了灵活,程序员通常又将这些文件设置成变量,动态调用,又不区分文件类型,只要文件内容符合语法规范就可以了,也就造成了可以调用恶意文件的文件包含漏洞。可以读取敏感文件。

PHP中提供了四个文件包含的函数,分别是include()、include_once()、require()和require_once(),它们的区别如下:

require找不到被包含的文件时会产生致命错误,并停止脚本运行。
include找不到被包含的文件时只会产生警告,脚本将继续运行。
include_once与include类似,唯一区别是如果该文件中的代码已经被包含,则不会再次包含。
require_once与require类似,唯一区别是如果该文件中的代码已经被包含,则不会再次包含。

防御:

文件包含漏洞挖掘的思路跟之前一样,仍是搜索include()、include_once()、require()和require_once()这些函数,并且观察这些函数所包含的内容是否可以由用户控制,并是否采取了防御措施。
核心防御就是直接不让用户控制任何包含文件

五、CSRF

CSRF攻击建立在浏览器与Web服务器的会话中;
欺骗用户访问包含恶意代码的URL,从而执行里边包含的恶意代码。
怎么利用或者是防范呢

1.验证HTTP Referer字段

HTTP头有个Referer头 记录了请求发送的源地址
如果指向的不是同一个那么就拒绝,以防跨站请求,而Referer头是可以篡改的。

2.二次确认

ex:所谓二次确认,就是在调用某些功能时进行二次验证,如:删除用户时,产生一个提示对话框,提示“确定删除用户吗?”。转账操作时,要求用户输入二次密码。另外,设置验证码也可以起到相同的效果。

六、XSS

XSS是指攻击者在网页中嵌入恶意脚本,通常是JavaScript编写的恶意代码,当用户使用浏览器浏览被嵌入恶意代码的网页时,恶意代码将会在用户的浏览器上执行。因而,XSS与CSRF一样,同属于针对客户端的攻击,这与SQL注入、命令执行、文件包含等针对服务器端的攻击方式有很大不同。

盗取用户cookie;
修改网页内容;
网站挂马;
利用网站重定向;
XSS蠕虫。

XSS攻击分为反射型和存储型两种不同的分类
反射型XSS:未经过滤,嵌入客户端网页恶意代码,制造错误弹窗,防御:htmlspecialchars()函数转义进行过滤,这个函数可以把& (和号)、"(双引号)、’(单引号)、<(小于)、>(大于)这些敏感符号都进行转义,所有的跨站语句中基本都离不开这些符号。
存储型XSS:直接嵌入数据库恶意代码,窃取cookie,有了cookie,hacker通过修改自己的cookie,以管理员的权限对目标进行操作。防御还是进行htmlspecialchars()函数转义过滤。

七、File Upload

在未作过滤措施的前提下,将WebShell上传到网站中,从而达到控制网站甚至整个服务器的目的。
一方面可以通过限制上传文件的MIME类型
MIME类型用来设定某种扩展名文件的打开方式,当具有该扩展名的文件被访问时,浏览器会自动使用指定的应用程序来打开,如jpg图片的MIME为image/jpeg。

但是Brupsuit可以修改绕过。怎么绕过呢?

先理解通过Burpsuite的Send to Repeater中修改Content-Type意义:http采用请求/相应模型—请求消息和响应消息都可以包含实体信息,实体信息一般由实体头域和实体组成。实体头域包含关于实体的原信息,实体头包括Allow、Content- Base、Content-Encoding、Content-Language、 Content-Length、Content-Location、Content-MD5、Content-Range、Content-Type、 Etag、Expires、Last-Modified、extension-header。

content-type决定如何展示返回的消息体内容;

在Repeater的左侧窗口中将“Content-Type”修改为“image/jpeg”,也就是让目标接受到展示合法文件的请求,自然也就执行了恶意文件。

最好的办法,也就是下边的白名单策略:

$uploaded_ext = substr($uploaded_name, strrpos($uploaded_name, '.') + 1);

上行代码获取上传文件的扩展名,只允许想要你上传的文件类型(白名单形式)。

总结下,如果是什么都不做过滤,随便上传;做了MIME类型过滤,只有规定的类型才可以打开执行,但是通过Burpsuit-Rreapter可以避开(相比较接下来的扩展名探查文件类型,只做了打开方式的限制,我猜是因为通过通过Burpsuit-Rreapter欺骗上传,让其误以为把非法文件上传,从而用合法文件打开方式执行,而没有直接去探查上传的非法文件的真实类型);而做了探查实际上传文件的扩展名(白名单策略),即类型就指定了,只能上传这一种文件。
如果要挖掘上传漏洞,那么就可以在网页代码中搜索**$_FILES这个用于接收上传文件的变量,或是搜索move_uploaded_file**这个用于执行上传操作的函数,然后再分析是否采取了过滤措施。
上传漏洞作为一种主流的攻击方式,其形式是非常多样的,单纯就DVWA中这种上传漏洞而言,定义白名单就是一种不错的防御方式。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值