鱼C论坛

 找回密码
 立即注册
查看: 2220|回复: 5

[已解决]Python的sql注入问题

[复制链接]
发表于 2017-10-22 19:42:46 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
请问如何让它可以输入任何账号密码都可以登录

# Run via `python injection.py` -- compatible with Python 2 and Python 3
from __future__ import print_function
# If raw_input doesn't exist, we're in Python 3 (which uses `input`)
try:
    raw_input
except NameError:
    raw_input = input

import sqlite3
import sys

def database_setup():
    cur.execute("""CREATE TABLE Users(Id INT,
        username TEXT,
        password TEXT,
        status TEXT,
        admin INT
    )""")
    cur.execute("""INSERT INTO Users
        VALUES(1, 'Hulk', 'greengrocer', 'SMASHING THINGS', 0)""")
    cur.execute("""INSERT INTO Users
        VALUES(2, 'Bobby', 'lolcats', 'serving tables', 1)""")
    conn.commit()

conn = sqlite3.connect(":memory:")
cur = conn.cursor()
database_setup()

username = raw_input(">>> Enter your username... ")
password = raw_input(">>> Enter your password... ")
cur.execute("""SELECT 1 FROM Users
    WHERE username = '%s' AND password = '%s'""" % (username, password))
if cur.fetchone():
    print("You've successfully logged in as %s" % username)
else:
    print("Your username or password was incorrect")

print()
username = raw_input(">>> Find out the status for which user? ")
cur.execute("SELECT status FROM Users WHERE username = '%s'" % username)
data = cur.fetchone()
if data:
    print("User %s is %s" % (username, data[0]))
else:
    print("No such user...")

conn.close()
最佳答案
2017-10-22 23:25:25
这是sql注入中,常见的万能密码
SELECT 1 FROM Users  WHERE username = '%s' AND password = '%s'""" % (username, password))
当username是'or'1'='1'or'1'='1的时候,构造的sql语句是
SELECT 1 FROM Users  WHERE username = ''or'1'='1'or'1'='1' AND password = ''
执行逻辑是
步骤一:‘1’=‘1’and password=‘’返回False
步骤二:‘1’=‘1’or False 返回True
步骤三:username=‘’or True 返回True
最后也就是select 1 from users where True
也就是 select 1from users
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2017-10-22 21:17:02 | 显示全部楼层
那就得有这个账号密码吧...
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-10-22 21:27:14 | 显示全部楼层
新手·ing 发表于 2017-10-22 21:17
那就得有这个账号密码吧...

在cmd运行的时候会要求输入账号密码,代码里面已经设置了两个账户了,但我的作业要求是在输入账号密码的时候进行注入从而让所有账号密码都可以登录。

可能我一开始解释的不太清楚。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-10-22 22:04:51 | 显示全部楼层
万能密码么?
'or'1'='1'or'1'='1
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-10-22 22:48:12 | 显示全部楼层
Teagle 发表于 2017-10-22 22:04
万能密码么?
'or'1'='1'or'1'='1

请问可以解释一下代码的原理吗?
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-10-22 23:25:25 | 显示全部楼层    本楼为最佳答案   
这是sql注入中,常见的万能密码
SELECT 1 FROM Users  WHERE username = '%s' AND password = '%s'""" % (username, password))
当username是'or'1'='1'or'1'='1的时候,构造的sql语句是
SELECT 1 FROM Users  WHERE username = ''or'1'='1'or'1'='1' AND password = ''
执行逻辑是
步骤一:‘1’=‘1’and password=‘’返回False
步骤二:‘1’=‘1’or False 返回True
步骤三:username=‘’or True 返回True
最后也就是select 1 from users where True
也就是 select 1from users
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2026-3-3 08:15

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表