本文共 888 字,大约阅读时间需要 2 分钟。
看了大佬的博客,勉强整出来了,详细的写一下我的思路。
错误思路:
观察发现是post传值,想用sqlmap一把嗦,BP抓包=>sqlmap 得到数据库:web_sqli
表:user
字段:passwd
得到密码是cdc9c819c7f8be2628d4180669009d28
得到passwd以后想爆一下username:admin
爆是爆出来了,没啥乱用。撞库也撞不出来,没辙了。 正确思路:
利用sqli的特性:在联合查询并不存在的数据时,联合查询就会构造一个虚拟的数据。 说人话,上实例: 在联合查询之前,数据库是和样子的。 执行联合查询:select * from 'users' where name='person' union select 1,'admin','e10adc3949ba59abbe56057f20f883e',4,5
执行后:
按照我们的输入,sqli在数据库中写入数据,相当于伪造了一个身份,就可以用这个身份登录了。经过前面错误的试探,我们发现字段是id,username,passwd。
但是不知道三个的顺序是怎么样的,进行试探: 如果输入是'admin',1,1#
,报错wrong user。 而我们是知道有admin
这个账号的,那么证明顺序不是这个。 再试: 输入变为1,'admin',1
时,就报wrong pass
,证明admin
的位置对了,id跟passwd的位置先随便试吧。 已知123
的md5值是202cb962ac59075b964b07152d234b70
。
构造
name=1' union select 1,'admin','202cb962ac59075b964b07152d234b70'#&pw=123
执行之后,盲猜后台的数据:
id | username | passwd |
---|---|---|
1 | admin | 202cb962ac59075b964b07152d234b70 |
而执行sqli的同时,我们还同时传入了一个passwd = 123
passwd
md5哈希后与数据库中的数据进行对比,True后返回flag。 转载地址:http://axpbi.baihongyu.com/