XCTF攻防世界web进阶练习_ 1_NewsCenter

本文通过实战案例,详细解析了SQL注入攻击原理及利用SQLMap进行数据库漏洞探测的方法。从XCTF攻防世界web进阶练习题NewsCenter出发,介绍了如何使用SQLMap自动检测和利用SQL注入漏洞,获取数据库信息。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

XCTF攻防世界web进阶练习—NewsCenter

题目

题目是NewsCenter,没有提示信息。
打开题目,有一处搜索框,搜索新闻。考虑xss或sql注入,随便输入一个abc,没有任何搜索结果,页面也没有什么变化,考虑SQL注入。
在这里插入图片描述
随便输入123,用burp抓包,发现是post方式,因为sql注入技术太菜,直接用sqlmap爆破。
将http头保存为1.txt,试试用sqlmap爆数据库
sqlmap -r 1.txt -dbs
很快,爆出数据库
在这里插入图片描述

查看news数据库内容sqlmap -r 1.txt -D news --dump
在这里插入图片描述
得到flag!

关于用sqlmap实现sql注入

sql注入

维基百科:

SQL注入(英语:SQLnjection),也称SQL注入或SQL注码, 是发生于应用程序与数据库层的安全漏洞。简而言之,是在输入的字符串之中注入SQL指令,在设计不良的程序当中忽略了字符检查,那么这些注入进去的恶意指令就会被数据库服务器误认为是正常的SQL指令而运行,因此遭到破坏或是入侵。

简言之,就是利用客户端对输入语句的检查或过滤不严,输入恶意sql语句,让客户端执行自己想要执行的语句,从而达到自己的目的

最简单的SQL注入例子:

假如某个网站的登录验证的SQL查询代码为

strSQL = " SELECT * FROM users WHERE (name = '$_GET["name"]') and (pw = '$_GET["pw"]'); "

恶意填入

?name = "1' OR '1'='1"& pw = "1' OR '1'='1";

时,将导致原本的SQL字符串被填为

strSQL = "SELECT * FROM users WHERE (name = '1' OR '1'='1') and (pw = '1' OR '1'='1');"

也就是实际上运行的SQL命令会变成下面这样的

strSQL = "SELECT * FROM users;"

因此达到无账号密码,亦可登录网站。所以SQL注入被俗称为黑客的填空游戏。

当然,实际的sql注入肯定没这么简单
sql注入有很多方法,根据应用程序处理数据库返回内容的不同,可以分为可显注入、报错注入和盲注等
参考:https://www.cnblogs.com/ssooking/p/8137597.html

sqlmap

简单介绍:
sqlmap是一个开源软件,用于检测和利用数据库漏洞,并提供将恶意代码注入其中的选项。
它是一种渗透测试工具,可自动检测和利用SQL注入漏洞,在终端中提供其用户界面。
该软件在命令行运行,可供不同操作系统下载:Linux发行版,Windows和Mac OS操作系统。
除了映射和检测漏洞之外,该软件还可以访问数据库,编辑和删除数据,以及查看表格中的数据,例如用户,密码,备份,电话号码,电子邮件地址,信用卡和其他机密和敏感信息。
sqlmap完全支持多个DBMS,包括MySQL,Oracle,PostgreSQL,Microsoft SQL Server,Microsoft Access,IBM DB2,SQLite,Firebird和SAP MaxDB。
并全面支持所有注入技术:布尔值,错误,堆栈,时间,联盟。

使用
根据sqlmap手册,分为

  • Options(选项)
  • Target(目标)
  • Request(请求)
  • Optimization(优化)
  • Injection(注入)
  • Detection(检测)
  • Techniques(技巧)
  • Fingerprint(指纹)
  • Enumeration(枚举)
  • Brute force(暴力破解)
  • User-defined function injection(用户自定义函数注入)
  • File system access(访问文件系统)
  • Operating system access(操作系统访问)
  • Windows注册表访问
  • General(一般)
  • Miscellaneous(杂项) 等多个部分,可见,sqlmap是一个非常强大的工具

常用的SQLmap语句

sqlmap -u "注入地址"     --dbs          // 列举数据库
sqlmap -u "注入地址" --tables -D "数据库" // 列举数据库的表名
sqlmap -u "注入地址" --columns -T "表名" -D "数据库" // 获取表的列名
sqlmap -u "注入地址" --dump -C "字段,字段" -T "表名" -D "数据库" // 获取表中的所有数据

