
SQL
文章平均质量分 82
My6n
我们会毁灭于我们所热爱的东西
展开
-
ctfshow-web入门-sql注入(web249-web253)nosql 注入
使用 Memcache 类的 get 方法从缓存中获取数据,$id 是传入的键,用于从缓存中获取与该键对应的值,结果存储在 $user 变量中。直接查 flag,遇到报错:采用数组绕过。这里从 ctfshow{ 后面开始注,将前面的 8 个字符确定后再继续猜后面的字符,即可拿到正确的 flag,原创 2024-09-13 00:18:47 · 1173 阅读 · 0 评论 -
ctfshow-web入门-sql注入-web248-UDF 注入
但其实 Http 的 get 方法提交的数据大小长度并没有限制,http 协议规范并没有对 url 长度进行限制,所谓的 get 长度有限制,是特定的浏览器及服务器对它的限制,不同浏览器和服务器的最大处理能力也是不同的。但是有一个问题,这里是 get 传参,而 URL 的长度是受限制的(URL 的最大长度是 2048 个字符),显然这里远远超了,若长度超限,服务端会返回 414。使用 concat 来将这三部分拼接后导入前面得到的路径:\/usr\/lib\/mariadb\/plugin\/原创 2024-09-11 21:28:44 · 1437 阅读 · 0 评论 -
ctfshow-web入门-sql注入(web244-web247)error 报错注入
这里的回显要么是查询成功,要么是查询失败,因此无法使用联合查询注入,很典型的布尔盲注特征,注意这里用于闭合的注释符需要使用 url 编码的形式:题目是想考报错注入,这里我先介绍盲注。同样得到表名ctfshow_flag,再使用extractvalue 函数查列名:原创 2024-09-11 12:28:43 · 1349 阅读 · 0 评论 -
ctfshow-web入门-sql注入(web241、web242、web243)delete & file 注入
如果采用布尔盲注,我们需要根据页面的回显情况来判断,但是数据只有 21 条,并不够我们删除,还没查出结果数据就会被删完,因此采取时间盲注,通过延时来判断。真的是很无语,题目就给个 dump 目录,又不说我这个 filename 在哪里传,找了 api 接口,不是,file.php?,也不是,我****一个会将写入内容放在开头,另一个则是设置在结尾,为了减少配置文件内容被查询内容影响,这里我们选择将配置文件内容放在开头。等于 0 的 id 没有,因此前面不成立,不会执行删除操作,而是执行后面语句。原创 2024-09-10 15:13:03 · 1046 阅读 · 0 评论 -
ctfshow-web入门-sql注入(web237-web240)insert 注入
我们需要闭合单引号和括号实际插入的内容成了 1 和 database()可以看到数据库名为 ctfshow_web这里其实我在纠结 # 将后面内容都注释掉了,虽然单引号和括号都正确闭合了,但是 insert 前面单独的双引号不会报错吗?注意,在这个语句中,insert 前面的双引号其实是 PHP 代码中的字符串起始符,SQL 引擎是不会看到这个双引号的,数据库只会看到去掉了 PHP 引号后的 SQL 语句。所以在 PHP 代码中,这样的双引号不会导致 SQL 错误。原创 2024-09-07 15:08:40 · 1372 阅读 · 0 评论 -
ctfshow-web入门-sql注入(web231-web236)update 注入
使用 mysql.innodb_table_stats 和 mysql.innodb_index_stats 代替,它们是 MySQL 内部的系统表,用于存储 InnoDB 引擎相关的统计信息,内容与 information_schema.tables 类似,也可以用来获取数据库中的库名和表名,这两个表都包含了 database_name 和 table_name 字段。数据库名还是 ctfshow_web,后面的密码是我们输入的 111 经过 md5 加密后的内容。原创 2024-08-24 11:49:12 · 1211 阅读 · 0 评论 -
ctfshow-web入门-sql注入(web224-web230)文件类型注入、routines存储过程与函数状态、handler语句、预处理prepare+execute
也就是将表名 ctfshow_user 改为了 ctfshow_flagasa,将字段名 username 改为 flag,之后我们就可以使用万能密码 1' or 1=1# 查出 flag。PREPARE 语句准备好一条 SQL 语句,并分配给这条 SQL 语句一个名字供之后调用,通过EXECUTE 命令执行,最后使用 DEALLOCATE PREPARE 命令释放。原创 2024-08-19 18:54:44 · 1465 阅读 · 0 评论 -
ctfshow-web入门-sql注入(web221、web222、web223)limit 注入与 group 注入
这里是 get 传参并且进行了 URL 解码,如果拼接方式是加号会导致服务器错误的解析为空格,从而无法识别,没有回显,需要对加号进行 URL 编码再传入,即%2b 。接下来就可以开始写脚本了,在上一题的基础上改。这里用的还是原始方法 substr,当然也可以用 like 通配,或者用 regexp 正则匹配,原理一样,我就不再过多测试了。原创 2024-08-17 02:11:14 · 1125 阅读 · 0 评论 -
ctfshow-web入门-sql注入(web216-web220)时间盲注结束
跑出结果一样,那就说明是那个判断时间的问题,因为一开始在 hackbar 测试,那个 payload 大概是 3s,结果后面变成了只有 1s 左右,因此 1s 和 0.5s 都可能会导致结果不准确,这里主要还是设置好一个判定时间,改成 0.8s 就比较准确了,具体多少取决于你实际题目环境。前面的脚本是用 if 语句进行判断,这里写一下 try 语句,不用获取响应消耗的时间,而是我们手动设置一个请求超时的时间,因为前面的延时大概是 3s ,这里超时时间设小一点,为 1.5s。原创 2024-08-14 22:49:57 · 1698 阅读 · 0 评论 -
ctfshow-web入门-sql注入(web211-web215)系统练习sqlmap的使用+开始时间盲注
对于 mysql 数据库,sqlmap 的 --os-shell 参数就是写入两个 php 文件,其中一个是提供文件上传功能的文件,之后再上传一个是用于进行命令执行的文件,也就是最后反弹给我们的 shell。当然,对于 --os-shell 能利用也是有一定条件的,一般需要是高权限数据库用户,并且需要知道网站的绝对路径,具有写入文件的权限,还有一些其他条件。于是又再跑了一次,这回正常了,可能是猜到 6 的时候请求响应还是耗时超过了 2s,以至于没有去判断字典后面的 h 而造成的误判。原创 2024-08-12 03:16:13 · 1511 阅读 · 0 评论 -
ctfshow-web入门-sql注入(web206-web210)系统练习sqlmap之tamper的使用与编写
我们对查询的 payload 进行逆向处理,先反转,再 base64 加密,再反转,再 base64 加密,传入查询后,经过题目的解密和反转处理,最终又恢复到我们正确的 payload 实现注入。查询语句里新增了括号,我们注入也需要将其闭合掉,就像我们闭合单引号那样,对于 sqlmap 它会自动对闭合点进行测试的,常见的就是单引号、双引号、单引号加括号或者双引号加括号。拿下,flag:ctfshow{549d46ab-3974-43a6-ac07-cbcc41357083}原创 2024-08-11 01:06:06 · 1322 阅读 · 0 评论 -
ctfshow-web入门-sql注入(web201-web205)系统练习sqlmap的使用
开始系统练习sqlmap的使用。发现在访问 index.php 前都会先访问 getToken.php追加 --safe-url 参数设置在测试目标地址前访问的安全链接,将 url 设置为 api/getToken.php,再加上 --safe-preq=1 表示访问 api/getToken.php 一次:原创 2024-08-09 06:47:19 · 1751 阅读 · 0 评论 -
ctfshow-web入门-sql注入(web196-web200)堆叠注入
这里把 create 和 drop 都过滤了,那么我们直接用 insert 插入来覆盖 pass 和 username 的值。其中 $row[0] 表示从数据库查询结果中提取的某一行的第一个字段值,我们可以使用 select 来设置$row[0] 的值,再提交我们设置的 password 满足两者相等,payload:还是堆叠注入,显示过滤了 select 实际并没有。原创 2024-08-08 23:29:55 · 651 阅读 · 0 评论 -
ctfshow-web入门-sql注入(web191-web195)
我们不指定第三个参数,就可以实现和 left 和 right 一样的效果。密码只能是数字,过滤了空格,采用反引号包裹绕过,题目已经说了是堆叠注入,这里直接修改用户名和密码:原创 2024-08-07 23:50:44 · 1222 阅读 · 0 评论 -
ctfshow-web入门-sql注入(web186-web190)
在上一题中我们提到了,使用 true+true 的方法构造出数字比如 true+true+true 就可以构造出 3,再使用 char 函数将数字转为对应的 ASCII 字符,最终实现我们 payload 的转换。在 SQL 中,数字和字符串的比较是弱类型的,如果在比较操作中涉及到字符串和数字,SQL 会尝试将字符串转换为数字,那么只要字符串不是以数字开头,比较时都会转为数字 0。拿到 flag:ctfshow{e54220e0-e81f-4e0e-ad32-0bbbbdd43d83}原创 2024-08-06 04:26:07 · 1531 阅读 · 0 评论 -
ctfshow-web入门-sql注入(web181-web185)
过滤字符:(1)空白字符:空格 ( )、水平制表符 (\x09)、换行符 (\x0a)、垂直制表符 (\x0b)、换页符 (\x0c)、空字符 (\x00)、回车符 (\x0d)、不换行空格 (\xa0)(2)符号:星号 (*)、井号 (#)(3)关键词(不区分大小写):file、into、select1'--%0c1'||1--%0c拿到 flag:ctfshow{bef90a74-9ae2-4c76-8111-0ea0406f120b}原创 2024-08-04 15:26:20 · 1457 阅读 · 0 评论 -
ctfshow-web入门-sql注入(web176-web180)
闭合后简单判断了下字段数是 3测试联合查询注入,存在关键字的过滤,包括 select 和 union(后面经过测试实际只过滤了 select)回显成功得到表名为 ctfshow_user题目中要求 username!='flag'拿到 flag:ctfshow{4dacb0f6-4795-43f4-8b76-d300234e40b6}原创 2024-08-03 19:41:25 · 967 阅读 · 0 评论 -
ctfshow-web入门-sql注入(web171-web175)
这里只出了一个 id,因为换行导致我们误判为到了最后一个字符,因为我们的字典里只包括数字、小写字母和下划线,因此字符没找到,便跳出外层循环结束了代码。判断一下这次又是三个字段数了,因为还是对输出过滤了 flag,所有我们还是不查用户名,用占位符占位即可。接下来我们先判断下它数据库名的长度,这个其实可以通过 burpsuite 的攻击模块爆破的,没关系,我们这里手写一遍,也锻炼下我们 python 的能力。原创 2024-07-31 22:57:22 · 1996 阅读 · 0 评论 -
简单了解SQL宽字节注入与httpXFF头注入(基于sqllabs演示)
HTTP XFF头注入(X-Forwarded-For Injection),攻击者在HTTP请求中伪造XFF头,将恶意代码注入到HTTP请求头中,从而执行SQL注入攻击。提示我们输入的单引号被转义符 \ 进行了转义,即转义符自动的出现在输入的特殊字符前面,这是防止sql注入的一种方法,导致无法产生报错。因为这里并没有看到关于我们输入的1,2,3的回显位置,因此采用报错注入。至此,关于SQL注入的内容全部结束,后续我们将进入其他Web漏洞的学习。使用单引号尝试闭合,出现SQL语句报错,因此确实存在注入。原创 2023-12-29 17:22:41 · 1059 阅读 · 0 评论 -
简单了解SQL堆叠注入与二次注入(基于sqllabs演示)
由于后面关于核对admin密码的信息也被注释掉了,即没有进行校验,从而误认为是admin在进行密码修改。在这个过程中,我们正常创建新用户其实是没有任何问题的,问题出在修改密码,此时查询的本该是用户。指已存储(数据库、文件)的用户的输入被读取后再次进入到 SQL 查询语句中导致的注入。在我们的数据库里有一个用户名为admin,密码为admin的用户。闭合了前面,并且将后面的信息进行了注释,导致查到的用户名为。接下来我们使用堆叠注入对id为2的用户的密码进行修改。注意我们现在的身份是admin'#原创 2023-12-29 15:55:11 · 869 阅读 · 0 评论 -
关于SQL时间盲注(基于sleep函数)的手动测试、burpsuite爆破、sqlmap全自动化注入
这么说吧:一般sqlmap能跑出来的基本上都没啥问题,这种是不存在什么绕过和过滤的,一般存在过和过滤的,sqlmap基本上都跑不出来,需要手工注入。SQL时间注入是一种常见的SQL注入攻击方式,攻击者通过在SQL语句中注入时间相关的代码,来获取敏感信息或者执行非法操作。攻击者可以根据SQL语句的执行时间,来推断出数据库中存储的信息,如用户名、密码等,从而获取敏感信息或者执行非法操作。6.09s,和我们设置的sleep 5s 差不多,说明sleep语句被执行了,存在时间盲注。原创 2023-12-27 13:56:30 · 3932 阅读 · 2 评论 -
最常见的SQL报错注入函数(floor、updatexml、extractvalue)及payload总结
extractvalue() 能查询字符串的最大长度为 32,如果我们想要的结果超过 32,就要用 substring() 函数截取或 limit 分页,一次查看最多 32 位。其实有时候我们可以使用group_concat()将所以查询内容列出,但是要取决于题目具体环境,如果无法使用,则使用limit语句来限制查询结果的列数,逐条查询。但是这里回显要么存在,要么无回显,因此无法使用联合查询注入,而且也不存在回显为真或者假两种情况,排除掉盲注,那么这关需要使用的是报错注入。原创 2023-12-24 19:46:18 · 7474 阅读 · 0 评论 -
SQL布尔盲注 (Blind)基本原理及使用burpsuite进行暴力猜解
SQL布尔型盲注入是一种SQL注入攻击方式, 根据某个条件是否成立,来判断返回结果的真假,通过布尔型盲注,攻击者可以逐个字符地推断出数据库中存储的信息,如用户名、密码等,从而获取敏感信息或者执行非法操作。什么情况下我们会采用盲注?我们平时最常用的是union联合查询注入,这是基于页面有数据回显的条件;但是,如果无论你输入什么,页面始终都只回显两种情况,我们可以把这两种情况看成是1或者0,也就是说,要么你查的东西有,要么不存在。面对这种只回显两种情况的,我们一般是采用盲注。盲注可以分为时间延迟盲注和布尔型盲注原创 2023-12-22 17:39:54 · 2776 阅读 · 0 评论 -
burpsuite与sqlmap联动(sqlipy配置)
下载好之后将这个jar文件放到某个位置(我是直接拉到了burpsuite位置),然后导入该路径。解压sqlmap的压缩包后里面有一个sqlmapapi.py的文件。第二个路径为你自己Python环境的路径,需要写到lib文件夹。关于配置burpsuite与sqlmap联动的介绍至此结束。找到 sqlipy sqlmap integration。下载好后解压,里面还有一个sqlmap的压缩包,一并解压。在burpsuite的sqlipy框进行配置。安装成功后会多出一个sqlipy的框。原创 2023-12-21 15:36:26 · 1729 阅读 · 0 评论 -
NewStarCTF2023week4-midsql(利用二分查找实现时间盲注攻击)
代码通过不断猜测每个字符的 ASCII 值来构建数据库名,一旦一个字符的 ASCII 值被确定,就继续下一个字符。但是这里尝试了很多都只返回一个页面,没有出现报错页面,因此采用时间盲注,利用sleep函数,制造时间延迟,由回显时间来判断是否报错。注意:这里查询的内容还是需要加上 group_concat(),因为之前我做的一些联合查询有时候不需要加,但是在这里我试了,不行。(我最开始以为是and被过滤,并没有,如果是and或者or被过滤我们也可以使用 && 和 || 替代)原创 2023-10-29 00:36:49 · 1559 阅读 · 0 评论 -
NewStarCTF2023week2-ez_sql
闭合之后尝试判断字段数,存在WAF,使用大小写绕过(后面的sql语句也需要进行大小写绕过)尝试在表here_is_flag下查找flag。或者使用sqlmap直接跑出所有库和表内容。查一下数据库名、版本、用户等信息。查出数据库ctf下的表。原创 2023-10-13 23:25:21 · 1359 阅读 · 0 评论 -
ctfshow萌新计划web1-5(正则匹配绕过)
只是增加了下面这段代码,preg_match函数进行正则匹配,限制了我们使用 or 和 +虽然or被过滤了,但是我们可以使用符号来表示或运算,即||存在一个对id的检测,并且告诉我们flag在id=100。构造payload:?这次把除也过滤掉了,以及过滤掉了其他的一些符号。这次过滤的更多...但是它还是舍不得过滤~~~继续使用payload:?构造payload:?使用payload:?这里也没有过滤~,我们可以进行两次取反。加减乘都被过滤了,但是没有过滤除。原创 2023-10-11 21:27:18 · 501 阅读 · 0 评论 -
ctfshow-web9(奇妙的ffifdyop绕过)
这里执行了 SQL 查询并将结果存储在 $result 变量中,然后通过 mysqli_num_rows($result) 检查返回的结果集中是否有行数大于0的数据,如果有,表示登录成功,就会输出flag。这段代码构建了一个 SQL 查询,但是它没有对用户输入进行适当的过滤或净化,很可能存在SQL注入,并且密码在数据库中储存为 MD5 散列值。首先验证用户提交的密码是否超过10个字符,如果超过,就终止脚本并显示密码错误消息。or后面的第一个字母只要不是0,都会被认为是true,从而实现sql注入的绕过。原创 2023-10-09 21:16:58 · 1139 阅读 · 0 评论 -
ctfshow-web2(SQL注入)
mysql数据库、web2数据库以及其他所有数据库的所有信息都会储存在information_schema这个数据库下,这也是为什么我们可以借助information_schema这个数据库来查询到其他数据库的信息。这里说一下,因为mysql 5.0及其以上的都会自带一个叫information_schema的数据库,相当于是一个已知的数据库,并且该数据库下储存了所有数据库的所以信息。前面我们说过,information_schema这个数据库下面包含了所有数据库的所有信息。成功闭合之后先判断字段数。原创 2023-10-07 12:21:24 · 1478 阅读 · 4 评论 -
攻防世界-fakebook
name、age、blog为data反序列化值,blog读取成功会返回url值。显示的是注册用户信息,观察url发现no=1,猜测存在注入。即:/var/www/html/flag.php。我们一般还会对条件进行限制,指定查哪个数据库下的。我们可以通过反序列化来实现ssrf读取任意文件。用单引号测试一下,报错,确实存在SQL注入。尝试联合查询注入,发现存在过滤。这里要使用内联注释/**/绕过。可以看到存在一个叫uses的表。尝试使用大小写绕过,发现不行。5的时候报错,说明有4列。可以看到结果就少了几个。原创 2023-10-04 12:29:48 · 996 阅读 · 0 评论 -
攻防世界-inget(简单的SQL注入、万能密码)
inget(简单的SQL注入)、手工注入、万能密码原理、sqlmap实现、常用参数原创 2023-04-14 21:37:47 · 7065 阅读 · 0 评论 -
一篇博客带你从零基础学会使用sqlmap
SQL注入常用参数、常用语句,各种类型的SQL注入,利用sqlmap实现原创 2023-04-05 00:02:55 · 1129 阅读 · 0 评论 -
supersqli(SQL注入流程及常用SQL语句)
一、SQL注入知识学习1、判断注入类型(1)数字型注入判断(2)字符型注入判断2、猜解sql查询语句中的字段数(order by 的使用)3、判断显示位爆数据库的名字4、注释(--+的使用)5、堆叠注入6、handler语句及用法二、基于上述知识对此题的分析与解答1、注入点、注入类型2、判断列数3、利用or 1=1暴露表中数据联合注入(1)看数据库(2)查表名(3)查询表中的列6、处理被过滤7、handler、hackba的使用原创 2023-03-30 23:41:06 · 1023 阅读 · 0 评论