程序逻辑问题——实验吧
今天有点时间就多写几篇解题思路吧,希望能够帮助到那些需要帮助的人,所有的wp都是以一题一篇的形式写出
主要是为了能够让读者更好的阅读以及查找,希望你们不要责怪哦!!共勉!!!
永远爱你们的————新宝宝
程序逻辑问题分值:20
- 来源: 实验吧
- 难度:中
- 参与人数:8729人
- Get Flag:2738人
- 答题人数:2840人
- 解题通过率:96%
解题链接: http://ctf5.shiyanbar.com/web/5/index.php
解题思路:这一题基本可以学到很多过于sql注入的语法,关于union select 的使用:
首先:需要查看一下源代码(QAQ傻傻的我一开始并没有想到还要这样,打开源代码就会发现:
打开链接:
突然有一种与代码审计有关的题目,我们一步一步来看~~~
第一个if语句的意思是我们传入一个user和pass,它就可以执行连接数据库的命令,否则打印连接失败;
第二段:$sql = "select pw from php where user='$user'";
意思是查php里面user字段里面的pw的字段值,这句话的意思是把上一个查询的值放入到query变量中,
如果查询的结果不存在,就输出一个错误,如果有的话就打印出Key。。。
我们一般是不会去这么查询,在这个查询里我们可以利用简单的sql注入绕过它查询的过程,
我们可以构造一个password查询结果,
然后和后面输入的密码相等,咱们就可以绕过它验证的过程。。。
咱们就利用sql里面的联合查询吧,UNION 操作符用于合并两个或多个 SELECT 语句的结果集。
需要注意的是:使用post方式,pass是经过md5加密的。只需要构造row[pw]和pass加密后的的值相等就可以实现绕过,
其中pass加密后的值我们可以通过输入控制,从而达到不用验证数据库中的真实账号密码。
先使用md5加密:https://md5jiami.51240.com/
然后构造一下需要输入的用户名:a' and 1=0 union select "250cf8b51c773f3f8dc8b4be867a9a02" #
密码是:456 就会得到;



