sqllib 23-28a

less 23

这波啊

然后将代码改为

1
2
3
4
5
if ($result){

$row = mysql_fetch_array($result);

}

像极了第一关,看看源码

– 和 # 在这里都不能再进行使用,那就考虑用‘把后面的’进行闭合

想用order by进行查询,but

无论我输入几,回显都是这样的

原因见:https://blog.csdn.net/m0_46315342/article/details/106557837

既然会回显嘛,那就正常查询好了

大概省略一些

然后收获了一个之前尝试失败的payload,但是这次成功了,看来逻辑没问题

当然这里延时,报错什么的也是可以用的

less 24

记得是修改代码来着,想去看看源代码,打开文件夹,谢谢,有被吓到,东西有点多

那问题会出在哪里呢1、看了一圈感觉cookie 会有东西,抓个包试试,猜的不对,不行(cookie时间一到就过期了,我在想什么,不好好看代码是我了)

老实点,上网搜教程了

session_start() 会创建新会话或者重用现有会话。 如果通过 GET 或者 POST 方式,或者使用 cookie 提交了会话 ID, 则会重用现有会话。

session_start的作用是开启$_SESION,需要在$_SESION使用之前调用。 PHP $_SESION 变量用于存储关于用户会话(session)的信息

我又把代码看了一遍,问题应该是在修改密码那里了(不会再错了吧,不会吧不会吧)

哦,对了,那继续

其他界面基本都处理了吧(听说绕过可以,先放放)

这里的username没有过滤,直接用于了之后的下一个语句当中,如果当前的用户名含有注释,那么就可以修改包含的另一账户的密码

可以看看这篇博客,我觉得写的很详细了:https://www.freesion.com/article/2430806761/

举个栗子好了:

1
2
3
4
5
$sql = "UPDATE users SET PASSWORD='$pass' where username='$username' and password='$curr_pass' ";
/*然后我注册了一个叫admin'#*/
$sql = "UPDATE users SET PASSWORD='$pass' where username='$admin'# and password='$curr_pass' ";
/*也就相当于下面这句*/
$sql = "UPDATE users SET PASSWORD='$pass' where username='$admin';

这里并不会去改admin’#的密码,而是修改了admin的密码。

less24带来的应该是不同的思维方式了,比一次注入更难发现了。

less25、less25a

先来查询一下字段数,既然说是绕过了AND 和OR,那就试试大小写换一下(And,anD,oR……)

或者

1
2
3
4
5
6
7


(1)编码,hex,urlencode

(2)添加注释/*or*/

(3)利用符号 and=&& or=||

其实直接联合注入的话,是可以不用and,or的,基本上可以看成less1了

那试试报错好了

哦豁,information变成了infmation,然后这里不能用&&,会出啥情况自行尝试

试了一下换大小写的话都是不行的

注释也不行

hex编码

url编码

双写oorr

less25a就不能能进行报错注入了,这里就不多说啦。

less26

相比less25,这边被被过滤了不仅是or,and 还有各种字符

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
对于空格,有较多的方法: 

%09

TAB 键(水平)

%0a

新建一行

%0c

新的一页

%0d

return 功能

%0b

TAB 键(垂直)

%a0

空格

但是这里是在windows+phpstudy2018中下只有%a0,%0b可用

啊哈,怎么会这样,奇怪的问题又双叒叕增加了(语句不对,不愧是我)

linux上直接报错?????(在windows上能获取数据的在linux上全报错?????)

#用;%00代替

再换成||‘

再改成||’1

再改成||‘1’=‘1

我惊了

来试个报错缓缓

顺便测试一下刚才的问题

并没有发生变化,两种闭合方式对报错注入貌似没什么影响

这句用||‘来注释

现在是用||’1‘=’1注释(怎么是一样的???)

我?????那前面那个怎么回事,算了先到这里

1
?id=100%27||%0bupdatexml(1,concat(0x7e,(select%0bgroup_concat(table_name)%0bfrom%0binfoorrmation_schema.tables%0bwhere%0btable_schema=%27security%27),0x7e),1);%00

less26a

换成’),其余同less26,不支持报错注入

less27

在less26的基础上,less27把select和union也处理了,那就利用双写或者大小写混输就行,而且这里对or和and都没用过滤

less27a

这边是双引号注入

less28

“ 换成 ‘)其余同less27

less28a

#,union,select和空格可以用了,其余同less28,这里不允许使用union select这其中的空格需要换成别的特殊字符

PHP正则表达式的模式修饰符

i

如果设定此修正符,模式中的字符将同时匹配大小写字母。

m
当设定了此修正符,“行起始”和“行结束”除了匹配整个字符串开头和结束外,还分别匹配其中的换行符的之后和之前。

s
如果设定了此修正符,模式中的圆点元字符(.)匹配所有的字符,包括换行符。没有此设定的话,则不包括换行符。

x
如果设定了此修正符,模式中的空白字符除了被转义的或在字符类中的以外完全被忽略,在未转义的字符类之外的 #以及下一个换行符之间的所有字符,包括两头,也都被忽略。

e
如果设定了此修正符,preg_replace() 在替换字符串中对逆向引用作正常的替换,

?在 . + 和 * 之后 表示非贪婪匹配: *、+和?限定符都是贪婪的,因为它们会尽可能多的匹配文字,只有在它们的后面加上一个?就可以实现非贪婪或最小匹配。