代码展示
![](https://i-blog.csdnimg.cn/blog_migrate/efcd3b3bfe2905727951ccc08a430a63.png)
逐条分析函数作用以及逻辑框架
本剧代码主要用于接收前端界面传来的参数并判断其是否为Null
if( isset( $_POST[ 'Submit' ] ) )
issert函数演示
解析,不难看出issert判断字符是否为空后会返回bool类型的值若为ture即字符串不空则继续向下执行
<?php $submit=null; $Submit="helloword"; $a=isset($submit); $b=isset($Submit); var_dump($a); var_dump($b);
token几乎可以和cookie画等号,该函数用于验证登陆者的信息判断账号密码是否正确匹配
个人认为若是单纯以这个在靶场环境下并不重要,该靶场在这个阶段不需要登录认证
checkToken( $_REQUEST[ 'user_token' ], $_SESSION[ 'session_token' ], 'index.php' );
获取ip并赋予变量
$target = $_REQUEST[ 'ip' ];
对获取的字符串进行转义,如某些符号在php中有特殊意义但我要使用,这就造成了代码识别困难那么可以用这个函数对存在影响的字符进行标记不让解释器识别
$target = stripslashes( $target );
不难看出不加转义符已经造成了无法识别
<?php $a="ads\"jkl"; $c=stripslashes($a); var_dump($c); /*$b="asd"jkl"; $d=stripslashes($b);*/
加了转义字符后仍然是字符串形式输出并将' " '作为字符串内容输出
expode以什么样的方式切割字符串,本剧代码中是以“ . ”切割传入的字符串
$octet = explode( ".", $target );
代码演示
is_numeric检测数组中的元素是否为数字,该段代码中用了4个&&表示必须每一段都是数字才往下继续执行,切判断最多为四段否则也不予以执行
if( ( is_numeric( $octet[0] ) ) && ( is_numeric( $octet[1] ) ) && ( is_numeric( $octet[2] ) ) && ( is_numeric( $octet[3] ) ) && ( sizeof( $octet ) == 4 ) ) {
函数演示
<?php $a=127; $b=is_numeric($a); var_dump($b);
判断其是否为数字
将拆分后的字段拼接
$target = $octet[0] . '.' . $octet[1] . '.' . $octet[2] . '.' . $octet[3];
php_uname识别目标ip地址系统信息stristr忽略字符串中的大小写,若是windows系统执行ping命令
if( stristr( php_uname( 's' ), 'Windows NT' ) ) { $cmd = shell_exec( 'ping ' . $target ); }
若为其他系统执行以下命令,-c是由于在linux或unix中ping会无限执行导致该段程序一直得不到结束反馈故需要指定次数
else { $cmd = shell_exec( 'ping -c 4 ' . $target ); } echo "<pre>{$cmd}</pre>"; }
若输入的值为空或者不符合ipv4的规范则返回下列代码
else { echo '<pre>ERROR: You have entered an invalid IP.</pre>'; }
该段函数用于防止csrf跨站请求攻击(跨站请求伪造)
generateSessionToken();
简单介绍csrf攻击原理
有兴趣,请查阅网络安全相关书籍
简单的说是攻击者在受害人不知情情况下伪造了受害人网站的cookie,并利用该cookie对服务器进行访问从而窃取受害人的相关信息
1、用户C打开浏览器,访问受信任网站A,输入用户名和密码请求登录网站A;
2、在用户信息通过验证后,网站A产生Cookie信息并返回给浏览器,此时用户登录网站A成功,可以正常发送请求到网站A;
3、用户未退出网站A之前,在同一浏览器中,打开一个TAB页访问网站B;
4、网站B接收到用户请求后,返回一些攻击性代码,并发出一个请求要求访问第三方站点A;
5、浏览器在接收到这些攻击性代码后,根据网站B的请求,在用户不知情的情况下携带Cookie信息,向网站A发出请求。网站A并不知道该请求其实是由B发起的,所以会根据用户C的Cookie信息以C的权限处理该请求,导致来自网站B的恶意代码被执行。
总结
impossible难度相当于是对输入的字符串进行的白名单控制,即:仅输入ipv4字样的IP地址才可以被解析否则会被代码过滤,运用了将字符串裁剪->审核->拼接等操作将逻辑写死,但在实际生产中往往是类似于high难度的黑名单形式会被更多采纳