看到题目sqli 应该是个SQL注入题
首先我们先输入' ,123去试
因为没有闭合"所以报错
我们在使用双引号闭合看看
结果失败了
于是我们在输入账户为admin密码处进行注入
但是发现无论输入什么都是wrong pass!说明注入点为username处。
但是当我们输入的username为其他是报错为wrong user!说明存在admin这个用户。
然后我查看源代码发现
存在search.php文件 通过post方式请求,于是我们用bp抓包,发送到Repeater,go一下得到回显
发现绿色的代码是用大写字母和数字组成,应该是base32编译的这里我们补充一下base32和base64的区别
base32 只有大写字母和数字数字组成,或者后面有三个等号。
base64 只有大写字母和数字,小写字母组成,后面一般是两个等号。
明显,那段文字是base32加密。于是我们在线解密
发现解码得到的代码符合base64加密的 于是用base64在线解码
得到select*from user where username = '$name'做到这没思路了 看了大佬的wp后发现sqli的联合注入有特性:利用联合注入向数据库里写东西的原因?
答:在使用联合注入时,如果你查询的数据不存在,那么就会生成一个内容为null的虚拟数据,也就是说在联合查询并不存在的数据时,联合查询就会构造一个虚拟的数据。所以这时我们就可以在注入时添加我们需要的信息来完成我们的目的。
举个例子
这是数据库里本有的账号和密码,我们用联合查询这个技巧来看看
执行后
懂得这些原理后 我们就可以解题了
我们构造payload:
name=1' union select 0,'admin','81dc9bdb52d04dc20036dbd8313ed055'%23&pw=1234
其中81dc9bdb52d04dc20036dbd8313ed055是1234的md5值
于是抓包上传
即可得到flag