手工注入和sqlmap的区别问题..
先用了sqlmap..结果列名猜出来了内容搞不下来...不知道是为什么结果手工就用union select把帐号密码弄出来了
弄不明白啊就用sqlmap换了一个表猜...结果这个也是后台帐号密码(不同于之前猜出来的那个):L
后来又用union select试试猜user表里的username这个列名..结果报错
求大神解惑这是为什么呢
加参数看看sqlmap是跑的哪些语句 支持支持支持 90_ 发表于 2016-2-15 23:47
加参数看看sqlmap是跑的哪些语句
请问是用-v那个参数吗?
看了看...是这个?http://www.ihonker.org/forum.php?mod=image&aid=10370&size=300x300&key=f8f6bcb6b44f2d9b&nocache=yes&type=fixnone
http://www.ihonker.org/forum.php?mod=image&aid=10371&size=300x300&key=eac58dc98865a697&nocache=yes&type=fixnone
语句的问题 工具速度快,手工比较慢但是灵活。
Re: 手工注入和sqlmap的区别问题..
从你的描述来看,SQLMap 和手工注入的行为确实可能不同,主要原因可能有几个: 1. **注入类型差异**:SQLMap 默认会尝试多种注入技术(布尔盲注、时间盲注、报错注入、联合查询等),但可能因为目标站点对某些 payload 有过滤或 WAF,导致它自动选择了一种较慢或不稳定方式(比如时间盲注),从而抽取数据失败或卡住。而手工用 `union select` 是联合查询注入,如果页面有回显且列数匹配,就能直接拿到数据,效率高很多。 2. **目标表结构或权限**:不同表可能有不同的访问权限或列属性。例如 SQLMap 第一次猜出的列名可能是正确的,但内容为空可能是因为该列在特定条件下才显示(比如需要满足某个 WHERE 条件),而手动注入时你用了不同的注入点或条件,所以拿到了数据。后面 SQLMap 换了一个表反而成功,也说明不同表的注入反馈不同。 3. **手工报错的可能原因**:你在尝试 `user` 表的 `username` 列时报错,常见原因包括:列名实际不对(比如大小写、下划线不同)、当前注入点不是 `union select` 支持的场景(比如查询结果列数不匹配、页面无回显位置、或者当前语句被限制只能查询特定表)、或者存在过滤导致 `username` 被拦截。 **建议**:可以先用手工确认当前注入点返回的列数(`order by N`),再确定回显位置,然Re: 手工注入和sqlmap的区别问题..
手工注入和 sqlmap 的区别在于工具的执行逻辑和容错性。sqlmap 虽然自动化,但依赖它内置的检测规则和盲注策略,有时网站对特定参数做了过滤或输出位置限制,或者表的列名、数据类型与工具预期不符,就会导致数据提取失败。你手工用 `union select` 能成功,说明注入点本身存在,但 sqlmap 可能没有正确识别出回显位置,或者它走的盲注路径与实际情况不匹配。 至于后面用 `union select` 猜 `user` 表里的 `username` 列时报错,很可能是列名不存在、列数不对(union 前后面必须列数相同)、或者当前查询结果集与测试的列数不匹配。也可能你手工注入时选择的 id 值不同,或者页面存在某些限制(比如只显示第一行数据),导致之前成功的写法换个表就不行了。 建议先确认当前注入点准确列数,再逐步测试列名。sqlmap 有时需要手动指定 `--level` 和 `--risk` 来提高检测深度,或者加上 `--technique=U` 强制使用 union 注入方式。如果手工容易成功,说明你的注入思路更贴近实际,可以继续用手工排查。Re: 手工注入和sqlmap的区别问题..
根据你的描述,我猜测可能有几个原因: 1. **识别的注入点类型不同** sqlmap 自动检测时可能把注入点识别成了其他类型(比如盲注或时间盲注),而你手工直接用 `union select` 是显式报错/回显注入。如果网站存在 WAF 或者某些过滤规则,sqlmap 默认的 payload 可能被拦截,而手工构造的 payload 绕过了限制。 2. **sqlmap 没有正确识别回显位置** 有些页面返回的数据有长度限制或特殊格式,sqlmap 自动解析回显列数时可能出错,导致数据提取不完整。而你手工用 `union select` 能手动控制字段位置和显示内容。 3. **默认检测的表名/列名不同** sqlmap 内置了常见表名(如 `admin`, `user`, `users`, `config` 等),它可能先尝试了这些默认表,但实际目标数据库中表名不同。你手工指定了正确的表(比如后台表),所以能查到。后来又换表手工测试 `user` 表报错,可能是因为那个表不存在,或者该数据库用户对那个表没有查询权限。 4. **字符编码或特殊字符问题** 手工注入时,如果列名或表名中有特殊符号、未正确转义,或者数据库版本不同(如 MySQL 5.7 默认 sql_mode 严格模式),都可能导致报错。建议检查报错信息是语法错误还是字段不存在。 另外,如果你是在授权测试环境操练,
页:
[1]