dareyourmind网站SQL exploit分析,challenge地址:http://www.dareyourmind.net/menu.php?page=sqlexploit2 0x01 工具准备 SQL 自动注入的工具就算了,主要练习手动注入的分析能力。 (1)选用Burp suite拦截包,然后修改提交的内容即可(需要设置代理,仅分析个SQL略麻烦); (2)Firefox的Live HTTP headers插件,可以修改HTTP包的头信息(本文选用这个工具) 0x02 SQL注入分析 首先,测试下是否过滤特殊字符如‘,“,---,/*,#等 输入1’,如下图所示 提交数据后,可看到爆出出错信息:对单引号没有过滤 猜测查询语句应该为”select column_name from table_name where user='输入数据' “的形式。 那么修改输入数据,使用注释符屏蔽掉后续的单引号,试用--- 、/* 和# 后发现#可以起到注释作用。如下图所示,可以列出所有的GirlFriends: 题目中要求分析密码,那么我们下来需要看看这个table有几列?使用order by 分析,在live http headers内修改数据包:user='or 1=1 order by 3 # ,发现弹出User Name too long !!!,oh oh 对输入的数据长度有限制。 既然限制了输入长度,那直接猜测下 列名吧:pass ? passwd? password? 输入user='or length(pass)>0# [节约字符空间,能省得空格就尽量省],居然列出了所有的GrilFrinds,ok知道了列名为pass 接下来解析pass的长度:修改length(pass)>后的数字,当返回的列表为空时,就表示这个条件为false,那可以确定这个具体值: user='or length(pass)>6# 返回所有列表 user='or length(pass)>10#返回所有列表[注意多余的空格,占用有限的字符问题] user='or length(pass)>15#返回空列表 user='or length(pass)>14#返回null user='or length(pass)>13#返回null user='or length(pass)>12#返回所有列表,那么说明pass的长度为13 user='or length(pass)=13#返回所有列表,证明猜测正确 密码分析? 可以使用substr(pass,1,1)>1 and substr(pass,1,1)<9的形式 + 二分法 可以确定一个字符值,可是 对字符长度做了限制,那就使用mid 代替? 使用user='or mid(pass,1,1)>1# 测试,发现可以返回所有的列表,那么我们可以使用其一一分析出各个字符。一个个的试感觉好麻烦的样子,是不是可以试试python 发包,分析的功能? 0x03 python半自动分析 从上面的分析发现,结果主要分为两种:1、输入的字符过长2、返回表格列表,列表中有数据的话,表格的行数大于1 那么,可以用下面的代码自动获取每个字符的值。
[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课