自学内容网 自学内容网

【已知当前表字段名注入】

一、通配符注入

请添加图片描述

like

请添加图片描述
请添加图片描述

测试注入
username=admin&password=admin 提示username or password error

输入单引号闭合测试
这里用or防止admin字段不存在数据库中,如果admin不存在用and连接admin不为真,username的逻辑还是没绕过,用or就算我们前面输入的字段不存在也可以让1=1来绕过username判断逻辑
username=admin' or 1=1%23&password=admin 提示password error

通配符
利用常见列名猜测:password、passwd
这里用and连接判断password是否以a开头后面跟一个或多个字符,提示username or password error就说明我们的password不是以a为开头的,利用burp的intruder模块进行爆破
username=admin' and password like 'a%'%23&password=1 提示username or password error说明密码不是a开头

当返回结果全是username or password error时,就证明数据已经全部都猜出来了

最后跑出密码是iphone 登陆就能拿到flag

brup 里面在a的位置打上标记,这里选择添加列表,
请添加图片描述
接着选择小写字母和数字,这里只选择小写是因为mysql是不区别大小写的:
请添加图片描述

regex

请添加图片描述
请添加图片描述
请添加图片描述

和like的过程是一样的,直接方上payload,然后burp进行爆破就可以

username=admin' and password regexp '^iphone'%23&password=1
猜测正确返回 password error

猜测错误返回 username or password error

二、strcmp函数注入

请添加图片描述
字母和字母之间比较时,就是比较ASCII码的值,就是让前面的减去后的,结果是负数就是-1,这里的b和c的ASCII码值都比a大,所以这里返回的都是-1:
请添加图片描述
我们把顺序改一下,这样前面的比后面的大,返回的结果就是1,两个相等之间想减的话就是0:
请添加图片描述
payload

猜测密码第一位的ASCII码值是否为1
username=admin' and strcmp(ascii(substr(password,1,1)),1)%23&password=1

当猜测正确时,服务端返回的是错误的结果(username or password error),而猜测错误时,返回的是正确的结果(password error)和我们上面的相反,因为strcmp在比较完两个值相等时返回的是0,那么1 and 0结果就为零,返回结果就是(username or password error),猜错的时候strcmp返回的是-1或1,1 and 1 和 1 and -1 返回的结果都是1,服务器返回的结果就是(password error),我们看下面的例子就可以明白,当我们猜错时候数据库返回数据,猜对时不返回数据:
请添加图片描述
拿到结果后进行一步ascii转换,就可以拿到ascii字符

三、总结

有的题,不一定是去获取数据库里面的数据,而是绕过登陆,比如万能密码之类

like regexp 不能区分大小写

strcmp

使用的是ascii值,就避免了大小写的问题,相对于刚才的通配符,结果更准确


原文地址:https://blog.csdn.net/weixin_45131319/article/details/142934161

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!