一.Brute Force(暴力破解)
high
查看源码发现token
对于与token的使用攻击模式为pitchfock来爆破
二Command injection(命令行注入)
Windows系统支持的管道符如下:
" |" 前面命令输出结果作为后面命令的输入内容
"|| " 如果前面的语句执行失败,则执行后面的语句,前面的语句只能为假才行。
"& " 两条命令都执行,如果前面的语句为假则直接执行后面的语句,前面的语句可真可假。
"&& " 如果前面的语句为假则直接出错,也不执行后面的语句,前面的语句为真则两条命令都执行,前面的语句只能为真。
Linux系统支持的管道符如下:
" ; " 执行完前面的语句再执行后面的语句、同时执行多条命令。
" | " 显示后面语句的执行结果。
" || " 当前面的语句执行出错时,执行后面的语句。
" & "两条命令都执行,如果前面的语句为假则执行执行后面的语句,前面的语句可真可假。
"&&"如果前面的语句为假则直接出错,也不执行后面的语句,前面的语句为真则两条命令都执行,前面的语句只能为真。
Linux系统还可以使用
分号(;)同时执行多条命令
还可以使用
重定向(>)在服务器中生成文件
或是使用(<)文件写入127.0.0.1&echo test>c:\1.txt
在c盘生成一个1.txt
1.low
没有任何过滤,管道符可以任意使用。
2,medium
有黑名单过滤了&&和;。其他的还可以使用
3,high
黑名单过滤,可以使用命令&&。
三,CSRF (跨站请求伪造)
全称Cross-site request forgery。跨站请求伪造,是指利用受害者尚未失效的身份认证信息(cookie、会话等),诱骗其点击恶意链接,或者访问包含攻击代码的页面,在受害人不知情的情况下,以受害人的身份向服务器发送请求,完成一系列非法操作。
1、low
查看源码:
可以看出只要修改密码后和再次确认的密码一致就可以修改成功。 形成新链接
使用户直接访问构造链接即可
2.medium
查看源码,发现增加了检查来源地址中是否包含http包头中host函数和访问的主机名来地址csrf攻击
使用burp suite工具截断功能修稿referer头信息,修改成功
high
<?php $change = false; $request_type = "html"; $return_message = "Request Failed"; if ($_SERVER['CONTENT_TYPE'] == "application/json") { $data = json_decode(file_get_contents('php://input'), true); $request_type = "json"; if (array_key_exists("HTTP_USER_TOKEN", $_SERVER) && array_key_exists("password_new", $data) && array_key_exists("password_conf", $data) && array_key_exists("Change", $data)) { $token = $_SERVER['HTTP_USER_TOKEN']; $pass_new = $data["password_new"]; $pass_conf = $data["password_conf"]; $change = true; } } else { if (array_key_exists("user_token", $_REQUEST) && array_key_exists("password_new", $_REQUEST) && array_key_exists("password_conf", $_REQUEST) && array_key_exists("Change", $_REQUEST)) { $token = $_REQUEST["user_token"]; $pass_new = $_REQUEST["password_new"]; $pass_conf = $_REQUEST["password_conf"]; $change = true; } } if ($change) { // Check Anti-CSRF token checkToken( $token, $_SESSION[ 'session_token' ], 'index.php' ); // Do the passwords match? if( $pass_new == $pass_conf ) { // They do! $pass_new = mysqli_real_escape_string ($GLOBALS["___mysqli_ston"], $pass_new); $pass_new = md5( $pass_new ); // Update the database $insert = "UPDATE `users` SET password = '" . $pass_new . "' WHERE user = '" . dvwaCurrentUser() . "';"; $result = mysqli_query($GLOBALS["___mysqli_ston"], $insert ); // Feedback for the user $return_message = "Password Changed."; } else { // Issue with passwords matching $return_message = "Passwords did not match."; } mysqli_close($GLOBALS["___mysqli_ston"]); if ($request_type == "json") { generateSessionToken(); header ("Content-Type: application/json"); print json_encode (array("Message" =>$return_message)); exit; } else { echo "<pre>" . $return_message . "</pre>"; } } // Generate Anti-CSRF token generateSessionToken(); ?>
查看源码发现服务端代码增加了token验证机制,看似已经可以防御CSRF攻击了,但是并不是无懈可击,这种防御机制,如果网站或系统存在XSS漏洞,可以结合xss漏洞来获取user_token,实现攻击。