三步法搞定CTF中的SQL注入题型

Posted paperpen

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了三步法搞定CTF中的SQL注入题型相关的知识,希望对你有一定的参考价值。

三步法:

一、找到注入点

二、Fuzz出未过滤字符

三、构造payload/写脚本

 


 

例题1

打开题目:

 技术图片

 

第一步,寻找注入点。

输入用户名123456,密码123456,返回结果username error

输入用户名admin,密码123456,返回结果password error

输入用户名admin,密码admin,返回结果password error

(根据提示已知这是道注入题,所以可判断注入点在用户名)

 

第二步,fuzz出未过滤字符。

fuzz后,发现%返回结果不同

 技术图片

技术图片

 看到sprintf函数,我们想到php的字符串格式化逃逸漏洞,这个漏洞导致的结果是会将%1$/’变为

此时我们再尝admin%1$\\’ and 1=1%23,结果返回了username error!

 技术图片

根据之前测试,and 1=1返回password error!才表示成功。猜测应该是过滤了and,我们再尝试一下admin%1$\\’ or 1=1%23(这里可以再fuzz一次),执行成功了。

 技术图片

 

第三步,构造payload/写脚本。

本题未过滤其他字符,剩下的就是盲注了,脚本大家根据题目自行编写,最终拿到flag。

 


 

例题2

打开题目:

 技术图片

 

第一步,找到注入点。

在搜索框输入1,返回you are in...

 技术图片

在搜索框输入2,返回you are not in...

 技术图片

由此判断是盲注,注入点是id=1处。

 

第二步,fuzz出未过滤字符。

 技术图片

这些是被过滤掉的(空格也被过滤了),or没有被过滤,我们尝试输入1‘/**/or/**/‘1‘=‘1

 技术图片

明明没有过滤掉or,应该是后端给过滤了,尝试双写绕过:1‘/**/oorr/**/‘1‘=‘1,还是you are not in...,再用%0a代替/**/(即空格)

 技术图片

虽然没显示you are in,但是应该是注入成功了。

 

第三步,构造payload/写脚本。

剩下的就是盲注了,大家根据题目自行编写就好了,最终拿到flag

 


 

总结:

此类题目的难与易主要在于寻找注入点,对于难一点的题目,出题人会把注入点藏得很隐蔽,需要大家不断地尝试,细心地去寻找。

以上是关于三步法搞定CTF中的SQL注入题型的主要内容,如果未能解决你的问题,请参考以下文章

CTF比赛中SQL注入的一些经验总结

XCTF-攻防世界CTF平台-Web类——14supersqli(SQL注入关键词过滤)

CTF—WEB—sql注入之宽字节注入

#writeup# 深交所CTF内训T1-SQL注入

CTF-攻防世界-supersqli(sql注入)

码南邮CTF一道简单的sql注入题目