2019-04-28
题目1.后台登录 分值:10 解题参考:https://blog.csdn.net/March97/article/details/81222922
打开是一个登录页面
查看网页源码,发现提示
1
md5($password,true)处存在sql注入点,该函数的作用如下
如果某个字符串经过md5('XXX',true)加密之后的结果包含 ‘’or'+数字,即可构造出一个sql注入语句。在题目链接中包含的字符串即为登录密码字符串 “ffifdyop”
该字符串不唯一,只要经过md5('XXX',true)加密之后的结果包含 ‘’or'+数字 就可以提交成功,拿到flag。
题目2.简单的登录题 分值:50
解题参考:
https://blog.csdn.net/LeeHDsniper/article/details/81089480#
https://blog.csdn.net/include_heqile/article/details/79942993
https://hebin.me/2018/01/26/西普ctf-简单的登录题/
https://www.freebuf.com/articles/system/163756.html
https://r00tnb.github.io/2018/02/09/%E5%AE%9E%E9%AA%8C%E5%90%A7-%E7%AE%80%E5%8D%95%E7%9A%84%E7%99%BB%E5%BD%95%E9%A2%98/
CBC字节翻转攻击:
https://blog.csdn.net/xiaorouji/article/details/82777482
https://blog.csdn.net/csu_vc/article/details/79619309
https://www.freebuf.com/articles/system/163756.html
http://shaobaobaoer.cn/archives/582/cbc%E5%AD%97%E7%AC%A6%E7%BF%BB%E8%BD%AC-%E5%8E%9F%E7%90%86%E4%B8%8E%E5%AE%9E%E6%88%98
解密过程如下图:
正常流程 B ^ C = A
根据异或运算的性质 C = A ^ B ; C ^ C = A ^ B ^ C = 0
漏洞利用 (B ^ X ^ A) ^ C = X (X为指定的任意任意字符);
将B的值与(X ^ A)异或后再参与运算就可以控制生成的明文为我们指定的字符X
通过阅读源码得知,输入框过滤了#的,先尝试用字节翻转攻击使用#注释掉limit $id,0中的,0。
Step1
发送如下数据包:
设置id=11(两位数,后面需要把个位换成#,用于截断sql语句)。服务器返回了iv和cipher,然后自己计算一下序列化之后的结果
结果为:a:1:{s:2:"id";s:2:"11";}
Step2
16个byte为一组,进行分组:
BLOCK#1:a:1:{s:2:"id";s:
BLOCK#2:2:"11";}
先修改cipher中的BLOCK#1的密文,使得BLOCK#2的解密后结果为2:"1#";},这样就能够使用#注释掉,0了。
<?php $id="11";$info= array('id'=>$id);echo serialize($info);echo