brute force
首先我们看到第一关,这一关其实讲的是万能密码的使用,我们可以看到他的代码
我们看到第12行,他的语句是select * from 'user' where user = '$user' AND password='$pass';
然后我们将我们刚刚输入的账号和密码放到这个语句中看看
Select * from 'user' where user = admin' and 1=1# AND password=' ';
在PHP中#相当于是注释的符号,也就是说#号后面的语句已经被注释掉了,我们现在密码那一行中不管输入什么东西都可以登录成功。这其实也是万能密码的用法。
然后我们在来讲一下关于逻辑运算符的一些知识点吧。
and和or这两个是我们在万能密码中常用的两个逻辑运算符。
and表示:如果两个表达式都为真,则返回true。
or表示:如果任意一个表达式为真,则返回ture。
我们现在将难度调到medium,然后我们在分析一下源代码。
我们看到mysqli_real_escape_string这个函数,这个函数在username和password中都用来一次,他的作用是用来预防sql注入的,他将MySQL中的特殊字符都进行了转义,以此方法来达到预防sql注入的功能。
其实按正常的逻辑来讲的话,更具这一章的名字,暴力破解,我们其实可以是使用burpsuite中的爆破米快进行密码爆破。理论存在,实践开始。
bp抓包因该不用太过于的细讲了,配置一下代理,然后开始抓包
然后我们发送到爆破模块,配置一下爆破字典,然后开始爆破。
得到密码,然后我们就可以登录成功。
command injection
这一章是关于命令注入的知识点,源代码是这样的:
我们看到问题,题目要求我们输入ip
发现出现了类似于cmd里面的一些东西,虽然是乱码,但是可以看出是ping通了,然后我们就可以开始构造payload的了:
127.0.0.1 | whoami 查看一下权限,发现现在是管理员权限。
我们切换到medium,查看一下源代码,发现存在过滤
但是并没有过滤| 所以我们还是可以进行命令注入的。
构造payload:
127.0.0.1|whoami
我们看到high:
查看一下源代码,发现过滤了很多的一些符号。
但是如果我们细看的话,|的后面有一个空格号,所以我们其实也是可以利用命令注入的,所以我们可以这样构造payload:
127.0.0.1|whoami
然后可以发现系统当前的权限:
file inclusion
这一章是讲的文件包含漏洞的,这个漏洞如果处理的不好,可能会造成隐私文件泄露。
但是这个漏洞的前提是要打开allow_url_fopen和allow_url_include。
我们看到靶场页面。
将等级切换到low,然后我们查看一下页面的源代码:
发现没有进行过滤,我们只需要传入参数就可以了。
我们打开这三个文件,看看里面有什么内容
发现没有什么重要的东西,我们将url中的参数更改一下,比如我们查看一下他的/etc/passwd文件。
出现了报错,但是他也把他的路径给显示出来了,我们切换到靶机,在靶机的www目录创建一个muma.php文件,但是我们要构造的是相对路径而不是绝对路径,因为在比赛的靶场中,一般是将相对路径爆出来,不会爆绝对路径,然后我们就需要使用../来构造相对路径,“..”是退回到上一个目录
发现查看到了,因为没有进行过滤,所以我们可以查看任何的东西
我们在切换到medium
我们可以看见他将../,..\,http://,https://都转换为了空字符。
我们在尝试使用../../来读取一下我们的php.ini文件
发现读取失败。然后我们尝试双写http://来进行绕过
发现可以得到,然后我们在尝试读一下我们的木马文件
读取成功
难度切换到high:
我们发现也是存在过滤的,我们看到if那一条代码,意思是这样的,如果说我们查看的文件没有file或者include.php这两个字符串就会报错。
我们可以这样绕过,因为我们读取的是php.ini这个配置文件,所以我们可以在page的后面加上file://字段,他也是可以的取到文件的
所以我们就可以这样构造payload。
file upload
本章讲的是文件上传漏洞,老规矩,先看源代码:
貌似没有过滤,我们也许是可以直接上传一个php文件给他,然后在通过菜刀来获得他的权限,因为他直接把他文件的位置都给爆出来了。
然后我们在看到medium,查看一下他的源代码。
我们看到$uploaded_type这里,这里应该是一个过滤,只允许我们上传jpeg和png这两种类型的文件,很明显是白名单绕过。
然后我们看到这个题目,更具源代码,我们其实可以上传一个图片码,首先是写一个一句话木马,然后在随便找一张图片,在cmd中使用copy 图片/b+木马 生成的图片名字。
构造完之后我们就可以上传了
因为他是没有太难的过滤的,所以我们可以直接上传一个图片码。
然后我们在将难度设置到high,其实high和上一题是一样的思路,就是上传图片码,然后用菜刀连接。
他的源码也只是对后缀做了一些处理。
如果想对文件上传漏洞更加熟悉的同学,建议去学习一下upload-master这个靶场,里面全是文件上传的漏洞,基本上常见的都在这里面。
sql injection
这一章我们来到了最习惯也是最熟悉的sql注入。
危害:
1.造成用户的信息泄露。
2.可以对数据库的数据进行增加或删除操作
3.如果网站目录存在写入权限,可以写入网页木马
4.经过提权等步骤,服务器最高权限被攻击者获取。攻击者可以远程控制服务器,安装后门,得以修改或控制操作系统。
没有对我们输入的sql语句做什么过滤,那如果我们按照正常的思路,看看是否可以渗透进去。
首先我们先判断一下他有没有注入,最简单的,在我们传参的后面加上一个',看看会不会报错
发现报错,说明存在注入,然后我们在看看他的字段长度,使用order by
1' and 1=1 order by 2#
通过尝试,我们发现他的字段长度是2,如果我们将2改为3的话就会引起报错。
既然我们现在已经发现他存在两个字段长度,然后我们来查看他两个字段的回显。
我们使用1' and 1=1 union select 1,2#
我们得到回显,然后我们将1的位置更改为database()。
我们得到他的数据库为dvwa,然后我们开始进行爆表。
1' union select 1,table_name from information_schema.tables where table_schema='dvwa'#
我们发现他有guestbook,users这几个表,然后我们来爆破一下表中的字段。
然后我们在进行爆破字段:
1' and 1=1 union select 1,group_concat(column_name) from information_schema.columns where table_name='users'#
现在知道了字段,我们发现有user,password这几个数据,我们查看一些内容
得到账号和密码,其中这些密码需要进行md5解密,就不一一去搞了。
然后我们把难度切换到medlium,查看一下他的源代码。
然后在看到题目,发现是POST传参。
我们的思路是这样的,使用BP抓包,然后进行渗透。我们首先先打开代理,然后我们使用bp抓到的数据包是
发现id参数,然后我们发送到repeater中,在id=1的后面加一个单引号,看看有没有报错,发现报错。
然后我们将order by 的参数改为2,发现可以
然后后面就和刚刚的思路差不读,开始爆破数据库。
我们得到数据库为dvwa,随后我们就可以爆出他的表
发现有guestbook,users两个表,然后是开始爆破字段。
-1 union select 1,group_concat(column_name) from information_schema.columns where table_name='users'#
我们发现报错了,这个报错是因为单引号被转义了,变成了\'
所以我们要将表名字的user更改为16进制
7573657273 然后我们加上0x,因为0x是16进制的标识符
得到了他的字段,现在只需要将他的解出来就可以了
然后我们切换到high,查看一下他的源代码,我们发现了他在sql语句后面添加了一个limit 1,这个语句是这样的,他只会显示一行,以此来防止多条数据的显示,我的思路是将后面的limit 1 给注释掉,用一个#因该就可以了
由于前面的打法和low一样。但是这个难度也挺特殊的
首先打开靶场
这个是题目,更具要求,我们点击这个链接,我们会来到一个新的地方
我们尝试输入一个1,看看有没有什么反应。
发现这个页面没有什么特殊的变化,但是刚刚那个页面出现了回显
然后我们更具原来的注入方法进行注入,由于之前已经写过了,所以我们直接跳一下
然后我们得到了他的表,开始爆字段
可能有人会疑惑为什么我要在#号的前面加一个; 是这样的,我们看到源代码
$query = "SELECT first_name, last_name FROM users WHERE user_id = '$id' LIMIT 1;";
因为我们要过滤掉limit 1 ,所以我们要用注释符将limit 1 注释掉,但是我们发现在limit 1;"的后面还有一个; 但是他被注释掉了,所以如果我们不加;的话,则这个sql语句就是不完整的。
这也就是我们加;的原因。
查看字段的数据
以上就是关于SQL注入的教程
DOM型XSS
dom型xss差不多是这样的:不与后台服务器产生数据交互,是一种通过DOM操作前端代码输出的时候产生的问题,大部分属于反射型。
反射型呢属于是:交互的数据不存在数据库中,一般都是一次性的。
然后我们看到题目:
emmmm,送分了,直接在url那里更改一下?default=English,我们将English更改为xss的脚本
<script>alert("XSS)</script>
然后enter,就可以看到我们的js脚本运行成功。
然后我们将难度跳到medium,在看源代码,发现他这次有过滤了
分析代码,如果我们的参数中存在<script就会被过滤掉,xss绕过的方法有这几种:
1.抓包,修改前端代码绕过
2.有一些过滤可能没有那么完整,我们也许可以使用大小写不一样来绕过
3.还有就是双写绕过,比如说<scriscriptpt>alert("xss")</scriscriptpt>这种写法来绕过他的拦截。
4.标签的使用也是可以绕过xss的,html中的a标签的href属性用于指向超链接目标的URL,包含了片段识别
符和JavaScript代码段。也就是说,如果用户用了<a>标签中的内容,浏览器会尝试检索显示href属性指定的url所表示的文档,或者执行JavaScript表达式,方法和函数。所以我们可以这样来构造payload
<a href="javascript:οnclick=alert(1)" >test</a>
<a href=javascript:alert(1)>test</a>test</a>
5.还有就是src属性,<img src=1 οnerrοr=alert(1)> <iframe src="javascript:alert(1)">
6.利用事件绕过,<iframe οnlοad=alert(1)>
然后我们尝试将English修改为一段xss代码。
然后我们enter,发现没有js弹窗,然后我们打开F12,看了一下,发现我们刚刚的那段代码被放进了
我们发现我们的xss语句被包含在了<options>标签中
然后我们可以通过闭合<option来完成绕过。
我们切换到high 我们查看一下源代码
我们发现是白名单绕过,也就是说,url只允许红字的那几个参数,我们可以尝试使用#,因为url不会将#后面的东西发送给服务器,我们可以使用这个思想进行绕过。
首先我们先随便发送一个数据
然后我们尝试绕过,在English后面添加#</option></select><body οnlοad=alert("XSS")>
然后我们发现绕过成功。
这里提一下<body onload>这个标签,这个是在页面加载完成后立刻触发。
语法:
Onload=javascriptcode
反射型XSS
对于这道题来说,我们xss的打法一直都是先看源代码,其实我是想从medium开始讲的,因为这个靶场中的每一个xss的low等级都是一样的,没有什么难度。如果这里有low看不懂的同学,你可以看看上一篇的DOM型xss是怎么写的。这里我们low就不讲了直接跳到medium。
首先我们先看到medium的代码
emmm,他将<script>给过滤掉了,这里的思路和上一篇dom型是一样的,我们使用<img src=1 οnerrοr=alert("XSS")>
就是不使用<script>标签。
然后我们在看到high吧。
先看源代码
他是将<script>这个标签给过滤掉了,所以我们可以使用<img标签进行绕过
payload也是我们一直用的
<img src=1 οnerrοr=alert("XSS")>
储存型XSS
这个因该是储存型xss,因为这种类型的xss一般存在的地方就是评论区和其他的地方,也是最容易用来抓取cookie的一种类型的xss。
我们先看到低等级,看看源码:
这里其实没有过滤的语句存在,我们可以直接使用xss
但是他是储存型xss,也就是说我们每访问一次,就会执行一次xss。
储存型XSS也是经常用户使用cookie脚本的一个漏洞。
然后我们切换到medium,查看一下源代码:
在str_replace的地方我们发现了过滤,也就是说我们又要绕过他这个对script的检测 ,但是如果我们仔细看的话就会发现在massage那里是有一个\进行转义了,所以我们要跟换我们渗透的思路,我们要在name那里进行渗透,但是name有字数的限制,我们还要在F12中将前端代码给稍稍更改一下才能进行xss攻击。
然后我们在将难度切换到high,分析他的代码
我们发现他和medium的思路是差不多的,过滤掉了<script>和对message使用了\进行了转义。
我们可以像medium一样的打法,使用<img标签进行绕过攻击
以上是我做DVWA靶场的一些思路和总结,本人刚学习网络安全,可能上面的文章存在一些问题或者写法是错误的,请各位大佬看出来了告诉我,我一定会改正的。勿喷 。谢谢阅读。