sqlmap -r "含http头的文件"     --dbs          // 列举数据库
sqlmap -r "含http头的文件" --tables -D "数据库" // 列举数据库的表名
sqlmap -r "含http头的文件" --columns -T "表名" -D "数据库" // 获取表的列名
sqlmap -r "含http头的文件" --dump -C "字段,字段" -T "表名" -D "数据库" // 获取表中的所有数据

参考:http://zerlong.com/512.html

sqlmap还提供了 -tamper 选项,其中有大量脚本,可以用来花式绕waf

参考:http://www.myh0st.cn/index.php/archives/881/

### XCTF备份方法与工具 XCTF(X-Code Technology Framework)通常指的是一个竞赛平台或技术框架,其备份方法和工具主要依赖于具体的实现环境。以下是几种常见的备份方法和工具,适用于XCTF或其他类似的技术框架。 #### 1. 数据库备份 在XCTF中,如果使用了数据库来存储用户信息、题目数据等关键内容,则可以采用以下数据库备份方法: - **mysqldump**:对于MySQL数据库,`mysqldump` 是一种常用的备份工具。它能够导出完整的SQL脚本,便于恢复和迁移[^2]。 ```bash mysqldump -u username -p database_name > backup.sql ``` - **pg_dump**:对于PostgreSQL数据库,`pg_dump` 提供了类似的备份功能[^3]。 ```bash pg_dump -U username -d database_name -f backup.sql ``` #### 2. 文件系统备份 XCTF的文件系统可能包含题目文件、日志文件和其他静态资源。这些文件可以通过以下工具进行备份: - **rsync**:用于同步本地或远程文件系统,支持增量备份,减少传输量[^4]。 ```bash rsync -avz /source/directory/ user@remote:/destination/directory/ ``` - **tar**:将文件打包并压缩为单个存档文件,方便存储和传输[^5]。 ```bash tar -czvf backup.tar.gz /path/to/files ``` #### 3. 容器化备份 如果XCTF运行在Docker容器中,可以使用以下方法备份容器状态: - **docker commit**:将当前容器的状态保存为镜像[^6]。 ```bash docker commit container_id new_image_name ``` - **docker save**:将镜像保存为可移植的归档文件[^7]。 ```bash docker save -o backup.tar new_image_name ``` #### 4. 配置文件备份 XCTF的配置文件通常包括服务启动参数、API密钥等敏感信息。可以使用Git等版本控制工具进行管理,并通过加密工具保护敏感数据[^8]。 - **git**:记录配置文件的历史变更,便于回滚和协作。 ```bash git add config_files git commit -m "Backup configuration" ``` - **gpg**:对配置文件进行加密存储,确保安全性[^9]。 ```bash gpg --output config.gpg --encrypt config.json ``` #### 5. 自动化备份工具 为了简化备份流程,可以使用以下自动化工具: - **cron**:在Linux系统中设置定时任务,定期执行备份脚本[^10]。 ```bash crontab -e # 添加如下行以每天凌晨2点执行备份 0 2 * * * /path/to/backup_script.sh ``` - **Ansible**:通过编写Playbook实现跨服务器的备份任务自动化[^11]。 ### 示例代码 以下是一个简单的Python脚本,用于备份XCTF的关键文件并上传到远程服务器: ```python import os import shutil import paramiko def backup_xctf(source_dir, target_dir): if not os.path.exists(target_dir): os.makedirs(target_dir) shutil.make_archive(os.path.join(target_dir, 'xctf_backup'), 'zip', source_dir) def upload_to_remote(local_file, remote_path, ssh_host, ssh_port, ssh_user, ssh_key): ssh = paramiko.SSHClient() ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy()) ssh.connect(ssh_host, port=ssh_port, username=ssh_user, key_filename=ssh_key) sftp = ssh.open_sftp() sftp.put(local_file, remote_path) sftp.close() ssh.close() # 调用示例 backup_xctf('/var/xctf', '/tmp/backups') upload_to_remote('/tmp/backups/xctf_backup.zip', '/remote/backups/xctf_backup.zip', 'example.com', 22, 'user', '/path/to/key') ```
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值