JS
JS文件上传
文件上传 对文件上传的后缀名进行识别,可以通过PHP或者JS实现
前端JS和后端PHP的区别 JS:源代码在前端,可以使用重写前端页面来绕过 判定方法:看代码,看响应速度…… PHP:源代码在后端,只能进行黑盒测试
|
JS的AJAX
AJAX:一种传递数据的方式,不过还是白盒的。可以实现数据交互。
环境:前端的支付环境,登录环境–>通过修改BP包影响到整个支付流程或者修改登录标志影响登录,造成任意支付/登录漏洞
实际:将正确结果状态码替换掉错误的状态码,导致账号被盗用(验证码)
代码
前端
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Ajax登录</title> </head> <body> 帐号:<input type="text" class="user"> 密码:<input type="password" class="pass"> <button>用户登录</button>
<script src="js/jquery-1.12.4.min.js"></script> <script src=""></script> <script> $('button').click(function () { $.ajax({ type:'post', url:'ajax.php', dataType:'json', data:{ myUname:$('.user').val(), myUpass:$('.pass').val() }, success:function (res) { if(res.infoCode==1){ alert('登录成功'); }else{ alert('登录失败');
} } });
});
</script>
</body> </html>
|
后端
<?php $username=$_POST['myUname']; $password=$_POST['myUpass']; $success=array('msg'=>'ok'); if($username=='xiaodi' && $password=='123456'){ $success['infoCode'] = 1; }else{ $success['infoCode'] = 0; } echo json_encode($success);
|
安全测试当中,拦截infocode并且更改值会返回不一样的值。要观察显示结果的决定方。例如success是返回的部分。
决定的是JS就好搞,如果还是PHP就难顶了。
看不见AJAX的情况:引入型的JS
PHP框架
ThinkePHP5
找TP框架漏洞的方法:
1.看写法
2.看历史版本漏洞(看历史漏洞实验时,漏洞没被修复才能调用)
获取版本的途径:
黑盒:看回显数据包和报错信息,还有看URL地址。插件识别等
白盒:看源码配置文件
面对框架的就是框架漏洞。ThibkPHP用户量大。
代码学习
网站访问的文件夹:publick
本地访问网站访问的路径模块部分: application\index\Index.php 首字母必须大写
网站访问该index.php文件的一个公共类xiaodi的方法: 127.0.0.1/index.php/index/index/xiaodi 控制器 模块名 方法名
新建application\index\Test.php里面放: <?php namespace app\index\controller; use think\Controller; use think\Db;
class Test extends Controller { public function index() { echo "I like my Wife."; } public function n() { $x = input("x"); echo "你的get传参值为:$x"; } }
访问application\index\Test.php里面index的方法 127.0.0.1/index.php/index/test/index
访问application\index\Test.php里面n的方法且获取get参数输出 127.0.0.1/index.php/index/test/n?x=1 页面输出为: 你的get传参值为:1 对应的旧方法使用为:(当前版本好像无法使用,这是ThinkPHYP3点多版本的访问方式) 127.0.0.1/index.php?m=index&c=test&a=n
新建/application/xiaodi/controller/Xiaodi.php,配置为: <?php namespace app\xiaodi\controller; use think\Controller; use think\Db;
class Test extends Controller { public function index() { echo "I like my Wife."; } public function n() { $x = input("x"); echo "你的get传参值为:$x"; } }
尝试访问的方法: 127.0.0.1/index.php/xiaodi/xiaodi/index
|
传参学习
框架类解题思路:
1.是否按照官方的写法去写。
2.官方是否有出现过漏洞。
$x = $GET['x']; $x = input('x');
$x = input('?get.x'); $x = input('get.x');
|
数据库配置文件位置
修改数据库的配置 application/database.php
return [ 'type' => 'mysql', 'hostname' => '127.0.0.1', 'database' => 'dbname', 'username' => 'root', 'password' => 'password', 'hostport' => '3306', 'charset' => 'utf8', 'prefix' => '', 'break_reconnect' => true, ];
对应的数据库操作方法: public function edu() { $id = (int)input("get.id"); echo $id; $id = isset($id)?$id:1; $data = Db::table('message_copy')->where('id', $id)->select(); if ($data){ foreach ($data as $k=>$v){ echo $v['username']."<br>"; echo $v['content']."<hr>"; } } }
|