猎豹科学院2015/09/11 15:31 0x00 前言 谈到SQL注入,那麽第一时间就会想到神器SQLMAP,SQLMap是一款用来检测与利用的SQL注入开源工具。那麽SQLMap在扫描SQL的逻辑到底是怎样实现的呢,接下来就探讨下SQLMap的扫描逻辑,通过了解SQLMap的扫描逻辑打造一款属于自己的SQL扫描工具。 0x01 SQL扫描规则: 要了解SQLMap的扫描规则,也就是Payload,那麽到底Payload是哪里来,是根据什么逻辑生成的呢,接下来必须先了解几个文件的,SQLMap的扫描规则文件位于/xml文件夹中,其中boundaries.xml与Payloads文件夹则为SQLMap的扫描规则所在,/xml/payloads中的6个文件,里面的6个文件分别是存放着不同注入手法的PAYLOAD。 那麽就必须了解两个格式,一是boundary文件,一是payloads。 例子: #!html <boundary> <level>1</level> <clause>1</clause> <where>1,2</where> <ptype>1</ptype> <prefix>'</prefix> <suffix> AND '[RANDSTR]'='[RANDSTR]</suffix> </boundary> clause与where属性 这两个元素的作用是限制boundary所使用的范围,可以理解成当且仅当某个boundary元素的where节点的值包含test元素的子节点,clause节点的值包含test元素的子节点的时候,该boundary才能和当前的test匹配,从而进一步生成payload。 prefix与suffix属性 要理解这两个属性的作用,那麽就先利用一段代码去讲解。 #!javascript function getattachtablebypid($pid) { $tableid = DB::result_first("SELECT tableid FROM ".DB::table('forum_attachment')." WHERE pid='$pid' LIMIT 1"); return 'forum_attachment_'.($tableid >= 0 && $tableid < 10 ? intval($tableid) : 'unused'); } 通过代码我们可以知道pid参与了SQL语句的拼接,那麽如果我们输入的pid为’ AND ‘test’ […]