用户工具

站点工具


习科旧站:替换加密

一则将密码123456加密为2468:<的加密方式

原网站用户名是super,密码是5;<566??,登陆显示密码错误。但是用了super'or'1'='1和密码123456登陆后台,后台里面的管理员和管理员密码部分直接把数据库里的内容显示出来了。

先从长度为一位的密码开始,当密码设置为0时,系统将0替换为1储存进数据库,后续的如下:

0替换为1
1替换为2
....
8替换为9
9替换为:
:替换为;
;替换为<
<替换为?
?替换为@
@替换为A
A替换为B
B替换为C
....
Z替换为[
[替换为\
\替换为]
]替换为^
^替换为_
_替换为`
`替换为a
a替换为b
....
z替换为{
{替换为|
|替换为}
}替换为~
...

上面的算法就是对密码取ASCII的10进制值,然后将将这个10进制值+1然后再换为实际的ASCII字符

不过将ab设为密码时,数据库转换后的密码却不是bc,而是bd,这就纳了闷。同样12会被转化为24,我继续猜想,前面第一位的转换没错的话,第二位应该也是单纯的转换。

由此猜想加密格式应该为:

  1. 假设明文只有1位,那么,密文 = 加密(明文)
  2. 假设明文有2位,那么,密文 = 加密(明文第1位) + 加密(加密(明文第2位))
  3. 假设明文有3位,那么,密文 = 加密(明文第1位) + 加密(加密(明文第2位)) + 加密(加密(明文第3位))
  4. 以此类推

那么假设明文是123456,那么:

密文 = 加密(明文第1位) + 加密(加密(明文第2位)) + 加密(加密(明文第3位)) … + 加密(加密(加密(加密(加密(加密(明文第6位))))))
  • 明文第1位1替换为2
  • 明文第2位2替换为3,3再替换为4
  • 明文第3位3替换为4,4再替换为5,5继续替换成6
  • 明文第4位4替换为5,5再替换为6,6继续替换成7,7继续替换为8
  • 明文第5位5替换为6,6再替换为7,7继续替换成8,8继续替换为9,9替换为冒号:
  • 明文第6位6替换为7,7再替换为8,8继续替换成9,9继续替换为冒号:,冒号:替换成小于号<

这样,123456就加密成为2468:<了

为了证实我的猜想,我特意添加了一个密码为123456的用户,后台显示的数据库信息确实是123456被替换成了2468:<

你需要登录发表评论。
习科旧站/替换加密 · 最后更改: 2017/07/30 17:03

页面工具