webhacking/sql, sql injection

wixxerd.com Adjoined, Inserted, Who's the custodian? (sql programming)

qkqhxla1 2015. 7. 12. 14:13

Adjoined

들어가서 sql문으로 테이블을 검색해볼수 있다. 각각의 테이블은 아래와 같다. 각각의 이름, 비밀번호, 역할을 출력하는게 목적이다. 간단한 sql 문제이다. 답은 아래에..

user_roles

ID ROLEID USERID

1 1 2

2 3 1

3 2 5

4 4 4

5 5 6

6 4 3


users

ID PASSWORD UNAME

1 5922B67C56DF1BA2339CB7FC43F9F29D Admin

2 c55cbda26407b5d2650d530afd387eed Cletus

3 4155894047994994173745FBD8176A2E Larry

4 1870180768DBF817D4A213060CFC7AE9 Joe

5 5F4DCC3B5AA765D61D8327DEB882CF99 Linda

6 84169a8d5b3289e8ece00d7735081b53 Sarah


roles

DESCRIPTION                                 ID NAME

Cleaner of all things unsanitary.                 1 Janitor

Cat Herder                                     2 Project Manager

Refuses to bathe                                 3 Software Developer

Not even the graphics designers like these guys 4 COBOL Programmer

Not worth the trouble                            5 Legal Intern



select users.uname as name, users.password as password, roles.name as role from user_roles, users, roles where user_roles.roleid=roles.id and user_roles.userid=users.id order by users.uname

처럼 입력하면 된다. 말 그대로 sql 프로그래밍 문제.




Inserted

select * from hackers;와 같이 검색해 볼수 있다; 검색해본후 숫자 없는걸 하나 찾아서

insert into hackers("id","hacker") values(숫자,"본인 아이디"); 형식으로 집어넣는다.

그 후에 select id from hackers where id=입력한숫자.


처럼 입력하면 된다. 문제 의도가 뭔지 모르겠다.



Who's the custodian?

들어가보면 3개의 테이블이 있는데, 테이블 3개가 위에 적어놓은 users, roles, user_roles이다. (안의 내용도 동일한거같다.) 문제는 Custodian이라는 열을 출력하는데, 역할이 Janitor이면 true를 출력하고, 아니면 false를 출력하는 열이다. 또다른 열 Persion열은 사람의 이름을 오름차순으로 출력하는 열이다.

sql문을 만들면 다음과 같다. (postgresql에는 if문이 없고 case문을 써야한다고 한다.)


select case when roles.name='Janitor' then 'true' else 'false' end as custodian, users.uname as person from roles, users,user_roles where user_roles.roleid=roles.id and user_roles.userid=users.id order by users.uname