cg-ctf sql注入1&sql injection&密码重置

这几天cg-ctf分数终于突破了800分大关,那么来适当的整理下思路与知识吧。

SQL注入1

先看题目跟源码

http://chinalover.sinaapp.com/index.php


source

  分析下源码,大致可以知道要求user为admin,对密码没有要求,因此绕过密码将其注释掉是肯定的了。但同时,发现$user跟$pass两个变量经过trim()函数处理,这个函数的作用是移除字符串两侧的空白字符或其他预定义字符。因此双引号里面的都被解析,可以不用闭合。

直接注入就好了,

直接用输入框注了,,浏览器的url写多了看的眼睛疼

得到flag


SQL Injection



TIP:反斜杠可以用来转义 仔细查看相关函数的用法

查看源代码如下:

source

出现在源码中的clean()函数是我们调整注入语句的关键 ,而其中的  htmlentities()函数在很多安全书籍中有关注入的章节都有所出现。其功能视第二个参数而定,可以过滤掉单引号,双引号,或者兼而有之。因此,sql语句的闭合就成了问题,即我们不能用常规的单引号' 来进行闭合。

这时tip就派上用场了,因为 ‘\’反斜杠可以用来转义,所以注入时考虑使用反斜杠进行转义。

首先看sql语句

$query='SELECT * FROM users WHERE name=\''.$username.'\' AND pass=\''.$password.'\';';

首先反斜杠碰上单引号直接吞掉

所以语句实际为:

SELECT * FROM users WHERE name='.$username.' AND pass='.$password.';

我们要传的两个参数就在其中,考虑到闭合问题,先用反斜杠使$username无效化,就是说:

SELECT * FROM users WHERE name=' AND pass='.$password'

所以这里针对password的值也好说了,直接使sql语句中 or 1=1#就好; 

所以构造出来的结果是:username=\&password=or%201%3d1%23

得到flag。

#这种注入技巧很不错,可以多理解一下其语句结构


密码重置


密码重置

要求是:重置管理员账号:admin 的密码

首先记得先点下重置,,,(我其他步骤都是对的结果在这一步上出了问题。。。)

看到url中user1=Y3RmdXNlcg==,很容易想到是base64编码,转过来后发现是ctfuser

基于页面里的用户框不能更改,我们先把重置的url定下来,即user1='admin的base64编码'

即  http://nctf.nuptzj.cn/web13/index.php?user1=YWRtaW4=

然后看了下源码,确认了三个框的名字分别为 user, newpass, vcode

准备传值

用fiddler传post请求:


post
flag

flag也就出来了。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容