欢迎来到 嗅灵易学

零基础也能上手的脚本技术课,一对一答疑带你入门

[原创]SQL注入实例分析

[原创]SQL注入实例分析

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
那么,可以用下面的代码自动获取每个字符的值。

上传的附件 sql-0.png
sql-1.png
sql-2png.png
sql3.png
sql4.png

注意:上传附件及图片大小不得大于30M。

⚠️ 版权声明:
本博客所有内容(含教程、源码、工具)仅供个人技术学习与研究交流使用,严禁商用、倒卖、二次分发及非法用途。
未经作者书面授权,任何组织或个人不得转载、复制或用于其他平台,违者将追究相关责任。

0 0 0 举报
复制成功