任何来自客户端的数据都是不可靠的。
示范地址: http://jblog.zsyl.info 这也是我自己编的一个 PHP 应用,带有上传文件功能
如果你上传了 JPG 格式以外的文件,比如 hello.php,那么系统则不会让你上载。
有什么办法突破这个限制上传我们的 webshell 呢?
先看看我编的这个 PHP upload 源代码:
- <?php
- echo “<center>============欢迎来到文件<del>管理</del>上传系统=============</center>”;
- if($_FILES[“file”][“size”]<200000){
- if(file_exists("./upload/" . $_FILES[“file”][“name”])&&$_FILES[“file”][“name”]!=null){
- echo “文件名已经存在”;
- exit;
- }
- if($_FILES[“file”][“type”]==“image/jpeg”||$_FILES[“file”][“type”]==“image/pjpeg”){
- if($_FILES[“file”][“error”]>0){
- echo “error。。Error:” . $_FILES[“file”][“error”];
- }else{
- echo “上传文件名: " . $_FILES[“file”][“name”] . “<br />”;
- echo “后缀:” . $_FILES[“file”][“type”] . “<br />”;
- echo “大小:” . ($_FILES[“file”][“size”] / 1024) . " Kb<br />”;
- //echo “临时保存在: " . $_FILES[“file”][“tmp_name”] . “<br/>”;
- move_uploaded_file($_FILES[“file”][“tmp_name”],”./upload/" . $_FILES[“file”][“name”]);
- echo “保存在此目录下的 upload/” . $_FILES[“file”][“name”];
- }
- }else{
- echo “只能上传 JPG 文件”;
- }
- }else{
- echo “文件太大,必小于 200KB”;
- }
- ?>
- <html>
- <body>
- 请上传文件:
- <form action="" method=“post” enctype=“multipart/form-data”>
- <input type=“file” name=“file”>
- <input type=“submit” value=“上传这个文件”>
- </form>
- </body>
- </html>
差不多,大多数的都是这样。
我们试试用 brup suite 抓包——
我们先上传文件,在浏览文件里面把 webshell.php 改成 webshell.jpg,就是改一下后缀。
——————>>
然后上传,使用 burp suite 截取数据。
将这里 webshell.jpg 改回来 webshell.php
然后 forward 继续, 这样就上传成功了~这就对了
成功了将 PHP 文件上载
访问 jblog.zsyl.info/upload/webshell.php 测试一下
访问是成功了,只不过编码有错误,没事,改一下就行了。
这样我们就可以上传 shell 以至于控制整个网站。
看看谁先黑掉它:jblog.zsyl.info 只是一个小小的实战演练哦
关于 burp suite: http://www.2cto.com/Article/201307/229039.html