1.简单的sql注入之2
题解
我们先单引号试一下发现报错,所以基本存在注入,然后我们用空格会爆SQLi detected!因此被过滤了,发现+还是%a0这些编码都会报错,所以只能用万能空格替代/**/,然后测试是否含有flag表,接着测试是否含有flag列,然而并没有什么卵用,因为这货竟然过滤了左右括号,无法用exists判断flag表是否存在,同时由于左右括号不能用,为了让判断flag表存在的语句先运行变成了不可能,所以只能猜测存在flag表和flag列然后写下命令
1'/**/union/**/select/**/flag/**/from/**/flag#
即可获得flag
坑啊
2.简单的sql注入
题解
通过直接写select flag from flag发现报错信息中少了select from估计是被过滤掉了,空格也被过滤了一些(基本所有可以代替空格的符号都被过滤了一遍),然后连续写两个selectselect会出现一个select,基本可以断定只过滤了一个,然后写下如下命令就可以获得flag了
所以每一个关键字重复一次,然后之间的空格打两个就可以了
1' unionunion selectselect flag fromfrom flag wherewhere '1'='1
3.天下武功唯快不破
题解
天下武功唯快不破,就是让你用程序写,在短时间里面提交数据,我们通过抓包发现了FLAG属性,手动交给这个页面好像源代码中会有提示少了key参数,所以我们写python代码得到数据提交上去就可以得到flag了,代码如下
#! /usr/bin/env python
# -*- coding=utf-8 -*-
import requests
import base64
url="http://ctf5.shiyanbar.com/web/10/10.php"
req = requests.get(url)
tflag = base64.b64decode(req.headers['FLAG'])
flag_str = tflag.split(":")[1];
data={
"key":flag_str
}
print flag_str
res=requests.post(url,data=data)
print res.text
4.让我进去
题解
抓包,发现header中有一个非常可疑的数据source=0,试着改为1,发送,得到页面后台处理源代码,如下图
通过源代码我们发现,他会检测cookies中有没有getmein,然后判断与md5加密后的结果是否一样,如果一样则可以得到flag。
这里涉及到了md5解密,我个人会简单的介绍一下其算法加密步骤
MD5加密
MD5,SHA1属于一类加密算法,他们先对给定的数据进行处理,必须满足是512个位的倍数也就是64个字节的倍数,而真实的处理是满足模64个字节为48个字节,剩下的6个字节表示数据的长度,这里是数据位数的长度。然后将这些数据按照64个字节分为若干组。
接下来他们是先以四个默认初始值为基础,对第一组数据进行加密后形成另外四个数据,代替最开始的四个默认初始值,然后对第二组数据以得到的四个数据为基础进行处理,又形成四个数据,然后就是重复,直到处理完所有组。
基本处理如下图:
接下来就是伪造数据了,因为需要改变初始值
MD5算法的讲解,在这个地址MD5详解
主要破解方法地址http://www.freebuf.com/articles/web/69264.html
对了构建的时候不能用\x00因为c++中\0表示字符串结尾,所以我们用其他字符代替,啥都可以,只要填满就可以了,因为第一组我们根本不用,但是我们传送数据的时候要用\x00(还要记得用urlencode进行编码一下)
通过这个得到一个md5值就可以过了,如下图: