建设厅电工证查询网站,天猫建设网站的意义,六盘水网站建设求职简历,黑镜wordpress主题破解low:
首先查看源码没有对字符进行任何过滤
target参数为将要ping的ip地址#xff0c;比如在输入框输入127.0.0.1后#xff0c;对于windows系统#xff0c;会发出ping 127.0.0.1操作。
这里可以引入命令行的几种操作方式#xff1a;
A B#xff1a; 先执行A…low:
首先查看源码没有对字符进行任何过滤
target参数为将要ping的ip地址比如在输入框输入127.0.0.1后对于windows系统会发出ping 127.0.0.1操作。
这里可以引入命令行的几种操作方式
A B 先执行A如果成功执行B
A || B 先执行A如果失败执行B
A | B管道先执行A后将A的结果作为B的输入打印的是B的结果
A B先执行A然后不管成功与否执行B
意味着我们可以通过输入 【ip】【连接字符】 【命令】 的格式进行命令注入
medium 可以看到增加了黑名单 但是还有 || , 等命令可以使用
high 可以看到high完善了这个黑名单 但是仔细看还是能发现 | 符号的后面多加了一个空格 意味着我们仍然能使用 | 符号加命令继续命令注入
impossible
?phpif( isset( $_POST[ Submit ] ) ) {// Check Anti-CSRF tokencheckToken( $_REQUEST[ user_token ], $_SESSION[ session_token ], index.php );// Get input$target $_REQUEST[ ip ];$target stripslashes( $target );// Split the IP into 4 octects$octet explode( ., $target );// Check IF each octet is an integerif( ( is_numeric( $octet[0] ) ) ( is_numeric( $octet[1] ) ) ( is_numeric( $octet[2] ) ) ( is_numeric( $octet[3] ) ) ( sizeof( $octet ) 4 ) ) {// If all 4 octets are ints put the IP back together.$target $octet[0] . . . $octet[1] . . . $octet[2] . . . $octet[3];// Determine OS and execute the ping command.if( stristr( php_uname( s ), Windows NT ) ) {// Windows$cmd shell_exec( ping . $target );}else {// *nix$cmd shell_exec( ping -c 4 . $target );}// Feedback for the end userecho pre{$cmd}/pre;}else {// Ops. Let the user name theres a mistakeecho preERROR: You have entered an invalid IP./pre;}
}// Generate Anti-CSRF token
generateSessionToken();? 相关函数介绍
stripslashes(string) : 该函数会删除字符串string中的反斜杠返回已剥离反斜杠的字符串。
explode(separator,string,limit): 该函数把字符串打散为数组返回字符串的数组。参数separator规定在哪里分割字符串参数string是要分割的字符串可选参数limit规定所返回的数组元素的数目。
is_numeric(string): 该检测string是否为数字或数字字符串如果是返回TRUE否则返回FALSE。
可以看到Impossible级别的代码加入了Anti-CSRF token同时对参数ip进行了严格的限制只有诸如“数字.数字.数字.数字”的输入才会被接收执行因此不存在命令注入漏洞。
一波强行总结
不仅要学会攻击更要学会防御 对命令处理要尽可能过滤 尽可能完善黑名单但是黑名单的方式总会有纰漏和绕够 可以用函数限制所输入的格式例如限制为只有数字或者本题中【数字】.【数字】.【数字】