后台登陆
这道题给了一个登录框,第一反应是sql注入。随便输个东西进去发现没反应,就先看看源码。
SQL注入实锤了
源码大概意思是用输入经过md5加密后的密码和admin用户名查询,结果等于sql,然后看数据库中是否存在sql。将MD5值转化为16位原始二进制格式。
知识点:
- mysqli_query(connection,query,resultmode)函数:
connection: 必需。规定要使用的 MySQL 连接。
query: 必需,规定查询字符串。
resultmode: 可选。一个常量。可以是下列值中的任意一个:
- MYSQLI_USE_RESULT(如果需要检索大量数据,请使用这个)
- MYSQLI_STORE_RESULT(默认)
- mysqli_num_rows(result)函数:
result: 必需。规定由 mysqli_query()、mysqli_store_result() 或 mysqli_use_result() 返回的结果集标识符。 - md5(string)函数:
string:必需。把string用md5方式加密。
这时候看了别人的WP,发现url里的ffifdyop.php的ffifdyop是我们所要的字符串,这个字符串MD5incode后是:
276f722736c95d99e921722cf9ed621c
然后以上字符串再decode后是:'or’6
加到原来的语句中就是:
SELECT * FROM admin WHERE username = ‘admin’ and password = '‘or’6’
成功绕过的验证password 。所以提交ffifdyop得到flag。
变异凯撒
对比afZ_和flag的ASCII码,由a-f为5,f-l为6,Z-a为7,_-g为8,故猜测移动的位数为从5依次递增
写脚本得到:
#-- coding:utf-8 --
from future import print_function
import string
str = “afZ_r9VYfScOeO_UL^RWUc”
num = 5
for x in str:
i = ord(x)
i = i + num
print (chr(i),end=’’)
num=num+1
因此flag为flag{Caesar_variation}
传统知识+古典密码
网上查查六十甲子顺序表
再每个数+60,依次得到:
88 90 83 68 77 70 76 90
对应ASCII码是:
X Z S D M F L Z
尝试古典密码里得栅栏和凯撒,反正最后百度去了。。先栅栏再凯撒找到flag是SHUANGYU。。。