Adjoined
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
'webhacking > sql, sql injection' 카테고리의 다른 글
chall.tasteless.eu Tournament, Fred's cms (0) | 2015.07.27 |
---|---|
RedTigers Hackit 8,9,10 (0) | 2015.07.14 |
mysql 레퍼런스 12 Functions and Operators 나머지 (0) | 2015.07.09 |
mysql 레퍼런스 12.1 Function and Operator Reference (0) | 2015.07.09 |
시간 기반 sqli 인젝션2 (0) | 2015.07.08 |