1.首先先把难度调为low,进行brute force
首先审计代码
' . ((is_object($GLOBALS["___mysqli_ston"])) ? mysqli_error($GLOBALS["___mysqli_ston"]) : (($___mysqli_res = mysqli_connect_error()) ? $___mysqli_res : false)) . '
' );
if( $result && mysqli_num_rows( $result ) == 1 ) {
// Get users details
$row = mysqli_fetch_assoc( $result );
$avatar = $row["avatar"];
// Login successful
echo "Welcome to the password protected area {$user}
"; echo ""; } else { // Login failed echo ""; } ((is_null($___mysqli_res = mysqli_close($GLOBALS["___mysqli_ston"]))) ? false : $___mysqli_res); } ?>
Username and/or password incorrect.
$query = "SELECT * FROM `users` WHERE user = '$user' AND password = '$pass';"
关注这条代码,当admin'or'1'='1,这条代码变成了$query = "SELECT * FROM `users` WHERE user = '$admin'or'1'='1' AND password = '$pass';"同时这个query就符合$result && mysqli_num_rows( $result ) == 1
这条判断语句的形式,登陆成功。
2.medium
先打开代码审计发现,中级相对于低级多了一个加密mysqli_real_escape_string
mysqli_real_escape_string() 函数转义在 SQL 语句中使用的字符串中的特殊字符
使用爆破功能intruder,将代码发送到这个板块,并使用出一个字典对密码进行爆破
输入进去显示正确
3.high
首先审计页面代码,发现high级别相对于上一级别多了一个token,登录验证的时候需要验证四个参数 username password login use-token
注:token和sessionId原理相同,是对key和key对应的用户信息进行加密后的加密字符,登录成功后,会在响应主体中将{token:'字符串'}返回给客户端。客户端通过cookie、sessionStorage、localStorage都可以进行存储。再次请求时不会默认携带,需要在请求拦截器位置给请求头中添加认证字段Authorization携带token信息,服务器端就可以通过token信息查找用户登录状态。
对于有token来防护csrf的,可以使用到这个功能进行爆破,因为每次用户的token都是随机的。
选择攻击模式为pitchfock,并且给要破解的token项带上美元符号
然后进行设置参数,首先现把攻击线程设置为1,因为Recusive-Group不支持多线程工作,之后将Redirections设置为always。之后回到payload设置参数,第一个参数按照一般形式设置,第二个参数选择Recoursive。
之后回到options选择grep-extract界面选择添加
进行调整如下所示,然后将token复制回去,上一个界面就可以开始攻击了。不过多赘述。
1.命令注入(Command Injection),对一些函数的参数没有做过滤或过滤不严导致的,可以执行系统或者应用指令(CMD命令或者bash命令)的一种注入攻击手段。PHP命令注入攻击漏洞是PHP应用程序中常见的脚本漏洞之一。
命令连接符
command1 && command2 先执行command1后执行command2
command1 | command2 只执行command2
command1 & command2 先执行command2后执行command1
这四个级别的区别是
1.没有做过滤。
2.做了基础过滤
3.做了比较强的过滤
4.从逻辑上改了,将ip切割为四个部分,且都为数字。
Low
ping (Packet Internet Groper)是一种因特网包探索器,用于测试网络连接量的程序。Ping是工作在 TCP/IP网络体系结构中应用层的一个服务命令, 主要是向特定的目的主机发送 ICMP(Internet Control Message Protocol 因特网报文控制协议)Echo 请求报文,测试目的站是否可达及了解其有关状态。
先审计代码,发现没有任何隐藏。基本上都是直接ping
直接简单的代码上就可以了
127.0.0.1&&net user
127.0.0.1&&ipconfig
2.middle
首先分析源代码
$substitutions = array( '&&' => '', ';' => '', );表示这两个符号已经被拖入黑名单了
但是&一个符号也可以表示相同的意思
这里需要注意的是”&&”与” &”的区别:
注:Command 1&&Command 2
先执行Command 1,执行成功后执行Command 2,否则不执行Command 2
Command 1&Command 2
先执行Command 1,不管是否成功,都会执行Command 2
high
分析代码就会发拉入黑名单的符号多了'&' => '',
';' => '',
'| ' => '',
'-' => '',
'$' => '',
'(' => '',
')' => '',
'`' => '',
'||' => '',
但仔细观察|后面是有一个空格的也就是说其实并没有把|符号过滤掉,其实过滤掉的是|加空格。
使用
127.0.0.1|dir代码进行攻击